Author: pere
Date: 2012-02-27 19:21:58 +0000 (Mon, 27 Feb 2012)
New Revision: 13325

Modified:
   software/ui/debian/changelog
   software/ui/src/pkgbrowser.cpp
   software/ui/src/pkgbrowser.h
Log:
Restructure code, move code to find screen shots to its own
function.

Modified: software/ui/debian/changelog
===================================================================
--- software/ui/debian/changelog        2012-02-27 10:41:33 UTC (rev 13324)
+++ software/ui/debian/changelog        2012-02-27 19:21:58 UTC (rev 13325)
@@ -3,6 +3,8 @@
   * Add code to download screen shots from screenshot.debian.net
     (Closes: #659846).  Add build dependency on libcurl4-gnutls-dev
     to get HTTP download support.
+  * Restructure code, move code to find screen shots to its own
+    function.
 
  -- Petter Reinholdtsen <[email protected]>  Mon, 27 Feb 2012 10:55:24 +0100
 

Modified: software/ui/src/pkgbrowser.cpp
===================================================================
--- software/ui/src/pkgbrowser.cpp      2012-02-27 10:41:33 UTC (rev 13324)
+++ software/ui/src/pkgbrowser.cpp      2012-02-27 19:21:58 UTC (rev 13325)
@@ -148,21 +148,77 @@
        }
 }
 
-Fl_Image *PackageBrowser::fetch_screenshot(std::string packagename)
+static bool fileexist(const std::string path)
 {
-       URLFetcher fetcher;
-       std::string url("http://screenshots.debian.net/screenshot/";);
-       url += packagename;
-       //cout << "fetching " << url << endl;
-       std::string imgname = fetcher.get(url, packagename);
-       //cout << "Loading image " << imgname << endl;
-       Fl_Image *img = new Fl_PNG_Image(imgname.c_str());
-       unlink(imgname.c_str());
-       Fl_Image *resizedimg = img->copy(320, 240);
-       delete(img);
-       return resizedimg;
+       struct stat fileinfo;
+       if (stat(path.c_str(), &fileinfo) == 0)
+       {
+               return true;
+       }
+       return false;
 }
 
+Fl_Image *PackageBrowser::find_screenshot(const std::string packagename)
+{
+       Fl_Image *img = NULL;
+       string filename;
+       if (fileexist(filename = std::string(THUMBNAILSDIR) + "/" +
+                     packagename + ".png"))
+       { // Portable Network Graphics (PNG) image files
+         // We were able to get the file attributes so the file obviously 
exists.
+               img = new Fl_PNG_Image(filename.c_str());
+               //printf("  PNG Screenshot : \"%s\"\n", filename);
+       }
+       else if (fileexist(filename = std::string(THUMBNAILSDIR) + "/" +
+                          packagename + ".jpg"))
+       { // Joint Photographic Experts Group (JPEG) File Interchange Format 
(JFIF) images.
+               img = new Fl_JPEG_Image(filename.c_str());
+      //printf("  JPEG Screenshot : \"%s\"\n", filename);
+       }
+       else if (fileexist(filename = std::string(THUMBNAILSDIR) + "/" +
+                          packagename + ".jpeg"))
+       {
+               img = new Fl_JPEG_Image(filename.c_str());
+               //printf("  JPEG Screenshot : \"%s\"\n", filename);
+       }
+       else if (fileexist(filename = std::string(THUMBNAILSDIR) + "/" +
+                          packagename + ".bmp"))
+       { // Windows Bitmap (BMP) image files
+               img = new Fl_BMP_Image(filename.c_str());
+               //printf("  BMP Screenshot : \"%s\"\n", filename);
+       }
+       else
+       { // TODO: Portable Anymap (PNM, PBM, PGM, PPM) image files
+         // Currently only fetching using HTTP is implemented
+               URLFetcher fetcher;
+               std::string url("http://screenshots.debian.net/screenshot/";);
+               url += packagename;
+               //cout << "fetching " << url << endl;
+               try {
+                       std::string imgname = fetcher.get(url, packagename);
+                       //cout << "Loading image " << imgname << endl;
+                       Fl_Image *tmpimg = new Fl_PNG_Image(imgname.c_str());
+                       unlink(imgname.c_str());
+                       img = tmpimg->copy(320, 240);
+                       delete(tmpimg);
+               } catch (std::exception &e) {
+                       cout << "URLFetcher exception: " << e.what() << endl;
+                       img = NULL;
+               }
+       }
+       if (img && !img->count())
+       {
+               printf("  Wrong Screenshot.\n");
+               delete img;
+               img = NULL;
+       }
+       if (!img)
+       {
+               img = new Fl_PNG_Image(FILE_NO_SCREENSHOT);
+       }
+       return img;
+}
+
 void PackageBrowser::item_select(void *p, int s)
 {
        VersatileBrowser::item_select(p, s);
@@ -177,57 +233,14 @@
 
                if (data)
                {
-                       char filename[PATH_MAX];
-                       struct stat fileinfo;
-                       Fl_Image *img = NULL;
-                       if (snprintf(filename, PATH_MAX, "%s/%s.png", 
THUMBNAILSDIR, (const char *)data) &&
-                               stat(filename, &fileinfo) == 0)
-                       { // Portable Network Graphics (PNG) image files
-                               // We were able to get the file attributes so 
the file obviously exists.
-                               img = new Fl_PNG_Image(filename);
-                               //printf("  PNG Screenshot : \"%s\"\n", 
filename);
-                       }
-                       else if (snprintf(filename, PATH_MAX, "%s/%s.jpg", 
THUMBNAILSDIR, (const char *)data) &&
-                               stat(filename, &fileinfo) == 0)
-                       { // Joint Photographic Experts Group (JPEG) File 
Interchange Format (JFIF) images.
-                               img = new Fl_JPEG_Image(filename);
-                               //printf("  JPEG Screenshot : \"%s\"\n", 
filename);
-                       }
-                       else if (snprintf(filename, PATH_MAX, "%s/%s.jpeg", 
THUMBNAILSDIR, (const char *)data) &&
-                               stat(filename, &fileinfo) == 0)
-                       {
-                               img = new Fl_JPEG_Image(filename);
-                               //printf("  JPEG Screenshot : \"%s\"\n", 
filename);
-                       }
-                       else if (snprintf(filename, PATH_MAX, "%s/%s.bmp", 
THUMBNAILSDIR, (const char *)data) &&
-                               stat(filename, &fileinfo) == 0)
-                       { // Windows Bitmap (BMP) image files
-                               img = new Fl_BMP_Image(filename);
-                               //printf("  BMP Screenshot : \"%s\"\n", 
filename);
-                       }
-                       else
-                       { // TODO: Portable Anymap (PNM, PBM, PGM, PPM) image 
files
-                               const char *packagename = (const char *)data;
-                               img = fetch_screenshot(packagename);
-                       }
-                       if (img && !img->count())
-                       {
-                               printf("  Wrong Screenshot.\n");
-                               delete img;
-                               img = NULL;
-                       }
-                       if (!img)
-                       {
-                               strncpy(filename, FILE_NO_SCREENSHOT, PATH_MAX);
-                               img = new Fl_PNG_Image(FILE_NO_SCREENSHOT);
-                       }
-
+                       const char *packagename = (const char *)data;
+                       Fl_Image *img = find_screenshot(packagename);
                        Fl_Group *highest_parent=parent();
                        while (highest_parent->parent()) highest_parent = 
highest_parent->parent();
                        GamesUI *ui = highest_parent ? 
(GamesUI*)(highest_parent->user_data()) : NULL;
                        if (ui && img) ui->Screenshot(img);
 
-                       PackageRecord rec(ui->engine->apt().rawRecord((const 
char *)data));
+                       PackageRecord 
rec(ui->engine->apt().rawRecord(packagename));
 
                        std::string pkg_desc;
                        if (ui)
@@ -245,7 +258,7 @@
                        ui->DebTagsBrowser->column_widths(widths);
                        
ui->DebTagsBrowser->add(_("@B12@C7@[email protected]\t@B12@C7@[email protected]"));
 
-                       set<std::string> tags = 
ui->engine->debtags().getTagsOfItem((const char *)data);
+                       set<std::string> tags = 
ui->engine->debtags().getTagsOfItem(packagename);
                        char *tag_txt = new char[512];
                        for (set<std::string>::const_iterator i = tags.begin(); 
i != tags.end(); ++i)
                        {

Modified: software/ui/src/pkgbrowser.h
===================================================================
--- software/ui/src/pkgbrowser.h        2012-02-27 10:41:33 UTC (rev 13324)
+++ software/ui/src/pkgbrowser.h        2012-02-27 19:21:58 UTC (rev 13325)
@@ -216,7 +216,7 @@
        const unsigned int num_bar_images;
        Fl_Image *bar_images[2*2];
        std::string pkgname;
-       Fl_Image *fetch_screenshot(std::string packagename);
+       Fl_Image *find_screenshot(const std::string packagename);
 };
 
 class PackageView : public Fl_Help_View


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to