X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fimagestore.py;h=0cb481347d12fd491195aa5bf6f073dc78f44c13;hb=1579fb0f82ef63a1d0b1c11b77564565f59ac398;hp=bf228f581c4d88d4d404b00b4ed66c9503524dcc;hpb=e4b9d028aa9583735e8252eeebe255b4a438d30c;p=watersofshiloah diff --git a/src/imagestore.py b/src/imagestore.py index bf228f5..0cb4813 100644 --- a/src/imagestore.py +++ b/src/imagestore.py @@ -1,8 +1,18 @@ +from __future__ import with_statement + import os +import logging import cairo import gtk +import browser_emu +from util import go_utils +import util.misc as misc_utils + + +_moduleLogger = logging.getLogger(__name__) + class ImageStore(object): @@ -32,21 +42,32 @@ class ImageStore(object): "radio_header": "radio_header.png", "conference_background": "conference_bg.png", "magazine_background": "magazine_bg.png", - "scriptures_background": "scripture_bg.png", + "scripture_background": "scripture_bg.png", "conferences": "conference.png", "magazines": "magazines.png", - "more": "more.png", "mormonmessages": "mormonmessages.png", "radio": "radio.png", "scriptures": "scriptures.png", + + "more": "more.png", "icon": "icon.png", + "nomagazineimage": "nomagazineimage.png", } def __init__(self, storePath, cachePath): self._storePath = storePath self._cachePath = cachePath + self._browser = browser_emu.MozillaEmulator() + self._downloader = go_utils.AsyncPool() + + def start(self): + self._downloader.start() + + def stop(self): + self._downloader.stop() + def get_surface_from_store(self, imageName): path = os.path.join(self._storePath, imageName) image = cairo.ImageSurface.create_from_png(path) @@ -67,6 +88,51 @@ class ImageStore(object): path = os.path.join(self._storePath, imageName) return gtk.gdk.pixbuf_new_from_file(path) + def get_pixbuf_from_url(self, url, on_success, on_error): + # @ todo Test bad image for both paths + filepath = self._url_to_cache(url) + if os.path.exists(filepath): + pix = gtk.gdk.pixbuf_new_from_file(filepath) + try: + on_success(pix) + except Exception: + pass + doDownload = False + else: + doDownload = True + + if doDownload: + self._get_image( + url, + lambda filepath: on_success(gtk.gdk.pixbuf_new_from_file(filepath)), + on_error, + ) + def get_pixbuf_animation_from_store(self, imageName): path = os.path.join(self._storePath, imageName) return gtk.gdk.PixbufAnimation(path) + + def _get_image(self, url, on_success, on_error): + self._downloader.add_task( + self._browser.download, + (url, ), + {}, + lambda image: self._on_get_image(url, image, on_success, on_error), + on_error, + ) + + @misc_utils.log_exception(_moduleLogger) + def _on_get_image(self, url, image, on_success, on_error): + try: + filepath = self._url_to_cache(url) + _moduleLogger.info("Saved %s" % filepath) + with open(filepath, "wb") as f: + f.write(image) + on_success(filepath) + except Exception, e: + on_error(e) + + def _url_to_cache(self, url): + filename = url.rsplit("/", 1)[-1] + filepath = os.path.join(self._cachePath, filename) + return filepath