X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Freader.py;h=1a8aa05051bb53edc7761b3d82f59ee792e05808;hb=30053c2cfe18b77da52df38daebbc91b3a2b5240;hp=6f98beee3a9c5932f6c2d840aba7de0d992d141a;hpb=d9163efe24c7d8653fa1880612ab8e0864d5ae9d;p=automanga.git diff --git a/manga/reader.py b/manga/reader.py index 6f98bee..1a8aa05 100644 --- a/manga/reader.py +++ b/manga/reader.py @@ -23,23 +23,18 @@ class future(threading.Thread): try: val = self.value() except Exception as e: - with gtk.gdk.lock: - try: - self._exc = e - for cb in self._notlist: - cb() - self._notlist = [] - finally: - gtk.gdk.flush() + self._exc = e + gobject.idle_add(self._callcbs, True) else: - with gtk.gdk.lock: - try: - self._val = [val] - for cb in self._notlist: - cb() - self._notlist = [] - finally: - gtk.gdk.flush() + self._val = [val] + gobject.idle_add(self._callcbs, True) + + def _callcbs(self, final): + nls = [] + for cb in self._notlist: + if cb(): + nls.append(cb) + self._notlist = [] if final else nls # Caller must hold GDK lock def notify(self, cb): @@ -50,15 +45,7 @@ class future(threading.Thread): cb() def progcb(self): - with gtk.gdk.lock: - try: - nls = [] - for cb in self._notlist: - if cb(): - nls.append(cb) - self._notlist = nls - finally: - gtk.gdk.flush() + gobject.idle_add(self._callcbs, False) @property def val(self): @@ -100,7 +87,11 @@ class imgload(future): buf.extend(read) self.progcb() self.st = None - return gtk.gdk.pixbuf_new_from_stream(gio.memory_input_stream_new_from_data(str(buf))) + with gtk.gdk.lock: + try: + return gtk.gdk.pixbuf_new_from_stream(gio.memory_input_stream_new_from_data(str(buf))) + finally: + gtk.gdk.flush() @property def prog(self): @@ -145,6 +136,15 @@ class relpageget(future): self.cache[page] return page +class idpageget(future): + def __init__(self, base, idlist): + super(idpageget, self).__init__() + self.bnode = base + self.idlist = idlist + + def value(self): + return lib.cursor(self.bnode.byidlist(self.idlist)).cur + class pageget(future): def __init__(self, fnode): super(pageget, self).__init__() @@ -455,7 +455,7 @@ class sbox(gtk.ComboBox): self.rd.fetchpage(pageget(self.pnode[self.get_active()])) class reader(gtk.Window): - def __init__(self, manga): + def __init__(self, manga, profile=None): super(reader, self).__init__(gtk.WINDOW_TOPLEVEL) self.connect("delete_event", lambda wdg, ev, data=None: False) self.connect("destroy", lambda wdg, data=None: self.quit()) @@ -464,6 +464,7 @@ class reader(gtk.Window): self.pagefetch = procslot(self) self.imgfetch = procslot(self) self.preload = procslot(self) + self.profile = profile self.manga = manga self.page = None @@ -496,7 +497,10 @@ class reader(gtk.Window): self.add(vlay) vlay.show() - self.fetchpage(pageget(self.manga)) + if self.profile and "curpage" in self.profile: + self.fetchpage(idpageget(self.manga, self.profile["curpage"])) + else: + self.fetchpage(pageget(self.manga)) self.updtitle() def updpagelbl(self): @@ -536,6 +540,9 @@ class reader(gtk.Window): if self.point is not None: self.point = None if page is not None: + if self.profile: + self.profile.setprop("curpage", page.idlist()) + self.profile.saveprops() self.point = ccursor(page, self.cache) self.imgfetch.set(imgfetch(self.cache[page])) else: