X-Git-Url: http://git.sourceforge.jp/view?p=fukui-no-namari%2Ffukui-no-namari.git;a=blobdiff_plain;f=src%2FFukuiNoNamari%2Fthread_window.py;h=ad7e392d931a333480f839841ce2e19aaa8d1934;hp=4dbbc03bd22d65c06f148449822a0e7faac46204;hb=a9bd7a0e9431b1f3b12d354ac8ccacd70f1c0f56;hpb=5b0f5d01feab9598d8c3ae24515e197b24ee50f8 diff --git a/src/FukuiNoNamari/thread_window.py b/src/FukuiNoNamari/thread_window.py index 4dbbc03..ad7e392 100644 --- a/src/FukuiNoNamari/thread_window.py +++ b/src/FukuiNoNamari/thread_window.py @@ -32,13 +32,14 @@ import gconf import traceback import misc +from misc import FileWrap, ThreadInvoker import datfile import barehtmlparser import idxfile import session import board_window import uri_opener -from http_sub import HTTPRedirectHandler302 +from http_sub import HTTPRedirectHandler302, HTTPDebugHandler from BbsType import bbs_type_judge_uri from BbsType import bbs_type_exception import config @@ -72,42 +73,6 @@ def open_thread(uri, update=False): winwrap.jump_to_res(bbs_type.uri) -class ThreadInvoker(threading.Thread): - def __init__(self, on_end, *methods): - super(ThreadInvoker, self).__init__() - self.on_end = on_end - self.methods = methods - def run(self): - try: - for m in self.methods: - m() - finally: - self.on_end() - - -class FileWrap: - def __init__(self, path): - self._file = None - self._path = path - def __del__(self): - self.close() - def seek(self, size): - self.file().seek(size) - def write(self, data): - self.file().write(data) - def close(self): - if self._file: - self._file.close() - self._file = None - def file(self): - if not self._file: - basedir = os.path.dirname(self._path) - if not os.path.isdir(basedir): - os.makedirs(basedir) - self._file = file(self._path, "a+") - return self._file - - class WinWrap(winwrapbase.WinWrapBase): hovering_over_link = False hand_cursor = gtk.gdk.Cursor(gtk.gdk.HAND2) @@ -140,6 +105,7 @@ class WinWrap(winwrapbase.WinWrapBase): self.toolbar.unset_style() self.statusbar = self.widget_tree.get_widget("appbar") self.textview = self.widget_tree.get_widget("textview") + self.textview.drag_dest_unset() self.textbuffer = self.textview.get_buffer() self.enditer = self.textbuffer.get_end_iter() self.boldtag = self.textbuffer.create_tag(weight=pango.WEIGHT_BOLD) @@ -296,48 +262,53 @@ class WinWrap(winwrapbase.WinWrapBase): req.add_header("If-Modified-Since", lastmod) if etag: req.add_header("If-None-Match", etag) - print req.headers - - opener = urllib2.build_opener(HTTPRedirectHandler302) - res = opener.open(req) - headers = res.info() - print headers - - line = res.readline() - maybe_incomplete = False - while line: - if not line.endswith("\n"): - maybe_incomplete = True - print "does not end with \\n. maybe incomplete" - break - on_get_res(line) - line = res.readline() - - res.close() - if maybe_incomplete: - lastmod = None - etag = None + opener = urllib2.build_opener(HTTPRedirectHandler302, HTTPDebugHandler) + try: + res = opener.open(req) + except urllib2.HTTPError, e: + gobject.idle_add( + self.statusbar.set_status, "%d %s" % (e.code, e.msg)) else: - if "Last-Modified" in headers: - lastmod = headers["Last-Modified"] - if "ETag" in headers: - etag = headers["Etag"] - - if self.num > 0: - if not self.title: - title = datfile.get_title_from_dat( - self.bbs, self.board, self.thread) - if title: - self.title = title - gobject.idle_add(self.window.set_title, title) - # save idx - idx_dic = {"title": self.title, "lineCount": self.num, - "lastModified": lastmod, "etag": etag} - idxfile.save_idx(self.bbs, self.board, self.thread, idx_dic) - - gobject.idle_add(session.thread_idx_updated, - self.bbs_type.get_thread_uri(), idx_dic) + headers = res.info() + gobject.idle_add( + self.statusbar.set_status, "%d %s" % (res.code, res.msg)) + + line = res.readline() + maybe_incomplete = False + while line: + if not line.endswith("\n"): + maybe_incomplete = True + print "does not end with \\n. maybe incomplete" + break + on_get_res(line) + line = res.readline() + + res.close() + + if maybe_incomplete: + lastmod = None + etag = None + else: + if "Last-Modified" in headers: + lastmod = headers["Last-Modified"] + if "ETag" in headers: + etag = headers["Etag"] + + if self.num > 0: + if not self.title: + title = datfile.get_title_from_dat( + self.bbs, self.board, self.thread) + if title: + self.title = title + gobject.idle_add(self.window.set_title, title) + # save idx + idx_dic = {"title": self.title, "lineCount": self.num, + "lastModified": lastmod, "etag": etag} + idxfile.save_idx(self.bbs, self.board, self.thread, idx_dic) + + gobject.idle_add(session.thread_idx_updated, + self.bbs_type.get_thread_uri(), idx_dic) def update(self, widget=None):