view user info is now posible from the menu bar or control+win+shift+n

This commit is contained in:
Manuel Cortez 2015-03-08 14:18:29 -06:00
parent 007da773c9
commit 2cc865b62c
11 changed files with 185 additions and 87 deletions

View File

@ -28,7 +28,7 @@ send_dm = string(default="control+win+d")
add_to_favourites = string(default="alt+win+f") add_to_favourites = string(default="alt+win+f")
remove_from_favourites = string(default="alt+shift+win+f") remove_from_favourites = string(default="alt+shift+win+f")
follow = string(default="control+win+s") follow = string(default="control+win+s")
details = string(default="control+win+alt+n") user_details = string(default="control+win+alt+n")
view_item = string(default="control+win+v") view_item = string(default="control+win+v")
exit = string(default="control+win+f4") exit = string(default="control+win+f4")
open_timeline = string(default="control+win+i") open_timeline = string(default="control+win+i")

View File

@ -7,7 +7,7 @@ import output
import config import config
import sound import sound
import messages import messages
import updateProfile import user
import languageHandler import languageHandler
import logging import logging
from twitter import compose, utils from twitter import compose, utils
@ -415,6 +415,19 @@ class baseBufferController(bufferController):
except TwythonError: except TwythonError:
self.session.sound.play("error.ogg") self.session.sound.play("error.ogg")
@_tweets_exist
def user_details(self):
tweet = self.get_tweet()
if self.type == "dm":
users = utils.get_all_users(tweet, self.session.db)
elif self.type == "people":
users = [tweet["screen_name"]]
else:
users = utils.get_all_users(tweet, self.session.db)
dlg = dialogs.utils.selectUserDialog(title=_(u"User details"), users=users)
if dlg.get_response() == widgetUtils.OK:
user.profileController(session=self.session, user=dlg.get_user())
class eventsBufferController(bufferController): class eventsBufferController(bufferController):
def __init__(self, parent, name, session, account, *args, **kwargs): def __init__(self, parent, name, session, account, *args, **kwargs):
super(eventsBufferController, self).__init__(parent, *args, **kwargs) super(eventsBufferController, self).__init__(parent, *args, **kwargs)
@ -545,7 +558,7 @@ class peopleBufferController(baseBufferController):
self.buffer.list.clear() self.buffer.list.clear()
def url(self): def url(self):
updateProfile.updateProfileController(self.session, user=self.get_right_tweet()["screen_name"]) user.profileController(self.session, user=self.get_right_tweet()["screen_name"])
class searchBufferController(baseBufferController): class searchBufferController(baseBufferController):
def start_stream(self): def start_stream(self):

View File

@ -28,7 +28,7 @@ if platform.system() == "Windows":
from keyboard_handler.wx_handler import WXKeyboardHandler from keyboard_handler.wx_handler import WXKeyboardHandler
import userActionsController import userActionsController
import trendingTopics import trendingTopics
import updateProfile import user
import webbrowser import webbrowser
log = logging.getLogger("mainController") log = logging.getLogger("mainController")
@ -151,6 +151,7 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.edit_keystrokes, menuitem=self.view.keystroke_editor) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.edit_keystrokes, menuitem=self.view.keystroke_editor)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_accounts, self.view.manage_accounts) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_accounts, self.view.manage_accounts)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.update_profile, menuitem=self.view.updateProfile) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.update_profile, menuitem=self.view.updateProfile)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.user_details, menuitem=self.view.details)
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed) widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
def __init__(self): def __init__(self):
@ -1073,7 +1074,13 @@ class Controller(object):
session_.sessions.pop(i) session_.sessions.pop(i)
def update_profile(self, *args, **kwargs): def update_profile(self, *args, **kwargs):
r = updateProfile.updateProfileController(self.get_best_buffer().session) r = user.profileController(self.get_best_buffer().session)
def user_details(self, *args, **kwargs):
buffer = self.get_current_buffer()
if not hasattr(buffer, "session") or buffer.session == None: return
if hasattr(buffer, "user_details"):
buffer.user_details()
def __del__(self): def __del__(self):
config.app.write() config.app.write()

