X-Git-Url: http://git.maemo.org/git/?p=watersofshiloah;a=blobdiff_plain;f=src%2Fimagestore.py;h=13dceefd0c224278ab438df94ad4a393786626e4;hp=2a13cdb94b91e32d5d92c40af88afc85e2a1c963;hb=021507b255bdaffb3bbfd5e173b84cc6c514b8ed;hpb=64784fcf8a918d6b210e301f3fa70e5b291d9cd3 diff --git a/src/imagestore.py b/src/imagestore.py index 2a13cdb..13dceef 100644 --- a/src/imagestore.py +++ b/src/imagestore.py @@ -1,37 +1,72 @@ +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): STORE_LOOKUP = { - "next": "next.png", - "prev": "prev.png", - "pause": "pause.png", - "play": "play.png", - "stop": "stop.png", - "loading": "loading.gif", + "next": "button_next.png", + "prev": "button_prev.png", + "home": "icon.png", + "pause": "button_pause.png", + "play": "button_play.png", + "stop": "button_stop.png", + "add": "button_add.png", + "remove": "button_remove.png", + "favorite": "button_favorite.png", + "next_pressed": "button_next_pressed.png", + "prev_pressed": "button_prev_pressed.png", + "home_pressed": "icon.png", + "pause_pressed": "button_pause_pressed.png", + "play_pressed": "button_play_pressed.png", + "stop_pressed": "button_stop_pressed.png", + "add_pressed": "button_add_pressed.png", + "remove_pressed": "button_remove_pressed.png", + "favorite_pressed": "button_favorite_pressed.png", "radio_header": "radio_header.png", - "conference_background": "conference_bg.png", - "magazine_background": "magazine_bg.png", - "scriptures_background": "scripture_bg.png", - - "conferences": "conference.png", - "magazines": "magazines.png", - "more": "more.png", - "mormonmessages": "mormonmessages.png", - "radio": "radio.png", - "scriptures": "scriptures.png", + "conference_background": "background_conference_p.png", + "conference_background_landscape": "background_conference_l.png", + "magazine_background": "background_magazines_p.png", + "magazine_background_landscape": "background_magazines_l.png", + "scripture_background": "background_scriptures_p.png", + "scripture_background_landscape": "background_scriptures_l.png", + + "conferences": "label_conference.png", + "magazines": "label_magazines.png", + "radio": "label_radio.png", + "scriptures": "label_scriptures.png", + + "loading": "loading.gif", "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) @@ -52,6 +87,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