Author: pere Date: 2012-02-27 10:19:42 +0000 (Mon, 27 Feb 2012) New Revision: 13323
Added: software/ui/src/URLFetcher.cpp software/ui/src/URLFetcher.h Modified: software/ui/debian/changelog software/ui/debian/control software/ui/src/Makefile.am software/ui/src/pkgbrowser.cpp software/ui/src/pkgbrowser.h Log: Add code to download screen shots from screenshot.debian.net (Closes: #659846). Add build dependency on libcurl4-gnutls-dev to get HTTP download support. Modified: software/ui/debian/changelog =================================================================== --- software/ui/debian/changelog 2012-02-27 05:47:08 UTC (rev 13322) +++ software/ui/debian/changelog 2012-02-27 10:19:42 UTC (rev 13323) @@ -1,3 +1,11 @@ +goplay (0.5-2) UNRELEASED; urgency=low + + * Add code to download screen shots from screenshot.debian.net + (Closes: #659846). Add build dependency on libcurl4-gnutls-dev + to get HTTP download support. + + -- Petter Reinholdtsen <[email protected]> Mon, 27 Feb 2012 10:55:24 +0100 + goplay (0.5-1) unstable; urgency=low * Acknowledge NMU (Closes: #659534). Modified: software/ui/debian/control =================================================================== --- software/ui/debian/control 2012-02-27 05:47:08 UTC (rev 13322) +++ software/ui/debian/control 2012-02-27 10:19:42 UTC (rev 13323) @@ -10,6 +10,7 @@ Build-Depends: debhelper (>= 8), pkg-config, libept-dev, libwibble-dev, libfltk1.1-dev, libtagcoll2-dev ,imagemagick + ,libcurl4-gnutls-dev #, fluid Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-games/software/ui/ Vcs-Svn: svn://svn.debian.org/pkg-games/software/ui/ Modified: software/ui/src/Makefile.am =================================================================== --- software/ui/src/Makefile.am 2012-02-27 05:47:08 UTC (rev 13322) +++ software/ui/src/Makefile.am 2012-02-27 10:19:42 UTC (rev 13323) @@ -14,6 +14,7 @@ common.h \ Engine.h \ Environment.h \ + URLFetcher.h \ filter.h \ GamesOptions.h \ pkgbrowser.h \ @@ -23,6 +24,7 @@ goplay_SOURCES = \ Environment.cpp \ Engine.cpp \ + URLFetcher.cpp \ ui.cpp \ pkgbrowser.cpp \ filter.cpp \ @@ -31,7 +33,8 @@ aux.cpp \ goplay.cpp goplay_LDFLAGS = \ - `fltk-config --ldflags --use-images` + `fltk-config --ldflags --use-images` \ + `curl-config --libs` goplay_LDADD = \ ../libxdgutils/libxdgutils.a \ $(LIBEPT_LIBS) @@ -42,7 +45,7 @@ ui.h ui.cpp: ui.fld fluid -c -o ui.cpp -h ui.h ui.fld -INCLUDES = -I.. $(LIBEPT_CFLAGS) `fltk-config --cxxflags --use-images` -Wall -Werror -ggdb +INCLUDES = -I.. $(LIBEPT_CFLAGS) `fltk-config --cxxflags --use-images` `curl-config --cflags` -Wall -Werror -ggdb EXTRA_DIST = GamesOptions.h Environment.h Engine.h ui.fld ui.h ui.cpp pkgbrowser.h LICENSE \ Makefile.test CuTest.h CuTest.c CuTest.sh CuTest.txt \ Added: software/ui/src/URLFetcher.cpp =================================================================== --- software/ui/src/URLFetcher.cpp (rev 0) +++ software/ui/src/URLFetcher.cpp 2012-02-27 10:19:42 UTC (rev 13323) @@ -0,0 +1,58 @@ +#include "URLFetcher.h" +#include <string.h> +#include <stdlib.h> +#include <assert.h> +#include <iostream> +#include <stdexcept> + +char *URLFetcher::tmpdir(NULL); + +URLFetcher::URLFetcher() + : curlref(NULL) +{ + curlref = curl_easy_init(); + assert(curlref); + if (!tmpdir) + { + tmpdir = mkdtemp(strdup("/tmp/goplay.thumb.XXXXXX")); + assert(tmpdir); + } +} + +const std::string URLFetcher::get(const std::string url, + const std::string basename) +{ + if (curlref) + { + curl_easy_setopt(curlref, CURLOPT_URL, url.c_str()); + std::string path(tmpdir); + path += "/" + basename; + FILE *output = fopen(path.c_str(), "w"); + curl_easy_setopt(curlref, CURLOPT_WRITEDATA, output); + CURLcode res = curl_easy_perform(curlref); + fflush(output); + fclose(output); + if (0 != res) + { + throw std::runtime_error(std::string("failed to fetch screen shot")); + } + return path; + } + throw std::runtime_error("unable to fetch screen shot"); +} + +URLFetcher::~URLFetcher() +{ + curl_easy_cleanup(curlref); +} + +#ifdef TEST +int main(int argc, char *argv[]) +{ + URLFetcher fetcher; + const std::string path = + fetcher.get(std::string("http://www.debian.org"), + std::string("index.html")); + std::cout << path; +} +#endif Added: software/ui/src/URLFetcher.h =================================================================== --- software/ui/src/URLFetcher.h (rev 0) +++ software/ui/src/URLFetcher.h 2012-02-27 10:19:42 UTC (rev 13323) @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 Petter Reinholdtsen <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _games_urlfetcher_h +#define _games_urlfetcher_h + +#include <curl/curl.h> +#include <string> + +class URLFetcher +{ + public: + URLFetcher(); + ~URLFetcher(); + const std::string get(const std::string url, + const std::string basename); + private: + CURL *curlref; + static char *tmpdir; +}; + +#endif Modified: software/ui/src/pkgbrowser.cpp =================================================================== --- software/ui/src/pkgbrowser.cpp 2012-02-27 05:47:08 UTC (rev 13322) +++ software/ui/src/pkgbrowser.cpp 2012-02-27 10:19:42 UTC (rev 13323) @@ -40,6 +40,7 @@ #include "Environment.h" #include "GamesOptions.h" #include "Engine.h" +#include "URLFetcher.h" #include "filter.h" @@ -147,6 +148,20 @@ } } +Fl_Image *PackageBrowser::fetch_screenshot(std::string packagename) +{ + URLFetcher fetcher; + std::string url("http://screenshots.debian.net/thumbnail/"); + // TODO: Scale image to fit frame + 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()); + return img; +} + void PackageBrowser::item_select(void *p, int s) { VersatileBrowser::item_select(p, s); @@ -191,7 +206,8 @@ } else { // TODO: Portable Anymap (PNM, PBM, PGM, PPM) image files - img = NULL; + const char *packagename = (const char *)data; + img = fetch_screenshot(packagename); } if (img && !img->count()) { Modified: software/ui/src/pkgbrowser.h =================================================================== --- software/ui/src/pkgbrowser.h 2012-02-27 05:47:08 UTC (rev 13322) +++ software/ui/src/pkgbrowser.h 2012-02-27 10:19:42 UTC (rev 13323) @@ -216,6 +216,7 @@ const unsigned int num_bar_images; Fl_Image *bar_images[2*2]; std::string pkgname; + Fl_Image *fetch_screenshot(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

