Added open in vk.com option in context menu for lots of items

This commit is contained in:
2019-04-13 18:43:48 -05:00
parent 04f734bebe
commit 2fe58941ea
4 changed files with 100 additions and 73 deletions

View File

@@ -224,10 +224,14 @@ class baseBuffer(object):
m.dislike.Enable(True)
if ("comments" in p) == False:
m.comment.Enable(False)
m.open_in_browser.Enable(False)
if "type" in p and p["type"] != "friend" and p["type"] != "audio" and p["type"] != "video" and p["type"] != "playlist":
m.open_in_browser.Enable(True)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_post, menuitem=m.open)
widgetUtils.connect_event(m, widgetUtils.MENU, self.do_like, menuitem=m.like)
widgetUtils.connect_event(m, widgetUtils.MENU, self.do_dislike, menuitem=m.dislike)
widgetUtils.connect_event(m, widgetUtils.MENU, self.do_comment, menuitem=m.comment)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_in_browser, menuitem=m.open_in_browser)
if hasattr(m, "view_profile"):
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_person_profile, menuitem=m.view_profile)
if hasattr(m, "delete"):
@@ -383,6 +387,13 @@ class baseBuffer(object):
created_at = original_date.humanize(locale=languageHandler.curLang[:2])
self.tab.list.list.SetItem(self.tab.list.get_selected(), 2, created_at)
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/wall{user_id}_{post_id}".format(user_id=post["source_id"], post_id=post["post_id"])
webbrowser.open_new_tab(url)
class feedBuffer(baseBuffer):
""" This buffer represents an user's wall. It may be used either for the current user or someone else."""
@@ -458,6 +469,13 @@ class feedBuffer(baseBuffer):
if hasattr(p, "text") or hasattr(p, "privacy"):
call_threaded(self.do_last, p=p, owner_id=owner_id)
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/wall{user_id}_{post_id}".format(user_id=post["from_id"], post_id=post["id"])
webbrowser.open_new_tab(url)
class communityBuffer(feedBuffer):
def create_tab(self, parent):
@@ -504,6 +522,16 @@ class topicBuffer(feedBuffer):
return
a = presenters.displayTopicPresenter(session=self.session, postObject=post, group_id=self.kwargs["group_id"], interactor=interactors.displayPostInteractor(), view=views.displayTopic())
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
# In order to load the selected topic we firstly have to catch the group_id, which is present in self.kwargs
# After getting the group_id we should make it negative
group_id = self.kwargs["group_id"]*-1
url = "https://vk.com/topic{group_id}_{topic_id}".format(group_id=group_id, topic_id=post["id"])
webbrowser.open_new_tab(url)
class documentBuffer(feedBuffer):
can_get_items = False
@@ -545,6 +573,7 @@ class documentBuffer(feedBuffer):
m = menus.documentMenu(added)
widgetUtils.connect_event(m, widgetUtils.MENU, self.add_remove_document, menuitem=m.action)
widgetUtils.connect_event(m, widgetUtils.MENU, self.download, menuitem=m.download)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_in_browser, menuitem=m.open_in_browser)
return m
def add_remove_document(self, *args, **kwargs):
@@ -571,6 +600,13 @@ class documentBuffer(feedBuffer):
if filepath != None:
pub.sendMessage("download-file", url=post["url"], filename=filepath)
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/doc{user_id}_{post_id}".format(user_id=post["owner_id"], post_id=post["id"])
webbrowser.open_new_tab(url)
class documentCommunityBuffer(documentBuffer):
can_get_items = True
@@ -734,6 +770,13 @@ class audioBuffer(feedBuffer):
uploader = upload.VkUpload(self.session.vk.session_object)
call_threaded(uploader.audio, file, title=title, artist=artist)
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/audio{user_id}_{post_id}".format(user_id=post["owner_id"], post_id=post["id"])
webbrowser.open_new_tab(url)
class audioAlbum(audioBuffer):
""" this buffer was supposed to be used with audio albums
but is deprecated as VK removed its audio support for third party apps."""
@@ -856,8 +899,6 @@ class videoBuffer(feedBuffer):
if p == None:
return
m = menus.audioMenu()
# 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.move_to_album, menuitem=m.move)
# if owner_id is the current user, the audio is added to the user's audios.
if p["owner_id"] == self.session.user_id:
@@ -867,6 +908,13 @@ class videoBuffer(feedBuffer):
widgetUtils.connect_event(m, widgetUtils.MENU, self.add_to_library, menuitem=m.library)
return m
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/video{user_id}_{video_id}".format(user_id=post["owner_id"], video_id=post["id"])
webbrowser.open_new_tab(url)
class videoAlbum(videoBuffer):
def create_tab(self, parent):
@@ -1188,6 +1236,11 @@ class chatBuffer(baseBuffer):
else:
return False
def open_in_browser(self, *args, **kwargs):
peer_id = self.kwargs["peer_id"]
url = "https://vk.com/im?sel={peer_id}".format(peer_id=peer_id)
webbrowser.open_new_tab(url)
class peopleBuffer(feedBuffer):
def create_tab(self, parent):
@@ -1243,12 +1296,13 @@ class peopleBuffer(feedBuffer):
else:
m = menus.peopleMenu(is_request=False)
widgetUtils.connect_event(m, widgetUtils.MENU, self.decline_friendship, menuitem=m.decline)
# It is not allowed to send messages to people who is not your friends, so let's disable it if we're in a pending or outgoing requests folder.
# It is not allowed to send messages to people who is not your friends, so let's disable it if we're in a pending or outgoing requests buffer.
if "friend_requests" in self.name:
m.message.Enable(False)
widgetUtils.connect_event(m, widgetUtils.MENU, self.new_chat, menuitem=m.message)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_timeline, menuitem=m.timeline)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_person_profile, menuitem=m.view_profile)
widgetUtils.connect_event(m, widgetUtils.MENU, self.open_in_browser, menuitem=m.open_in_browser)
return m
def open_post(self, *args, **kwargs): pass
@@ -1338,6 +1392,13 @@ class peopleBuffer(feedBuffer):
log.exception("Removing an user from online status manually... %r" % (i))
self.remove_person(i["id"])
def open_in_browser(self, *args, **kwargs):
post = self.get_post()
if post == None:
return
url = "https://vk.com/id{user_id}".format(user_id=post["id"])
webbrowser.open_new_tab(url)
class requestsBuffer(peopleBuffer):
def get_items(self, show_nextpage=False):

