~ubuntu-branches/ubuntu/precise/gwibber-service-sohu/precise-updates

« back to all changes in this revision

Viewing changes to .pc/gtk3.patch/gtk/sohu/__init__.py

  • Committer: Package Import Robot
  • Author(s): Ken VanDine
  • Date: 2012-03-19 15:27:20 UTC
  • Revision ID: package-import@ubuntu.com-20120319152720-s8v2n6n6zo6y91hq
Tags: 0.8.1-0ubuntu5
* debian/patches/gtk3.patch
  - ported accounts dialog to gtk3 (LP: #959614)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import gtk, pango, webkit, gnomekeyring
 
2
import urllib, urllib2, json, urlparse, uuid
 
3
from oauth import oauth
 
4
 
 
5
from gtk import Builder
 
6
from gwibber.microblog.util import resources
 
7
import gettext
 
8
from gettext import gettext as _
 
9
if hasattr(gettext, 'bind_textdomain_codeset'):
 
10
    gettext.bind_textdomain_codeset('gwibber','UTF-8')
 
11
gettext.textdomain('gwibber-service-sohu')
 
12
import sohu.utils
 
13
 
 
14
gtk.gdk.threads_init()
 
15
 
 
16
sigmeth = oauth.OAuthSignatureMethod_HMAC_SHA1()
 
17
 
 
18
class AccountWidget(gtk.VBox):
 
19
  """AccountWidget: A widget that provides a user interface for configuring sohu accounts in Gwibber
 
20
  """
 
21
  
 
22
  def __init__(self, account=None, dialog=None):
 
23
    """Creates the account pane for configuring Sohu accounts"""
 
24
    gtk.VBox.__init__( self, False, 20 )
 
25
    self.ui = gtk.Builder()
 
26
    self.ui.set_translation_domain ("gwibber")
 
27
    self.ui.add_from_file (resources.get_ui_asset("gwibber-accounts-sohu.ui"))
 
28
    self.ui.connect_signals(self)
 
29
    self.vbox_settings = self.ui.get_object("vbox_settings")
 
30
    self.pack_start(self.vbox_settings, False, False)
 
31
    self.show_all()
 
32
 
 
33
    self.account = account or {}
 
34
    self.dialog = dialog
 
35
    has_secret_key = True
 
36
    if self.account.has_key("id"):
 
37
      try:
 
38
        value = gnomekeyring.find_items_sync(gnomekeyring.ITEM_GENERIC_SECRET, {"id": str("%s/%s" % (self.account["id"], "secret_token"))})[0].secret
 
39
      except gnomekeyring.NoMatchError:
 
40
        has_secret_key = False
 
41
 
 
42
    try:
 
43
      if self.account.has_key("access_token") and self.account.has_key("secret_token") and self.account.has_key("username") and has_secret_key and not self.dialog.condition:
 
44
        self.ui.get_object("hbox_sohu_auth").hide()
 
45
        self.ui.get_object("sohu_auth_done_label").set_label(_("%s has been authorized by Sohu") % self.account["username"])
 
46
        self.ui.get_object("hbox_sohu_auth_done").show()
 
47
      else:
 
48
        self.ui.get_object("hbox_sohu_auth_done").hide()
 
49
        if self.dialog.ui:
 
50
          self.dialog.ui.get_object('vbox_create').hide()
 
51
    except:
 
52
      self.ui.get_object("hbox_sohu_auth_done").hide()
 
53
      if self.dialog.ui:
 
54
        self.dialog.ui.get_object("vbox_create").hide()
 
55
 
 
56
 
 
57
  def on_sohu_auth_clicked(self, widget, data=None):
 
58
    self.winsize = self.window.get_size()
 
59
 
 
60
    web = webkit.WebView()
 
61
    web.get_settings().set_property("enable-plugins", False)
 
62
    web.load_html_string(_("<p>Please wait...</p>"), "file:///")
 
63
 
 
64
    self.consumer = oauth.OAuthConsumer(*sohu.utils.get_sohu_keys())
 
65
 
 
66
    request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, http_method="POST",
 
67
        callback="http://gwibber.com/0/auth.html",
 
68
        http_url="http://api.t.sohu.com/oauth/request_token")
 
69
 
 
70
    request.sign_request(sigmeth, self.consumer, token=None)
 
71
 
 
72
    tokendata = urllib2.urlopen(request.http_url, request.to_postdata()).read()
 
73
    self.token = oauth.OAuthToken.from_string(tokendata)
 
74
 
 
75
    #url = "http://api.t.sohu.com/oauth/authorize?oauth_token=" + self.token.key
 
76
    url = "http://api.t.sohu.com/oauth/authorize?oauth_token=%s&oauth_callback=%s&display=popup" % ( self.token.key, "http://gwibber.com/0/auth.html" )
 
77
 
 
78
    web.load_uri(url)
 
79
    web.set_size_request(550, 400)
 
80
    web.connect("title-changed", self.on_sohu_auth_title_change)
 
81
 
 
82
    self.scroll = gtk.ScrolledWindow()
 
83
    self.scroll.add(web)
 
84
 
 
85
    self.pack_start(self.scroll, True, True, 0)
 
86
    self.show_all()
 
87
 
 
88
    self.ui.get_object("vbox1").hide()
 
89
    self.ui.get_object("vbox_advanced").hide()
 
90
    self.dialog.infobar.set_message_type(gtk.MESSAGE_INFO)
 
91
 
 
92
  def on_sohu_auth_title_change(self, web=None, title=None, data=None):
 
93
    saved = False
 
94
    if title.get_title() == "Success":
 
95
 
 
96
      if hasattr(self.dialog, "infobar_content_area"):
 
97
        for child in self.dialog.infobar_content_area.get_children(): child.destroy()
 
98
      self.dialog.infobar_content_area = self.dialog.infobar.get_content_area()
 
99
      self.dialog.infobar_content_area.show()
 
100
      self.dialog.infobar.show()
 
101
 
 
102
      message_label = gtk.Label(_("Verifying"))
 
103
      message_label.set_use_markup(True)
 
104
      message_label.set_ellipsize(pango.ELLIPSIZE_END)
 
105
      self.dialog.infobar_content_area.add(message_label)
 
106
      self.dialog.infobar.show_all()
 
107
      self.scroll.hide()
 
108
      url = web.get_main_frame().get_uri()
 
109
      data = urlparse.parse_qs(url.split("?", 1)[1])
 
110
 
 
111
      self.ui.get_object("vbox1").show()
 
112
      self.ui.get_object("vbox_advanced").show()
 
113
 
 
114
      token = data["oauth_token"][0]
 
115
      verifier = data["oauth_verifier"][0]
 
116
 
 
117
      request = oauth.OAuthRequest.from_consumer_and_token(
 
118
        self.consumer, self.token, http_method="POST",
 
119
        http_url="http://api.t.sohu.com/oauth/access_token",
 
120
        parameters={"oauth_verifier": str(verifier)})
 
121
      request.sign_request(sigmeth, self.consumer, self.token)
 
122
 
 
123
      tokendata = urllib2.urlopen(request.http_url, request.to_postdata()).read()
 
124
      data = urlparse.parse_qs(tokendata)
 
125
 
 
126
      atok = oauth.OAuthToken.from_string(tokendata)
 
127
 
 
128
      self.account["access_token"] = data["oauth_token"][0]
 
129
      self.account["secret_token"] = data["oauth_token_secret"][0]
 
130
 
 
131
      apireq = oauth.OAuthRequest.from_consumer_and_token(
 
132
        self.consumer, atok,
 
133
        http_method="GET",
 
134
        http_url="http://api.t.sohu.com/account/verify_credentials.json", parameters=None)
 
135
 
 
136
      apireq.sign_request(sigmeth, self.consumer, atok)
 
137
 
 
138
      account_data = json.loads(urllib2.urlopen(apireq.to_url()).read())
 
139
 
 
140
      self.account["username"] = account_data["screen_name"]
 
141
      self.account["user_id"] = account_data["id"]
 
142
 
 
143
      if isinstance(account_data, dict):
 
144
        if account_data.has_key("id"):
 
145
          saved = self.dialog.on_edit_account_save()
 
146
        else:
 
147
          print "Failed"
 
148
          self.dialog.infobar.set_message_type(gtk.MESSAGE_ERROR)
 
149
          message_label.set_text(_("Authorization failed. Please try again.")) 
 
150
      else:
 
151
        print "Failed"
 
152
        self.dialog.infobar.set_message_type(gtk.MESSAGE_ERROR)
 
153
        message_label.set_text(_("Authorization failed. Please try again."))
 
154
 
 
155
      if saved: 
 
156
        message_label.set_text(_("Successful"))
 
157
        self.dialog.infobar.set_message_type(gtk.MESSAGE_INFO)
 
158
        #self.dialog.infobar.hide()
 
159
 
 
160
      self.ui.get_object("hbox_sohu_auth").hide()
 
161
      self.ui.get_object("sohu_auth_done_label").set_label(_("%s has been authorized by Sohu") % str(self.account["username"]))
 
162
      self.ui.get_object("hbox_sohu_auth_done").show()
 
163
      if self.dialog.ui and self.account.has_key("id") and not saved:
 
164
        self.dialog.ui.get_object("vbox_save").show()
 
165
      elif self.dialog.ui and not saved:
 
166
        self.dialog.ui.get_object("vbox_create").show()
 
167
 
 
168
    self.window.resize(*self.winsize)
 
169
 
 
170
    if title.get_title() == "Failure":
 
171
      web.hide()
 
172
      self.dialog.infobar.set_message_type(gtk.MESSAGE_ERROR)
 
173
      message_label.set_text(_("Authorization failed. Please try again."))
 
174
      self.dialog.infobar.show_all()
 
175
 
 
176
      self.ui.get_object("vbox1").show()
 
177
      self.ui.get_object("vbox_advanced").show()
 
178
      self.window.resize(*self.winsize)