import config
import session
import winwrapbase
-from misc import ThreadInvoker
import bookmark_list
import bookmark_window
import board_plugins
def __init__(self, uri):
+ self.lock_obj = False
+
self.bbs_type = bbs_type_judge_uri.get_type(uri)
board_data.BoardData.__init__(self, self.bbs_type)
"bonobodockitem_filterbar")
self.entry_filterbar = self.widget_tree.get_widget("entry_filterbar")
+ def lock(self):
+ if self.lock_obj:
+ print "locked, try later."
+ return False
+ else:
+ print "get lock"
+ self.lock_obj = True
+ return True
+
+ def un_lock(self):
+ self.lock_obj = False
+ print "unlock"
+
def set_status(self, text):
self.statusbar.set_status(text)
def load(self, update=False):
+ def on_end():
+ self.progress.set_fraction(0.0)
+ self.progress.hide()
+ self.un_lock()
+
def set_id(thread_id, item_dict):
item_dict["id"] = thread_id
return item_dict
- def conv_dictdict_to_listdict(dictdict):
+ def conv_dictdict_to_listdict(dictdict, listdict):
key_iter = dictdict.iterkeys()
value_iter = dictdict.itervalues()
iterable = itertools.imap(set_id, key_iter, value_iter)
iterable = itertools.ifilter(
lambda dic: dic["num"] > 0 or dic["lineCount"] > 0, iterable)
- return [item_dict for item_dict in iterable]
+ iterable = itertools.imap(listdict.append, iterable)
+ for i in iterable:
+ yield
+
+ self.update_datastore(listdict)
def load_local():
- datalist = self.load_idxfiles()
- self.merge_local_subjecttxt(datalist)
- new_list = conv_dictdict_to_listdict(datalist)
- gobject.idle_add(self.update_datastore, new_list)
+ datalist = {}
+ new_lst = []
+ iterable = self.load_idxfiles(datalist)
+ iterable = itertools.chain(iterable,
+ self.merge_local_subjecttxt(datalist))
+ iterable = itertools.chain(iterable,
+ conv_dictdict_to_listdict(datalist, new_lst))
+
+ misc.chain(lambda *args: None, on_end, iterable)
def get_remote(datalist):
- print "start get subject.txt"
- self.merge_remote_subjecttxt(datalist)
- new_list = conv_dictdict_to_listdict(datalist)
- gobject.idle_add(self.update_datastore, new_list)
- def on_end():
- def reset_progress():
- self.progress.set_fraction(0.0)
- self.progress.hide()
- gobject.idle_add(reset_progress)
+ def on_received(response):
+ new_lst = []
+ iterable = self.progress_response(response)
+ iterable = self.merge_remote_subjecttxt(datalist, iterable)
+ iterable = itertools.chain(iterable,
+ conv_dictdict_to_listdict(datalist, new_lst))
+ misc.chain(lambda *args: None, on_end, iterable)
+
+ print "start get subject.txt"
+ try:
+ self.get_subjecttxt(on_received)
+ except board_data.NothingToDoException:
+ on_end()
+ except:
+ on_end()
+ self.set_status(str(sys.exc_info()))
def deep_copy():
def init_some(dic):
new_dict = {}
return new_dict
+ if not self.lock():
+ return
+
sbj_path = misc.get_board_subjecttxt_path(self.bbs_type)
sbj_exists = os.path.exists(sbj_path)
if update or not sbj_exists:
new_dict = deep_copy()
- t = ThreadInvoker(on_end, lambda *x: get_remote(new_dict))
- t.start()
+ get_remote(new_dict)
else:
- t = ThreadInvoker(on_end, load_local)
- t.start()
+ load_local()
def save(self):
try: