Merge lp:~eduardo-mucelli/cairo-dock-plug-ins-extras/Twitter into lp:~cairo-dock-team/cairo-dock-plug-ins-extras/third-party

Proposed by Eduardo Mucelli Rezende Oliveira
Status: Merged
Merged at revision: 241
Proposed branch: lp:~eduardo-mucelli/cairo-dock-plug-ins-extras/Twitter
Merge into: lp:~cairo-dock-team/cairo-dock-plug-ins-extras/third-party
Diff against target: 173 lines (+38/-57)
1 file modified
Twitter/Twitter (+38/-57)
To merge this branch: bzr merge lp:~eduardo-mucelli/cairo-dock-plug-ins-extras/Twitter
Reviewer Review Type Date Requested Status
Matthieu Baerts Approve
Review via email: mp+98068@code.launchpad.net

Description of the change

Improving code, DRYing the oauth methods. Added the number of new tweets on the menu.

To post a comment you must log in.
Revision history for this message
Matthieu Baerts (matttbe) wrote :

Thank you ;)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Twitter/Twitter'
2--- Twitter/Twitter 2012-03-14 00:06:29 +0000
3+++ Twitter/Twitter 2012-03-17 19:44:18 +0000
4@@ -127,57 +127,35 @@
5 self.new_direct_messages_url = 'https://api.twitter.com/1/direct_messages/new.json'
6 self.verify_credentials_url = 'https://api.twitter.com/1/account/verify_credentials.json'
7
8- def tweet(self, message): # popularly "send a tweet"
9- params = {'status':message}
10+ def dispatch(self, url, mode, parameters={}):
11 oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer,
12- token = self.access_token,
13- http_url = self.update_url,
14- parameters = params,
15- http_method = "POST")
16+ token = self.access_token,
17+ http_url = url,
18+ parameters = parameters,
19+ http_method = mode)
20 oauth_request.sign_request(self.signature_method, self.consumer, self.access_token)
21- header = oauth_request.to_header()
22- post(self.update_url, params, header)
23+ if mode == "GET":
24+ url = oauth_request.to_url()
25+ response = get(url)
26+ return simplejson.loads(response)
27+ elif mode == "POST":
28+ header = oauth_request.to_header()
29+ post(url, parameters, header)
30+
31+ def tweet(self, message): # popularly "send a tweet"
32+ self.dispatch(self.update_url, "POST", {'status':message})
33
34 def new_direct_message(self, message, destinatary):
35- params = {'text':message, 'screen_name':destinatary}
36- oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer,
37- token = self.access_token,
38- http_url = self.new_direct_messages_url,
39- parameters = params,
40- http_method = "POST")
41- oauth_request.sign_request(self.signature_method, self.consumer, self.access_token)
42- header = oauth_request.to_header()
43- post(self.new_direct_messages_url, params, header)
44+ self.dispatch(self.new_direct_messages_url, "POST", {'text':message, 'screen_name':destinatary})
45
46 def home_timeline(self):
47- oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer,
48- token = self.access_token,
49- http_url = self.home_timeline_url,
50- http_method = "GET")
51- oauth_request.sign_request(self.signature_method, self.consumer, self.access_token)
52- url = oauth_request.to_url()
53- response = get(url)
54- return simplejson.loads(response)
55+ return self.dispatch(self.home_timeline_url, "GET")
56
57 def direct_messages(self):
58- oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer,
59- token = self.access_token,
60- http_url = self.direct_messages_url,
61- http_method = "GET")
62- oauth_request.sign_request(self.signature_method, self.consumer, self.access_token)
63- url = oauth_request.to_url()
64- response = get(url)
65- return simplejson.loads(response)
66+ return self.dispatch(self.direct_messages_url, "GET")
67
68 def verify_credentials(self):
69- oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer,
70- token = self.access_token,
71- http_url = self.verify_credentials_url,
72- http_method = "GET")
73- oauth_request.sign_request(self.signature_method, self.consumer, self.access_token)
74- url = oauth_request.to_url()
75- response = get(url)
76- return simplejson.loads(response)
77+ return self.dispatch(self.verify_credentials_url, "GET")
78
79 class Message:
80 def __init__(self, text, sender):
81@@ -211,16 +189,16 @@
82 if 'user' in entry: # tweet
83 if not entry['user']['screen_name'] == self.user.screen_name:
84 logp("Inserting new tweet on the stream Queue: %s" % entry) # not sent by the own user
85- self.stream.put(entry) # put the new tweet on the stream queue
86- self.emblem.update(self.stream.qsize()) # create the emblem with the counter
87+ self.tweet_stream.put(entry) # put the new tweet on the stream queue
88+ self.emblem.update(self.tweet_stream.qsize()) # create the emblem with the counter
89 self.icon.SetEmblem(self.emblem.emblem, CDApplet.EMBLEM_TOP_RIGHT + CDApplet.EMBLEM_PERSISTENT) # add emblem
90
91 # TODO: Use the Menu class
92 def show_new_tweets(self):
93 self.inform_start_of_waiting_process()
94 message = ''
95- while not self.stream.empty(): # iterate on the stream composing the message
96- tweet = self.stream.get()
97+ while not self.tweet_stream.empty(): # iterate on the stream composing the message
98+ tweet = self.tweet_stream.get()
99 message += "[<b>%s</b>] %s\n" % (tweet['user']['name'], tweet['text'])
100 dialog = {'use-markup':True}
101 self.icon.SetEmblem("", CDApplet.EMBLEM_TOP_RIGHT) # erase emblem
102@@ -228,6 +206,7 @@
103 self.show_popup_message(message, dialog)
104
105 # TODO: Use the Menu class
106+ # TODO: Add an option on the context menu for Home Timeline
107 def show_home_timeline(self):
108 self.inform_start_of_waiting_process()
109 timeline = self.api.home_timeline()
110@@ -350,6 +329,7 @@
111 widget_attributes.update(widget)
112 self.icon.PopupDialog (dialog_attributes, widget_attributes)
113
114+ # TODO: As soon as the message_stream is done, put _("Received direct messages (%d)" % % self.message_stream.qsize())
115 def build_direct_messages_menu(self):
116 direct_messages_menu = []
117 direct_messages_menu.append ({
118@@ -370,16 +350,15 @@
119 })
120 self.icon.AddMenuItems(credentials_menu)
121
122- # TODO: As soon as clean up the API code, the label will be: "New tweets (%d)" % self.tweets_on_the_user_stream_queue
123- def build_user_stream_menu(self):
124- user_stream_menu = []
125- user_stream_menu.append ({
126+ def build_tweet_stream_menu(self):
127+ tweet_stream_menu = []
128+ tweet_stream_menu.append ({
129 'type' : CDApplet.MENU_ENTRY,
130- 'label' : _("New tweets"),
131- 'id' : self.user_stream_menu_id,
132+ 'label' : _("New tweets (%d)" % self.tweet_stream.qsize()),
133+ 'id' : self.tweet_stream_menu_id,
134 'icon' : os.path.abspath("./data/new.png")
135 })
136- self.icon.AddMenuItems(user_stream_menu)
137+ self.icon.AddMenuItems(tweet_stream_menu)
138
139 def __init__(self):
140 self.user = User()
141@@ -395,9 +374,11 @@
142
143 self.direct_messages_menu_id = 1000
144 self.credentials_menu_id = 2000
145- self.user_stream_menu_id = 3000
146+ self.tweet_stream_menu_id = 3000
147
148- self.stream = Queue.Queue()
149+ #self.stream = Queue.Queue()
150+ self.tweet_stream = Queue.Queue()
151+ self.messages_stream = Queue.Queue()
152 #self.direct_messages = {}
153
154 CDApplet.__init__(self) # call CDApplet interface init
155@@ -455,15 +436,15 @@
156 def on_build_menu(self):
157 self.build_direct_messages_menu()
158 self.build_credentials_menu()
159- if self.stream.qsize() > 0:
160- self.build_user_stream_menu()
161+ if self.tweet_stream.qsize() > 0:
162+ self.build_tweet_stream_menu()
163
164 def on_menu_select(self, selected_menu):
165 if selected_menu == self.direct_messages_menu_id:
166 self.show_direct_messages()
167 elif selected_menu == self.credentials_menu_id:
168 self.show_credentials()
169- elif selected_menu == self.user_stream_menu_id:
170+ elif selected_menu == self.tweet_stream_menu_id:
171 self.show_new_tweets()
172
173 if __name__ == '__main__':

Subscribers

People subscribed via source and target branches