# -*- coding: utf-8 -*- import wx import webbrowser import widgetUtils import output from wxUI.dialogs import update_profile, show_user import logging log = logging.getLogger("controller.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.get_data(screen_name=self.session.db["user_name"]) self.dialog = update_profile.updateProfileDialog() self.fill_profile_fields() self.uploaded = False widgetUtils.connect_event(self.dialog.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image) else: try: self.get_data(screen_name=self.user) except TwythonError as err: if err.error_code == 404: wx.MessageDialog(None, _(u"That user does not exist"), _(u"Error"), wx.ICON_ERROR).ShowModal() if err.error_code == 403: wx.MessageDialog(None, _(u"User has been suspended"), _(u"Error"), wx.ICON_ERROR).ShowModal() log.error("error %d: %s" % (err.error_code, err.msg)) return self.dialog = show_user.showUserProfile() 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) if screen_name != self.session.db["user_name"]: self.friendship_status = self.session.twitter.twitter.show_friendship(source_screen_name=self.session.db["user_name"], target_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) if hasattr(self, "friendship_status"): relation = False friendship = "Relationship: " if self.friendship_status["relationship"]["target"]["followed_by"]: friendship += _(u"You follow {0}. ").format(self.data["name"],) relation = True if self.friendship_status["relationship"]["target"]["following"]: friendship += _(u"{0} is following you.").format(self.data["name"],) relation = True if relation == True: string = string+friendship+"\n" string = string+_(u"Followers: %s\n Friends: %s\n") % (self.data["followers_count"], self.data["friends_count"]) if self.data["verified"] == True: verified = _(u"Yes") else: verified = _(u"No") string = string+ _(u"Verified: %s\n") % (verified) string = string+ _(u"Tweets: %s\n") % (self.data["statuses_count"]) string = string+ _(u"Likes: %s") % (self.data["favourites_count"]) return string def visit_url(self, *args, **kwargs): webbrowser.open_new_tab(self.data["url"])