~gmb/gwibber/use-dates-for-indexes

« back to all changes in this revision

Viewing changes to gwibber/client.py

Support showing twitter user's timeline in a new tab. Clicking on @username or
avatars will open a new tab with that user's timeline. The external profile can
then be opened in an external browser by using the link at the top of this
new tab.

TODO: identi.ca/laconi.ca not yet done but support will come in a branch _very_
soon.

Merge from lp:~oldman/gwibber/twitter-user-messages-tab

Show diffs side-by-side

added added

removed removed

Lines of Context:
131
131
    self.tabs = gtk.Notebook()
132
132
    self.tabs.set_property("homogeneous", False)
133
133
    self.tabs.set_scrollable(True)
134
 
    self.messages_view = self.add_tab(self.client.receive, _("Messages"), show_icon = "go-home")
135
 
    self.add_tab(self.client.responses, _("Replies"), show_icon = "mail-reply-all")
 
134
    self.messages_view = self.add_msg_tab(self.client.receive, _("Messages"), show_icon = "go-home")
 
135
    self.add_msg_tab(self.client.responses, _("Replies"), show_icon = "mail-reply-all")
136
136
 
137
137
    saved_position = config.GCONF.get_list("%s/%s" % (config.GCONF_PREFERENCES_DIR, "saved_position"), config.gconf.VALUE_INT)
138
138
    if saved_position:
148
148
    if saved_queries:
149
149
      for query in saved_queries:
150
150
        if query.startswith("#"):
