Apache-UpnpImgBrowser

 view release on metacpan or  search on metacpan

UpnpImgBrowser.pm  view on Meta::CPAN

    foreach my $device 
        (sort {$a->getfriendlyname cmp $b->getfriendlyname} @gDeviceList) {
        my $name = $device->getfriendlyname;
        my $udn = $device->getudn;
        my $selected = ($udn eq $dev) ? "selected" : "";

        output(qq|        <option value="$udn" $selected>$name\n|);
    }


    output(
           qq|    </select>\n|,
           qq|    </form></td></tr>\n|,
           qq|</table>\n|,
           qq|</div>\n\n|,
           qq|<br clear="all">\n\n|,
           qq|<div id="leftcol">\n|,
           qq|<table width="170" align="left" border="0">\n|,
           qq|  <tr><td>&nbsp;</td></tr>|,
           qq|  <tr><td><a href="./?dev=$dev"><span class="menu">Home</span></a>|,
    );


    # Back Button
    if ($dir == 0) {
        output(qq|</td></tr>\n|); 

    } else {
        output(
               qq| \| <a href="./?dir=$parentdir&dev=$dev"><span class="menu">Back ($parentname)</span></a></td></tr>\n|,
        );
    }



    # Directory List
    if(@dirlist && ! $gOptions{'hide-dirs'}) {

        output(
               qq|  <tr><td>&nbsp;</td></tr>|,
               qq|  <tr><td><b>Image Directories:</b></td></tr>\n|,
            );

        foreach my $dir (sort {$a->{title} cmp $b->{title}} @dirlist) {
           my($title) = $dir->{'title'};
           my($id) = $dir->{'id'};

           output(qq|  <tr><td>&nbsp;&nbsp;<a href="./?dir=$id&dev=$dev">$title</a><td></tr>\n|);
        }
    }



    output(
           qq|</table>\n|,
           qq|</div>\n\n|,
           qq|<br clear="all"\n\n|,
           qq|<table border=0 bgcolor="#CCCCCC">\n|,
           qq|  <tr><td>\n|,
           qq|    <table border=0 cellpadding=0 cellspacing=0 width="100%">\n|,
           qq|      <tr><td align="center" bgcolor="#AAAAAA"><font size="+1"><b>$dirname</font></b></td></tr>\n|,
           qq|    </table>\n\n|,
          );


    my($w, $h) = split('x', $gOptions{'thumb-size'});

    ### Thumbnail image table
    output(qq|    <table align="center" bgcolor="#CCCCCC" border="1" width="|, ($w + 25 )* $gOptions{'cols'}, qq|">\n|);


    # Thumbs List
    if(@filelist) {
       my($counter) = 0;
       my(@sorted) = (sort {$a->{title} cmp $b->{title}} @filelist);
       my($startIdx) = ($page - 1) * $perpage;
       my($endIdx) = ($page * $perpage < @filelist)? 
           $page * $perpage: scalar @filelist;

       for(my $x = $startIdx; $x < $endIdx; $x++) {
          my $thumburl = getThumbImgResource($sorted[$x])->{url};
#          my $thumburl = $sorted[$x]->{thumburl};
          my $url = getImgResource($sorted[$x])->{url};
#          my $url = $sorted[$x]->{url};
          my $title = $sorted[$x]->{title};
          my $contenttype = $sorted[$x]->{contenttype};

           $title = (length $title >= 12)? 
               substr($title, 0, 12) . "...": $title;

          output("      <tr>\n") if( ($counter % $gOptions{'cols'}) == 0 );

          output(
                 "    ",
                 qq|        <td align="center">|,
                 qq|<a href="./?dir=$dir&dev=$dev&page=$page&image=$url">|,
                 qq|<img src="./?target=$thumburl&dev=$dev" hspace="15" height="$h" width="$w"></A>|, 
                 qq|<br>|,
          );

          output($title) if($gOptions{'show-names'});

          output(
                 qq|</td>\n|, 
                );

          output("      </tr>\n") if( (($counter + 1) % $gOptions{'cols'}) == 0 );

          $counter++;
       } 

    } else {
        output(      qq|<tr><td align="center"><font size="+2"><b>No Images Available</b></font</td></tr>\n|);
    }

    output(qq|    </table>\n\n|,);



    ### Navigation bar table
    output(
           qq|    <table bgcolor="#AAAAAA" cellpadding=0 cellspacing=0 border=0 width="100%">\n|,
           qq|      <tr>\n|
          );

    # previous page
    if($page > 1) {
       my $pagenum = $page - 1;
       output(qq|        <td width=100 align="center"><a href="./?dir=$dir&dev=$dev&page=$pagenum">[previous]</A></td>\n|);

    } else {
       output(qq|        <td width=100>&nbsp;</td>\n|);
    }



    # page indexes
    if(@filelist) { 
       output(
              qq|        <td align="center" valign="bottom">\n|,
              qq|          <form>\n|,
              qq|          <select onChange="document.location='./?dir=$dir&dev=$dev&page=' + this.options[this.selectedIndex].value">\n|
             );
 
       for(my $y = 0; $y <= int((@filelist - 1)/$perpage); $y++) {
          my $pagenum = $y + 1;

          ($pagenum == $page) ?
              output(qq|              <option value="$pagenum" selected>page $pagenum\n|):
              output(qq|              <option value="$pagenum">page $pagenum\n|);
       }

       output(
              qq|          </select><br>\n|,
              qq|          <font size="-1"><i>Total: </i>|, scalar @filelist, qq| images</font>\n|,
              qq|          </form>\n|,
              qq|        </td>\n|
             );
    }
    
    # next page
    if( $page * $perpage < @filelist) {
       my $pagenum = $page + 1; 
       output(qq|        <td width=100 align="center"><a href="./?dir=$dir&dev=$dev&page=$pagenum">[next]</A></TD>\n|);

    } else {
       output(qq|        <td width=100>&nbsp;</td>\n|);
    }


    output(
           "      </tr>\n",
           "    </table>\n",
           "  </td></tr>\n",
           "</table>\n",
           "</center>\n",
	   "</body>\n",
           "</html>\n"
          );

}



# showThumbFile
#
#
sub showThumbFile {
    my $r = shift || return;

    my %mimeType = 
       (jpg => 'image/jpeg', gif => 'image/gif', png => 'image/png');
    my ($name, $path, $ext) = fileparse($r->filename, qr{\.\w*$});
    my($w, $h) = split('x', $gOptions{'thumb-size'});

    $name =~ s/^\.//g;
    $path =~ s/\/$//g;
    $ext =~ s/^\.//g;
 
    (my $imgName = $name) =~ s/-thumb$//i;
    my($thumbName) = "$name.$ext";
    my($Img) = Image::Magick->new();
    my($tw, $th) = (0, 0);

    if(-f "$path/$thumbName") {
        ($tw, $th) = $Img->Ping("$path/$thumbName");
    }

    # build the thumbnail if it doesn't exist
    if( ($w != $tw && $h != $th) || $gOptions{'force'} ) {
        $Img->Read("$path/../$imgName.$ext");
        $Img->Resize(geometry=>"$gOptions{'thumb-size'}"); 
        $Img->Write("$path/$thumbName");
    }



( run in 2.829 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )