From bd56eb953b7c2c7b67cfadc08e22841888cffa72 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Tue, 18 Sep 2018 09:09:25 -0500 Subject: [PATCH] provide better control over cursored buffers when getting more items --- src/controller/buffersController.py | 10 ++++++++++ src/sessions/twitter/session.py | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/controller/buffersController.py b/src/controller/buffersController.py index 8e9db99e..e052d4df 100644 --- a/src/controller/buffersController.py +++ b/src/controller/buffersController.py @@ -351,6 +351,8 @@ class baseBufferController(bufferController): items = self.session.get_more_items(self.function, count=self.session.settings["general"]["max_tweets_per_call"], max_id=last_id, *self.args, **self.kwargs) except TwythonError as e: output.speak(e.message, True) + if items == None: + return 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: i = self.session.check_quoted_status(i) @@ -776,6 +778,8 @@ class directMessagesController(baseBufferController): except TwythonError as e: output.speak(e.message, True) return + if items == None: + return sent = [] for i in items: if i["message_create"]["sender_id"] == self.session.db["user_id"]: @@ -1056,6 +1060,8 @@ class peopleBufferController(baseBufferController): except TwythonError as e: output.speak(e.message, True) return + if items == None: + return for i in items: if self.session.settings["general"]["reverse_timelines"] == False: self.session.db[self.name]["items"].insert(0, i) @@ -1178,6 +1184,8 @@ class searchBufferController(baseBufferController): items = self.session.search(self.name, count=self.session.settings["general"]["max_tweets_per_call"], max_id=last_id, *self.args, **self.kwargs) except TwythonError as e: output.speak(e.message, True) + if items == None: + return 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: i = self.session.check_quoted_status(i) @@ -1240,6 +1248,8 @@ class searchPeopleBufferController(peopleBufferController): except TwythonError as e: output.speak(e.message, True) return + if items == None: + return for i in items: if self.session.settings["general"]["reverse_timelines"] == False: self.session.db[self.name]["items"].insert(0, i) diff --git a/src/sessions/twitter/session.py b/src/sessions/twitter/session.py index c1fd62b5..1a08198e 100644 --- a/src/sessions/twitter/session.py +++ b/src/sessions/twitter/session.py @@ -164,15 +164,24 @@ class Session(base.baseSession): 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 kwargs.has_key("cursor") 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 data.has_key("next_cursor"): - self.db[name]["cursor"] = data["next_cursor"] + if data.has_key("next_cursor"): # 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: - self.db[name]["cursor"] = data["next_cursor"] + if data.has_key("next_cursor"): # 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:]) @@ -315,6 +324,8 @@ class Session(base.baseSession): # Recently, Twitter's new endpoints have cursor if there are more results. if tl.has_key("next_cursor"): self.db[name]["cursor"] = tl["next_cursor"] + else: + self.db[name]["cursor"] = 0 return num def check_connection(self):