From: Marcus Wikström Date: Tue, 9 Feb 2010 13:25:59 +0000 (+0200) Subject: added a ton of comics---fixed X-Git-Url: https://vcs.maemo.org/git/?p=comic-widget;a=commitdiff_plain;h=55c8f04f6feba33ad89604832950b5f9823e4c19 added a ton of comics---fixed --- diff --git a/build-stamp b/build-stamp deleted file mode 100644 index e69de29..0000000 diff --git a/configure-stamp b/configure-stamp deleted file mode 100644 index e69de29..0000000 diff --git a/debian/comic-widget/DEBIAN/control b/debian/comic-widget/DEBIAN/control deleted file mode 100644 index 199e37e..0000000 --- a/debian/comic-widget/DEBIAN/control +++ /dev/null @@ -1,89 +0,0 @@ -Package: comic-widget -Version: 0.4.2-1 -Section: user/desktop -Priority: extra -Architecture: all -Depends: python2.5, python-osso, python-gtk2, python-hildon, python-hildondesktop, python2.5-cairo, hildon-desktop-python-loader -Installed-Size: 188 -Maintainer: Marcus Wikstrom -Description: A widget that displays comics taken from the web. -Bugtracker: XSBC-Bugtracker: http://bugs.maemo.org -Maemo-Icon-26: - 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 - n/y/2/wfjUewq/FSuIsAAAAASUVORK5CYII= diff --git a/debian/comic-widget/DEBIAN/md5sums b/debian/comic-widget/DEBIAN/md5sums deleted file mode 100644 index d0e47ab..0000000 --- a/debian/comic-widget/DEBIAN/md5sums +++ /dev/null @@ -1,16 +0,0 @@ -c28d59639f88131ef87f127b9e2cfc6e opt/comic-widget/images/down0-48x48.png -e004317e4394f6f2d48b540d4f7e84fd opt/comic-widget/images/next0-48x48.png -0adaa4f81bc84b3c6900f127beb44230 opt/comic-widget/images/switch1-48x48.png -f6b005dadeccf8db681b2d03ca4d7b3a opt/comic-widget/images/switch0-48x48.png -8a54a3d037c715f5d54749878f31e078 opt/comic-widget/images/next1-48x48.png -6e48bf459aeaa31ff060ab123b00275f opt/comic-widget/images/icon2-64x64.png -633c091fd88a0bdcf3631922b8612e77 opt/comic-widget/images/prev0-48x48.png -fac68439af81c0bdbf0be4d191b87356 opt/comic-widget/images/prev1-48x48.png -e41c46ecd717669b42714da7f4302787 opt/comic-widget/images/up1-48x48.png -539495adcf9f6642984e58652f66f4d5 opt/comic-widget/images/down1-48x48.png -31d4efbb16e33e2f9a0c3d14618ea491 opt/comic-widget/images/up0-48x48.png -753fd2919b3f976a83848fe839b4f1eb usr/share/doc/comic-widget/copyright -3800c03fdc0bc323c60c15f91a4aefe5 usr/share/doc/comic-widget/changelog.gz -d9373f3997a760beebe30ba6580ce390 usr/share/doc/comic-widget/changelog.Debian.gz -ba851eb99ca1eac1245319e4393cde62 usr/share/applications/hildon-home/comicwidget.desktop -cff7c871cee332fcf03102ffd8f6c30c usr/lib/hildon-desktop/comicwidget.py diff --git a/debian/comic-widget/opt/comic-widget/images/down0-48x48.png b/debian/comic-widget/opt/comic-widget/images/down0-48x48.png deleted file mode 100644 index e9e4e2b..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/down0-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/down1-48x48.png b/debian/comic-widget/opt/comic-widget/images/down1-48x48.png deleted file mode 100644 index c81bdf3..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/down1-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/icon2-64x64.png b/debian/comic-widget/opt/comic-widget/images/icon2-64x64.png deleted file mode 100644 index 1ec464a..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/icon2-64x64.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/next0-48x48.png b/debian/comic-widget/opt/comic-widget/images/next0-48x48.png deleted file mode 100644 index d24913a..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/next0-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/next1-48x48.png b/debian/comic-widget/opt/comic-widget/images/next1-48x48.png deleted file mode 100644 index 792bd5d..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/next1-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/prev0-48x48.png b/debian/comic-widget/opt/comic-widget/images/prev0-48x48.png deleted file mode 100644 index 7d349a7..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/prev0-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/prev1-48x48.png b/debian/comic-widget/opt/comic-widget/images/prev1-48x48.png deleted file mode 100644 index ed1b355..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/prev1-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/switch0-48x48.png b/debian/comic-widget/opt/comic-widget/images/switch0-48x48.png deleted file mode 100644 index 9ae12f8..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/switch0-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/switch1-48x48.png b/debian/comic-widget/opt/comic-widget/images/switch1-48x48.png deleted file mode 100644 index 0419ed7..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/switch1-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/up0-48x48.png b/debian/comic-widget/opt/comic-widget/images/up0-48x48.png deleted file mode 100644 index 39932d6..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/up0-48x48.png and /dev/null differ diff --git a/debian/comic-widget/opt/comic-widget/images/up1-48x48.png b/debian/comic-widget/opt/comic-widget/images/up1-48x48.png deleted file mode 100644 index d3536ca..0000000 Binary files a/debian/comic-widget/opt/comic-widget/images/up1-48x48.png and /dev/null differ diff --git a/debian/comic-widget/usr/lib/hildon-desktop/comicwidget.py b/debian/comic-widget/usr/lib/hildon-desktop/comicwidget.py deleted file mode 100644 index 3d3f6af..0000000 --- a/debian/comic-widget/usr/lib/hildon-desktop/comicwidget.py +++ /dev/null @@ -1,1546 +0,0 @@ -import gobject -import hildon -import hildondesktop -import gtk -import csv -import urllib2 -import string -import os -import osso -import cairo -import datetime -import shutil -import sys -import socket - -socket.setdefaulttimeout(30) - -supports_alpha = False - -# LOGGING! -# sys.stdout = open('/home/user/.comic-widget/output_log.txt', 'a') -# sys.stderr = open('/home/user/.comic-widget/error_log.txt', 'a') -# print "Start logging!" - -# constants. dbfile is the location of the csv -# comiccache is the location of the images -APP_VERSION = "0.4.2" - -basedbdir = "/opt/comic-widget/db/" -imagedir = "/opt/comic-widget/images/" -dbdir = "/home/user/.comic-widget/" -activecomics = dbdir + "activecomics.cfg" -comiccache = "/home/user/MyDocs/.comics/" -defaultcomics = ['xkcd','wulff','sinfest'] -comics = { - "9_chickweed_lanecomicscom":{"name":"9 Chickweed Lane","link":"http://comics.com/9_chickweed_lane/","start":"2010-02-01","dbfile":dbdir + "comicdb.9chickweedlane.csv"}, - "agnescomicscom":{"name":"Agnes","link":"http://comics.com/agnes/","start":"2010-02-01","dbfile":dbdir + "comicdb.agnes.csv"}, - "andy_cappcomicscom":{"name":"Andy Capp","link":"http://comics.com/andy_capp/","start":"2010-02-01","dbfile":dbdir + "comicdb.andycapp.csv"}, - "alley_oopcomicscom":{"name":"Alley Oop","link":"http://comics.com/alley_oop/","start":"2010-02-01","dbfile":dbdir + "comicdb.alleyoop.csv"}, - "arlonjaniscomicscom":{"name":"Arlo and Janis","link":'http://comics.com/arlo&janis/',"start":"2010-02-01","dbfile":dbdir + "comicdb.arlonjanis.csv"}, - "bccomicscom":{"name":"B.C.","link":"http://comics.com/bc/","start":"2010-02-01","dbfile":dbdir + "comicdb.bc.csv"}, - "ballard_streetcomicscom":{"name":"Ballard Street","link":"http://comics.com/ballard_street/","start":"2010-02-01","dbfile":dbdir + "comicdb.ballardstreet.csv"}, - "babyblues":{"name":"Baby Blues","link":"http://www.babyblues.com/","start":"01/19/2010","dbfile":dbdir + "comicdb.babyblues.csv"}, - "bencomicscom":{"name":"Ben","link":'http://comics.com/ben/',"start":"2010-02-01","dbfile":dbdir + "comicdb.ben.csv"}, - "bettycomicscom":{"name":"Betty","link":"http://comics.com/betty/","start":"2010-02-01","dbfile":dbdir + "comicdb.betty.csv"}, - "big_natecomicscom":{"name":"Big Nate","link":"http://comics.com/big_nate/","start":"2010-02-01","dbfile":dbdir + "comicdb.bignate.csv"}, - "brevitycomicscom":{"name":"Brevity","link":"http://comics.com/brevity/","start":"2010-02-01","dbfile":dbdir + "comicdb.brevity.csv"}, - "candorvillecomicscom":{"name":"Candorville","link":"http://comics.com/candorville/","start":"2010-02-01","dbfile":dbdir + "comicdb.candorville.csv"}, - "cheap_thrillscomicscom":{"name":"Cheap Thrills","link":"http://comics.com/cheap_thrills/","start":"2010-02-01","dbfile":dbdir + "comicdb.cheapthrills.csv"}, - "committedcomicscom":{"name":"Committed","link":"http://comics.com/committed/","start":"2010-02-01","dbfile":dbdir + "comicdb.committed.csv"}, - "cownboycomicscom":{"name":"Cow and Boy","link":'http://comics.com/cow&boy/',"start":"2010-02-01","dbfile":dbdir + "comicdb.cownboy.csv"}, - "cyanide":{"name":"Cyanide and Happiness","link":"http://explosm.com/","start":"1920","dbfile":dbdir + "comicdb.cyanide.csv"}, - "daddyshomecomicscom":{"name":"Daddy's Home","link":"http://comics.com/daddys_home/","start":"2010-02-01","dbfile":dbdir + "comicdb.daddyshome.csv"}, - "dilbert":{"name":"Dilbert","link":"http://dilbert.com/","start":"2010-01-01","dbfile":dbdir + "comicdb.dilbert.csv"}, - "dog_eat_dougcomicscom":{"name":"Dog eat Doug","link":"http://comics.com/dog_eat_doug/","start":"2010-02-01","dbfile":dbdir + "comicdb.dogeatdoug.csv"}, - "drabblecomicscom":{"name":"Drabble","link":"http://comics.com/drabble/","start":"2010-02-01","dbfile":dbdir + "comicdb.drabble.csv"}, - "f_minuscomicscom":{"name":"F Minus","link":"http://comics.com/f_minus/","start":"2010-02-01","dbfile":dbdir + "comicdb.f_minus.csv"}, - "family_treecomicscom":{"name":"Family Tree","link":"http://comics.com/family_tree/","start":"2010-02-01","dbfile":dbdir + "comicdb.familytree.csv"}, - "farcuscomicscom":{"name":"Farcus","link":'http://comics.com/farcus/',"start":"2010-02-01","dbfile":dbdir + "comicdb.farcus.csv"}, - "fat_catscomicscom":{"name":"Fat Cats","link":'http://comics.com/fat_cats_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.fatcats.csv"}, - "ferdnandcomicscom":{"name":"Ferd'nand","link":'http://comics.com/ferdnand/',"start":"2010-02-01","dbfile":dbdir + "comicdb.ferdnand.csv"}, - "flight_deckcomicscom":{"name":"Flight Deck","link":'http://comics.com/flight_deck/',"start":"2010-02-01","dbfile":dbdir + "comicdb.flightdeck.csv"}, - "flonfriendscomicscom":{"name":"Flo and Friends","link":'http://comics.com/flo&friends/',"start":"2010-02-01","dbfile":dbdir + "comicdb.flonfriends.csv"}, - "fort_knoxcomicscom":{"name":"Fort Knox","link":'http://comics.com/fort_knox/',"start":"2010-02-01","dbfile":dbdir + "comicdb.fortknox.csv"}, - "franknernestcomicscom":{"name":"Frank and Ernest","link":'http://comics.com/frank&ernest/',"start":"2010-02-01","dbfile":dbdir + "comicdb.franknernest.csv"}, - "frazzcomicscom":{"name":"Frazz","link":"http://comics.com/frazz/","start":"2010-02-01","dbfile":dbdir + "comicdb.frazz.csv"}, - "free_rangecomicscom":{"name":"Free Range","link":'http://comics.com/free_range/',"start":"2010-02-01","dbfile":dbdir + "comicdb.freerange.csv"}, - "geechcomicscom":{"name":"Geech","link":'http://comics.com/geech_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.geech.csv"}, - "getfuzzycomicscom":{"name":"Get Fuzzy","link":"http://comics.com/get_fuzzy/","start":"2010-02-01","dbfile":dbdir + "comicdb.getfuzzy.csv"}, - "girlsnsportscomicscom":{"name":"Girls and Sports","link":'http://comics.com/girls&sports/',"start":"2010-02-01","dbfile":dbdir + "comicdb.gitlsnsports.csv"}, - "graffiticomicscom":{"name":"Graffiti","link":'http://comics.com/graffiti/',"start":"2010-02-01","dbfile":dbdir + "comicdb.graffiti.csv"}, - "grand_avenuecomicscom":{"name":"Grand Avenue","link":'http://comics.com/grand_avenue/',"start":"2010-02-01","dbfile":dbdir + "comicdb.grandavenue.csv"}, - "heathcliffcomicscom":{"name":"Heathcliff","link":'http://comics.com/heathcliff/',"start":"2010-02-01","dbfile":dbdir + "comicdb.heathcliff.csv"}, - "herb_and_jamaalcomicscom":{"name":"Herb and Jamaal","link":'http://comics.com/herb_and_jamaal/',"start":"2010-02-01","dbfile":dbdir + "comicdb.herbandjamaal.csv"}, - "hermancomicscom":{"name":"Herman","link":'http://comics.com/herman/',"start":"2010-02-01","dbfile":dbdir + "comicdb.herman.csv"}, - "home_and_awaycomicscom":{"name":"Home and Away","link":'http://comics.com/home_and_away/',"start":"2010-02-01","dbfile":dbdir + "comicdb.homeandaway.csv"}, - "its_all_about_youcomicscom":{"name":"It's All About You","link":'http://comics.com/its_all_about_you/',"start":"2010-02-01","dbfile":dbdir + "comicdb.itsallaboutyou.csv"}, - "janes_worldcomicscom":{"name":"Jane's World","link":'http://comics.com/janes_world/',"start":"2010-02-01","dbfile":dbdir + "comicdb.janesworld.csv"}, - "jump_startcomicscom":{"name":"Jump Start","link":'http://comics.com/jump_start/',"start":"2010-02-01","dbfile":dbdir + "comicdb.jumpstart.csv"}, - "kit_n_carlylecomicscom":{"name":"Kit 'n' Carlyle","link":'http://comics.com/kit_n_carlyle/',"start":"2010-02-01","dbfile":dbdir + "comicdb.kitncarlyle.csv"}, - "lil_abnercomicscom":{"name":"Li'l Abner","link":'http://comics.com/lil_abner_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.lilabner.csv"}, - "liberty_meadowscomicscom":{"name":"Liberty Meadows","link":'http://comics.com/liberty_meadows/',"start":"2010-02-01","dbfile":dbdir + "comicdb.libertymeadows.csv"}, - "little_dog_lostcomicscom":{"name":"Little Dog Lost","link":'http://comics.com/little_dog_lost/',"start":"2010-02-01","dbfile":dbdir + "comicdb.littledoglost.csv"}, - "lolacomicscom":{"name":"Lola","link":'http://comics.com/lola/',"start":"2010-02-01","dbfile":dbdir + "comicdb.lola.csv"}, - "luanncomicscom":{"name":"Luann","link":'http://comics.com/luann/',"start":"2010-02-01","dbfile":dbdir + "comicdb.luann.csv"}, - "marmadukecomicscom":{"name":"Marmaduke","link":'http://comics.com/marmaduke/',"start":"2010-02-01","dbfile":dbdir + "comicdb.marmaduke.csv"}, - "megcomicscom":{"name":"Meg","link":'http://comics.com/meg_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.meg.csv"}, - "minimum_securitycomicscom":{"name":"Minimum Security","link":'http://comics.com/minimum_security/',"start":"2010-02-01","dbfile":dbdir + "comicdb.minimumsecurity.csv"}, - "moderately_confusedcomicscom":{"name":"Moderately Confused","link":'http://comics.com/moderately_confused/',"start":"2010-02-01","dbfile":dbdir + "comicdb.moderatelyconfused.csv"}, - "mommacomicscom":{"name":"Momma","link":'http://comics.com/momma/',"start":"2010-02-01","dbfile":dbdir + "comicdb.momma.csv"}, - "motleycomicscom":{"name":"Motley","link":'http://comics.com/motley_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.motley.csv"}, - "nancycomicscom":{"name":"Nancy","link":'http://comics.com/nancy/',"start":"2010-02-01","dbfile":dbdir + "comicdb.nancy.csv"}, - "natural_selectioncomicscom":{"name":"Natural Selection","link":'http://comics.com/natural_selection/',"start":"2010-02-01","dbfile":dbdir + "comicdb.naturalselection.csv"}, - "nest_headscomicscom":{"name":"Nest Heads","link":'http://comics.com/nest_heads/',"start":"2010-02-01","dbfile":dbdir + "comicdb.nestheads.csv"}, - "off_the_markcomicscom":{"name":"Off the mark","link":"http://comics.com/off_the_mark/","start":"2010-02-01","dbfile":dbdir + "comicdb.offthemark.csv"}, - "on_a_claire_daycomicscom":{"name":"On A Claire Day","link":'http://comics.com/on_a_claire_day/',"start":"2010-02-01","dbfile":dbdir + "comicdb.onaclaireday.csv"}, - "one_big_happycomicscom":{"name":"One Big Happy","link":'http://comics.com/one_big_happy_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.onebighappy.csv"}, - "over_the_hedgecomicscom":{"name":"Over the Hedge","link":'http://comics.com/over_the_hedge/',"start":"2010-02-01","dbfile":dbdir + "comicdb.overthehedge.csv"}, - "pc_and_pixelcomicscom":{"name":"PC and Pixel","link":'http://comics.com/pc_and_pixel/',"start":"2010-02-01","dbfile":dbdir + "comicdb.pcandpixel.csv"}, - "peanutscomicscom":{"name":"Peanuts","link":"http://comics.com/peanuts/","start":"2010-02-01","dbfile":dbdir + "comicdb.peanuts.csv"}, - "pearls_before_swinecomicscom":{"name":"Pearls Before Swine","link":'http://comics.com/pearls_before_swine/',"start":"2010-02-01","dbfile":dbdir + "comicdb.pearlsbeforeswine.csv"}, - "phd":{"name":"PHD Comics","link":"http://www.phdcomics.com/","start":1240,"dbfile":dbdir + "comicdb.phd.csv"}, - "picklescomicscom":{"name":"Pickles","link":'http://comics.com/pickles/',"start":"2010-02-01","dbfile":dbdir + "comicdb.pickles.csv"}, - "prickly_citycomicscom":{"name":"Prickly City","link":'http://comics.com/prickly_city/',"start":"2010-02-01","dbfile":dbdir + "comicdb.pricklycity.csv"}, - "raising_duncancomicscom":{"name":"Raising Duncan","link":'http://comics.com/raising_duncan_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.raisingduncan.csv"}, - "reality_checkcomicscom":{"name":"Reality Check","link":'http://comics.com/reality_check/',"start":"2010-02-01","dbfile":dbdir + "comicdb.realitycheck.csv"}, - "rednrovercomicscom":{"name":"Red and Rover","link":'http://comics.com/red&rover/',"start":"2010-02-01","dbfile":dbdir + "comicdb.rednrover.csv"}, - "rip_haywirecomicscom":{"name":"Rip Haywire","link":'http://comics.com/rip_haywire/',"start":"2010-02-01","dbfile":dbdir + "comicdb.riphaywire.csv"}, - "ripleys_believe_it_or_notcomicscom":{"name":"Ripley's Believe it or not","link":'http://comics.com/ripleys_believe_it_or_not/',"start":"2010-02-01","dbfile":dbdir + "comicdb.ripleysbelieveitornot.csv"}, - "rose_is_rosecomicscom":{"name":"Rose Is Rose","link":'http://comics.com/rose_is_rose/',"start":"2010-02-01","dbfile":dbdir + "comicdb.roseisrose.csv"}, - "rubescomicscom":{"name":"Rubes","link":'http://comics.com/rubes/',"start":"2010-02-01","dbfile":dbdir + "comicdb.rubes.csv"}, - "rudy_parkcomicscom":{"name":"Rudy Park","link":'http://comics.com/rudy_park/',"start":"2010-02-01","dbfile":dbdir + "comicdb.rudypark.csv"}, - "scary_garycomicscom":{"name":"Scary Gary","link":'http://comics.com/scary_gary/',"start":"2010-02-01","dbfile":dbdir + "comicdb.scarygary.csv"}, - "shirley_and_soncomicscom":{"name":"Shirley and Son","link":'http://comics.com/shirley_and_son_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.shirleyandson.csv"}, - "sinfest":{"name":"Sinfest","link":"http://sinfest.com/","start":3400,"dbfile":dbdir + "comicdb.sinfest.csv"}, - "soup_to_nutzcomicscom":{"name":"Soup to Nutz","link":'http://comics.com/soup_to_nutz/',"start":"2010-02-01","dbfile":dbdir + "comicdb.souptonutz.csv"}, - "speed_bumpcomicscom":{"name":"Speed Bump","link":'http://comics.com/speed_bump/',"start":"2010-02-01","dbfile":dbdir + "comicdb.speedbump.csv"}, - "spot_the_frogcomicscom":{"name":"Spot the Frog","link":'http://comics.com/spot_the_frog/',"start":"2010-02-01","dbfile":dbdir + "comicdb.spotthefrog.csv"}, - "state_of_the_unioncomicscom":{"name":"State of the Union","link":'http://comics.com/state_of_the_union/',"start":"2010-02-01","dbfile":dbdir + "comicdb.stateoftheunion.csv"}, - "strange_brewcomicscom":{"name":"Strange Brew","link":'http://comics.com/strange_brew/',"start":"2010-02-01","dbfile":dbdir + "comicdb.strangebrew.csv"}, - "tarzancomicscom":{"name":"Tarzan","link":'http://comics.com/tarzan_classics/',"start":"2010-02-01","dbfile":dbdir + "comicdb.tarzan.csv"}, - "thats_lifecomicscom":{"name":"That's Life","link":'http://comics.com/thats_life/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thatslife.csv"}, - "barncomicscom":{"name":"The Barn","link":'http://comics.com/the_barn/',"start":"2010-02-01","dbfile":dbdir + "comicdb.the_barn.csv"}, - "born_losercomicscom":{"name":"The Born Loser","link":'http://comics.com/the_born_loser/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thebornloser.csv"}, - "bucketscomicscom":{"name":"The Buckets","link":'http://comics.com/the_buckets/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thebuckets.csv"}, - "dinette_setcomicscom":{"name":"The Dinette Set","link":'http://comics.com/the_dinette_set/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thedinetteset.csv"}, - "grizzwellscomicscom":{"name":"The Grizzwells","link":'http://comics.com/the_grizzwells/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thegrizzwells.csv"}, - "humble_stumblecomicscom":{"name":"The Humble Stumble","link":'http://comics.com/the_humble_stumble/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thehumblestumble.csv"}, - "knight_lifecomicscom":{"name":"The Knight Life","link":'http://comics.com/the_knight_life/',"start":"2010-02-01","dbfile":dbdir + "comicdb.theknightlife.csv"}, - "meaning_of_lilacomicscom":{"name":"The Meaning of Lila","link":'http://comics.com/the_meaning_of_lila/',"start":"2010-02-01","dbfile":dbdir + "comicdb.themeaningoflila.csv"}, - "other_coastcomicscom":{"name":"The Other Coast","link":'http://comics.com/the_other_coast/',"start":"2010-02-01","dbfile":dbdir + "comicdb.theothercoast.csv"}, - "sunshine_clubcomicscom":{"name":"The Sunshine Club","link":'http://comics.com/the_sunshine_club/',"start":"2010-02-01","dbfile":dbdir + "comicdb.thesunshineclub.csv"}, - "unstrange_phenomenacomicscom":{"name":"Unstrange Phenomena","link":'http://comics.com/unstrange_phenomena/',"start":"2010-02-01","dbfile":dbdir + "comicdb.unstrangephenomena.csv"}, - "watch_your_headcomicscom":{"name":"Watch Your Head","link":'http://comics.com/watch_your_head/',"start":"2010-02-01","dbfile":dbdir + "comicdb.watchyourhead.csv"}, - "wizard_of_idcomicscom":{"name":"Wizard of Id","link":'http://comics.com/wizard_of_id/',"start":"2010-02-01","dbfile":dbdir + "comicdb.wizardofid.csv"}, - "working_dazecomicscom":{"name":"Working Daze","link":'http://comics.com/working_daze/',"start":"2010-02-01","dbfile":dbdir + "comicdb.workingdaze.csv"}, - "working_it_outcomicscom":{"name":"Working It Out","link":'http://comics.com/working_it_out/',"start":"2010-02-01","dbfile":dbdir + "comicdb.workingitout.csv"}, - "wulff":{"name":"Wulffmorgenthaler","link":"http://wulffmorgenthaler.com/","start":"edd3411b-96ca-4d93-bd5f-0cf1deb67c8a","dbfile":dbdir + "comicdb.wulff.csv"}, - "xkcd":{"name":"xkcd","link":"http://xkcd.org/","start":666,"dbfile":dbdir + "comicdb.xkcd.csv"}, - "zack_hillcomicscom":{"name":"Zack Hill","link":'http://comics.com/zack_hill/',"start":"2010-02-01","dbfile":dbdir + "comicdb.zackhill.csv"}, - - "amazing_spidermanckdm":{"name":"The Amazing Spider-Man","link":'http://content.comicskingdom.net/Spiderman/',"start":"20100209","dbfile":dbdir + "comicdb.spiderman.csv"}, - "apartment_3-gckdm":{"name":"Apartment 3-G","link":'http://content.comicskingdom.net/Apartment_3-G/',"start":"20100209","dbfile":dbdir + "comicdb.partment3g.csv"}, - "arcticckdm":{"name":"Arctic Circle","link":'http://content.comicskingdom.net/Arctic/',"start":"20100209","dbfile":dbdir + "comicdb.arctic.csv"}, - "barney_googleckdm":{"name":"Barney Google and Snuffy Smith","link":'http://content.comicskingdom.net/Barney_Google/',"start":"20100209","dbfile":dbdir + "comicdb.barneygoogle.csv"}, - "beetle_baileyckdm":{"name":"Beetle Bailey","link":'http://content.comicskingdom.net/Beetle_Bailey/',"start":"20100209","dbfile":dbdir + "comicdb.beetlebailey.csv"}, - "better_halfckdm":{"name":"Better Half","link":'http://content.comicskingdom.net/Better_Half/',"start":"20100209","dbfile":dbdir + "comicdb.betterhalf.csv"}, - "between_friendsckdm":{"name":"Between Friends","link":'http://content.comicskingdom.net/Between_Friends/',"start":"20100209","dbfile":dbdir + "comicdb.betweenfriends.csv"}, - "bizarrockdm":{"name":"Bizarro","link":'http://content.comicskingdom.net/Bizarro/',"start":"20100209","dbfile":dbdir + "comicdb.bizarro.csv"}, - "blondieckdm":{"name":"Blondie","link":'http://content.comicskingdom.net/Blondie/',"start":"20100209","dbfile":dbdir + "comicdb.blondie.csv"}, - "edisonckdm":{"name":"Edison Lee","link":'http://content.comicskingdom.net/Edison/',"start":"20100209","dbfile":dbdir + "comicdb.edison.csv"}, - "bucklesckdm":{"name":"Buckles","link":'http://content.comicskingdom.net/Buckles/',"start":"20100209","dbfile":dbdir + "comicdb.buckles.csv"}, - "crankshaftckdm":{"name":"Crankshaft","link":'http://content.comicskingdom.net/Crankshaft/',"start":"20100209","dbfile":dbdir + "comicdb.crankshaft.csv"}, - "crockckdm":{"name":"Crock","link":'http://content.comicskingdom.net/Crock/',"start":"20100209","dbfile":dbdir + "comicdb.crock.csv"}, - "curtisckdm":{"name":"Curtis","link":'http://content.comicskingdom.net/Curtis/',"start":"20100209","dbfile":dbdir + "comicdb.curtis.csv"}, - "deflockedckdm":{"name":"DeFlocked","link":'http://content.comicskingdom.net/Deflocked/',"start":"20100209","dbfile":dbdir + "comicdb.deflocked.csv"}, - "dennis_the_menaceckdm":{"name":"Dennis The Menace","link":'http://content.comicskingdom.net/Dennis_The_Menace/',"start":"20100209","dbfile":dbdir + "comicdb.dennisthemenace.csv"}, - "dustinckdm":{"name":"Dustin","link":'http://content.comicskingdom.net/Dustin/',"start":"20100209","dbfile":dbdir + "comicdb.dustin.csv"}, - "edge_cityckdm":{"name":"Edge City","link":'http://content.comicskingdom.net/Edge_City/',"start":"20100209","dbfile":dbdir + "comicdb.edgecity.csv"}, - "family_circusckdm":{"name":"Family Circus","link":'http://content.comicskingdom.net/Family_Circus/',"start":"20100209","dbfile":dbdir + "comicdb.familycircus.csv"}, - "flashckdm":{"name":"Flash Gordon","link":'http://content.comicskingdom.net/Flash/',"start":"20100209","dbfile":dbdir + "comicdb.flash.csv"}, - "funky_winkerbeanckdm":{"name":"Funky Winkerbean","link":'http://content.comicskingdom.net/Funky_Winkerbean/',"start":"20100209","dbfile":dbdir + "comicdb.funkywinkerbean.csv"}, - "grin_and_bear_itckdm":{"name":"Grin and Bear It","link":'http://content.comicskingdom.net/Grin_and_Bear_It/',"start":"20100209","dbfile":dbdir + "comicdb.frinandbearit.csv"}, - "hagar_the_horribleckdm":{"name":"Hagar The Horrible","link":'http://content.comicskingdom.net/Hagar_The_Horrible/',"start":"20100209","dbfile":dbdir + "comicdb.hagarthehorrible.csv"}, - "hazelckdm":{"name":"Hazel","link":'http://content.comicskingdom.net/Hazel/',"start":"20100209","dbfile":dbdir + "comicdb.hazel.csv"}, - "heavensckdm":{"name":"Heaven's Love Thrift Shop","link":'http://content.comicskingdom.net/Heavens/',"start":"20100209","dbfile":dbdir + "comicdb.heavens.csv"}, - "henryckdm":{"name":"Henry","link":'http://content.comicskingdom.net/Henry/',"start":"20100209","dbfile":dbdir + "comicdb.henry.csv"}, - "hi_and_loisckdm":{"name":"Hi and Lois","link":'http://content.comicskingdom.net/Hi_and_Lois/',"start":"20100209","dbfile":dbdir + "comicdb.hiandlois.csv"}, - "judge_parkerckdm":{"name":"Judge Parker","link":'http://content.comicskingdom.net/Judge_Parker/',"start":"20100209","dbfile":dbdir + "comicdb.judgeparker.csv"}, - "katzenjammer_kidsckdm":{"name":"Katzenjammer Kids","link":'http://content.comicskingdom.net/Katzenjammer_Kids/',"start":"20100209","dbfile":dbdir + "comicdb.katzenjammerkids.csv"}, - "lockhornsckdm":{"name":"Lockhorns","link":'http://content.comicskingdom.net/Lockhorns/',"start":"20100209","dbfile":dbdir + "comicdb.lockhorns.csv"}, - "mallard_fillmoreckdm":{"name":"Mallard Fillmore","link":'http://content.comicskingdom.net/Mallard_Fillmore/',"start":"20100209","dbfile":dbdir + "comicdb.mallardfillmore.csv"}, - "mandrakeckdm":{"name":"Mandrake","link":'http://content.comicskingdom.net/Mandrake/',"start":"20100209","dbfile":dbdir + "comicdb.mandrake.csv"}, - "mark_trailckdm":{"name":"Mark Trail","link":'http://content.comicskingdom.net/Mark_Trail/',"start":"20100209","dbfile":dbdir + "comicdb.marktrail.csv"}, - "marvinckdm":{"name":"Marvin","link":'http://content.comicskingdom.net/Marvin/',"start":"20100209","dbfile":dbdir + "comicdb.marvin.csv"}, - "mary_worthckdm":{"name":"Mary Worth","link":'http://content.comicskingdom.net/Mary_Worth/',"start":"20100209","dbfile":dbdir + "comicdb.maryworth.csv"}, - "mooseckdm":{"name":"Moose and Molly","link":'http://content.comicskingdom.net/Moose/',"start":"20100209","dbfile":dbdir + "comicdb.moose.csv"}, - "mgooseckdm":{"name":"Mother Goose and Grimm","link":'http://content.comicskingdom.net/Mgoose/',"start":"20100209","dbfile":dbdir + "comicdb.mgoose.csv"}, - "muttsckdm":{"name":"Mutts","link":'http://content.comicskingdom.net/Mutts/',"start":"20100209","dbfile":dbdir + "comicdb.mutts.csv"}, - "my_cageckdm":{"name":"My Cage","link":'http://content.comicskingdom.net/My_Cage/',"start":"20100209","dbfile":dbdir + "comicdb.mycage.csv"}, - "ollieckdm":{"name":"Ollie and Quentin","link":'http://content.comicskingdom.net/Ollie/',"start":"20100209","dbfile":dbdir + "comicdb.ollie.csv"}, - "on_the_fast_trackckdm":{"name":"On The Fastrack","link":'http://content.comicskingdom.net/Fast_Track/',"start":"20100209","dbfile":dbdir + "comicdb.fastrack.csv"}, - "pajamackdm":{"name":"Pajama Diaries","link":'http://content.comicskingdom.net/Pajama/',"start":"20100209","dbfile":dbdir + "comicdb.pajama.csv"}, - "pardon_my_planetckdm":{"name":"Pardon My Planet","link":'http://content.comicskingdom.net/Pardon_My_Planet/',"start":"20100209","dbfile":dbdir + "comicdb.pardonmyplanet.csv"}, - "phantomckdm":{"name":"The Phantom","link":'http://content.comicskingdom.net/Phantom/',"start":"20100209","dbfile":dbdir + "comicdb.phantom.csv"}, - "piranhackdm":{"name":"the Piranha Club","link":'http://content.comicskingdom.net/Piranha/',"start":"20100209","dbfile":dbdir + "comicdb.piranha.csv"}, - "popeyeckdm":{"name":"Popeye","link":'http://content.comicskingdom.net/Popeye/',"start":"20100209","dbfile":dbdir + "comicdb.popeye.csv"}, - "prince_valiantckdm":{"name":"Prince Valiant","link":'http://content.comicskingdom.net/Prince_Valiant/',"start":"20100209","dbfile":dbdir + "comicdb.prince_valiant.csv"}, - "prosnconsckdm":{"name":"Pros and Cons","link":'http://content.comicskingdom.net/Lawyer/',"start":"20100209","dbfile":dbdir + "comicdb.prosncons.csv"}, - "retailckdm":{"name":"Retail","link":'http://content.comicskingdom.net/Retail/',"start":"20100209","dbfile":dbdir + "comicdb.retail.csv"}, - "rex_morganckdm":{"name":"Rex Morgan","link":'http://content.comicskingdom.net/Rex_Morgan/',"start":"20100209","dbfile":dbdir + "comicdb.rexmorgan.csv"}, - "rhymes_with_orangeckdm":{"name":"Rhymes with Orange","link":'http://content.comicskingdom.net/Rhymes_with_Orange/',"start":"20100209","dbfile":dbdir + "comicdb.rhymeswithorange.csv"}, - "safe_havensckdm":{"name":"Safe Havens","link":'http://content.comicskingdom.net/Safe_Havens/',"start":"20100209","dbfile":dbdir + "comicdb.safehavens.csv"}, - "sallyforthckdm":{"name":"Sally Forth","link":'http://content.comicskingdom.net/Sally_Forth/',"start":"20100209","dbfile":dbdir + "comicdb.sallyforth.csv"}, - "samckdm":{"name":"Sam and Silo","link":'http://content.comicskingdom.net/Sam/',"start":"20100209","dbfile":dbdir + "comicdb.sam.csv"}, - "shermans_lagoonckdm":{"name":"Sherman's Lagoon","link":'http://content.comicskingdom.net/Shermans_Lagoon/',"start":"20100209","dbfile":dbdir + "comicdb.shermanslagoon.csv"}, - "shoeckdm":{"name":"Shoe","link":'http://content.comicskingdom.net/Shoe/',"start":"20100209","dbfile":dbdir + "comicdb.shoe.csv"}, - "six_chixckdm":{"name":"Six Chix","link":'http://content.comicskingdom.net/6Chix/',"start":"20100209","dbfile":dbdir + "comicdb.6chix.csv"}, - "slylockckdm":{"name":"Slylock Fox","link":'http://content.comicskingdom.net/Slylock/',"start":"20100209","dbfile":dbdir + "comicdb.slylock.csv"}, - "tigerckdm":{"name":"Tiger","link":'http://content.comicskingdom.net/Tiger/',"start":"20100209","dbfile":dbdir + "comicdb.tiger.csv"}, - "tinas_grooveckdm":{"name":"Tina's Groove","link":'http://content.comicskingdom.net/Tinas_Groove/',"start":"20100209","dbfile":dbdir + "comicdb.tinasgroove.csv"}, - "toddckdm":{"name":"Todd the Dinosaur","link":'http://content.comicskingdom.net/Todd/',"start":"20100209","dbfile":dbdir + "comicdb.todd.csv"}, - "zippy_the_pinheadckdm":{"name":"Zippy the Pinhead","link":'http://content.comicskingdom.net/Zippy_the_Pinhead/',"start":"20100209","dbfile":dbdir + "comicdb.zippythepinhead.csv"}, - "zitsckdm":{"name":"Zits","link":'http://content.comicskingdom.net/Zits/',"start":"20100209","dbfile":dbdir + "comicdb.zits.csv"}, - - - - } -defaults = {'width':480,'height':230} -#defaults = {'width':480,'height':240} -sizefile = "/home/user/.comic-widget/size.cfg" -previous = False -next = False - - -# handling of the comics -class ComicDb(): - def __init__(self, comic): - 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. - dbf = self.get_dbfile() - dbr = csv.DictReader(dbf) - self.db = [] - for row in dbr: - self.db.insert(0,row) - dbf.close() - if len(self.db) == 0: - self.refresh() - self.currentcomic = 0 - - - - def get_dbfile(self): - #if db file exist, read it - print "fetching " + self.dbfile - if os.path.isfile(self.dbfile) == True: - print "found " + self.dbfile - dbf = open(self.dbfile, 'r') - return dbf - # if not, copy it. - else: - print "file " + self.dbfile + " not found" - if not os.path.exists(dbdir): - print "path not found: " + dbdir - try: - os.makedirs(dbdir) - except: - print "comic db creation failed on mkdir" - exit() - try: - shutil.copyfile(basedbdir + "comicdb." + self.comic + ".csv", dbdir + "comicdb." + self.comic + ".csv") - except: - print "comic db creation failed on copy" - print "creating new..." - dbf = open(self.dbfile, 'w') - dbf.write('comic,id,link,url,filename,title\n') - dbf.close() - - if os.path.isfile(self.dbfile) == True: - dbf = open(self.dbfile, 'r') - return dbf - else: - print "comic db creation failed after copy" - - - def get_comic(self): - # print str(self.currentcomic) - if self.currentcomic < 0: - self.currentcomic = 0 - if len(self.db) > 0: - fetchid = self.db[self.currentcomic]['id'] - else: - fetchid = comics[self.comic]['start'] - self.fetch_newer(self.comic, fetchid) - self.refresh() - if len(self.db) < (self.currentcomic + 1): - self.currentcomic = len(self.db) - 1 - if len(self.db) > 0: - fetchid = self.db[self.currentcomic]['id'] - else: - print "Empty db" - fetchid = comics[self.comic]['start'] - self.fetch_earlier(self.comic, fetchid) - 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" - if not os.path.exists(comiccache + self.comic + "/"): - print "create dir " + comiccache + self.comic + "/" - try: - os.makedirs(comiccache + self.comic + "/") - print "created dir" - except: - print "comic db creation failed on mkdir" - try: - f = open(filename, "wb") - print "writing to " + filename - req = urllib2.Request(dbrow['url']) - req.add_header('Referer', dbrow['link']) - tmpimg = urllib2.urlopen(req) - f.write(tmpimg.read()) - tmpimg = None - f.close() - -# urllib.urlretrieve(dbrow['url'], filename) - except: - if os.path.isfile(filename): - os.remove(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.currentcomic = -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() - if len(self.db) == 0: - self.fetch_earlier(self.comic, self.start) - dbf = open(self.dbfile, 'r') - dbr = csv.DictReader(dbf) - self.db = [] - for row in dbr: - self.db.insert(0,row) - dbf.close() - - -# fetch earlier - def fetch_earlier(self, comic, earliest): - print "fetch before, " + comic + " earliest" - if comic == "cyanide" or comic == "wulff" or comic == "babyblues" or comic[-9:] == "comicscom": - print "getting get_prev_id..." - comicid = self.get_prev_id(comic,earliest) - if not comicid: - print "already at first comic" - return - print "got " + comicid + " as the one before current..." - elif len(str(earliest)) == 10: - # date id. - dt = string.split(earliest, "-") - d = datetime.date(int(dt[0]),int(dt[1]),int(dt[2])) - earlier = d - datetime.timedelta( 1 ) - comicid = earlier.isoformat() - elif comic[-4:] == 'ckdm': - # comics kingdom. Easiest...? - d = datetime.date(int(earliest[:4]),int(earliest[4:6]),int(earliest[6:8])) - earlier = d - datetime.timedelta( 1 ) - comicid = str(earlier.strftime("%Y%m%d")) - - - else: - comicid = int(earliest) - 1 - - irow = self.get_irow(comic, comicid) - if irow and irow[0] == "skip": - print "problem with this one, fetching " + str(irow[2]) + " instead." - irow = self.get_irow(comic, irow[2]) - - if irow and len(irow) > 3: - print "got irow: " - print irow - print "\ninserting...\n" - self.insert_row_first([irow[0],irow[1],irow[2],irow[3],irow[4],irow[5]]) - else: - print "No comic found at " + comicid - - - - - - def fetch_newer(self, comic, newest): - if comic == "cyanide" or comic == "wulff" or comic == "babyblues" or comic[-9:] == "comicscom": - comicid = self.get_next_id(comic,newest) - if not comicid: - print "already at last comic" - return - elif len(newest) == 10: - # date id. - dt = string.split(newest, "-") - d = datetime.date(int(dt[0]),int(dt[1]),int(dt[2])) - newest = d + datetime.timedelta( 1 ) - comicid = newest.isoformat() - elif comic[-4:] == 'ckdm': - # comics kingdom. Easiest...? - d = datetime.date(int(newest[:4]),int(newest[4:6]),int(newest[6:8])) - earlier = d + datetime.timedelta( 1 ) - comicid = str(earlier.strftime("%Y%m%d")) - else: - comicid = int(newest) + 1 - - irow = self.get_irow(comic, comicid) - if irow and irow[0] == "skip": - print "problem with this one, fetching " + str(irow[1]) + " instead." - irow = self.get_irow(comic, irow[1]) - - if irow and len(irow) > 3: - print "got irow: " - print irow - print "\ninserting...\n" - self.insert_row([irow[0],irow[1],irow[2],irow[3],irow[4],irow[5]]) - else: - print "No comic found at " + str(comicid) - - - - - def fetch_latest_std(self, comic, latest): - print "fetching new after " + str(comic) + " " + str(latest) - next = False - dateid = False - if comic == 'cyanide': - next = self.get_next_id(comic, latest) - if not next: - return - else: - comicid = next - else: - if len(str(latest)) == 10: - # date id. - dateid = True - dt = string.split(latest, "-") - d = datetime.date(int(dt[0]),int(dt[1]),int(dt[2])) - newer = d + datetime.timedelta( 1 ) - comicid = newer.isoformat() - else: - comicid = int(latest) + 1 - - if len(self.db) > 0: - lasturl = self.db[0]['url'] - else: - lasturl = "http" - while True: - irow = self.get_irow(comic, comicid) - if irow: - print "got irow: " + str(irow) - if str(irow[0]) == 'skip': - print "skipping this one..." - next = int(irow[1]) - else: - if irow[3] == lasturl: - print "Looping the same, break break break!" - break - lasturl = irow[3] - print "inserting..." - self.insert_row([irow[0],irow[1],irow[2],irow[3],irow[4],irow[5]]) - if len(irow) > 6: - next = irow[6] - if not next: - break - if dateid: - dt = string.split(comicid, "-") - d = datetime.date(int(dt[0]),int(dt[1]),int(dt[2])) - newer = d + datetime.timedelta( 1 ) - comicid = newer.isoformat() - elif next: - comicid = next - else: - comicid += 1 - else: - break - - - - - def get_next_id(self, comic, number): - if comic == 'babyblues': - link = "http://www.babyblues.com/archive/index.php?formname=getstrip&GoToDay=" + str(number) - print "link: " + link - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - return False - else: - print "checking next Babyblues date.." - s = f.read() - f.close() - # title: - splt = string.split(s, 'nextStripLink', 1) - if len(splt) < 2: - print "no 'prev' found" - return False - else: - next = splt[1][48:58] - print "got next: " + next - - return next - - if comic == 'cyanide': - link = "http://www.explosm.net/comics/" + str(number) + "/" - print "link: " + link - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - return False - else: - # print "Cyanide & Happiness is unreliable, so we need to track next and prev" - s = f.read() - f.close() - # title: - splt = string.split(s, 'Previous | Next >', 1) - if len(splt) < 2: - print "no 'next' found" - return False - else: - print "got next: " + splt[0] - return splt[0] - if comic == 'wulff': - link = "http://wulffmorgenthaler.com/default.aspx?id=" + number - print "link: " + link - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - return False - else: - s = f.read() - f.close() - # title: - splt = string.split(s, ' | < Previous', 1) - if len(splt) < 2 or len(splt[0]) > 5: - print "no 'next' found" - return False - else: - print "got previous: " + splt[0] - return splt[0] - elif comic == 'wulff': - link = "http://wulffmorgenthaler.com/default.aspx?id=" + number - print "link: " + link - try: - f = urllib2.urlopen(link) - hcode = f.code - except: - hcode = 404 - print "got hcode = " + str(hcode) + "\n" - if (hcode != 200): - return False - else: - s = f.read() - f.close() - # title: - splt = string.split(s, ' today: - print "Fetching the future! Break break break!" - return False - else: - return False - - print "link: " + link - 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() - # This should be done with regex but... - splt = string.split(s, 'png" title="', 1) - splt = string.split(splt[1], '" alt="', 1) - title = splt[0] - splt = string.split(splt[1], "

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