View File

@@ -862,7 +862,7 @@ class Controller(object):
elif current_buffer.name.endswith("_messages"):
menu = menus.conversationBufferMenu()
widgetUtils.connect_event(menu, widgetUtils.MENU, self.delete_conversation, menuitem=menu.delete)
widgetUtils.connect_event(menu, widgetUtils.MENU, current_buffer.open_in_browser, menuitem=menu.open_in_browser)
if menu != None:
self.window.PopupMenu(menu, self.window.FindFocus().GetPosition())
# If there are no available menus, let's indicate it.

View File

@@ -8,43 +8,28 @@ class postMenu(wx.Menu):
def __init__(self, can_delete=False, *args, **kwargs):
super(postMenu, self).__init__(*args, **kwargs)
self.open = wx.MenuItem(self, wx.NewId(), _("Open"))
self.Append(self.open)
self.like = wx.MenuItem(self, wx.NewId(), _("Like"))
self.Append(self.like)
self.dislike = wx.MenuItem(self, wx.NewId(), _("Dislike"))
self.open = self.Append(wx.NewId(), _("Open"))
self.like = self.Append(wx.NewId(), _("Like"))
self.dislike = self.Append(wx.NewId(), _("Dislike"))
self.dislike.Enable(False)
self.Append(self.dislike)
self.comment = wx.MenuItem(self, wx.NewId(), _("Add comment"))
self.Append(self.comment)
self.comment = self.Append(wx.NewId(), _("Add comment"))
if can_delete:
self.delete = wx.MenuItem(self, wx.NewId(), _("Delete"))
self.Append(self.delete)
self.delete = self.Append(wx.NewId(), _("Delete"))
else:
self.post_in_wall = wx.MenuItem(self, wx.NewId(), _("Post to this profile"))
self.post_in_wall = self.Append(wx.NewId(), _("Post to this profile"))
self.post_in_wall.Enable(False)
self.Append(self.post_in_wall)
self.view_profile = wx.MenuItem(self, wx.NewId(), _("View user profile"))
self.Append(self.view_profile)
def create_specific_post_options(self):
self.update = wx.MenuItem(self, wx.NewId(), _("Update"))
self.Append(self.update)
self.delete = wx.MenuItem(self, wx.NewId(), _("Delete"))
self.Append(self.delete)
self.view_profile = self.Append(wx.NewId(), _("View user profile"))
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
class audioMenu(wx.Menu):
def __init__(self, *args, **kwargs):
super(audioMenu, self).__init__(*args, **kwargs)
self.open = wx.MenuItem(self, wx.NewId(), _("&Open"))
self.Append(self.open)
self.play = wx.MenuItem(self, wx.NewId(), _("&Play"))
self.Append(self.play)
self.library = wx.MenuItem(self, wx.NewId(), _("&Add to library"))
self.Append(self.library)
self.move = wx.MenuItem(self, wx.NewId(), _("Move to album"))
self.Append(self.move)
self.open = self.Append(wx.NewId(), _("&Open"))
self.play = self.Append(wx.NewId(), _("&Play"))
self.library = self.Append(wx.NewId(), _("&Add to library"))
self.move = self.Append(wx.NewId(), _("Move to album"))
# self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
class peopleMenu(wx.Menu):
def __init__(self, is_request=False, is_subscriber=False, *args, **kwargs):
@@ -53,67 +38,45 @@ class peopleMenu(wx.Menu):
self.create_request_items()
elif is_subscriber:
self.create_subscriber_items()
self.view_profile = wx.MenuItem(self, wx.NewId(), _("View profile"))
self.Append(self.view_profile)
self.message = wx.MenuItem(self, wx.NewId(), _("Send a message"))
self.Append(self.message)
self.timeline = wx.MenuItem(self, wx.NewId(), _("Open timeline"))
self.Append(self.timeline)
self.common_friends = wx.MenuItem(self, wx.NewId(), _("View friends in common"))
self.Append(self.common_friends)
self.view_profile = self.Append(wx.NewId(), _("View profile"))
self.message = self.Append(wx.NewId(), _("Send a message"))
self.timeline = self.Append(wx.NewId(), _("Open timeline"))
self.common_friends = self.Append(wx.NewId(), _("View friends in common"))
if is_request == False and is_subscriber == False:
self.decline = wx.MenuItem(self, wx.NewId(), _("Remove from friends"))
self.Append(self.decline)
self.decline = self.Append(wx.NewId(), _("Remove from friends"))
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
def create_request_items(self):
self.accept = wx.MenuItem(self, wx.NewId(), _("Accept"))
self.Append(self.accept)
self.decline = wx.MenuItem(self, wx.NewId(), _("Decline"))
self.Append(self.decline)
self.keep_as_follower = wx.MenuItem(self, wx.NewId(), _("Keep as follower"))
self.Append(self.keep_as_follower)
self.accept = self.Append(wx.NewId(), _("Accept"))
self.decline = self.Append(wx.NewId(), _("Decline"))
self.keep_as_follower = self.Append(wx.NewId(), _("Keep as follower"))
def create_subscriber_items(self):
self.add = wx.MenuItem(self, wx.NewId(), _("Add to friends"))
self.Append(self.add)
self.add = self.Append(wx.NewId(), _("Add to friends"))
class documentMenu(wx.Menu):
def __init__(self, added=False, *args, **kwargs):
super(documentMenu, self).__init__(*args, **kwargs)
# self.view_info = self.Append(wx.NewId(), _("View information"))
self.download = self.Append(wx.NewId(), _("Download document"))
if added == True:
self.action = self.Append(wx.NewId(), _("Remove from my documents"))
else:
self.action = self.Append(wx.NewId(), _("Add to my documents"))
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
class commentMenu(wx.Menu):
def __init__(self, *args, **kwargs):
super(commentMenu, self).__init__(*args, **kwargs)
self.open = wx.MenuItem(self, wx.NewId(), _("Open"))
self.Append(self.open)
self.like = wx.MenuItem(self, wx.NewId(), _("Like"))
self.Append(self.like)
self.unlike = wx.MenuItem(self, -1, _("Unlike"))
self.Append(self.unlike)
def create_specific_comment_options(self):
self.delete = wx.MenuItem(self, wx.NewId(), _("Delete"))
self.Append(self.delete)
class notificationsMenu(wx.Menu):
def __init__(self):
super(notificationsMenu, self).__init__()
self.mark_as_read = wx.MenuItem(self, wx.NewId(), _("Mark as read"))
self.Append(self.mark_as_read)
self.open = self.Append(wx.NewId(), _("Open"))
self.like = self.Append(wx.NewId(), _("Like"))
self.dislike = self.Append(wx.NewId(), _("Dislike"))
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
class attachMenu(wx.Menu):
def __init__(self):
super(attachMenu, self).__init__()
self.upload = wx.MenuItem(self, wx.NewId(), _("Upload from computer"))
self.Append(self.upload)
self.add = wx.MenuItem(self, wx.NewId(), _("Add from VK"))
self.Append(self.add)
self.upload = self.Append(wx.NewId(), _("Upload from computer"))
self.add = self.Append(wx.NewId(), _("Add from VK"))
class communityBufferMenu(wx.Menu):
def __init__(self):
@@ -125,8 +88,10 @@ class communityBufferMenu(wx.Menu):
self.load_videos = load.Append(wx.NewId(), _("Load videos"))
self.load_documents = load.Append(wx.NewId(), _("Load documents"))
self.Append(wx.NewId(), _("Load"), load)
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))
class conversationBufferMenu(wx.Menu):
def __init__(self):
super(conversationBufferMenu, self).__init__()
self.delete = self.Append(wx.NewId(), _("Delete conversation"))
self.delete = self.Append(wx.NewId(), _("Delete conversation"))
self.open_in_browser = self.Append(wx.NewId(), _("Open in vk.com"))