From 028de7455d45f758ea6fc0d753b5c8887d4287b7 Mon Sep 17 00:00:00 2001 From: mece Date: Wed, 27 Jan 2010 16:09:42 +0200 Subject: [PATCH] renamed files, added imagedir variable --- comic_widget.desktop | 5 - comic_widget.py | 424 -------------------------------------------------- 2 files changed, 429 deletions(-) delete mode 100644 comic_widget.desktop delete mode 100644 comic_widget.py diff --git a/comic_widget.desktop b/comic_widget.desktop deleted file mode 100644 index fc41d4b..0000000 --- a/comic_widget.desktop +++ /dev/null @@ -1,5 +0,0 @@ -[Desktop Entry] -Name=Comic Widget -Comment=Simple Comic widget -Type=python -X-Path=comic_widget.py diff --git a/comic_widget.py b/comic_widget.py deleted file mode 100644 index a253b72..0000000 --- a/comic_widget.py +++ /dev/null @@ -1,424 +0,0 @@ -import hildon -import hildondesktop -import gtk -import csv -import urllib2 -import urllib -import string -import os -import osso - -# constants. dbfile is the location of the csv -# comiccache is the location of the images -dbfile = "/home/user/.comicdb.csv" -comiccache = "/home/user/MyDocs/comics/" -comics = {"xkcd":{"name":"xkcd","link":"http://xkcd.org/","start":666,"dbfile":"/home/user/.comicdb.xkcd.csv"}, - "sinfest":{"name":"Sinfest","link":"http://sinfest.com/","start":3400,"dbfile":"/home/user/.comicdb.sinfest.csv"}} - -# handling of the comics -class ComicDb(): - def __init__(self, comic): - #if no db, start from this comic id. - self.comic = comic - self.start = comics[self.comic]["start"] - self.dbfile = comics[self.comic]["dbfile"] - - #if db file exist, read it - if os.path.isfile(self.dbfile) == True: - dbf = open(self.dbfile, 'r') - # if not, create it. - else: - dbf = open(self.dbfile, 'w') - dbf.write('comic,id,link,url,filename,title\n') - dbf.close() - dbf = open(self.dbfile, 'r') - self.fetch_latest_std(self.comic, self.start) - - if not os.path.exists(comiccache + self.comic + "/"): - os.makedirs(comiccache + self.comic + "/") - dbr = csv.DictReader(dbf) - self.db = [] - for row in dbr: - self.db.insert(0,row) - dbf.close() - self.currentcomic = 0 - - def get_comic(self): - print str(self.currentcomic) - if self.currentcomic < 0: - self.refresh() - self.currentcomic = 0 - if len(self.db) < (self.currentcomic + 1): - self.currentcomic -= 1 - self.refresh() - self.currentcomic = len(self.db) - 1 - - dbrow = self.db[self.currentcomic] - filename = comiccache + self.comic + "/" + dbrow['filename'] - print filename + "\n" - - if os.path.isfile(filename): - print "found, returning " + filename + "\n" - return filename - else: - #fetch file - print filename + " not found\nretrieving " + dbrow['url'] + "\n" - urllib.urlretrieve(dbrow['url'], filename) - print "success\n" - return filename - - def get_current_row(self): - return self.db[self.currentcomic] - - def get_link(self): - print str(self.currentcomic) - if self.currentcomic < 0: - self.refresh() - self.currentcomic = 0 - if len(self.db) < (self.currentcomic + 1): - self.currentcomic -= 1 - return self.db[self.currentcomic]['link'] - - - - def insert_row(self, irow): - dbf = open(self.dbfile, 'a') - dbw = csv.writer(dbf) - dbw.writerow(irow) - dbf.close() - - def insert_row_first(self, irow): - dbf = open(self.dbfile, 'w') - dbf.write('comic,id,link,url,filename,title\n') - dbw = csv.writer(dbf) - dbw.writerow(irow) - dbf.close() - dbf = open(self.dbfile, 'a') - dbw = csv.DictWriter(dbf, ['comic','id','link','url','filename','title']) - tmpdb = self.db - tmpdb.reverse() - for row in tmpdb: - dbw.writerow(row) - dbf.close() - - def refresh(self): - if len(self.db) < 1: - self.fetch_latest_std(self.comic, self.start) - elif self.currentcomic == 0 or self.currentcomic < 0: - self.fetch_latest_std(self.comic, self.db[0]['id']) - elif self.currentcomic == (len(self.db) - 1): - self.fetch_earlier(self.comic, self.db[self.currentcomic]['id']) - dbf = open(self.dbfile, 'r') - dbr = csv.DictReader(dbf) - self.db = [] - for row in dbr: - self.db.insert(0,row) - dbf.close() - - def fetch_earlier(self, comic, earliest): - number = int(earliest) - 1 - if number < 0: - return False - print "number is now: " + str(number) + "\n" - if comic == 'xkcd': - link = "http://xkcd.org/" + str(number) + "/" - elif comic == 'sinfest': - link = "http://www.sinfest.net/archive_page.php?comicID=" + str(number) - else: - return False - print "link: " + link + "\n" - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - return False - else: - # Build db entry. - # they look like: comic,id,link,url,filename,title - # We already have comic, number/id and link - - if comic == 'xkcd': - s = f.read() - f.close() - splt = string.split(s, "