151
 
          self.add_tab(functools.partial(self.client.tag, query),
 
151
          self.add_msg_tab(functools.partial(self.client.tag, query),
152
152
            query.replace("#", ""), True, gtk.STOCK_INFO, False, query)
153
153
        elif microblog.support.LINK_PARSE.match(query):
154
154
          self.add_tab(functools.partial(self.client.search_url, query),
155
155
            urlparse.urlparse(query)[1], True, gtk.STOCK_FIND, True, query)
156
156
        elif len(query) > 0:
157
 
          self.add_tab(functools.partial(self.client.search, query),
 
157
          self.add_msg_tab(functools.partial(self.client.search, query),
158
158
            query, True, gtk.STOCK_FIND, False, query)
159
159
        
160
160
    #self.add_map_tab(self.client.friend_positions, "Location")
303
303
      query = entry.get_text()
304
304
      view = None
305
305
      if query.startswith("#"):
306
 
        view = self.add_tab(functools.partial(self.client.tag, query),
 
306
        view = self.add_msg_tab(functools.partial(self.client.tag, query),
307
307
          query.replace("#", ""), True, gtk.STOCK_INFO, True, query)
308
308
      elif microblog.support.LINK_PARSE.match(query):
309
309
        view = self.add_tab(functools.partial(self.client.search_url, query),
310
310
          urlparse.urlparse(query)[1], True, gtk.STOCK_FIND, True, query)
311
311
      elif len(query) > 0:
312
 
        view = self.add_tab(functools.partial(self.client.search, query),
 
312
        view = self.add_msg_tab(functools.partial(self.client.search, query),
313
313
          query, True, gtk.STOCK_FIND, True, query)
314
314
      
315
315
      if view:
316
316
        self.update([view.get_parent()])
317
 
    
318
 
  def add_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
319
 
    view = gwui.MessageView(self.preferences["theme"])
320
 
    view.link_handler = self.on_link_clicked
321
 
    view.data_retrieval_handler = data_handler
322
 
    view.config_retrieval_handler = self.get_account_config
323
317
 
 
318
  def add_scrolled_parent(self, view, text, show_close=False, show_icon=None, make_active=False, save=None):
324
319
    scroll = gtk.ScrolledWindow()
325
320
    scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
326
321
    scroll.add(view)
346
341
    if make_active: self.tabs.set_current_page(self.tabs.page_num(scroll))
347
342
 
348
343
    btn.connect("clicked", self.on_tab_close, scroll)
 
344
    
 
345
  def add_msg_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
 
346
    view = gwui.MessageView(self.preferences["theme"])
 
347
    view.link_handler = self.on_link_clicked
 
348
    view.data_retrieval_handler = data_handler
 
349
    view.config_retrieval_handler = self.get_account_config
 
350
 
 
351
    self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
 
352
    return view
 
353
 
 
354
  def add_user_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
 
355
    view = gwui.UserView(self.preferences["theme"])
 
356
    view.link_handler = self.on_link_clicked
 
357
    view.data_retrieval_handler = data_handler
 
358
    view.config_retrieval_handler = self.get_account_config
 
359
 
 
360
    self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
349
361
    return view
350
362
 
351
363
  def add_map_tab(self, data_handler, text, show_close = True, show_icon = "applications-internet"):
354
366
    view.data_retrieval_handler = data_handler
355
367
    view.config_retrieval_handler = self.get_account_config
356
368
 
357
 
    scroll = gtk.Frame()
358
 
    #scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
359
 
    scroll.add(view)
360
 
 
361
 
    img = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
362
 
 
363
 
    btn = gtk.Button()
364
 
    btn.set_image(img)
365
 
    btn.set_relief(gtk.RELIEF_NONE)
366
 
    btn.set_name("tab-close-button")
367
 
 
368
 
    hb = gtk.HBox(spacing=2)
369
 
    if show_icon:
370
 
      hb.pack_start(gtk.image_new_from_icon_name(show_icon, gtk.ICON_SIZE_MENU))
371
 
    hb.pack_start(gtk.Label(text))
372
 
    if show_close: hb.pack_end(btn, False, False)
373
 
    hb.show_all()
374
 
    
375
 
    self.tabs.append_page(scroll, hb)
376
 
    self.tabs.set_tab_reorderable(scroll, True)
377
 
    self.tabs.show_all()
378
 
 
379
 
    btn.connect("clicked", self.on_tab_close, scroll)
 
369
    self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
380
370
    return view
381
371
 
382
372
  def on_tab_close(self, w, e):
467
457
    """
468
458
    if acct["protocol"] in microblog.PROTOCOLS.keys():
469
459
      if hasattr(message.client, "can_reply"):
470
 
        view = self.add_tab(lambda: self.client.thread(message), "Jaiku Replies", True)
 
460
        view = self.add_msg_tab(lambda: self.client.thread(message), "Jaiku Replies", True)
471
461
        view.load_messages()
472
462
        view.load_preferences(self.get_account_config())
473
463
    """
479
469
        return True
480
470
      elif uri.startswith("gwibber:search"):
481
471
        query = uri.split("/")[-1]
482
 
        view = self.add_tab(lambda: self.client.search(query), query, True, gtk.STOCK_FIND, True, query)
 
472
        view = self.add_msg_tab(lambda: self.client.search(query), query, True, gtk.STOCK_FIND, True, query)
483
473
        self.update([view.get_parent()])
484
474
        return True
485
475
      elif uri.startswith("gwibber:tag"):
486
476
        query = uri.split("/")[-1]
487
 
        view = self.add_tab(lambda: self.client.tag(query),
 
477
        view = self.add_msg_tab(lambda: self.client.tag(query),
488
478
          query, True, gtk.STOCK_INFO, True, query)
489
479
        self.update([view.get_parent()])
490
480
        return True
498
488
        msg = view.message_store[int(uri.split("/")[-1])]
499
489
        if hasattr(msg, "original_title"): tab_label = msg.original_title
500
490
        else: tab_label = msg.text
501
 
        t = self.add_tab(lambda: self.client.thread(msg),
 
491
        t = self.add_msg_tab(lambda: self.client.thread(msg),
502
492
          microblog.support.truncate(tab_label), True, "mail-reply-all", True)
503
493
        self.update([t.get_parent()])
504
494
        return True
 
495
      elif uri.startswith("gwibber:user"):
 
496
        query = uri.split("/")[-1]
 
497
        view = self.add_user_tab(lambda: self.client.user_messages(query),
 
498
          query, True, gtk.STOCK_INFO, True)
 
499
        self.update([view.get_parent()])
 
500
        return True
505
501
    else: return False
506
502
 
507
503
  def on_input_context_menu(self, obj, menu):