Fixed actions when there are no posts in a buffer

This commit is contained in:
Manuel Cortez 2018-12-16 02:06:36 -06:00
parent d43f5f5320
commit 0e96ed1519

View File

@ -29,6 +29,10 @@ class baseBuffer(object):
def get_post(self): def get_post(self):
""" Return the currently focused post.""" """ Return the currently focused post."""
# Handle case where there are no items in the buffer.
if self.tab.list.get_count() == 0:
wx.Bell()
return None
return self.session.db[self.name]["items"][self.tab.list.get_selected()] return self.session.db[self.name]["items"][self.tab.list.get_selected()]
def __init__(self, parent=None, name="", session=None, composefunc=None, *args, **kwargs): def __init__(self, parent=None, name="", session=None, composefunc=None, *args, **kwargs):
@ -169,6 +173,8 @@ class baseBuffer(object):
""" Returns contextual menu options. They will change according to the focused item""" """ Returns contextual menu options. They will change according to the focused item"""
m = menus.postMenu() m = menus.postMenu()
p = self.get_post() p = self.get_post()
if p == None:
return
if p.has_key("likes") == False: if p.has_key("likes") == False:
m.like.Enable(False) m.like.Enable(False)
elif p["likes"]["user_likes"] == 1: elif p["likes"]["user_likes"] == 1:
@ -186,6 +192,8 @@ class baseBuffer(object):
def do_like(self, *args, **kwargs): def do_like(self, *args, **kwargs):
""" Set like in the currently focused post.""" """ Set like in the currently focused post."""
post = self.get_post() post = self.get_post()
if post == None:
return
user = post[self.user_key] user = post[self.user_key]
id = post[self.post_key] id = post[self.post_key]
if post.has_key("type"): if post.has_key("type"):
@ -201,6 +209,8 @@ class baseBuffer(object):
def do_dislike(self, *args, **kwargs): def do_dislike(self, *args, **kwargs):
""" Set dislike (undo like) in the currently focused post.""" """ Set dislike (undo like) in the currently focused post."""
post = self.get_post() post = self.get_post()
if post == None:
return
user = post[self.user_key] user = post[self.user_key]
id = post[self.post_key] id = post[self.post_key]
if post.has_key("type"): if post.has_key("type"):
@ -215,10 +225,12 @@ class baseBuffer(object):
def do_comment(self, *args, **kwargs): def do_comment(self, *args, **kwargs):
""" Make a comment into the currently focused post.""" """ Make a comment into the currently focused post."""
post = self.get_post()
if post == None:
return
comment = messages.comment(title=_(u"Add a comment"), caption="", text="") comment = messages.comment(title=_(u"Add a comment"), caption="", text="")
if comment.message.get_response() == widgetUtils.OK: if comment.message.get_response() == widgetUtils.OK:
msg = comment.message.get_text().encode("utf-8") msg = comment.message.get_text().encode("utf-8")
post = self.get_post()
try: try:
user = post[self.user_key] user = post[self.user_key]
id = post[self.post_key] id = post[self.post_key]
@ -254,6 +266,8 @@ class baseBuffer(object):
def play_audio(self, *args, **kwargs): def play_audio(self, *args, **kwargs):
""" Play audio in currently focused buffer, if possible.""" """ Play audio in currently focused buffer, if possible."""
post = self.get_post() post = self.get_post()
if post == None:
return
if post.has_key("type") and post["type"] == "audio": if post.has_key("type") and post["type"] == "audio":
pub.sendMessage("play-audio", audio_object=post["audio"]["items"][0]) pub.sendMessage("play-audio", audio_object=post["audio"]["items"][0])
return True return True
@ -261,6 +275,8 @@ class baseBuffer(object):
def open_person_profile(self, *args, **kwargs): def open_person_profile(self, *args, **kwargs):
""" Views someone's user profile.""" """ Views someone's user profile."""
selected = self.get_post() selected = self.get_post()
if selected == None:
return
# Check all possible keys for an user object in VK API. # Check all possible keys for an user object in VK API.
keys = ["from_id", "source_id", "id"] keys = ["from_id", "source_id", "id"]
for i in keys: for i in keys:
@ -270,6 +286,8 @@ class baseBuffer(object):
def open_post(self, *args, **kwargs): def open_post(self, *args, **kwargs):
""" Opens the currently focused post.""" """ Opens the currently focused post."""
post = self.get_post() post = self.get_post()
if post == None:
return
if post.has_key("type") and post["type"] == "audio": if post.has_key("type") and post["type"] == "audio":
a = posts.audio(self.session, post["audio"]["items"]) a = posts.audio(self.session, post["audio"]["items"])
a.dialog.get_response() a.dialog.get_response()
@ -290,6 +308,8 @@ class baseBuffer(object):
def get_users(self): def get_users(self):
""" Returns source user in the post.""" """ Returns source user in the post."""
post = self.get_post() post = self.get_post()
if post == None:
return
if post.has_key("type") == False: if post.has_key("type") == False:
return [post["from_id"]] return [post["from_id"]]
else: else:
@ -299,6 +319,8 @@ class baseBuffer(object):
""" Function executed when the item in a list is selected. """ Function executed when the item in a list is selected.
For this buffer it updates the date of posts in the list.""" For this buffer it updates the date of posts in the list."""
post = self.get_post() post = self.get_post()
if post == None:
return
original_date = arrow.get(post["date"]) original_date = arrow.get(post["date"])
created_at = original_date.humanize(locale=languageHandler.curLang[:2]) created_at = original_date.humanize(locale=languageHandler.curLang[:2])
self.tab.list.list.SetItem(self.tab.list.get_selected(), 2, created_at) self.tab.list.list.SetItem(self.tab.list.get_selected(), 2, created_at)
@ -360,6 +382,8 @@ class audioBuffer(feedBuffer):
def play_audio(self, *args, **kwargs): def play_audio(self, *args, **kwargs):
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if selected == -1:
return
if selected == -1: if selected == -1:
selected = 0 selected = 0
pub.sendMessage("play-audio", audio_object=self.session.db[self.name]["items"][selected]) pub.sendMessage("play-audio", audio_object=self.session.db[self.name]["items"][selected])
@ -367,7 +391,9 @@ class audioBuffer(feedBuffer):
def play_next(self, *args, **kwargs): def play_next(self, *args, **kwargs):
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if selected < 0 or selected == self.tab.list.get_count()-1: if selected == -1:
return
elif selected < 0 or selected == self.tab.list.get_count()-1:
selected = 0 selected = 0
if self.tab.list.get_count() <= selected+1: if self.tab.list.get_count() <= selected+1:
newpos = 0 newpos = 0
@ -378,7 +404,9 @@ class audioBuffer(feedBuffer):
def play_previous(self, *args, **kwargs): def play_previous(self, *args, **kwargs):
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if selected <= 0: if selected == -1:
return
elif selected <= 0:
selected = self.tab.list.get_count() selected = self.tab.list.get_count()
newpos = selected-1 newpos = selected-1
self.tab.list.select_item(newpos) self.tab.list.select_item(newpos)
@ -386,6 +414,8 @@ class audioBuffer(feedBuffer):
def open_post(self, *args, **kwargs): def open_post(self, *args, **kwargs):
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if selected == 0 or selected == -1:
return
audios = [self.session.db[self.name]["items"][selected]] audios = [self.session.db[self.name]["items"][selected]]
a = posts.audio(self.session, audios) a = posts.audio(self.session, audios)
a.dialog.get_response() a.dialog.get_response()
@ -395,6 +425,8 @@ class audioBuffer(feedBuffer):
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if selected == -1: if selected == -1:
selected = 0 selected = 0
if self.name not in self.session.db:
return
audios = [i for i in self.session.db[self.name]["items"][selected:]] audios = [i for i in self.session.db[self.name]["items"][selected:]]
pub.sendMessage("play-audios", audios=audios) pub.sendMessage("play-audios", audios=audios)
return True return True
@ -423,6 +455,8 @@ class audioBuffer(feedBuffer):
def add_to_library(self, *args, **kwargs): def add_to_library(self, *args, **kwargs):
post = self.get_post() post = self.get_post()
if post == None:
return
args = {} args = {}
args["audio_id"] = post["id"] args["audio_id"] = post["id"]
if post.has_key("album_id"): if post.has_key("album_id"):
@ -434,6 +468,8 @@ class audioBuffer(feedBuffer):
def remove_from_library(self, *args, **kwargs): def remove_from_library(self, *args, **kwargs):
post = self.get_post() post = self.get_post()
if post == None:
return
args = {} args = {}
args["audio_id"] = post["id"] args["audio_id"] = post["id"]
args["owner_id"] = self.session.user_id args["owner_id"] = self.session.user_id
@ -443,9 +479,12 @@ class audioBuffer(feedBuffer):
self.tab.list.remove_item(self.tab.list.get_selected()) self.tab.list.remove_item(self.tab.list.get_selected())
def move_to_album(self, *args, **kwargs): def move_to_album(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
album = selector.album(_(u"Select the album where you want to move this song"), self.session) album = selector.album(_(u"Select the album where you want to move this song"), self.session)
if album.item == None: return if album.item == None: return
id = self.get_post()["id"] id = post["id"]
response = self.session.vk.client.audio.moveToAlbum(album_id=album.item, audio_ids=id) response = self.session.vk.client.audio.moveToAlbum(album_id=album.item, audio_ids=id)
if response == 1: if response == 1:
# Translators: Used when the user has moved an audio to an album. # Translators: Used when the user has moved an audio to an album.
@ -453,6 +492,8 @@ class audioBuffer(feedBuffer):
def get_menu(self): def get_menu(self):
p = self.get_post() p = self.get_post()
if p == None:
return
m = menus.audioMenu() m = menus.audioMenu()
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_post, menuitem=m.open) widgetUtils.connect_event(m, widgetUtils.MENU, self.open_post, menuitem=m.open)
widgetUtils.connect_event(m, widgetUtils.MENU, self.play_audio, menuitem=m.play) widgetUtils.connect_event(m, widgetUtils.MENU, self.play_audio, menuitem=m.play)
@ -500,6 +541,8 @@ class videoBuffer(feedBuffer):
""" Due to inheritance this method should be called play_audio, but play the currently focused video. """ Due to inheritance this method should be called play_audio, but play the currently focused video.
Opens a webbrowser pointing to the video's URL.""" Opens a webbrowser pointing to the video's URL."""
selected = self.tab.list.get_selected() selected = self.tab.list.get_selected()
if self.tab.list.get_count() == 0:
return
if selected == -1: if selected == -1:
selected = 0 selected = 0
output.speak(_(u"Opening video in webbrowser...")) output.speak(_(u"Opening video in webbrowser..."))
@ -508,11 +551,7 @@ class videoBuffer(feedBuffer):
return True return True
def open_post(self, *args, **kwargs): def open_post(self, *args, **kwargs):
selected = self.tab.list.get_selected() pass
audios = [self.session.db[self.name]["items"][selected]]
a = posts.audio(self.session, audios)
a.dialog.get_response()
a.dialog.Destroy()
def remove_buffer(self, mandatory=False): def remove_buffer(self, mandatory=False):
if "me_video" == self.name: if "me_video" == self.name:
@ -538,6 +577,8 @@ class videoBuffer(feedBuffer):
def add_to_library(self, *args, **kwargs): def add_to_library(self, *args, **kwargs):
post = self.get_post() post = self.get_post()
if post == None:
return
args = {} args = {}
args["video_id"] = post["id"] args["video_id"] = post["id"]
if post.has_key("album_id"): if post.has_key("album_id"):
@ -549,6 +590,8 @@ class videoBuffer(feedBuffer):
def remove_from_library(self, *args, **kwargs): def remove_from_library(self, *args, **kwargs):
post = self.get_post() post = self.get_post()
if post == None:
return
args = {} args = {}
args["video_id"] = post["id"] args["video_id"] = post["id"]
args["owner_id"] = self.session.user_id args["owner_id"] = self.session.user_id
@ -558,9 +601,12 @@ class videoBuffer(feedBuffer):
self.tab.list.remove_item(self.tab.list.get_selected()) self.tab.list.remove_item(self.tab.list.get_selected())
def move_to_album(self, *args, **kwargs): def move_to_album(self, *args, **kwargs):
post= self.get_post()
if post == None:
return
album = selector.album(_(u"Select the album where you want to move this video"), self.session, "video_albums") album = selector.album(_(u"Select the album where you want to move this video"), self.session, "video_albums")
if album.item == None: return if album.item == None: return
id = self.get_post()["id"] id = post["id"]
response = self.session.vk.client.video.addToAlbum(album_ids=album.item, video_id=id, target_id=self.session.user_id, owner_id=self.get_post()["owner_id"]) response = self.session.vk.client.video.addToAlbum(album_ids=album.item, video_id=id, target_id=self.session.user_id, owner_id=self.get_post()["owner_id"])
if response == 1: if response == 1:
# Translators: Used when the user has moved an video to an album. # Translators: Used when the user has moved an video to an album.
@ -569,6 +615,8 @@ class videoBuffer(feedBuffer):
def get_menu(self): def get_menu(self):
""" We'll use the same menu that is used for audio items, as the options are exactly the same""" """ We'll use the same menu that is used for audio items, as the options are exactly the same"""
p = self.get_post() p = self.get_post()
if p == None:
return
m = menus.audioMenu() m = menus.audioMenu()
# widgetUtils.connect_event(m, widgetUtils.MENU, self.open_post, menuitem=m.open) # widgetUtils.connect_event(m, widgetUtils.MENU, self.open_post, menuitem=m.open)
# widgetUtils.connect_event(m, widgetUtils.MENU, self.play_audio, menuitem=m.play) # widgetUtils.connect_event(m, widgetUtils.MENU, self.play_audio, menuitem=m.play)
@ -806,11 +854,16 @@ class peopleBuffer(feedBuffer):
widgetUtils.connect_event(self.tab.new_chat, widgetUtils.BUTTON_PRESSED, self.new_chat) widgetUtils.connect_event(self.tab.new_chat, widgetUtils.BUTTON_PRESSED, self.new_chat)
def new_chat(self, *args, **kwargs): def new_chat(self, *args, **kwargs):
user_id = self.session.db[self.name]["items"][self.tab.list.get_selected()]["id"] user = self.get_post()
if user == None:
return
user_id = user["id"]
pub.sendMessage("new-chat", user_id=user_id) pub.sendMessage("new-chat", user_id=user_id)
def onFocus(self, *args, **kwargs): def onFocus(self, *args, **kwargs):
post = self.session.db[self.name]["items"][self.tab.list.get_selected()] post = self.get_post()
if post == None:
return
if post.has_key("last_seen") == False: return if post.has_key("last_seen") == False: return
original_date = arrow.get(post["last_seen"]["time"]) original_date = arrow.get(post["last_seen"]["time"])
created_at = original_date.humanize(locale=languageHandler.curLang[:2]) created_at = original_date.humanize(locale=languageHandler.curLang[:2])
@ -880,6 +933,8 @@ class requestsBuffer(peopleBuffer):
https://vk.com/dev/friends.add https://vk.com/dev/friends.add
""" """
person = self.get_post() person = self.get_post()
if person == None:
return
result = self.session.vk.client.friends.add(user_id=person["id"]) result = self.session.vk.client.friends.add(user_id=person["id"])
if result == 2: if result == 2:
msg = _(u"{0} {1} now is your friend.").format(person["first_name"], person["last_name"]) msg = _(u"{0} {1} now is your friend.").format(person["first_name"], person["last_name"])
@ -892,6 +947,8 @@ class requestsBuffer(peopleBuffer):
https://vk.com/dev/friends.delete https://vk.com/dev/friends.delete
""" """
person = self.get_post() person = self.get_post()
if person == None:
return
result = self.session.vk.client.friends.delete(user_id=person["id"]) result = self.session.vk.client.friends.delete(user_id=person["id"])
if "out_request_deleted" in result: if "out_request_deleted" in result:
msg = _(u"You've deleted the friends request to {0} {1}.").format(person["first_name"], person["last_name"]) msg = _(u"You've deleted the friends request to {0} {1}.").format(person["first_name"], person["last_name"])
@ -906,6 +963,8 @@ class requestsBuffer(peopleBuffer):
https://vk.com/dev/friends.add https://vk.com/dev/friends.add
""" """
person = self.get_post() person = self.get_post()
if person == None:
return
result = self.session.vk.client.friends.add(user_id=person["id"], follow=1) result = self.session.vk.client.friends.add(user_id=person["id"], follow=1)
if result == 2: if result == 2:
msg = _(u"{0} {1} is following you.").format(person["first_name"], person["last_name"]) msg = _(u"{0} {1} is following you.").format(person["first_name"], person["last_name"])