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 get_uri(self):
return self.bbs_type.get_uri_base()
+ def show(self):
+ self.window.deiconify()
+
+ def hide(self):
+ self.window.iconify()
+
def open_thread(self):
treeselection = self.treeview.get_selection()
model, iter = treeselection.get_selected()
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)
- return [item_dict for item_dict in iterable]
+
+ # remove not in subject.txt and not cache.
+ iterable = itertools.ifilter(
+ lambda dic: dic["num"] > 0 or dic["lineCount"] > 0, 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):
dic["num"] = 0
+ dic["oldRes"] = dic["res"]
dic["res"] = 0
dic["average"] = 0
return dic
if model:
iterable = model.original_list
- # unmerge subject.txt
- iterable = itertools.ifilter(
- lambda dic: dic["lineCount"] > 0, iterable)
iterable = itertools.imap(lambda dic: dic.copy(), iterable)
iterable = itertools.imap(init_some, iterable)
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:
try:
states_dict = board_states.states_file_to_dict(self.bbs_type)
- self.treeview.get_model().sort(
- states_dict["sort_column"], True, states_dict["sort_reverse"])
+ try:
+ self.treeview.get_model().sort(
+ states_dict["sort_column"], True,
+ states_dict["sort_reverse"])
+ except:
+ pass
# set column order before set column width
treeviewcolumn = dict(