View File

@ -1,67 +0,0 @@
# -*- coding: utf-8 -*-
import widgetUtils
import output
from wxUI.dialogs import update_profile
from twython import TwythonError
class updateProfileController(object):
def __init__(self, session, user=None):
super(updateProfileController, self).__init__()
self.file = None
self.session = session
self.user = user
self.dialog = update_profile.updateProfileDialog()
if user == None:
self.get_data(screen_name=self.session.db["user_name"])
self.uploaded = False
widgetUtils.connect_event(self.dialog.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image)
else:
self.get_data(screen_name=self.user)
self.dialog.set_readonly()
if self.dialog.get_response() == widgetUtils.OK and self.user == None:
self.do_update()
def get_data(self, screen_name):
data = self.session.twitter.twitter.show_user(screen_name=screen_name)
self.dialog.set_name(data["name"])
if data["url"] != None:
self.dialog.set_url(data["url"])
if len(data["location"]) > 0:
self.dialog.set_location(data["location"])
if len(data["description"]) > 0:
self.dialog.set_description(data["description"])
def get_image(self):
file = self.dialog.upload_picture()
if file != None:
self.file = open(file, "rb")
self.uploaded = True
self.dialog.change_upload_button(self.uploaded)
def discard_image(self):
self.file = None
output.speak(_(u"Discarded"))
self.uploaded = False
self.dialog.change_upload_button(self.uploaded)
def upload_image(self, *args, **kwargs):
if self.uploaded == False:
self.get_image()
elif self.uploaded == True:
self.discard_image()
def do_update(self):
name = self.dialog.get("name")
description = self.dialog.get("description")
location = self.dialog.get("location")
url = self.dialog.get("url")
if self.file != None:
try:
self.session.twitter.twitter.update_profile_image(image=self.file)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
try:
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))

99
src/controller/user.py Normal file
View File

@ -0,0 +1,99 @@
# -*- coding: utf-8 -*-
import webbrowser
import widgetUtils
import output
from wxUI.dialogs import update_profile, show_user
from twython import TwythonError
class profileController(object):
def __init__(self, session, user=None):
super(profileController, self).__init__()
self.file = None
self.session = session
self.user = user
if user == None:
self.dialog = update_profile.updateProfileDialog()
self.get_data(screen_name=self.session.db["user_name"])
self.fill_profile_fields()
self.uploaded = False
widgetUtils.connect_event(self.dialog.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image)
else:
self.dialog = show_user.showUserProfile()
self.get_data(screen_name=self.user)
string = self.get_user_info()
self.dialog.set("text", string)
self.dialog.set_title(_(u"Information for %s") % (self.data["screen_name"]))
if self.data["url"] != None:
self.dialog.enable_url()
widgetUtils.connect_event(self.dialog.url, widgetUtils.BUTTON_PRESSED, self.visit_url)
if self.dialog.get_response() == widgetUtils.OK and self.user == None:
self.do_update()
def get_data(self, screen_name):
self.data = self.session.twitter.twitter.show_user(screen_name=screen_name)
def fill_profile_fields(self):
self.dialog.set_name(self.data["name"])
if self.data["url"] != None:
self.dialog.set_url(self.data["url"])
if len(self.data["location"]) > 0:
self.dialog.set_location(self.data["location"])
if len(self.data["description"]) > 0:
self.dialog.set_description(self.data["description"])
def get_image(self):
file = self.dialog.upload_picture()
if file != None:
self.file = open(file, "rb")
self.uploaded = True
self.dialog.change_upload_button(self.uploaded)
def discard_image(self):
self.file = None
output.speak(_(u"Discarded"))
self.uploaded = False
self.dialog.change_upload_button(self.uploaded)
def upload_image(self, *args, **kwargs):
if self.uploaded == False:
self.get_image()
elif self.uploaded == True:
self.discard_image()
def do_update(self):
if self.user != None: return
name = self.dialog.get("name")
description = self.dialog.get("description")
location = self.dialog.get("location")
url = self.dialog.get("url")
if self.file != None:
try:
self.session.twitter.twitter.update_profile_image(image=self.file)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
try:
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
def get_user_info(self):
string = u""
string = string + _(u"Username: @%s\n") % (self.data["screen_name"])
string = string + _(u"Name: %s\n") % (self.data["name"])
if self.data["location"] != "":
string = string + _(u"Location: %s\n") % (self.data["location"])
if self.data["url"] != None:
string = string+ _(u"URL: %s\n") % (self.data["url"])
if self.data["description"] != "":
string = string+ _(u"Bio: %s\n") % (self.data["description"])
if self.data["protected"] == True: protected = _(u"Yes")
else: protected = _(u"No")
string = string+ _(u"Protected: %s\n") % (protected)
string = string+_(u"Followers: %s\n Friends: %s\n") % (self.data["followers_count"], self.data["friends_count"])
string = string+ _(u"Tweets: %s\n") % (self.data["statuses_count"])
string = string+ _(u"Favourites: %s") % (self.data["favourites_count"])
return string
def visit_url(self, *args, **kwargs):
webbrowser.open_new_tab(self.data["url"])

View File

@ -17,7 +17,7 @@ actions = {
"add_to_favourites": _(u"Mark as favourite"), "add_to_favourites": _(u"Mark as favourite"),
"remove_from_favourites": _(u"Remove from favourites"), "remove_from_favourites": _(u"Remove from favourites"),
"follow": _(u"Open the actions dialogue"), "follow": _(u"Open the actions dialogue"),
"details": _(u"See user details"), "user_details": _(u"See user details"),
"view_item": _(u"Show tweet"), "view_item": _(u"Show tweet"),
"exit": _(u"Quit"), "exit": _(u"Quit"),
"open_timeline": _(u"Open user timeline"), "open_timeline": _(u"Open user timeline"),

View File

@ -1 +1 @@
import baseDialog, trends, configuration, lists, message, search, show_user, update_profile, urlList, userSelection import baseDialog, trends, configuration, lists, message, search, show_user, update_profile, urlList, userSelection, utils

View File

@ -23,3 +23,6 @@ class BaseWXDialog(wx.Dialog):
elif hasattr(control, "ChangeValue"): return getattr(control, "ChangeValue")(text) elif hasattr(control, "ChangeValue"): return getattr(control, "ChangeValue")(text)
else: return -1 else: return -1
else: return 0 else: return 0
def set_title(self, title):
self.SetTitle(title)

View File

@ -1,17 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import wx import wx
import baseDialog
class showUserProfile(wx.Dialog): class showUserProfile(baseDialog.BaseWXDialog):
def __init__(self, screen_name): def __init__(self):
super(showUserProfile, self).__init__(self, None, -1) super(showUserProfile, self).__init__(parent=None, id=wx.NewId())
self.SetTitle(_(u"Information for %s") % (screen_name))
panel = wx.Panel(self) panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.VERTICAL)
static = wx.StaticText(panel, -1, _(u"Details")) static = wx.StaticText(panel, -1, _(u"Details"))
sizer.Add(static, 0, wx.ALL, 5) sizer.Add(static, 0, wx.ALL, 5)
text = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE|wx.TE_READONLY) self.text = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE|wx.TE_READONLY, size=(350, 250))
text.SetFocus() self.text.SetFocus()
sizer.Add(text, 0, wx.ALL|wx.EXPAND, 5) sizer.Add(self.text, 0, wx.ALL|wx.EXPAND, 5)
self.url = wx.Button(panel, -1, _(u"Go to URL"), size=wx.DefaultSize) self.url = wx.Button(panel, -1, _(u"Go to URL"), size=wx.DefaultSize)
self.url.Disable() self.url.Disable()
close = wx.Button(panel, wx.ID_CANCEL, _(u"Close")) close = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
@ -19,10 +19,8 @@ class showUserProfile(wx.Dialog):
btnSizer.Add(self.url, 0, wx.ALL, 5) btnSizer.Add(self.url, 0, wx.ALL, 5)
btnSizer.Add(close, 0, wx.ALL, 5) btnSizer.Add(close, 0, wx.ALL, 5)
sizer.Add(btnSizer, 0, wx.ALL, 5) sizer.Add(btnSizer, 0, wx.ALL, 5)
text.ChangeValue(self.compose_string())
text.SetSize(text.GetBestSize())
panel.SetSizer(sizer) panel.SetSizer(sizer)
self.SetClientSize(sizer.CalcMin()) self.SetClientSize(sizer.CalcMin())
def get_response(self): def enable_url(self, enabled=True):
return self.ShowModal() self.url.Enable(enabled)