", 1) - url = 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] - - elif comic == 'dilbert': - s = f.read() - f.close() - splt = string.split(s, 'input type="hidden" name="PrintPath" value="', 1) - splt = string.split(splt[1], '" />', 1) - url = "http://dilbert.com" + splt[0] - if len(url) < 50: - print "Fake 404! Break break break!" - return False - title = "" - - elif comic == 'phd': - s = f.read() - f.close() - # title: - splt = string.split(s, 'PHD Comics: ', 1) - splt = string.split(splt[1], '', 1) - title = splt[0]; - splt = string.split(splt[1], '', 1) - url = splt[0] - if len(url) < 49: - print "Fake 404! Break break break!" - return False - - elif comic == 'cyanide': - s = f.read() - f.close() - # title: - splt = string.split(s, ' First
| < ', 1) - prev = splt[0]; - print "got prev: " + prev - splt = string.split(s, 'Previous | Next >', 1) - if len(splt[0]) > 10: - next = False - else: - next = splt[0] - print "got next: " + next - - splt = string.split(s, '', 1) - if len(splt) < 2: - print "no comic?" - return False - splt = string.split(splt[1], ' by ', 1) - url = "http://www.explosm" + splt[0] - splt2 = string.rsplit(url, "/", 1) - filename = splt2[1] - irow = [comic,number,link,url,filename,title,next,prev] - return irow - - - elif comic == 'babyblues': - # babyblues is type .gif - s = f.read() - f.close() - splt = string.split(s, 'http://est.rbma.com/content/Baby_Blues?date=', 1) - flnm = splt[1][:8] - # check filename... - datesplt = string.split(number, "/") - flncheck = datesplt[2] + datesplt[0] + datesplt[1] - if not flnm == flncheck: - print "incorrect filename, end of line. Break break break!" - return False - url = 'http://est.rbma.com/content/Baby_Blues?date=' + flnm - title = number + " (2 weeks delay)" - filename = flnm + ".gif" - irow = [comic,number,link,url,filename,title] - return irow - - - elif comic == 'wulff': - # wulf is type .gif - s = f.read() - f.close() - splt = string.split(s, ' 22: - titl = titl[:19] + "..." - self.label.set_markup(self.get_markup()) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - - elif func == 'prev': - 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) - titl = str(self.db.db[self.db.currentcomic]['title']) - if len(titl) > 22: - titl = titl[:19] + "..." - self.label.set_markup(self.get_markup()) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - - elif func == 'switch': - self.active_comics = self.get_active_comics() - print "closing log" - #sys.stdout.close() - #sys.stdout = sys.__stdout__ - #sys.stderr.close() - #sys.stderr = sys.__stderr__ - print "active comics: " + str(self.active_comics) - self.keypointer = (self.keypointer + 1) % len(self.active_comics) - self.imgvpos = 0 - self.db = [] - print "switching to " + self.active_comics[self.keypointer] - self.comicname = comics[self.active_comics[self.keypointer]]['name'] - self.db = ComicDb(self.active_comics[self.keypointer]) - self.e_open.remove(self.comic_image) - self.comic_image = self.get_resized_pixmap(self.db.get_comic(), self.imgvpos) - self.e_goweb.remove(self.label) - titl = str(self.db.db[self.db.currentcomic]['title']) - if len(titl) > 22: - titl = titl[:19] + "..." - self.label.set_markup(self.get_markup()) - self.e_goweb.add(self.label) - self.e_goweb.show_all() - self.e_open.add(self.comic_image) - self.e_open.show_all() - - else: - return False - self.draw(widget, "0") - - # this one only switches to pressed button image - def button_press(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.draw(widget, "1") - - # this one cancels a button press when pointer is moved out from it after press. - def button_out(self, widget, event): - if not event.type == gtk.gdk.BUTTON_PRESS: - return False - self.draw(widget, "0") - - # no fancy cairo stuff here. simply launches url in browser. - def view_comic(self, widget, event): - if not event.type == gtk.gdk.BUTTON_RELEASE: - return False - link = self.db.get_link() - self.osso_rpc.rpc_run_with_defaults("osso_browser", "open_new_window", (link,)) - - - - # this function modifies the image to fit the widget and then returns it. - - def get_resized_pixmap(self, filename, vpos): - print "vpos: " + str(vpos) - - width = int(self.sizes['width']) - height = int(self.sizes['height']) - picwidth = width - 2 - maxheight = height - 48 - - pixbuf = gtk.gdk.pixbuf_new_from_file(filename) - parent_buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, pixbuf.get_has_alpha(), 8, width, maxheight) - parent_buf.fill(0xffffffff) - retimg = gtk.Image() - # get correct width/height - new_height = 1 - new_width = picwidth - new_height = int((float(picwidth) / pixbuf.get_width()) * pixbuf.get_height()) - scaled_buf = pixbuf.scale_simple(new_width,new_height,gtk.gdk.INTERP_BILINEAR) - print "scaled height: " + str(scaled_buf.get_height()) - if scaled_buf.get_height() > maxheight: - if scaled_buf.get_height() - (vpos + maxheight) < 0: - vpos = scaled_buf.get_height() - maxheight - scaled_buf.copy_area(0,vpos,picwidth,maxheight,parent_buf,1,0) - # parent_buf.composite(scaled_buf, 0, 0, 478, maxheight, 0, 0, 478, maxheight, gtk.gdk.INTERP_BILINEAR, 0) - self.imgvpos = vpos - else: - tmpy = maxheight - scaled_buf.get_height() - if tmpy > 0: - tmpy = tmpy / 2 - - scaled_buf.copy_area(0,0,picwidth,scaled_buf.get_height(),parent_buf,1,tmpy) - self.imgvpos = 0 -# test = parent_buf.render_pixmap_and_mask(0) -# parent_buf.add_alpha(True,chr(255),chr(255),chr(255)) - retimg.set_from_pixbuf(parent_buf) - print retimg.get_pixel_size() - print "vpos after fixing image: " + str(self.imgvpos) - return retimg - - def screen_changed(self, widget, old_screen=None): - global supports_alpha - - # To check if the display supports alpha channels, get the colormap - screen = self.get_screen() - colormap = screen.get_rgba_colormap() - if colormap == None: - print 'Your screen does not support alpha channels!' - colormap = screen.get_rgb_colormap() - supports_alpha = False - else: - # print 'Your screen supports alpha channels!' - supports_alpha = True - - # Now we have a colormap appropriate for the screen, use it - self.set_colormap(colormap) - - return False - - - def get_active_comics(self): - print "get list" - - if os.path.isfile(activecomics) == True: - print "found " + activecomics - dbf = open(activecomics, 'r') - dbr = csv.reader(dbf) - try: - active = dbr.next() - except: - active = [] - dbf.close() - return active - # if not, copy it. - else: - print "file " + activecomics + " not found" - if not os.path.exists(dbdir): - print "path not found: " + dbdir - try: - os.makedirs(dbdir) - except: - print "settings dir creation failed. Exiting." - exit() - try: -# dbf = file(activecomics, 'w') -# dbf.close() - dbf = open(activecomics, 'w') - except: - print "error storing settings" - exit() - dbw = csv.writer(dbf) - dbw.writerow(defaultcomics) - dbf.close() - ret = defaultcomics - return ret - - - def get_markup(self): - if len(self.comicname + " " + str(self.db.db[self.db.currentcomic]['id'])) < 20: - return ' ' + self.comicname + ' ' + str(self.db.db[self.db.currentcomic]['id']) + '\n ' + str(self.db.db[self.db.currentcomic]['title']) + '' - else: - return ' ' + self.comicname + '' + '\n ' + str(self.db.db[self.db.currentcomic]['title']) + '' - - - #check if settings file exists - - #if not, write defaults - -# ************************* OPTION DIALOGS ******************************** - - def show_options(self, widget): - print "loading options dialog" - dialog = gtk.Dialog("Comic Widget", None, gtk.DIALOG_DESTROY_WITH_PARENT) - - about_button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) - about_button.set_text("About", "See Author, Copyright and License information") - about_button.set_alignment(0,0,0,0) - about_button.connect("clicked", self.show_about) - - comics_button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) - comics_button.set_text("Comics", "Choose which comics to view") - comics_button.set_alignment(0,0,0,0) - comics_button.connect("clicked", self.show_comics) - - # size_button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) - # size_button.set_text("Change size", "Change the size of the widget") - # size_button.set_alignment(0,0,0,0) - # size_button.connect("clicked", self.show_size) - - print "adding buttons to dialog, starting with comics" - dialog.vbox.pack_start(comics_button, True, True, 0) - print "adding about button" - dialog.vbox.pack_start(about_button, True, True, 0) - # dialog.vbox.pack_start(size_button, True, True, 0) - print "show!" - dialog.show_all() - dialog.run() - dialog.destroy() - - def show_about(self, widget): - print "in about dialog" - dialog = gtk.AboutDialog() - dialog.set_title("About") - dialog.set_name("Comic widget") - dialog.set_version(APP_VERSION) - dialog.set_copyright("Copyright 2010 Marcus Wikstrom") - dialog.set_authors(["Marcus Wikstrom \nLogo by Martin Wikstrom\n\nSpecial thanks to all the great python developers on t.m.o who share their code, and the helpful wizards on #maemo."]) - dialog.set_logo(gtk.gdk.pixbuf_new_from_file("/opt/comic-widget/images/icon2-64x64.png")) - dialog.set_comments("Silly rabbit, tricks are for kids.") - dialog.set_license("""This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License. .""") - dialog.set_wrap_license(True) - dialog.show_all() - dialog.run() - dialog.destroy() - - def show_comics(self, widget, data = None): - print "in comics dialog! yay!" - dialog = gtk.Dialog("Choose comics", None, gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_NO_SEPARATOR) - comiclist = comics.keys() - comiclist.sort() - buttonlist = {} - self.connlist = {} - self.liststore = gtk.ListStore(str,str,bool) - for comicid in comiclist: - active = False - for acomic in self.active_comics: - if acomic == comicid: - active = True - break - if active: - self.liststore.append(["* " + comics[comicid]['name'],comicid, active]) - else: - self.liststore.append([" " + comics[comicid]['name'],comicid, active]) - self.treeview = hildon.GtkTreeView(gtk.HILDON_UI_MODE_EDIT) - self.treeview.set_model(self.liststore) - self.treeview.set_reorderable(True) - tvcolumn = gtk.TreeViewColumn('Column 0') - self.treeview.append_column(tvcolumn) - cell = gtk.CellRendererText() - tvcolumn.pack_start(cell, True) - tvcolumn.add_attribute(cell, 'text', 0) - - ts = hildon.PannableArea() - - ts.set_size_request(-1, 280) - ts.add(self.treeview) - selection = self.treeview.get_selection() - - dialog.vbox.pack_start(ts,True,True,0) - dialog.show_all() - selection.connect("changed", self.pick_comic, comiclist) - dialog.run() - dialog.destroy() - - def pick_comic(self, widget, data): - selected = widget.get_selected() - if selected == None: - return False - - print selected[0].get_value(selected[1],0) + ", " + selected[0].get_value(selected[1],1) + ", " + str(selected[0].get_value(selected[1],2)) - if selected[0].get_value(selected[1],2): - self.remove_comic(selected[0].get_value(selected[1],1)) - splt = selected[0].get_value(selected[1],0)[1:] - selected[0].set_value(selected[1],0," " + splt) - selected[0].set_value(selected[1],2,False) - else: - self.add_comic(selected[0].get_value(selected[1],1)) - splt = selected[0].get_value(selected[1],0)[1:] - selected[0].set_value(selected[1],0,"*" + splt) - selected[0].set_value(selected[1],2,True) - - - def add_comic(self, comicid): - if os.path.isfile(activecomics) == True: - print "added " + comicid + " to " + str(self.active_comics) - try: - found = self.active_comics.index(comicid) - except: - self.active_comics.append(comicid) - dbf = open(activecomics, 'w') - dbw = csv.writer(dbf) - dbw.writerow(self.active_comics) - dbf.close() - - def remove_comic(self, comicid): - if os.path.isfile(activecomics) == True: - print "removing " + comicid + " from " + str(self.active_comics) - try: - del self.active_comics[self.active_comics.index(comicid)] - except: - pass - dbf = open(activecomics, 'w') - dbw = csv.writer(dbf) - dbw.writerow(self.active_comics) - dbf.close() - - - def get_size_settings(self): - # defaults = {'width':480,'height':230} - # options: w 798 700 600 500 480 400 - # options: h 420 360 310 270 240 200 - print "checking to see if config file is available" - if os.path.isfile(sizefile) == True: - print "found " + sizefile - dbf = open(sizefile, 'r') - dbr = csv.reader(dbf) - try: - cfg = dbr.next() - except: - dbf.close() - print "empty config file" - return defaults - dbf.close() - - sizes = {'width':int(cfg[0]),'height':int(cfg[1])} - if sizes['width'] > 798: - sizes['width'] = 798 - if sizes['width'] < 400: - sizes['width'] = 400 - if sizes['height'] > 420: - sizes['height'] = 420 - if sizes['height'] < 200: - sizes['height'] = 200 - - return sizes - - - # if not, copy it. - else: - print "no config file" - return defaults - -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() diff --git a/debian/comic-widget/usr/share/applications/hildon-home/comicwidget.desktop b/debian/comic-widget/usr/share/applications/hildon-home/comicwidget.desktop deleted file mode 100644 index 24c77eb..0000000 --- a/debian/comic-widget/usr/share/applications/hildon-home/comicwidget.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Name=Comic Widget - -Comment=Simple Comic widget -Type=python -X-Path=comicwidget.py - diff --git a/debian/comic-widget/usr/share/doc/comic-widget/changelog.Debian.gz b/debian/comic-widget/usr/share/doc/comic-widget/changelog.Debian.gz deleted file mode 100644 index be2bd44..0000000 Binary files a/debian/comic-widget/usr/share/doc/comic-widget/changelog.Debian.gz and /dev/null differ diff --git a/debian/comic-widget/usr/share/doc/comic-widget/changelog.gz b/debian/comic-widget/usr/share/doc/comic-widget/changelog.gz deleted file mode 100644 index 45003b7..0000000 Binary files a/debian/comic-widget/usr/share/doc/comic-widget/changelog.gz and /dev/null differ diff --git a/debian/comic-widget/usr/share/doc/comic-widget/copyright b/debian/comic-widget/usr/share/doc/comic-widget/copyright deleted file mode 100644 index f274add..0000000 --- a/debian/comic-widget/usr/share/doc/comic-widget/copyright +++ /dev/null @@ -1,35 +0,0 @@ -This package was py2debianized(0.5.3) by Marcus Wikstrom on -Tue, 09 Feb 2010 14:34:24 +0000. - -It was downloaded from - -Upstream Author: Marcus Wikstrom - -Copyright: 2010 by Marcus Wikstrom - -License: - - - This package 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 package 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 package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL'. - - -The Debian packaging is (C) 2010, Marcus Wikstrom and -is licensed under the GPL, see above. - -# Please also look if there are files or directories which have a -# different copyright/license attached and list them here. diff --git a/debian/files b/debian/files deleted file mode 100644 index ec9bdf4..0000000 --- a/debian/files +++ /dev/null @@ -1 +0,0 @@ -comic-widget_0.4.2-1_all.deb user/desktop extra