From 69346bfaa1e8d8663216991eb2388a323a7e63b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Cort=C3=A9z?= Date: Tue, 20 Sep 2016 10:33:20 -0500 Subject: [PATCH] Added a very basic user profile viewer #7 --- src/controller/posts.py | 77 ++++++++++++++++++++++++++++++++- src/wxUI/dialogs/postDialogs.py | 64 ++++++++++++++++++++++++++- src/wxUI/menus.py | 2 + 3 files changed, 141 insertions(+), 2 deletions(-) diff --git a/src/controller/posts.py b/src/controller/posts.py index d8a77c9..3782fc2 100644 --- a/src/controller/posts.py +++ b/src/controller/posts.py @@ -267,7 +267,7 @@ class postController(object): def post_repost(self, *args, **kwargs): object_id = "wall{0}_{1}".format(self.post[self.user_identifier], self.post[self.post_identifier]) - p = messages.post(title=_(u"Repost"), caption=_(u"Add your comment here"), text="") + p = messages.post(session=self.session, title=_(u"Repost"), caption=_(u"Add your comment here"), text="") if p.message.get_response() == widgetUtils.OK: msg = p.message.get_text().encode("utf-8") self.session.vk.client.wall.repost(object=object_id, message=msg) @@ -531,3 +531,78 @@ class friendship(object): def set_friends_list(self, friendslist): for i in friendslist: self.dialog.friends.insert_item(False, *[i]) + +class userProfile(object): + + def __init__(self, session, user_id): + self.person = None + self.session = session + self.user_id = user_id + self.dialog = postDialogs.userProfile() + self.get_information() + if self.person != None: + self.dialog.get_response() + + def get_information(self): + """ Gets and inserts user information""" + fields = "first_name, last_name, sex, bdate, city, country, home_town, photo_200_orig, online, contacts, site, education, universities, schools, status, last_seen, counters, occupation" + person = self.session.vk.client.users.get(user_ids=self.user_id, fields=fields) + if len(person) == 0: + return output.speak(_(u"Information for groups is not supported, yet.")) + person = person[0] + # Gets full name. + n = u"{0} {1}".format(person["first_name"], person["last_name"]) + # Gets birthdate. + if person.has_key("bdate") and person["bdate"] != "": + self.dialog.enable("bdate") + if len(person["bdate"]) <= 5: + d = arrow.get(person["bdate"], "D.m") + self.dialog.set("bdate", d.format(_(u"MMMM D"), locale=languageHandler.getLanguage())) + else: + d = arrow.get(person["bdate"], "D.M.YYYY") + self.dialog.set("bdate", d.format(_(u"MMMM D, YYYY"), locale=languageHandler.getLanguage())) + # Gets current city and home town + city = "" + home_city = "" + if person.has_key("home_town") and person["home_town"] != "": + home_city = _(u"(from {0})").format(person["home_town"]) + if person.has_key("city") and len(person["city"]) > 0: + city = person["city"]["title"] + if person.has_key("country") and person["country"] != "": + if city != "": + city = city+u", {0}".format(person["country"]["title"]) + else: + city = person["country"]["title"] + if home_city != "": + self.dialog.set("city", city+" "+home_city) + self.dialog.enable("city") + else: + self.dialog.set("city", city) + self.dialog.enable("city") + self.dialog.set("name", n) + # Gets website + if person.has_key("site") and person["site"] != "": + self.dialog.enable("website") + self.dialog.set("website", person["site"]) + self.dialog.enable("go_site") + widgetUtils.connect_event(self.dialog.go_site, widgetUtils.BUTTON_PRESSED, self.visit_website) + if person.has_key("status") and person["status"] != "": + self.dialog.enable("status") + self.dialog.set("status", person["status"]) + if person.has_key("occupation") and person["occupation"] != None: + if person["occupation"]["type"] == "work": c1 = _(u"Work ") + elif person["occupation"]["type"] == "school": c1 = _(u"Student ") + elif person["occupation"]["type"] == "university": c1 = _(u"Student ") + if person["occupation"].has_key("name") and person["occupation"]["name"] != "": + c2 = _(u"In {0}").format(person["occupation"]["name"],) + else: + c2 = "" + self.dialog.enable("occupation") + self.dialog.set("occupation", c1+c2) + log.info("getting info...") + self.person = person + self.dialog.SetClientSize(self.dialog.sizer.CalcMin()) + + def visit_website(self, *args, **kwargs): + output.speak(_(u"Opening website...")) + webbrowser.open_new_tab(self.person["site"]) \ No newline at end of file diff --git a/src/wxUI/dialogs/postDialogs.py b/src/wxUI/dialogs/postDialogs.py index 4389940..e887eeb 100644 --- a/src/wxUI/dialogs/postDialogs.py +++ b/src/wxUI/dialogs/postDialogs.py @@ -221,4 +221,66 @@ class friendship(widgetUtils.BaseDialog): btnbox.Add(close, 0, wx.ALL, 5) sizer.Add(btnbox, 0, wx.ALL, 5) panel.SetSizer(sizer) - self.SetClientSize(sizer.CalcMin()) \ No newline at end of file + self.SetClientSize(sizer.CalcMin()) + +class userProfile(widgetUtils.BaseDialog): + def __init__(self): + super(userProfile, self).__init__(parent=None) + panel = wx.Panel(self) + self.sizer = wx.BoxSizer(wx.VERTICAL) + lblName = wx.StaticText(panel, wx.NewId(), _(u"Name")) + self.name = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + sizerName = wx.BoxSizer(wx.HORIZONTAL) + sizerName.Add(lblName, 0, wx.ALL, 5) + sizerName.Add(self.name, 0, wx.ALL, 5) + self.sizer.Add(sizerName, 0, wx.ALL, 5) + + lblStatus = wx.StaticText(panel, wx.NewId(), _(u"Status")) + self.status = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + self.status.Enable(False) + sizerStatus = wx.BoxSizer(wx.HORIZONTAL) + sizerStatus.Add(lblStatus, 0, wx.ALL, 5) + sizerStatus.Add(self.status, 0, wx.ALL, 5) + self.sizer.Add(sizerStatus, 0, wx.ALL, 5) + + lblBDate = wx.StaticText(panel, wx.NewId(), _(u"Birthdate")) + self.bdate = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + self.bdate.Enable(False) + sizerBDate = wx.BoxSizer(wx.HORIZONTAL) + sizerBDate.Add(lblBDate, 0, wx.ALL, 5) + sizerBDate.Add(self.bdate, 0, wx.ALL, 5) + self.sizer.Add(sizerBDate, 0, wx.ALL, 5) + + lblCity = wx.StaticText(panel, wx.NewId(), _(u"City")) + self.city = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + self.city.Enable(False) + sizerCity = wx.BoxSizer(wx.HORIZONTAL) + sizerCity.Add(lblCity, 0, wx.ALL, 5) + sizerCity.Add(self.city, 0, wx.ALL, 5) + self.sizer.Add(sizerCity, 0, wx.ALL, 5) + + lblWebsite = wx.StaticText(panel, wx.NewId(), _(u"Website")) + self.website = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + self.website.Enable(False) + self.go_site = wx.Button(panel, -1, _(u"Visit website")) + self.go_site.Enable(False) + sizerWebsite = wx.BoxSizer(wx.HORIZONTAL) + sizerWebsite.Add(lblWebsite, 0, wx.ALL, 5) + sizerWebsite.Add(self.website, 0, wx.ALL, 5) + sizerWebsite.Add(self.go_site, 0, wx.ALL, 5) + self.sizer.Add(sizerWebsite, 0, wx.ALL, 5) + + lblOccupation = wx.StaticText(panel, wx.NewId(), _(u"Occupation")) + self.occupation = wx.TextCtrl(panel, wx.NewId(), style=wx.TE_READONLY|wx.TE_MULTILINE) + self.occupation.Enable(False) + sizerOccupation = wx.BoxSizer(wx.HORIZONTAL) + sizerOccupation.Add(lblOccupation, 0, wx.ALL, 5) + sizerOccupation.Add(self.occupation, 0, wx.ALL, 5) + self.sizer.Add(sizerOccupation, 0, wx.ALL, 5) + + cancel = wx.Button(panel, wx.ID_CANCEL) + btnSizer = wx.BoxSizer(wx.HORIZONTAL) + btnSizer.Add(cancel, 0, wx.ALL, 5) + self.sizer.Add(cancel, 0, wx.ALL, 5) + panel.SetSizer(self.sizer) + self.SetClientSize(self.sizer.CalcMin()) \ No newline at end of file diff --git a/src/wxUI/menus.py b/src/wxUI/menus.py index e9f576e..5505c06 100644 --- a/src/wxUI/menus.py +++ b/src/wxUI/menus.py @@ -16,6 +16,8 @@ class postMenu(wx.Menu): self.post_in_wall = wx.MenuItem(self, wx.NewId(), _(u"Post to this profile")) self.post_in_wall.Enable(False) self.AppendItem(self.post_in_wall) + self.view_profile = wx.MenuItem(self, wx.NewId(), _(u"View user profile")) + self.AppendItem(self.view_profile) def create_specific_post_options(self): self.update = wx.MenuItem(self, wx.NewId(), _(u"Update"))