46
src/wxUI/dialogs/utils.py Normal file
View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
import wx
import baseDialog
class selectUserDialog(baseDialog.BaseWXDialog):
def __init__(self, title, users):
super(selectUserDialog, self).__init__(parent=None, id=wx.NewId(), title=title)
panel = wx.Panel(self)
userSizer = wx.BoxSizer()
self.cb = wx.ComboBox(panel, -1, choices=users, value=users[0], size=wx.DefaultSize)
self.cb.SetFocus()
userSizer.Add(wx.StaticText(panel, -1, _(u"User")), 0, wx.ALL, 5)
userSizer.Add(self.cb)
sizer = wx.BoxSizer(wx.VERTICAL)
ok = wx.Button(panel, wx.ID_OK, _(u"OK"))
ok.SetDefault()
# ok.Bind(wx.EVT_BUTTON, self.onok)
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
btnsizer = wx.BoxSizer()
btnsizer.Add(ok, 0, wx.ALL, 5)
btnsizer.Add(cancel, 0, wx.ALL, 5)
sizer.Add(userSizer, 0, wx.ALL, 5)
sizer.Add(btnsizer, 0, wx.ALL, 5)
panel.SetSizer(sizer)
self.SetClientSize(sizer.CalcMin())
def get_user(self):
return self.cb.GetValue()

View File

@ -18,7 +18,7 @@ class mainFrame(wx.Frame):
self.menuitem_search = app.Append(wx.NewId(), _(u"&Search")) self.menuitem_search = app.Append(wx.NewId(), _(u"&Search"))
self.trends = app.Append(wx.NewId(), _(u"View &trending topics")) self.trends = app.Append(wx.NewId(), _(u"View &trending topics"))
self.lists = app.Append(wx.NewId(), _(u"&Lists manager")) self.lists = app.Append(wx.NewId(), _(u"&Lists manager"))
self.lists.Enable(True) self.lists.Enable(False)
self.sounds_tutorial = app.Append(wx.NewId(), _(u"Sounds &tutorial")) self.sounds_tutorial = app.Append(wx.NewId(), _(u"Sounds &tutorial"))
self.keystroke_editor = app.Append(wx.NewId(), _(u"&Edit keystrokes")) self.keystroke_editor = app.Append(wx.NewId(), _(u"&Edit keystrokes"))
self.account_settings = app.Append(wx.NewId(), _(u"Account se&ttings")) self.account_settings = app.Append(wx.NewId(), _(u"Account se&ttings"))
@ -53,7 +53,6 @@ class mainFrame(wx.Frame):
self.viewLists = user.Append(wx.NewId(), _(u"&View lists")) self.viewLists = user.Append(wx.NewId(), _(u"&View lists"))
self.viewLists.Enable(False) self.viewLists.Enable(False)
self.details = user.Append(wx.NewId(), _(u"Show user &profile")) self.details = user.Append(wx.NewId(), _(u"Show user &profile"))
self.details.Enable(False)
self.timeline = user.Append(wx.NewId(), _(u"&Timeline")) self.timeline = user.Append(wx.NewId(), _(u"&Timeline"))
self.timeline.Enable(False) self.timeline.Enable(False)
self.favs = user.Append(wx.NewId(), _(u"V&iew favourites")) self.favs = user.Append(wx.NewId(), _(u"V&iew favourites"))