Added initial support to SqliteDict package

This commit is contained in:
Manuel Cortez 2021-06-24 09:52:10 -05:00
parent 382acf7c8c
commit 60144a6b08
3 changed files with 57 additions and 55 deletions

View File

@ -178,7 +178,9 @@ class baseBufferController(baseBuffers.buffer):
val, cursor = val val, cursor = val
if type(cursor) == tuple: if type(cursor) == tuple:
cursor = cursor[1] cursor = cursor[1]
self.session.db["cursors"][self.name] = cursor cursors = self.session.db["cursors"]
cursors[self.name] = cursor
self.session.db["cursors"] = cursors
results = [i for i in val] results = [i for i in val]
val = results val = results
val.reverse() val.reverse()
@ -190,7 +192,6 @@ class baseBufferController(baseBuffers.buffer):
return return
number_of_items = self.session.order_buffer(self.name, val) number_of_items = self.session.order_buffer(self.name, val)
log.debug("Number of items retrieved: %d" % (number_of_items,)) log.debug("Number of items retrieved: %d" % (number_of_items,))
self.put_items_on_list(number_of_items) self.put_items_on_list(number_of_items)
if hasattr(self, "finished_timeline") and self.finished_timeline == False: if hasattr(self, "finished_timeline") and self.finished_timeline == False:
if "-timeline" in self.name: if "-timeline" in self.name:
@ -229,15 +230,17 @@ class baseBufferController(baseBuffers.buffer):
return return
if items == None: if items == None:
return return
items_db = self.session.db[self.name]
for i in items: for i in items:
if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i.id, self.session.db[self.name]) == None: if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i.id, self.session.db[self.name]) == None:
i = self.session.check_quoted_status(i) i = self.session.check_quoted_status(i)
i = self.session.check_long_tweet(i) i = self.session.check_long_tweet(i)
elements.append(i) elements.append(i)
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[self.name].insert(0, i) items_db.insert(0, i)
else: else:
self.session.db[self.name].append(i) items_db.append(i)
self.session.db[self.name] = items_db
selection = self.buffer.list.get_selected() selection = self.buffer.list.get_selected()
log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function)) log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function))
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
@ -286,10 +289,12 @@ class baseBufferController(baseBuffers.buffer):
def remove_tweet(self, id): def remove_tweet(self, id):
if type(self.session.db[self.name]) == dict: return if type(self.session.db[self.name]) == dict: return
for i in range(0, len(self.session.db[self.name])): items = self.session.db[self.name]
if self.session.db[self.name][i].id == id: for i in range(0, len(items)):
self.session.db[self.name].pop(i) if items[i].id == id:
items.pop(i)
self.remove_item(i) self.remove_item(i)
self.session.db[self.name] = items
def put_items_on_list(self, number_of_items): def put_items_on_list(self, number_of_items):
list_to_use = self.session.db[self.name] list_to_use = self.session.db[self.name]
@ -471,10 +476,12 @@ class baseBufferController(baseBuffers.buffer):
text = dm.message.get_text() text = dm.message.get_text()
val = self.session.api_call(call_name="send_direct_message", recipient_id=recipient_id, text=text) val = self.session.api_call(call_name="send_direct_message", recipient_id=recipient_id, text=text)
if val != None: if val != None:
sent_dms = self.session.db["sent_direct_messages"]
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db["sent_direct_messages"].append(val) sent_dms.append(val)
else: else:
self.session.db["sent_direct_messages"].insert(0, val) sent_dms.insert(0, val)
self.session.db["sent_direct_messages"] = sent_dms
pub.sendMessage("sent-dm", data=val, user=self.session.db["user_name"]) pub.sendMessage("sent-dm", data=val, user=self.session.db["user_name"])
if hasattr(dm.message, "destroy"): dm.message.destroy() if hasattr(dm.message, "destroy"): dm.message.destroy()
@ -588,16 +595,18 @@ class baseBufferController(baseBuffers.buffer):
if self.type == "events" or self.type == "people" or self.type == "empty" or self.type == "account": return if self.type == "events" or self.type == "people" or self.type == "empty" or self.type == "account": return
answer = commonMessageDialogs.delete_tweet_dialog(None) answer = commonMessageDialogs.delete_tweet_dialog(None)
if answer == widgetUtils.YES: if answer == widgetUtils.YES:
items = self.session.db[self.name]
try: try:
if self.name == "direct_messages" or self.name == "sent_direct_messages": if self.name == "direct_messages" or self.name == "sent_direct_messages":
self.session.twitter.destroy_direct_message(id=self.get_right_tweet().id) self.session.twitter.destroy_direct_message(id=self.get_right_tweet().id)
self.session.db[self.name].pop(index) items.pop(index)
else: else:
self.session.twitter.destroy_status(id=self.get_right_tweet().id) self.session.twitter.destroy_status(id=self.get_right_tweet().id)
self.session.db[self.name].pop(index) items.pop(index)
self.buffer.list.remove_item(index) self.buffer.list.remove_item(index)
except TweepError: except TweepError:
self.session.sound.play("error.ogg") self.session.sound.play("error.ogg")
self.session.db[self.name] = items
@_tweets_exist @_tweets_exist
def user_details(self): def user_details(self):
@ -646,7 +655,9 @@ class directMessagesController(baseBufferController):
items, cursor = items items, cursor = items
if type(cursor) == tuple: if type(cursor) == tuple:
cursor = cursor[1] cursor = cursor[1]
self.session.db["cursors"][self.name] = cursor cursors = self.session.db["cursors"]
cursors[self.name] = cursor
self.session.db["cursors"] = cursors
results = [i for i in items] results = [i for i in items]
items = results items = results
log.debug("Retrieved %d items for cursored search in function %s" % (len(items), self.function)) log.debug("Retrieved %d items for cursored search in function %s" % (len(items), self.function))
@ -657,22 +668,26 @@ class directMessagesController(baseBufferController):
return return
sent = [] sent = []
received = [] received = []
sent_dms = self.session.db["sent_direct_messages"]
received_dms = self.session.db["direct_messages"]
for i in items: for i in items:
if int(i.message_create["sender_id"]) == self.session.db["user_id"]: if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db["sent_direct_messages"].insert(0, i) sent_dms.insert(0, i)
sent.append(i) sent.append(i)
else: else:
self.session.db["sent_direct_messages"].append(i) sent_dms.append(i)
sent.insert(0, i) sent.insert(0, i)
else: else:
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[self.name].insert(0, i) received_dms.insert(0, i)
received.append(i) received.append(i)
else: else:
self.session.db[self.name].append(i) received_dms.append(i)
received.insert(0, i) received.insert(0, i)
total = total+1 total = total+1
self.session.db["direct_messages"] = received_dms
self.session.db["sent_direct_messages"] = sent_dms
user_ids = [item.message_create["sender_id"] for item in items] user_ids = [item.message_create["sender_id"] for item in items]
self.session.save_users(user_ids) self.session.save_users(user_ids)
pub.sendMessage("more-sent-dms", data=sent, account=self.session.db["user_name"]) pub.sendMessage("more-sent-dms", data=sent, account=self.session.db["user_name"])
@ -885,7 +900,9 @@ class peopleBufferController(baseBufferController):
val, cursor = val val, cursor = val
if type(cursor) == tuple: if type(cursor) == tuple:
cursor = cursor[1] cursor = cursor[1]
self.session.db["cursors"][self.name] = cursor cursors = self.session.db["cursors"]
cursors[self.name] = cursor
self.session.db["cursors"] = cursors
results = [i for i in val] results = [i for i in val]
val = results val = results
val.reverse() val.reverse()
@ -914,7 +931,9 @@ class peopleBufferController(baseBufferController):
items, cursor = items items, cursor = items
if type(cursor) == tuple: if type(cursor) == tuple:
cursor = cursor[1] cursor = cursor[1]
self.session.db["cursors"][self.name] = cursor cursors = self.session.db["cursors"]
cursors[self.name] = cursor
self.session.db["cursors"] = cursors
results = [i for i in items] results = [i for i in items]
items = results items = results
log.debug("Retrieved %d items from cursored search in function %s" % (len(items), self.function)) log.debug("Retrieved %d items from cursored search in function %s" % (len(items), self.function))
@ -923,11 +942,13 @@ class peopleBufferController(baseBufferController):
return return
if items == None: if items == None:
return return
items_db = self.session.db[self.name]
for i in items: for i in items:
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[self.name].insert(0, i) items_db.insert(0, i)
else: else:
self.session.db[self.name].append(i) items_db.append(i)
self.session.db[self.name] = items_db
selected = self.buffer.list.get_selected() selected = self.buffer.list.get_selected()
if self.session.settings["general"]["reverse_timelines"] == True: if self.session.settings["general"]["reverse_timelines"] == True:
for i in items: for i in items:

View File

@ -1274,10 +1274,12 @@ class Controller(object):
data = buffer.session.check_long_tweet(data) data = buffer.session.check_long_tweet(data)
if data == False: # Long tweet deleted from twishort. if data == False: # Long tweet deleted from twishort.
return return
items = buffer.session.db[buffer.name]
if buffer.session.settings["general"]["reverse_timelines"] == False: if buffer.session.settings["general"]["reverse_timelines"] == False:
buffer.session.db[buffer.name].append(data) items.append(data)
else: else:
buffer.session.db[buffer.name].insert(0, data) items.insert(0, data)
buffer.session.db[buffer.name] = items
buffer.add_new_item(data) buffer.add_new_item(data)
def manage_friend(self, data, user): def manage_friend(self, data, user):

View File

@ -171,35 +171,6 @@ class Session(base.baseSession):
self.verify_authorisation(pincode) self.verify_authorisation(pincode)
self.authorisation_dialog.Destroy() self.authorisation_dialog.Destroy()
def get_more_items(self, update_function, users=False, dm=False, name=None, *args, **kwargs):
""" Get more items for twitter objects.
update_function str: function to call for getting more items. Must be member of self.twitter.
users, dm bool: If any of these is set to True, the function will treat items as users or dm (they need different handling).
name str: name of the database item to put new element in."""
results = []
if "cursor" in kwargs and kwargs["cursor"] == 0:
output.speak(_(u"There are no more items to retrieve in this buffer."))
return
data = getattr(self.twitter, update_function)(*args, **kwargs)
if users == True:
if type(data) == dict and "next_cursor" in data:
if "next_cursor" in data: # There are more objects to retrieve.
self.db[name]["cursor"] = data["next_cursor"]
else: # Set cursor to 0, wich means no more items available.
self.db[name]["cursor"] = 0
for i in data["users"]: results.append(i)
elif type(data) == list:
results.extend(data[1:])
elif dm == True:
if "next_cursor" in data: # There are more objects to retrieve.
self.db[name]["cursor"] = data["next_cursor"]
else: # Set cursor to 0, wich means no more items available.
self.db[name]["cursor"] = 0
for i in data["events"]: results.append(i)
else:
results.extend(data[1:])
return results
def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs): def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs):
""" Make a call to the Twitter API. If there is a connectionError or another exception not related to Twitter, It will call the method again at least 25 times, waiting a while between calls. Useful for post methods. """ Make a call to the Twitter API. If there is a connectionError or another exception not related to Twitter, It will call the method again at least 25 times, waiting a while between calls. Useful for post methods.
If twitter returns an error, it will not call the method anymore. If twitter returns an error, it will not call the method anymore.
@ -425,7 +396,9 @@ class Session(base.baseSession):
user.id = id user.id = id
user.name = _("Deleted account") user.name = _("Deleted account")
user.id_str = id user.id_str = id
self.db["users"][user.id_str] = user users = self.db["users"]
users[user.id_str] = user
self.db["users"] = users
return user return user
else: else:
return self.db["users"][id] return self.db["users"][id]
@ -436,14 +409,18 @@ class Session(base.baseSession):
returns an user ID.""" returns an user ID."""
if ("users" in self.db) == False: if ("users" in self.db) == False:
user = utils.if_user_exists(self.twitter, screen_name) user = utils.if_user_exists(self.twitter, screen_name)
self.db["users"][user["id_str"]] = user users = self.db["users"]
users[user["id_str"]] = user
self.db["users"] = users
return user["id_str"] return user["id_str"]
else: else:
for i in list(self.db["users"].keys()): for i in list(self.db["users"].keys()):
if self.db["users"][i].screen_name == screen_name: if self.db["users"][i].screen_name == screen_name:
return self.db["users"][i].id_str return self.db["users"][i].id_str
user = utils.if_user_exists(self.twitter, screen_name) user = utils.if_user_exists(self.twitter, screen_name)
self.db["users"][user.id_str] = user users = self.db["users"]
users[user.id_str] = user
self.db["users"] = users
return user.id_str return user.id_str
def save_users(self, user_ids): def save_users(self, user_ids):
@ -458,6 +435,8 @@ class Session(base.baseSession):
return return
log.debug("TWBlue will get %d new users from Twitter." % (len(users_to_retrieve))) log.debug("TWBlue will get %d new users from Twitter." % (len(users_to_retrieve)))
users = self.twitter.lookup_users(user_ids=users_to_retrieve, tweet_mode="extended") users = self.twitter.lookup_users(user_ids=users_to_retrieve, tweet_mode="extended")
users_db = self.db["users"]
for user in users: for user in users:
self.db["users"][user.id_str] = user users_db[user.id_str] = user
log.debug("Added %d new users" % (len(users))) log.debug("Added %d new users" % (len(users)))
self.db["users"] = users_db