Image URL (for hotlinking/embedding): ", 1) - splt2 = string.split(splt[1], "

", 1) - url = splt2[0] - splt = string.split(splt[0], "

", 1) - splt = string.split(splt[1], "

", 1) - title = splt[0] - - elif comic == 'sinfest': - s = f.read() - f.close() - splt = string.split(s, 'height="107"', 1) - splt = string.split(splt[1], '', 1)
-				url = splt[0]
-				if len(url) < 49:
-					print ', 1) - title = splt[0] - splt2 = string.rsplit(url, "/", 1) - filename = splt2[1] - irow = [comic,number,link,url,filename,title] - print "got irow: " - print irow - print "\ninserting first...\n" - self.insert_row_first(irow) - - - def fetch_latest_std(self, comic, latest): - - print "fetching new after " + str(comic) + " " + str(latest) + "\n" - hcode = 200 - number = int(latest) + 1 - while hcode == 200: - print "number is now: " + str(number) + "\n" - if comic == 'xkcd': - link = "http://xkcd.org/" + str(number) + "/" - elif comic == 'sinfest': - link = "http://www.sinfest.net/archive_page.php?comicID=" + str(number) - else: - break - print "link: " + link + "\n" - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - break - else: - # Build db entry. - # they look like: comic,id,link,url,filename,title - # We already have comic, number/id and link - - if comic == 'xkcd': - s = f.read() - f.close() - splt = string.split(s, "

Image URL (for hotlinking/embedding): ", 1) - splt2 = string.split(splt[1], "

", 1) - url = splt2[0] - splt = string.split(splt[0], "

", 1) - splt = string.split(splt[1], "

", 1) - title = splt[0] - - elif comic == 'sinfest': - s = f.read() - f.close() - splt = string.split(s, 'height="107"', 1) - splt = string.split(splt[1], '', 1)
-					url = splt[0]
-					if len(url) < 49:
-						print ', 1) - title = splt[0] - - splt2 = string.rsplit(url, "/", 1) - filename = splt2[1] - irow = [comic,number,link,url,filename,title] - print "got irow: " - print irow - print "\ninserting...\n" - - self.insert_row(irow) - - number += 1 - -class ComicHomePlugin(hildondesktop.HomePluginItem): - def __init__(self): - hildondesktop.HomePluginItem.__init__(self) - self.osso_c = osso.Context("comic_widget", "0.0.1", False) - self.osso_rpc = osso.Rpc(self.osso_c) - self.keys = comics.keys() - self.keypointer = 1 - self.db = ComicDb(self.keys[self.keypointer]) - self.comicname = comics[self.keys[self.keypointer]]['name'] - screen = self.get_screen() - colormap = screen.get_rgba_colormap() - self.set_colormap(colormap) - #setup internal area - self.set_size_request(480, 230) - self.imgvpos = 0; - self.vbox = gtk.VBox() - self.hbox = gtk.HBox() - self.label = gtk.Label(self.comicname + " " + str(self.db.db[self.db.currentcomic]['id'])) - self.e_goweb = gtk.EventBox() - self.e_open = gtk.EventBox() - self.e_switch = gtk.EventBox() - self.e_next = gtk.EventBox() - self.e_prev = gtk.EventBox() - self.e_up = gtk.EventBox() - self.e_down = gtk.EventBox() - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.comic_image.show() - self.next = gtk.image_new_from_file("/home/user/comic_widget/right.png") - self.prev = gtk.image_new_from_file("/home/user/comic_widget/left.png") - self.up = gtk.image_new_from_file("/home/user/comic_widget/up.png") - self.down = gtk.image_new_from_file("/home/user/comic_widget/down.png") - self.switch = gtk.image_new_from_file("/home/user/comic_widget/star.png") - - self.e_goweb.add(self.label) - self.e_goweb.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_goweb.connect("button-press-event", self.view_comic) - - self.e_open.add(self.comic_image) - - self.e_switch.add(self.switch) - self.e_switch.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_switch.connect("button-press-event", self.switch_comic) - - - self.e_next.add(self.next) - self.e_next.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_next.connect("button-press-event", self.get_next) - - self.e_prev.add(self.prev) - self.e_prev.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_prev.connect("button_press_event", self.get_prev) - - self.e_up.add(self.up) - self.e_up.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_up.connect("button-press-event", self.scroll_up) - - self.e_down.add(self.down) - self.e_down.set_events(gtk.gdk.BUTTON_PRESS_MASK) - self.e_down.connect("button-press-event", self.scroll_down) - - self.vbox.pack_start(self.e_open,False,False,0) - self.vbox.pack_end(self.hbox,False,False,0) - - self.hbox.pack_start(self.e_switch,False,False,5) - self.hbox.pack_start(self.e_goweb,False,False,5) - self.hbox.pack_end(self.e_next,False,False,5) - self.hbox.pack_end(self.e_down,False,False,5) - self.hbox.pack_end(self.e_up,False,False,5) - self.hbox.pack_end(self.e_prev,False,False,5) - self.vbox.show_all() - self.add(self.vbox) - - - def switch_comic(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.keypointer = (self.keypointer + 1) % 2 - self.imgvpos = 0 - self.db = [] - print "switching to " + self.keys[self.keypointer] - self.comicname = comics[self.keys[self.keypointer]]['name'] - self.db = ComicDb(self.keys[self.keypointer]) - self.e_goweb.remove(self.label) - self.label = gtk.Label(self.comicname + " " + str(self.db.db[self.db.currentcomic]['id'])) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - self.e_open.remove(self.comic_image) - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_open.add(self.comic_image) - self.e_open.show_all() - - def switch_rel(self, widget, event): - if not event.type == gtk.gdk.BUTTON_RELEASE: - return False - widget.remove(self.switch) - self.switch = gtk.image_new_from_file("/home/user/comic_widget/star.png") - widget.add(self.switch) - widget.show_all() - - def view_comic(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - link = self.db.get_link() - self.osso_rpc.rpc_run_with_defaults("osso_browser", "open_new_window", (link,)) - - def scroll_down(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.e_open.remove(self.comic_image) - self.imgvpos = self.imgvpos + 50 - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_open.add(self.comic_image) - self.e_open.show_all() - - def scroll_up(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.e_open.remove(self.comic_image) - self.imgvpos = self.imgvpos - 50 - if self.imgvpos < 0: - self.imgvpos = 0 - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_open.add(self.comic_image) - self.e_open.show_all() - - def get_next(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.db.currentcomic -= 1 - self.imgvpos = 0 - self.e_open.remove(self.comic_image) - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_open.add(self.comic_image) - self.e_open.show_all() - self.e_goweb.remove(self.label) - self.label = gtk.Label(self.comicname + " " + str(self.db.db[self.db.currentcomic]['id'])) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - - def get_prev(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.db.currentcomic += 1 - self.imgvpos = 0 - self.e_open.remove(self.comic_image) - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_open.add(self.comic_image) - self.e_open.show_all() - self.e_goweb.remove(self.label) - self.label = gtk.Label(self.comicname + " " + str(self.db.db[self.db.currentcomic]['id'])) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - - def get_resized_pixmap(self, filename, vpos): - pixbuf = gtk.gdk.pixbuf_new_from_file(filename) - parent_buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, pixbuf.get_has_alpha(), 8, 478, 190) - parent_buf.fill(0x00000000) - retimg = gtk.Image() - # get correct width/height - new_width = 0 - new_height = 1 - new_width = 478 - new_height = int((478.0 / pixbuf.get_width()) * pixbuf.get_height()) - scaled_buf = pixbuf.scale_simple(new_width,new_height,gtk.gdk.INTERP_BILINEAR) - - if scaled_buf.get_height() > 190: - if scaled_buf.get_height() - (vpos + 190) < 0: - vpos = scaled_buf.get_height() - 190 - scaled_buf.copy_area(0,vpos,478,190,parent_buf,0,0) - - else: - tmpy = 190 - scaled_buf.get_height() - if tmpy > 0: - tmpy = tmpy / 2 - - scaled_buf.copy_area(0,vpos,478,scaled_buf.get_height(),parent_buf,0,tmpy) - - retimg.set_from_pixbuf(parent_buf) - return retimg - - -hd_plugin_type = ComicHomePlugin - - -if __name__ == "__main__": - import gobject - gobject.type_register(hd_plugin_type) - obj = gobject.new(hd_plugin_type, plugin_id="plugin_id") - obj.show_all() - gtk.main() -- 1.7.9.5