mirror of
				https://github.com/MCV-Software/TWBlue.git
				synced 2025-11-03 21:37:05 +00:00 
			
		
		
		
	Separate all buffers in modules for an easier work with code
This commit is contained in:
		@@ -1,8 +1,3 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
""" this package contains logic related to buffers. A buffer is a virtual representation of a group of items retrieved through the Social network API'S.
 | 
					from . import base as base
 | 
				
			||||||
  Ideally, new social networks added to TWBlue will have its own "buffers", and these buffers should be defined within this package, following the Twitter example.
 | 
					from . import twitter as twitter
 | 
				
			||||||
  Currently, the package contains the following modules:
 | 
					 | 
				
			||||||
    * baseBuffers: Define a set of functions and structure to be expected in all buffers. New buffers should inherit its classes from one of the classes present here.
 | 
					 | 
				
			||||||
    * twitterBuffers: All other code, specific to Twitter.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
from __future__ import unicode_literals
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								src/controller/buffers/base/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/controller/buffers/base/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					from .account import AccountBuffer
 | 
				
			||||||
 | 
					from .base import Buffer
 | 
				
			||||||
 | 
					from .empty import EmptyBuffer
 | 
				
			||||||
							
								
								
									
										56
									
								
								src/controller/buffers/base/account.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/controller/buffers/base/account.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					""" Common logic to all buffers in TWBlue."""
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					import config
 | 
				
			||||||
 | 
					import widgetUtils
 | 
				
			||||||
 | 
					from pubsub import pub
 | 
				
			||||||
 | 
					from wxUI import buffers
 | 
				
			||||||
 | 
					from . import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.base.account")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AccountBuffer(base.Buffer):
 | 
				
			||||||
 | 
					    def __init__(self, parent, name, account, account_id):
 | 
				
			||||||
 | 
					        super(AccountBuffer, self).__init__(parent, None, name)
 | 
				
			||||||
 | 
					        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
				
			||||||
 | 
					        self.buffer = buffers.accountPanel(parent, name)
 | 
				
			||||||
 | 
					        self.type = self.buffer.type
 | 
				
			||||||
 | 
					        self.compose_function = None
 | 
				
			||||||
 | 
					        self.session = None
 | 
				
			||||||
 | 
					        self.needs_init = False
 | 
				
			||||||
 | 
					        self.account = account
 | 
				
			||||||
 | 
					        self.buffer.account = account
 | 
				
			||||||
 | 
					        self.name = name
 | 
				
			||||||
 | 
					        self.account_id = account_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setup_account(self):
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer, widgetUtils.CHECKBOX, self.autostart, menuitem=self.buffer.autostart_account)
 | 
				
			||||||
 | 
					        if self.account_id in config.app["sessions"]["ignored_sessions"]:
 | 
				
			||||||
 | 
					            self.buffer.change_autostart(False)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.change_autostart(True)
 | 
				
			||||||
 | 
					        if not hasattr(self, "logged"):
 | 
				
			||||||
 | 
					            self.buffer.change_login(login=False)
 | 
				
			||||||
 | 
					            widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.logout)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.change_login(login=True)
 | 
				
			||||||
 | 
					            widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.login)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def login(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        del self.logged
 | 
				
			||||||
 | 
					        self.setup_account()
 | 
				
			||||||
 | 
					        pub.sendMessage("login", session_id=self.account_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def logout(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        self.logged = False
 | 
				
			||||||
 | 
					        self.setup_account()
 | 
				
			||||||
 | 
					        pub.sendMessage("logout", session_id=self.account_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def autostart(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        if self.account_id in config.app["sessions"]["ignored_sessions"]:
 | 
				
			||||||
 | 
					            self.buffer.change_autostart(True)
 | 
				
			||||||
 | 
					            config.app["sessions"]["ignored_sessions"].remove(self.account_id)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.change_autostart(False)
 | 
				
			||||||
 | 
					            config.app["sessions"]["ignored_sessions"].append(self.account_id)
 | 
				
			||||||
 | 
					        config.app.write()
 | 
				
			||||||
@@ -1,26 +1,14 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
""" Common logic to all buffers in TWBlue."""
 | 
					""" Common logic to all buffers in TWBlue."""
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					 | 
				
			||||||
from builtins import object
 | 
					 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import wx
 | 
					import wx
 | 
				
			||||||
import output
 | 
					import output
 | 
				
			||||||
import config
 | 
					 | 
				
			||||||
import sound
 | 
					import sound
 | 
				
			||||||
import widgetUtils
 | 
					import widgetUtils
 | 
				
			||||||
from pubsub import pub
 | 
					 | 
				
			||||||
from wxUI import buffers
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
log = logging.getLogger("controller.buffers.baseBuffers")
 | 
					log = logging.getLogger("controller.buffers.base.base")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _items_exist(function):
 | 
					class Buffer(object):
 | 
				
			||||||
    """ A decorator to execute a function only if the selected buffer contains at least one item."""
 | 
					 | 
				
			||||||
    def function_(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        if self.buffer.list.get_count() > 0:
 | 
					 | 
				
			||||||
            function(self, *args, **kwargs)
 | 
					 | 
				
			||||||
    return function_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class buffer(object):
 | 
					 | 
				
			||||||
    """ A basic buffer object. This should be the base class for all other derived buffers."""
 | 
					    """ A basic buffer object. This should be the base class for all other derived buffers."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, parent=None, function=None, session=None, *args, **kwargs):
 | 
					    def __init__(self, parent=None, function=None, session=None, *args, **kwargs):
 | 
				
			||||||
@@ -29,11 +17,11 @@ class buffer(object):
 | 
				
			|||||||
          @ function str or None: function to be called periodically and update items on this buffer.
 | 
					          @ function str or None: function to be called periodically and update items on this buffer.
 | 
				
			||||||
          @ session sessionmanager.session object or None: Session handler for settings, database and data access.
 | 
					          @ session sessionmanager.session object or None: Session handler for settings, database and data access.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        super(buffer, self).__init__()
 | 
					        super(Buffer, self).__init__()
 | 
				
			||||||
        self.function = function
 | 
					        self.function = function
 | 
				
			||||||
        # Compose_function will be used to render an object on this buffer. Normally, signature is as follows:
 | 
					        # Compose_function will be used to render an object on this buffer. Normally, signature is as follows:
 | 
				
			||||||
        # compose_function(item, db, relative_times, show_screen_names=False, session=None)
 | 
					        # compose_function(item, db, relative_times, show_screen_names=False, session=None)
 | 
				
			||||||
        # Read more about compose functions in twitter/compose.py.
 | 
					        # Read more about compose functions in sessions/twitter/compose.py.
 | 
				
			||||||
        self.compose_function = None
 | 
					        self.compose_function = None
 | 
				
			||||||
        self.args = args
 | 
					        self.args = args
 | 
				
			||||||
        self.kwargs = kwargs
 | 
					        self.kwargs = kwargs
 | 
				
			||||||
@@ -148,62 +136,3 @@ class buffer(object):
 | 
				
			|||||||
            self.session.db[self.name+"_pos"]=self.buffer.list.get_selected()
 | 
					            self.session.db[self.name+"_pos"]=self.buffer.list.get_selected()
 | 
				
			||||||
        except AttributeError:
 | 
					        except AttributeError:
 | 
				
			||||||
            pass
 | 
					            pass
 | 
				
			||||||
 | 
					 | 
				
			||||||
class accountPanel(buffer):
 | 
					 | 
				
			||||||
    def __init__(self, parent, name, account, account_id):
 | 
					 | 
				
			||||||
        super(accountPanel, self).__init__(parent, None, name)
 | 
					 | 
				
			||||||
        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
					 | 
				
			||||||
        self.buffer = buffers.accountPanel(parent, name)
 | 
					 | 
				
			||||||
        self.type = self.buffer.type
 | 
					 | 
				
			||||||
        self.compose_function = None
 | 
					 | 
				
			||||||
        self.session = None
 | 
					 | 
				
			||||||
        self.needs_init = False
 | 
					 | 
				
			||||||
        self.account = account
 | 
					 | 
				
			||||||
        self.buffer.account = account
 | 
					 | 
				
			||||||
        self.name = name
 | 
					 | 
				
			||||||
        self.account_id = account_id
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def setup_account(self):
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer, widgetUtils.CHECKBOX, self.autostart, menuitem=self.buffer.autostart_account)
 | 
					 | 
				
			||||||
        if self.account_id in config.app["sessions"]["ignored_sessions"]:
 | 
					 | 
				
			||||||
            self.buffer.change_autostart(False)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.change_autostart(True)
 | 
					 | 
				
			||||||
        if not hasattr(self, "logged"):
 | 
					 | 
				
			||||||
            self.buffer.change_login(login=False)
 | 
					 | 
				
			||||||
            widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.logout)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.change_login(login=True)
 | 
					 | 
				
			||||||
            widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.login)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def login(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        del self.logged
 | 
					 | 
				
			||||||
        self.setup_account()
 | 
					 | 
				
			||||||
        pub.sendMessage("login", session_id=self.account_id)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def logout(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        self.logged = False
 | 
					 | 
				
			||||||
        self.setup_account()
 | 
					 | 
				
			||||||
        pub.sendMessage("logout", session_id=self.account_id)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def autostart(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        if self.account_id in config.app["sessions"]["ignored_sessions"]:
 | 
					 | 
				
			||||||
            self.buffer.change_autostart(True)
 | 
					 | 
				
			||||||
            config.app["sessions"]["ignored_sessions"].remove(self.account_id)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.change_autostart(False)
 | 
					 | 
				
			||||||
            config.app["sessions"]["ignored_sessions"].append(self.account_id)
 | 
					 | 
				
			||||||
        config.app.write()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class emptyPanel(buffer):
 | 
					 | 
				
			||||||
    def __init__(self, parent, name, account):
 | 
					 | 
				
			||||||
        super(emptyPanel, self).__init__(parent=parent)
 | 
					 | 
				
			||||||
        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
					 | 
				
			||||||
        self.buffer = buffers.emptyPanel(parent, name)
 | 
					 | 
				
			||||||
        self.type = self.buffer.type
 | 
					 | 
				
			||||||
        self.compose_function = None
 | 
					 | 
				
			||||||
        self.account = account
 | 
					 | 
				
			||||||
        self.buffer.account = account
 | 
					 | 
				
			||||||
        self.name = name
 | 
					 | 
				
			||||||
        self.session = None
 | 
					 | 
				
			||||||
        self.needs_init = True
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								src/controller/buffers/base/empty.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/controller/buffers/base/empty.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from wxUI import buffers
 | 
				
			||||||
 | 
					from . import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.base.empty")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EmptyBuffer(base.Buffer):
 | 
				
			||||||
 | 
					    def __init__(self, parent, name, account):
 | 
				
			||||||
 | 
					        super(EmptyBuffer, self).__init__(parent=parent)
 | 
				
			||||||
 | 
					        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
				
			||||||
 | 
					        self.buffer = buffers.emptyPanel(parent, name)
 | 
				
			||||||
 | 
					        self.type = self.buffer.type
 | 
				
			||||||
 | 
					        self.compose_function = None
 | 
				
			||||||
 | 
					        self.account = account
 | 
				
			||||||
 | 
					        self.buffer.account = account
 | 
				
			||||||
 | 
					        self.name = name
 | 
				
			||||||
 | 
					        self.session = None
 | 
				
			||||||
 | 
					        self.needs_init = True
 | 
				
			||||||
							
								
								
									
										7
									
								
								src/controller/buffers/twitter/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/controller/buffers/twitter/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					from .base import BaseBuffer
 | 
				
			||||||
 | 
					from .directMessages import DirectMessagesBuffer, SentDirectMessagesBuffer
 | 
				
			||||||
 | 
					from .list import ListBuffer
 | 
				
			||||||
 | 
					from .people import PeopleBuffer
 | 
				
			||||||
 | 
					from .trends import TrendsBuffer
 | 
				
			||||||
 | 
					from .search import SearchBuffer, SearchPeopleBuffer,  ConversationBuffer
 | 
				
			||||||
@@ -18,7 +18,7 @@ import sound
 | 
				
			|||||||
import languageHandler
 | 
					import languageHandler
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
from audio_services import youtube_utils
 | 
					from audio_services import youtube_utils
 | 
				
			||||||
from controller.buffers import baseBuffers
 | 
					from controller.buffers.base import base
 | 
				
			||||||
from sessions.twitter import compose, utils, reduce
 | 
					from sessions.twitter import compose, utils, reduce
 | 
				
			||||||
from mysc.thread_utils import call_threaded
 | 
					from mysc.thread_utils import call_threaded
 | 
				
			||||||
from tweepy.error import TweepError
 | 
					from tweepy.error import TweepError
 | 
				
			||||||
@@ -35,9 +35,9 @@ def _tweets_exist(function):
 | 
				
			|||||||
            function(self, *args, **kwargs)
 | 
					            function(self, *args, **kwargs)
 | 
				
			||||||
    return function_
 | 
					    return function_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class baseBufferController(baseBuffers.buffer):
 | 
					class BaseBuffer(base.Buffer):
 | 
				
			||||||
    def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, compose_func="compose_tweet", *args, **kwargs):
 | 
					    def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, compose_func="compose_tweet", *args, **kwargs):
 | 
				
			||||||
        super(baseBufferController, self).__init__(parent, function, *args, **kwargs)
 | 
					        super(BaseBuffer, self).__init__(parent, function, *args, **kwargs)
 | 
				
			||||||
        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
					        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
				
			||||||
        if bufferType != None:
 | 
					        if bufferType != None:
 | 
				
			||||||
            self.buffer = getattr(buffers, bufferType)(parent, name)
 | 
					            self.buffer = getattr(buffers, bufferType)(parent, name)
 | 
				
			||||||
@@ -639,633 +639,3 @@ class baseBufferController(baseBuffers.buffer):
 | 
				
			|||||||
        output.speak(_(u"Opening item in web browser..."))
 | 
					        output.speak(_(u"Opening item in web browser..."))
 | 
				
			||||||
        url = "https://twitter.com/{screen_name}/status/{tweet_id}".format(screen_name=self.session.get_user(tweet.user).screen_name, tweet_id=tweet.id)
 | 
					        url = "https://twitter.com/{screen_name}/status/{tweet_id}".format(screen_name=self.session.get_user(tweet.user).screen_name, tweet_id=tweet.id)
 | 
				
			||||||
        webbrowser.open(url)
 | 
					        webbrowser.open(url)
 | 
				
			||||||
 | 
					 | 
				
			||||||
class directMessagesController(baseBufferController):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_more_items(self):
 | 
					 | 
				
			||||||
        # 50 results are allowed per API call, so let's assume max value can be 50.
 | 
					 | 
				
			||||||
        # reference: https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events
 | 
					 | 
				
			||||||
        if self.session.settings["general"]["max_tweets_per_call"] > 50:
 | 
					 | 
				
			||||||
            count = 50
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            count = self.session.settings["general"]["max_tweets_per_call"]
 | 
					 | 
				
			||||||
        total = 0
 | 
					 | 
				
			||||||
        # try to retrieve the cursor for the current buffer.
 | 
					 | 
				
			||||||
        cursor = self.session.db["cursors"].get(self.name)
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            items = getattr(self.session.twitter, self.function)(return_cursors=True, cursor=cursor, count=count, *self.args, **self.kwargs)
 | 
					 | 
				
			||||||
            if type(items) == tuple:
 | 
					 | 
				
			||||||
                items, cursor = items
 | 
					 | 
				
			||||||
                if type(cursor) == tuple:
 | 
					 | 
				
			||||||
                    cursor = cursor[1]
 | 
					 | 
				
			||||||
                cursors = self.session.db["cursors"]
 | 
					 | 
				
			||||||
                cursors[self.name] = cursor
 | 
					 | 
				
			||||||
                self.session.db["cursors"] = cursors
 | 
					 | 
				
			||||||
            results = [i for i in items]
 | 
					 | 
				
			||||||
            items = results
 | 
					 | 
				
			||||||
            log.debug("Retrieved %d items for cursored search in function %s" % (len(items), self.function))
 | 
					 | 
				
			||||||
        except TweepError as e:
 | 
					 | 
				
			||||||
            log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        if items == None:
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        sent = []
 | 
					 | 
				
			||||||
        received = []
 | 
					 | 
				
			||||||
        sent_dms = self.session.db["sent_direct_messages"]
 | 
					 | 
				
			||||||
        received_dms = self.session.db["direct_messages"]
 | 
					 | 
				
			||||||
        for i in items:
 | 
					 | 
				
			||||||
            if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
					 | 
				
			||||||
                if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                    sent_dms.insert(0, i)
 | 
					 | 
				
			||||||
                    sent.append(i)
 | 
					 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    sent_dms.append(i)
 | 
					 | 
				
			||||||
                    sent.insert(0, i)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                    received_dms.insert(0, i)
 | 
					 | 
				
			||||||
                    received.append(i)
 | 
					 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    received_dms.append(i)
 | 
					 | 
				
			||||||
                    received.insert(0, i)
 | 
					 | 
				
			||||||
            total = total+1
 | 
					 | 
				
			||||||
        self.session.db["direct_messages"] = received_dms
 | 
					 | 
				
			||||||
        self.session.db["sent_direct_messages"] = sent_dms
 | 
					 | 
				
			||||||
        user_ids = [item.message_create["sender_id"] for item in items]
 | 
					 | 
				
			||||||
        self.session.save_users(user_ids)
 | 
					 | 
				
			||||||
        pub.sendMessage("more-sent-dms", data=sent, account=self.session.db["user_name"])
 | 
					 | 
				
			||||||
        selected = self.buffer.list.get_selected()
 | 
					 | 
				
			||||||
        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
					 | 
				
			||||||
            for i in received:
 | 
					 | 
				
			||||||
                if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
					 | 
				
			||||||
                    continue
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
            self.buffer.list.select_item(selected)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            for i in received:
 | 
					 | 
				
			||||||
                if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
					 | 
				
			||||||
                    continue
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
        output.speak(_(u"%s items retrieved") % (total), True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @_tweets_exist
 | 
					 | 
				
			||||||
    def reply(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        tweet = self.get_right_tweet()
 | 
					 | 
				
			||||||
        screen_name = self.session.get_user(tweet.message_create["sender_id"]).screen_name
 | 
					 | 
				
			||||||
        message = messages.reply(self.session, _(u"Mention"), _(u"Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,])
 | 
					 | 
				
			||||||
        if message.message.get_response() == widgetUtils.OK:
 | 
					 | 
				
			||||||
            if config.app["app-settings"]["remember_mention_and_longtweet"]:
 | 
					 | 
				
			||||||
                config.app["app-settings"]["longtweet"] = message.message.long_tweet.GetValue()
 | 
					 | 
				
			||||||
                config.app.write()
 | 
					 | 
				
			||||||
            if message.image == None:
 | 
					 | 
				
			||||||
                item = self.session.api_call(call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text(), tweet_mode="extended")
 | 
					 | 
				
			||||||
                if item != None:
 | 
					 | 
				
			||||||
                    pub.sendMessage("sent-tweet", data=item, user=self.session.db["user_name"])
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", status=message.message.get_text(), media=message.file)
 | 
					 | 
				
			||||||
        if hasattr(message.message, "destroy"): message.message.destroy()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def onFocus(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        tweet = self.get_tweet()
 | 
					 | 
				
			||||||
        if platform.system() == "Windows" and self.session.settings["general"]["relative_times"] == True:
 | 
					 | 
				
			||||||
            # fix this:
 | 
					 | 
				
			||||||
            original_date = arrow.get(int(tweet.created_timestamp))
 | 
					 | 
				
			||||||
            ts = original_date.humanize(locale=languageHandler.getLanguage())
 | 
					 | 
				
			||||||
            self.buffer.list.list.SetItem(self.buffer.list.get_selected(), 2, ts)
 | 
					 | 
				
			||||||
        if self.session.settings['sound']['indicate_audio'] and utils.is_audio(tweet):
 | 
					 | 
				
			||||||
            self.session.sound.play("audio.ogg")
 | 
					 | 
				
			||||||
        if self.session.settings['sound']['indicate_img'] and utils.is_media(tweet):
 | 
					 | 
				
			||||||
            self.session.sound.play("image.ogg")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def clear_list(self):
 | 
					 | 
				
			||||||
        dlg = commonMessageDialogs.clear_list()
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            self.session.db[self.name] = []
 | 
					 | 
				
			||||||
            self.buffer.list.clear()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def auto_read(self, number_of_items):
 | 
					 | 
				
			||||||
        if number_of_items == 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
					 | 
				
			||||||
            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                tweet = self.session.db[self.name][-1]
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                tweet = self.session.db[self.name][0]
 | 
					 | 
				
			||||||
            output.speak(_(u"New direct message"))
 | 
					 | 
				
			||||||
            output.speak(" ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)))
 | 
					 | 
				
			||||||
        elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
					 | 
				
			||||||
            output.speak(_(u"{0} new direct messages.").format(number_of_items,))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def open_in_browser(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        output.speak(_(u"This action is not supported in the buffer yet."))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class sentDirectMessagesController(directMessagesController):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        super(sentDirectMessagesController, self).__init__(*args, **kwargs)
 | 
					 | 
				
			||||||
        if ("sent_direct_messages" in self.session.db) == False:
 | 
					 | 
				
			||||||
            self.session.db["sent_direct_messages"] = []
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_more_items(self):
 | 
					 | 
				
			||||||
        output.speak(_(u"Getting more items cannot be done in this buffer. Use the direct messages buffer instead."))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def start_stream(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def put_more_items(self, items):
 | 
					 | 
				
			||||||
        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
					 | 
				
			||||||
            for i in items:
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            for i in items:
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class listBufferController(baseBufferController):
 | 
					 | 
				
			||||||
    def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, list_id=None, *args, **kwargs):
 | 
					 | 
				
			||||||
        super(listBufferController, self).__init__(parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs)
 | 
					 | 
				
			||||||
        self.users = []
 | 
					 | 
				
			||||||
        self.list_id = list_id
 | 
					 | 
				
			||||||
        self.kwargs["list_id"] = list_id
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
					 | 
				
			||||||
        self.get_user_ids()
 | 
					 | 
				
			||||||
        super(listBufferController, self).start_stream(mandatory, play_sound, avoid_autoreading)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_user_ids(self):
 | 
					 | 
				
			||||||
        for i in Cursor(self.session.twitter.list_members, list_id=self.list_id, include_entities=False, skip_status=True, count=5000).items():
 | 
					 | 
				
			||||||
            if i.id not in self.users:
 | 
					 | 
				
			||||||
                self.users.append(i.id)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=False):
 | 
					 | 
				
			||||||
        if force == False:
 | 
					 | 
				
			||||||
            dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            if self.name[:-5] in self.session.settings["other_buffers"]["lists"]:
 | 
					 | 
				
			||||||
                self.session.settings["other_buffers"]["lists"].remove(self.name[:-5])
 | 
					 | 
				
			||||||
                if self.name in self.session.db:
 | 
					 | 
				
			||||||
                    self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                self.session.settings.write()
 | 
					 | 
				
			||||||
                return True
 | 
					 | 
				
			||||||
        elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class peopleBufferController(baseBufferController):
 | 
					 | 
				
			||||||
    def __init__(self, parent, function, name, sessionObject, account, bufferType=None, *args, **kwargs):
 | 
					 | 
				
			||||||
        super(peopleBufferController, self).__init__(parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs)
 | 
					 | 
				
			||||||
        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
					 | 
				
			||||||
        self.compose_function = compose.compose_followers_list
 | 
					 | 
				
			||||||
        log.debug("Compose_function: %s" % (self.compose_function,))
 | 
					 | 
				
			||||||
        self.get_tweet = self.get_right_tweet
 | 
					 | 
				
			||||||
        self.url = self.interact
 | 
					 | 
				
			||||||
        if "-followers" in self.name or "-friends" in self.name:
 | 
					 | 
				
			||||||
            self.finished_timeline = False
 | 
					 | 
				
			||||||
            # Add a compatibility layer for username based timelines from config.
 | 
					 | 
				
			||||||
            # ToDo: Remove this in some new versions of the client, when user ID timelines become mandatory.
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                int(self.kwargs["user_id"])
 | 
					 | 
				
			||||||
            except ValueError:
 | 
					 | 
				
			||||||
                self.is_screen_name = True
 | 
					 | 
				
			||||||
                self.kwargs["screen_name"] = self.kwargs["user_id"]
 | 
					 | 
				
			||||||
                self.kwargs.pop("user_id")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=True):
 | 
					 | 
				
			||||||
        if "-followers" in self.name:
 | 
					 | 
				
			||||||
            if force == False:
 | 
					 | 
				
			||||||
                dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
            if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
                if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]:
 | 
					 | 
				
			||||||
                    self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10])
 | 
					 | 
				
			||||||
                    if self.name in self.session.db:
 | 
					 | 
				
			||||||
                        self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                    self.session.settings.write()
 | 
					 | 
				
			||||||
                    return True
 | 
					 | 
				
			||||||
            elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
                return False
 | 
					 | 
				
			||||||
        elif "-friends" in self.name:
 | 
					 | 
				
			||||||
            if force == False:
 | 
					 | 
				
			||||||
                dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
            if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
                if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]:
 | 
					 | 
				
			||||||
                    self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8])
 | 
					 | 
				
			||||||
                    if self.name in self.session.db:
 | 
					 | 
				
			||||||
                        self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                    self.session.settings.write()
 | 
					 | 
				
			||||||
                    return True
 | 
					 | 
				
			||||||
            elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
                return False
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            output.speak(_(u"This buffer is not a timeline; it can't be deleted."), True)
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def onFocus(self, ev):
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_message(self):
 | 
					 | 
				
			||||||
        return " ".join(self.compose_function(self.get_tweet(), self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def delete_item(self): pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @_tweets_exist
 | 
					 | 
				
			||||||
    def reply(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        tweet = self.get_right_tweet()
 | 
					 | 
				
			||||||
        screen_name = tweet.screen_name
 | 
					 | 
				
			||||||
        message = messages.reply(self.session, _(u"Mention"), _(u"Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,])
 | 
					 | 
				
			||||||
        if message.message.get_response() == widgetUtils.OK:
 | 
					 | 
				
			||||||
            if config.app["app-settings"]["remember_mention_and_longtweet"]:
 | 
					 | 
				
			||||||
                config.app["app-settings"]["longtweet"] = message.message.long_tweet.GetValue()
 | 
					 | 
				
			||||||
                config.app.write()
 | 
					 | 
				
			||||||
            if message.image == None:
 | 
					 | 
				
			||||||
                item = self.session.api_call(call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text(), tweet_mode="extended")
 | 
					 | 
				
			||||||
                if item != None:
 | 
					 | 
				
			||||||
                    pub.sendMessage("sent-tweet", data=item, user=self.session.db["user_name"])
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", status=message.message.get_text(), media=message.file)
 | 
					 | 
				
			||||||
        if hasattr(message.message, "destroy"): message.message.destroy()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
					 | 
				
			||||||
        # starts stream every 3 minutes.
 | 
					 | 
				
			||||||
        current_time = time.time()
 | 
					 | 
				
			||||||
        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory==True:
 | 
					 | 
				
			||||||
            self.execution_time = current_time
 | 
					 | 
				
			||||||
            log.debug("Starting stream for %s buffer, %s account" % (self.name, self.account,))
 | 
					 | 
				
			||||||
            log.debug("args: %s, kwargs: %s" % (self.args, self.kwargs))
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                val = getattr(self.session.twitter, self.function)(return_cursors=True, count=self.session.settings["general"]["max_tweets_per_call"], *self.args, **self.kwargs)
 | 
					 | 
				
			||||||
                if type(val) == tuple:
 | 
					 | 
				
			||||||
                    val, cursor = val
 | 
					 | 
				
			||||||
                    if type(cursor) == tuple:
 | 
					 | 
				
			||||||
                        cursor = cursor[1]
 | 
					 | 
				
			||||||
                    cursors = self.session.db["cursors"]
 | 
					 | 
				
			||||||
                    cursors[self.name] = cursor
 | 
					 | 
				
			||||||
                    self.session.db["cursors"] = cursors
 | 
					 | 
				
			||||||
                results = [i for i in val]
 | 
					 | 
				
			||||||
                val = results
 | 
					 | 
				
			||||||
                val.reverse()
 | 
					 | 
				
			||||||
                log.debug("Retrieved %d items from cursored search in function %s" % (len(val), self.function))
 | 
					 | 
				
			||||||
            except TweepError as e:
 | 
					 | 
				
			||||||
                log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
					 | 
				
			||||||
                return
 | 
					 | 
				
			||||||
            number_of_items = self.session.order_people(self.name, val)
 | 
					 | 
				
			||||||
            log.debug("Number of items retrieved: %d" % (number_of_items,))
 | 
					 | 
				
			||||||
            self.put_items_on_list(number_of_items)
 | 
					 | 
				
			||||||
            if hasattr(self, "finished_timeline") and self.finished_timeline == False:
 | 
					 | 
				
			||||||
                self.username = self.session.api_call("get_user", **self.kwargs).screen_name
 | 
					 | 
				
			||||||
                self.finished_timeline = True
 | 
					 | 
				
			||||||
            if number_of_items > 0 and self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
					 | 
				
			||||||
                self.session.sound.play(self.sound)
 | 
					 | 
				
			||||||
            # Autoread settings
 | 
					 | 
				
			||||||
            if avoid_autoreading == False and mandatory == True and number_of_items > 0 and self.name in self.session.settings["other_buffers"]["autoread_buffers"]:
 | 
					 | 
				
			||||||
                self.auto_read(number_of_items)
 | 
					 | 
				
			||||||
            return number_of_items
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_more_items(self):
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            cursor = self.session.db["cursors"].get(self.name)
 | 
					 | 
				
			||||||
            items = getattr(self.session.twitter, self.function)(return_cursors=True, users=True, cursor=cursor, count=self.session.settings["general"]["max_tweets_per_call"], *self.args, **self.kwargs)
 | 
					 | 
				
			||||||
            if type(items) == tuple:
 | 
					 | 
				
			||||||
                items, cursor = items
 | 
					 | 
				
			||||||
                if type(cursor) == tuple:
 | 
					 | 
				
			||||||
                    cursor = cursor[1]
 | 
					 | 
				
			||||||
                cursors = self.session.db["cursors"]
 | 
					 | 
				
			||||||
                cursors[self.name] = cursor
 | 
					 | 
				
			||||||
                self.session.db["cursors"] = cursors
 | 
					 | 
				
			||||||
            results = [i for i in items]
 | 
					 | 
				
			||||||
            items = results
 | 
					 | 
				
			||||||
            log.debug("Retrieved %d items from cursored search in function %s" % (len(items), self.function))
 | 
					 | 
				
			||||||
        except TweepError as e:
 | 
					 | 
				
			||||||
            log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        if items == None:
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        items_db = self.session.db[self.name]
 | 
					 | 
				
			||||||
        for i in items:
 | 
					 | 
				
			||||||
            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                items_db.insert(0, i)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                items_db.append(i)
 | 
					 | 
				
			||||||
        self.session.db[self.name] = items_db
 | 
					 | 
				
			||||||
        selected = self.buffer.list.get_selected()
 | 
					 | 
				
			||||||
        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
					 | 
				
			||||||
            for i in items:
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
            self.buffer.list.select_item(selected)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            for i in items:
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
        output.speak(_(u"%s items retrieved") % (len(items)), True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def put_items_on_list(self, number_of_items):
 | 
					 | 
				
			||||||
        log.debug("The list contains %d items" % (self.buffer.list.get_count(),))
 | 
					 | 
				
			||||||
#  log.debug("Putting %d items on the list..." % (number_of_items,))
 | 
					 | 
				
			||||||
        if self.buffer.list.get_count() == 0:
 | 
					 | 
				
			||||||
            for i in self.session.db[self.name]:
 | 
					 | 
				
			||||||
                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
					 | 
				
			||||||
                self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
            self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
 | 
					 | 
				
			||||||
#   self.buffer.set_list_position()
 | 
					 | 
				
			||||||
        elif self.buffer.list.get_count() > 0:
 | 
					 | 
				
			||||||
            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                for i in self.session.db[self.name][len(self.session.db[self.name])-number_of_items:]:
 | 
					 | 
				
			||||||
                    tweet = self.compose_function(i, self.session.db)
 | 
					 | 
				
			||||||
                    self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                items = self.session.db[self.name][0:number_of_items]
 | 
					 | 
				
			||||||
                items.reverse()
 | 
					 | 
				
			||||||
                for i in items:
 | 
					 | 
				
			||||||
                    tweet = self.compose_function(i, self.session.db)
 | 
					 | 
				
			||||||
                    self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
        log.debug("now the list contains %d items" % (self.buffer.list.get_count(),))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_right_tweet(self):
 | 
					 | 
				
			||||||
        tweet = self.session.db[self.name][self.buffer.list.get_selected()]
 | 
					 | 
				
			||||||
        return tweet
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def add_new_item(self, item):
 | 
					 | 
				
			||||||
        tweet = self.compose_function(item, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
					 | 
				
			||||||
        if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
            self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.list.insert_item(True, *tweet)
 | 
					 | 
				
			||||||
        if self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
					 | 
				
			||||||
            output.speak(" ".join(tweet))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def clear_list(self):
 | 
					 | 
				
			||||||
        dlg = commonMessageDialogs.clear_list()
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            self.session.db[self.name] = []
 | 
					 | 
				
			||||||
            self.session.db["cursors"][self.name] = -1
 | 
					 | 
				
			||||||
            self.buffer.list.clear()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def interact(self):
 | 
					 | 
				
			||||||
        user.profileController(self.session, user=self.get_right_tweet().screen_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def show_menu(self, ev, pos=0, *args, **kwargs):
 | 
					 | 
				
			||||||
        menu = menus.peoplePanelMenu()
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.send_message, menuitem=menu.reply)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.user_actions, menuitem=menu.userActions)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.details, menuitem=menu.details)
 | 
					 | 
				
			||||||
#  widgetUtils.connect_event(menu, widgetUtils.MENU, self.lists, menuitem=menu.lists)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)
 | 
					 | 
				
			||||||
        if hasattr(menu, "openInBrowser"):
 | 
					 | 
				
			||||||
            widgetUtils.connect_event(menu, widgetUtils.MENU, self.open_in_browser, menuitem=menu.openInBrowser)
 | 
					 | 
				
			||||||
        if pos != 0:
 | 
					 | 
				
			||||||
            self.buffer.PopupMenu(menu, pos)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.PopupMenu(menu, ev.GetPosition())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def details(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        pub.sendMessage("execute-action", action="user_details")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def auto_read(self, number_of_items):
 | 
					 | 
				
			||||||
        if number_of_items == 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
					 | 
				
			||||||
            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
					 | 
				
			||||||
                tweet = self.session.db[self.name][-1]
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                tweet = self.session.db[self.name][0]
 | 
					 | 
				
			||||||
            output.speak(" ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)))
 | 
					 | 
				
			||||||
        elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
					 | 
				
			||||||
            output.speak(_(u"{0} new followers.").format(number_of_items))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def open_in_browser(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        tweet = self.get_tweet()
 | 
					 | 
				
			||||||
        output.speak(_(u"Opening item in web browser..."))
 | 
					 | 
				
			||||||
        url = "https://twitter.com/{screen_name}".format(screen_name=tweet.screen_name)
 | 
					 | 
				
			||||||
        webbrowser.open(url)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class searchBufferController(baseBufferController):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=False):
 | 
					 | 
				
			||||||
        if force == False:
 | 
					 | 
				
			||||||
            dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
 | 
					 | 
				
			||||||
                self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
 | 
					 | 
				
			||||||
                self.session.settings.write()
 | 
					 | 
				
			||||||
                if self.name in self.session.db:
 | 
					 | 
				
			||||||
                    self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                return True
 | 
					 | 
				
			||||||
        elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class searchPeopleBufferController(peopleBufferController):
 | 
					 | 
				
			||||||
    """ This is identical to a normal peopleBufferController, except that uses the page parameter instead of a cursor."""
 | 
					 | 
				
			||||||
    def __init__(self, parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs):
 | 
					 | 
				
			||||||
        super(searchPeopleBufferController, self).__init__(parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs)
 | 
					 | 
				
			||||||
        if ("page" in self.kwargs) == False:
 | 
					 | 
				
			||||||
            self.page = 1
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.page = self.kwargs.pop("page")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_more_items(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        # Add 1 to the page parameter, put it in kwargs and calls to get_more_items in the parent buffer.
 | 
					 | 
				
			||||||
        self.page = self.page +1
 | 
					 | 
				
			||||||
        self.kwargs["page"] = self.page
 | 
					 | 
				
			||||||
        super(searchPeopleBufferController, self).get_more_items(*args, **kwargs)
 | 
					 | 
				
			||||||
        # remove the parameter again to make sure start_stream won't fetch items for this page indefinitely.
 | 
					 | 
				
			||||||
        self.kwargs.pop("page")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=False):
 | 
					 | 
				
			||||||
        if force == False:
 | 
					 | 
				
			||||||
            dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
 | 
					 | 
				
			||||||
                self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
 | 
					 | 
				
			||||||
                self.session.settings.write()
 | 
					 | 
				
			||||||
                if self.name in self.session.db:
 | 
					 | 
				
			||||||
                    self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                return True
 | 
					 | 
				
			||||||
        elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class trendsBufferController(baseBuffers.buffer):
 | 
					 | 
				
			||||||
    def __init__(self, parent, name, session, account, trendsFor, *args, **kwargs):
 | 
					 | 
				
			||||||
        super(trendsBufferController, self).__init__(parent=parent, session=session)
 | 
					 | 
				
			||||||
        self.trendsFor = trendsFor
 | 
					 | 
				
			||||||
        self.session = session
 | 
					 | 
				
			||||||
        self.account = account
 | 
					 | 
				
			||||||
        self.invisible = True
 | 
					 | 
				
			||||||
        self.buffer = buffers.trendsPanel(parent, name)
 | 
					 | 
				
			||||||
        self.buffer.account = account
 | 
					 | 
				
			||||||
        self.type = self.buffer.type
 | 
					 | 
				
			||||||
        self.bind_events()
 | 
					 | 
				
			||||||
        self.sound = "trends_updated.ogg"
 | 
					 | 
				
			||||||
        self.trends = []
 | 
					 | 
				
			||||||
        self.name = name
 | 
					 | 
				
			||||||
        self.buffer.name = name
 | 
					 | 
				
			||||||
        self.compose_function = self.compose_function_
 | 
					 | 
				
			||||||
        self.get_formatted_message = self.get_message
 | 
					 | 
				
			||||||
        self.reply = self.search_topic
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
					 | 
				
			||||||
        # starts stream every 3 minutes.
 | 
					 | 
				
			||||||
        current_time = time.time()
 | 
					 | 
				
			||||||
        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
 | 
					 | 
				
			||||||
            self.execution_time = current_time
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                data = self.session.twitter.trends_place(id=self.trendsFor)
 | 
					 | 
				
			||||||
            except TweepError as err:
 | 
					 | 
				
			||||||
                log.error("Error %s: %s" % (err.api_code, err.reason))
 | 
					 | 
				
			||||||
            if not hasattr(self, "name_"):
 | 
					 | 
				
			||||||
                self.name_ = data[0]["locations"][0]["name"]
 | 
					 | 
				
			||||||
            self.trends = data[0]["trends"]
 | 
					 | 
				
			||||||
            self.put_items_on_the_list()
 | 
					 | 
				
			||||||
            if self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
					 | 
				
			||||||
                self.session.sound.play(self.sound)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def put_items_on_the_list(self):
 | 
					 | 
				
			||||||
        selected_item = self.buffer.list.get_selected()
 | 
					 | 
				
			||||||
        self.buffer.list.clear()
 | 
					 | 
				
			||||||
        for i in self.trends:
 | 
					 | 
				
			||||||
            tweet = self.compose_function(i)
 | 
					 | 
				
			||||||
            self.buffer.list.insert_item(False, *tweet)
 | 
					 | 
				
			||||||
            self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def compose_function_(self, trend):
 | 
					 | 
				
			||||||
        return [trend["name"]]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def bind_events(self):
 | 
					 | 
				
			||||||
        log.debug("Binding events...")
 | 
					 | 
				
			||||||
        self.buffer.list.list.Bind(wx.EVT_CHAR_HOOK, self.get_event)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.tweet_about_this_trend, self.buffer.tweetTrendBtn)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_status, self.buffer.tweet)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.search_topic, self.buffer.search_topic)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_message(self):
 | 
					 | 
				
			||||||
        return self.compose_function(self.trends[self.buffer.list.get_selected()])[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=False):
 | 
					 | 
				
			||||||
        if force == False:
 | 
					 | 
				
			||||||
            dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]:
 | 
					 | 
				
			||||||
                self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3])
 | 
					 | 
				
			||||||
                self.session.settings.write()
 | 
					 | 
				
			||||||
                if self.name in self.session.db:
 | 
					 | 
				
			||||||
                    self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
                return True
 | 
					 | 
				
			||||||
        elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def url(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        self.tweet_about_this_trend()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def search_topic(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        topic = self.trends[self.buffer.list.get_selected()]["name"]
 | 
					 | 
				
			||||||
        pub.sendMessage("search", term=topic)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def show_menu(self, ev, pos=0, *args, **kwargs):
 | 
					 | 
				
			||||||
        menu = menus.trendsPanelMenu()
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.search_topic, menuitem=menu.search_topic)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.tweet_about_this_trend, menuitem=menu.tweetThisTrend)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
 | 
					 | 
				
			||||||
        widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)
 | 
					 | 
				
			||||||
        if pos != 0:
 | 
					 | 
				
			||||||
            self.buffer.PopupMenu(menu, pos)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.buffer.PopupMenu(menu, ev.GetPosition())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def view(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        pub.sendMessage("execute-action", action="view_item")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def copy(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        pub.sendMessage("execute-action", action="copy_to_clipboard")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def tweet_about_this_trend(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        if self.buffer.list.get_count() == 0: return
 | 
					 | 
				
			||||||
        title = _(u"Tweet")
 | 
					 | 
				
			||||||
        caption = _(u"Write the tweet here")
 | 
					 | 
				
			||||||
        tweet = messages.tweet(self.session, title, caption, self.get_message()+ " ")
 | 
					 | 
				
			||||||
        tweet.message.set_cursor_at_end()
 | 
					 | 
				
			||||||
        if tweet.message.get_response() == widgetUtils.OK:
 | 
					 | 
				
			||||||
            text = tweet.message.get_text()
 | 
					 | 
				
			||||||
            if len(text) > 280 and tweet.message.get("long_tweet") == True:
 | 
					 | 
				
			||||||
                if tweet.image == None:
 | 
					 | 
				
			||||||
                    text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
 | 
					 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text, 1)
 | 
					 | 
				
			||||||
            if tweet.image == None:
 | 
					 | 
				
			||||||
                call_threaded(self.session.api_call, call_name="update_status", status=text)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                call_threaded(self.session.api_call, call_name="update_status_with_media", status=text, media=tweet.image)
 | 
					 | 
				
			||||||
        if hasattr(tweet.message, "destroy"): tweet.message.destroy()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def show_menu_by_key(self, ev):
 | 
					 | 
				
			||||||
        if self.buffer.list.get_count() == 0:
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        if ev.GetKeyCode() == wx.WXK_WINDOWS_MENU:
 | 
					 | 
				
			||||||
            self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def open_in_browser(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        output.speak(_(u"This action is not supported in the buffer, yet."))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class conversationBufferController(searchBufferController):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def start_stream(self, start=False, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
					 | 
				
			||||||
        # starts stream every 3 minutes.
 | 
					 | 
				
			||||||
        current_time = time.time()
 | 
					 | 
				
			||||||
        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
 | 
					 | 
				
			||||||
            self.execution_time = current_time
 | 
					 | 
				
			||||||
            if start == True:
 | 
					 | 
				
			||||||
                self.statuses = []
 | 
					 | 
				
			||||||
                self.ids = []
 | 
					 | 
				
			||||||
                self.statuses.append(self.tweet)
 | 
					 | 
				
			||||||
                self.ids.append(self.tweet.id)
 | 
					 | 
				
			||||||
                tweet = self.tweet
 | 
					 | 
				
			||||||
                if not hasattr(tweet, "in_reply_to_status_id"):
 | 
					 | 
				
			||||||
                    tweet.in_reply_to_status_id = None
 | 
					 | 
				
			||||||
                while tweet.in_reply_to_status_id != None:
 | 
					 | 
				
			||||||
                    try:
 | 
					 | 
				
			||||||
                        tweet = self.session.twitter.get_status(id=tweet.in_reply_to_status_id, tweet_mode="extended")
 | 
					 | 
				
			||||||
                    except TweepError as err:
 | 
					 | 
				
			||||||
                        break
 | 
					 | 
				
			||||||
                    self.statuses.insert(0, tweet)
 | 
					 | 
				
			||||||
                    self.ids.append(tweet.id)
 | 
					 | 
				
			||||||
                if tweet.in_reply_to_status_id == None:
 | 
					 | 
				
			||||||
                    self.kwargs["since_id"] = tweet.id
 | 
					 | 
				
			||||||
                    self.ids.append(tweet.id)
 | 
					 | 
				
			||||||
            val2 = self.session.search(self.name, tweet_mode="extended", *self.args, **self.kwargs)
 | 
					 | 
				
			||||||
            for i in val2:
 | 
					 | 
				
			||||||
                if i.in_reply_to_status_id in self.ids:
 | 
					 | 
				
			||||||
                    self.statuses.append(i)
 | 
					 | 
				
			||||||
                    self.ids.append(i.id)
 | 
					 | 
				
			||||||
                    tweet = i
 | 
					 | 
				
			||||||
            number_of_items = self.session.order_buffer(self.name, self.statuses)
 | 
					 | 
				
			||||||
            log.debug("Number of items retrieved: %d" % (number_of_items,))
 | 
					 | 
				
			||||||
            self.put_items_on_list(number_of_items)
 | 
					 | 
				
			||||||
            if number_of_items > 0 and self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
					 | 
				
			||||||
                self.session.sound.play(self.sound)
 | 
					 | 
				
			||||||
            # Autoread settings
 | 
					 | 
				
			||||||
            if avoid_autoreading == False and mandatory == True and number_of_items > 0 and self.name in self.session.settings["other_buffers"]["autoread_buffers"]:
 | 
					 | 
				
			||||||
                self.auto_read(number_of_items)
 | 
					 | 
				
			||||||
            return number_of_items
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def remove_buffer(self, force=False):
 | 
					 | 
				
			||||||
        if force == False:
 | 
					 | 
				
			||||||
            dlg = commonMessageDialogs.remove_buffer()
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            dlg = widgetUtils.YES
 | 
					 | 
				
			||||||
        if dlg == widgetUtils.YES:
 | 
					 | 
				
			||||||
            if self.name in self.session.db:
 | 
					 | 
				
			||||||
                self.session.db.pop(self.name)
 | 
					 | 
				
			||||||
            return True
 | 
					 | 
				
			||||||
        elif dlg == widgetUtils.NO:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
							
								
								
									
										158
									
								
								src/controller/buffers/twitter/directMessages.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								src/controller/buffers/twitter/directMessages.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					import widgetUtils
 | 
				
			||||||
 | 
					import arrow
 | 
				
			||||||
 | 
					import webbrowser
 | 
				
			||||||
 | 
					import output
 | 
				
			||||||
 | 
					import config
 | 
				
			||||||
 | 
					import languageHandler
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from controller import messages
 | 
				
			||||||
 | 
					from sessions.twitter import compose, utils
 | 
				
			||||||
 | 
					from mysc.thread_utils import call_threaded
 | 
				
			||||||
 | 
					from tweepy.error import TweepError
 | 
				
			||||||
 | 
					from pubsub import pub
 | 
				
			||||||
 | 
					from . import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.twitter.dmBuffer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DirectMessagesBuffer(base.BaseBuffer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_more_items(self):
 | 
				
			||||||
 | 
					        # 50 results are allowed per API call, so let's assume max value can be 50.
 | 
				
			||||||
 | 
					        # reference: https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events
 | 
				
			||||||
 | 
					        if self.session.settings["general"]["max_tweets_per_call"] > 50:
 | 
				
			||||||
 | 
					            count = 50
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            count = self.session.settings["general"]["max_tweets_per_call"]
 | 
				
			||||||
 | 
					        total = 0
 | 
				
			||||||
 | 
					        # try to retrieve the cursor for the current buffer.
 | 
				
			||||||
 | 
					        cursor = self.session.db["cursors"].get(self.name)
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            items = getattr(self.session.twitter, self.function)(return_cursors=True, cursor=cursor, count=count, *self.args, **self.kwargs)
 | 
				
			||||||
 | 
					            if type(items) == tuple:
 | 
				
			||||||
 | 
					                items, cursor = items
 | 
				
			||||||
 | 
					                if type(cursor) == tuple:
 | 
				
			||||||
 | 
					                    cursor = cursor[1]
 | 
				
			||||||
 | 
					                cursors = self.session.db["cursors"]
 | 
				
			||||||
 | 
					                cursors[self.name] = cursor
 | 
				
			||||||
 | 
					                self.session.db["cursors"] = cursors
 | 
				
			||||||
 | 
					            results = [i for i in items]
 | 
				
			||||||
 | 
					            items = results
 | 
				
			||||||
 | 
					            log.debug("Retrieved %d items for cursored search in function %s" % (len(items), self.function))
 | 
				
			||||||
 | 
					        except TweepError as e:
 | 
				
			||||||
 | 
					            log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        if items == None:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        sent = []
 | 
				
			||||||
 | 
					        received = []
 | 
				
			||||||
 | 
					        sent_dms = self.session.db["sent_direct_messages"]
 | 
				
			||||||
 | 
					        received_dms = self.session.db["direct_messages"]
 | 
				
			||||||
 | 
					        for i in items:
 | 
				
			||||||
 | 
					            if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
				
			||||||
 | 
					                if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                    sent_dms.insert(0, i)
 | 
				
			||||||
 | 
					                    sent.append(i)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    sent_dms.append(i)
 | 
				
			||||||
 | 
					                    sent.insert(0, i)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                    received_dms.insert(0, i)
 | 
				
			||||||
 | 
					                    received.append(i)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    received_dms.append(i)
 | 
				
			||||||
 | 
					                    received.insert(0, i)
 | 
				
			||||||
 | 
					            total = total+1
 | 
				
			||||||
 | 
					        self.session.db["direct_messages"] = received_dms
 | 
				
			||||||
 | 
					        self.session.db["sent_direct_messages"] = sent_dms
 | 
				
			||||||
 | 
					        user_ids = [item.message_create["sender_id"] for item in items]
 | 
				
			||||||
 | 
					        self.session.save_users(user_ids)
 | 
				
			||||||
 | 
					        pub.sendMessage("more-sent-dms", data=sent, account=self.session.db["user_name"])
 | 
				
			||||||
 | 
					        selected = self.buffer.list.get_selected()
 | 
				
			||||||
 | 
					        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
				
			||||||
 | 
					            for i in received:
 | 
				
			||||||
 | 
					                if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					            self.buffer.list.select_item(selected)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            for i in received:
 | 
				
			||||||
 | 
					                if int(i.message_create["sender_id"]) == self.session.db["user_id"]:
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					        output.speak(_(u"%s items retrieved") % (total), True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def reply(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        tweet = self.get_right_tweet()
 | 
				
			||||||
 | 
					        screen_name = self.session.get_user(tweet.message_create["sender_id"]).screen_name
 | 
				
			||||||
 | 
					        message = messages.reply(self.session, _(u"Mention"), _(u"Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,])
 | 
				
			||||||
 | 
					        if message.message.get_response() == widgetUtils.OK:
 | 
				
			||||||
 | 
					            if config.app["app-settings"]["remember_mention_and_longtweet"]:
 | 
				
			||||||
 | 
					                config.app["app-settings"]["longtweet"] = message.message.long_tweet.GetValue()
 | 
				
			||||||
 | 
					                config.app.write()
 | 
				
			||||||
 | 
					            if message.image == None:
 | 
				
			||||||
 | 
					                item = self.session.api_call(call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text(), tweet_mode="extended")
 | 
				
			||||||
 | 
					                if item != None:
 | 
				
			||||||
 | 
					                    pub.sendMessage("sent-tweet", data=item, user=self.session.db["user_name"])
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", status=message.message.get_text(), media=message.file)
 | 
				
			||||||
 | 
					        if hasattr(message.message, "destroy"): message.message.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def onFocus(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        tweet = self.get_tweet()
 | 
				
			||||||
 | 
					        if platform.system() == "Windows" and self.session.settings["general"]["relative_times"] == True:
 | 
				
			||||||
 | 
					            # fix this:
 | 
				
			||||||
 | 
					            original_date = arrow.get(int(tweet.created_timestamp))
 | 
				
			||||||
 | 
					            ts = original_date.humanize(locale=languageHandler.getLanguage())
 | 
				
			||||||
 | 
					            self.buffer.list.list.SetItem(self.buffer.list.get_selected(), 2, ts)
 | 
				
			||||||
 | 
					        if self.session.settings['sound']['indicate_audio'] and utils.is_audio(tweet):
 | 
				
			||||||
 | 
					            self.session.sound.play("audio.ogg")
 | 
				
			||||||
 | 
					        if self.session.settings['sound']['indicate_img'] and utils.is_media(tweet):
 | 
				
			||||||
 | 
					            self.session.sound.play("image.ogg")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def clear_list(self):
 | 
				
			||||||
 | 
					        dlg = commonMessageDialogs.clear_list()
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            self.session.db[self.name] = []
 | 
				
			||||||
 | 
					            self.buffer.list.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def auto_read(self, number_of_items):
 | 
				
			||||||
 | 
					        if number_of_items == 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
				
			||||||
 | 
					            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                tweet = self.session.db[self.name][-1]
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                tweet = self.session.db[self.name][0]
 | 
				
			||||||
 | 
					            output.speak(_(u"New direct message"))
 | 
				
			||||||
 | 
					            output.speak(" ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)))
 | 
				
			||||||
 | 
					        elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
				
			||||||
 | 
					            output.speak(_(u"{0} new direct messages.").format(number_of_items,))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def open_in_browser(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        output.speak(_(u"This action is not supported in the buffer yet."))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SentDirectMessagesBuffer(DirectMessagesBuffer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        super(SentDirectMessagesBuffer, self).__init__(*args, **kwargs)
 | 
				
			||||||
 | 
					        if ("sent_direct_messages" in self.session.db) == False:
 | 
				
			||||||
 | 
					            self.session.db["sent_direct_messages"] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_more_items(self):
 | 
				
			||||||
 | 
					        output.speak(_(u"Getting more items cannot be done in this buffer. Use the direct messages buffer instead."))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def start_stream(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def put_more_items(self, items):
 | 
				
			||||||
 | 
					        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
				
			||||||
 | 
					            for i in items:
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            for i in items:
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
							
								
								
									
										44
									
								
								src/controller/buffers/twitter/list.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/controller/buffers/twitter/list.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					if platform.system() == "Windows":
 | 
				
			||||||
 | 
					    from wxUI import dialogs, commonMessageDialogs
 | 
				
			||||||
 | 
					elif platform.system() == "Linux":
 | 
				
			||||||
 | 
					    from gi.repository import Gtk
 | 
				
			||||||
 | 
					    from gtkUI import dialogs, commonMessageDialogs
 | 
				
			||||||
 | 
					import widgetUtils
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from tweepy.cursor import Cursor
 | 
				
			||||||
 | 
					from . import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.twitter.listBuffer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ListBuffer(base.BaseBuffer):
 | 
				
			||||||
 | 
					    def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, list_id=None, *args, **kwargs):
 | 
				
			||||||
 | 
					        super(ListBuffer, self).__init__(parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs)
 | 
				
			||||||
 | 
					        self.users = []
 | 
				
			||||||
 | 
					        self.list_id = list_id
 | 
				
			||||||
 | 
					        self.kwargs["list_id"] = list_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
				
			||||||
 | 
					        self.get_user_ids()
 | 
				
			||||||
 | 
					        super(ListBuffer, self).start_stream(mandatory, play_sound, avoid_autoreading)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_user_ids(self):
 | 
				
			||||||
 | 
					        for i in Cursor(self.session.twitter.list_members, list_id=self.list_id, include_entities=False, skip_status=True, count=5000).items():
 | 
				
			||||||
 | 
					            if i.id not in self.users:
 | 
				
			||||||
 | 
					                self.users.append(i.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=False):
 | 
				
			||||||
 | 
					        if force == False:
 | 
				
			||||||
 | 
					            dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            if self.name[:-5] in self.session.settings["other_buffers"]["lists"]:
 | 
				
			||||||
 | 
					                self.session.settings["other_buffers"]["lists"].remove(self.name[:-5])
 | 
				
			||||||
 | 
					                if self.name in self.session.db:
 | 
				
			||||||
 | 
					                    self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                self.session.settings.write()
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
							
								
								
									
										259
									
								
								src/controller/buffers/twitter/people.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								src/controller/buffers/twitter/people.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					if platform.system() == "Windows":
 | 
				
			||||||
 | 
					    from wxUI import commonMessageDialogs, menus
 | 
				
			||||||
 | 
					    from controller import user
 | 
				
			||||||
 | 
					elif platform.system() == "Linux":
 | 
				
			||||||
 | 
					    from gi.repository import Gtk
 | 
				
			||||||
 | 
					    from gtkUI import dialogs, commonMessageDialogs
 | 
				
			||||||
 | 
					from controller import messages
 | 
				
			||||||
 | 
					import widgetUtils
 | 
				
			||||||
 | 
					import webbrowser
 | 
				
			||||||
 | 
					import output
 | 
				
			||||||
 | 
					import config
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from mysc.thread_utils import call_threaded
 | 
				
			||||||
 | 
					from tweepy.error import TweepError
 | 
				
			||||||
 | 
					from pubsub import pub
 | 
				
			||||||
 | 
					from sessions.twitter import compose
 | 
				
			||||||
 | 
					from . import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.twitter.peopleBuffer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _tweets_exist(function):
 | 
				
			||||||
 | 
					    """ A decorator to execute a function only if the selected buffer contains at least one item."""
 | 
				
			||||||
 | 
					    def function_(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        if self.buffer.list.get_count() > 0:
 | 
				
			||||||
 | 
					            function(self, *args, **kwargs)
 | 
				
			||||||
 | 
					    return function_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PeopleBuffer(base.BaseBuffer):
 | 
				
			||||||
 | 
					    def __init__(self, parent, function, name, sessionObject, account, bufferType=None, *args, **kwargs):
 | 
				
			||||||
 | 
					        super(PeopleBuffer, self).__init__(parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs)
 | 
				
			||||||
 | 
					        log.debug("Initializing buffer %s, account %s" % (name, account,))
 | 
				
			||||||
 | 
					        self.compose_function = compose.compose_followers_list
 | 
				
			||||||
 | 
					        log.debug("Compose_function: %s" % (self.compose_function,))
 | 
				
			||||||
 | 
					        self.get_tweet = self.get_right_tweet
 | 
				
			||||||
 | 
					        self.url = self.interact
 | 
				
			||||||
 | 
					        if "-followers" in self.name or "-friends" in self.name:
 | 
				
			||||||
 | 
					            self.finished_timeline = False
 | 
				
			||||||
 | 
					            # Add a compatibility layer for username based timelines from config.
 | 
				
			||||||
 | 
					            # ToDo: Remove this in some new versions of the client, when user ID timelines become mandatory.
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                int(self.kwargs["user_id"])
 | 
				
			||||||
 | 
					            except ValueError:
 | 
				
			||||||
 | 
					                self.is_screen_name = True
 | 
				
			||||||
 | 
					                self.kwargs["screen_name"] = self.kwargs["user_id"]
 | 
				
			||||||
 | 
					                self.kwargs.pop("user_id")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=True):
 | 
				
			||||||
 | 
					        if "-followers" in self.name:
 | 
				
			||||||
 | 
					            if force == False:
 | 
				
			||||||
 | 
					                dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					            if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					                if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]:
 | 
				
			||||||
 | 
					                    self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10])
 | 
				
			||||||
 | 
					                    if self.name in self.session.db:
 | 
				
			||||||
 | 
					                        self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                    self.session.settings.write()
 | 
				
			||||||
 | 
					                    return True
 | 
				
			||||||
 | 
					            elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        elif "-friends" in self.name:
 | 
				
			||||||
 | 
					            if force == False:
 | 
				
			||||||
 | 
					                dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					            if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					                if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]:
 | 
				
			||||||
 | 
					                    self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8])
 | 
				
			||||||
 | 
					                    if self.name in self.session.db:
 | 
				
			||||||
 | 
					                        self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                    self.session.settings.write()
 | 
				
			||||||
 | 
					                    return True
 | 
				
			||||||
 | 
					            elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            output.speak(_(u"This buffer is not a timeline; it can't be deleted."), True)
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def onFocus(self, ev):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_message(self):
 | 
				
			||||||
 | 
					        return " ".join(self.compose_function(self.get_tweet(), self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete_item(self): pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @_tweets_exist
 | 
				
			||||||
 | 
					    def reply(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        tweet = self.get_right_tweet()
 | 
				
			||||||
 | 
					        screen_name = tweet.screen_name
 | 
				
			||||||
 | 
					        message = messages.reply(self.session, _(u"Mention"), _(u"Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,])
 | 
				
			||||||
 | 
					        if message.message.get_response() == widgetUtils.OK:
 | 
				
			||||||
 | 
					            if config.app["app-settings"]["remember_mention_and_longtweet"]:
 | 
				
			||||||
 | 
					                config.app["app-settings"]["longtweet"] = message.message.long_tweet.GetValue()
 | 
				
			||||||
 | 
					                config.app.write()
 | 
				
			||||||
 | 
					            if message.image == None:
 | 
				
			||||||
 | 
					                item = self.session.api_call(call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text(), tweet_mode="extended")
 | 
				
			||||||
 | 
					                if item != None:
 | 
				
			||||||
 | 
					                    pub.sendMessage("sent-tweet", data=item, user=self.session.db["user_name"])
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", status=message.message.get_text(), media=message.file)
 | 
				
			||||||
 | 
					        if hasattr(message.message, "destroy"): message.message.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
				
			||||||
 | 
					        # starts stream every 3 minutes.
 | 
				
			||||||
 | 
					        current_time = time.time()
 | 
				
			||||||
 | 
					        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory==True:
 | 
				
			||||||
 | 
					            self.execution_time = current_time
 | 
				
			||||||
 | 
					            log.debug("Starting stream for %s buffer, %s account" % (self.name, self.account,))
 | 
				
			||||||
 | 
					            log.debug("args: %s, kwargs: %s" % (self.args, self.kwargs))
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                val = getattr(self.session.twitter, self.function)(return_cursors=True, count=self.session.settings["general"]["max_tweets_per_call"], *self.args, **self.kwargs)
 | 
				
			||||||
 | 
					                if type(val) == tuple:
 | 
				
			||||||
 | 
					                    val, cursor = val
 | 
				
			||||||
 | 
					                    if type(cursor) == tuple:
 | 
				
			||||||
 | 
					                        cursor = cursor[1]
 | 
				
			||||||
 | 
					                    cursors = self.session.db["cursors"]
 | 
				
			||||||
 | 
					                    cursors[self.name] = cursor
 | 
				
			||||||
 | 
					                    self.session.db["cursors"] = cursors
 | 
				
			||||||
 | 
					                results = [i for i in val]
 | 
				
			||||||
 | 
					                val = results
 | 
				
			||||||
 | 
					                val.reverse()
 | 
				
			||||||
 | 
					                log.debug("Retrieved %d items from cursored search in function %s" % (len(val), self.function))
 | 
				
			||||||
 | 
					            except TweepError as e:
 | 
				
			||||||
 | 
					                log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            number_of_items = self.session.order_people(self.name, val)
 | 
				
			||||||
 | 
					            log.debug("Number of items retrieved: %d" % (number_of_items,))
 | 
				
			||||||
 | 
					            self.put_items_on_list(number_of_items)
 | 
				
			||||||
 | 
					            if hasattr(self, "finished_timeline") and self.finished_timeline == False:
 | 
				
			||||||
 | 
					                self.username = self.session.api_call("get_user", **self.kwargs).screen_name
 | 
				
			||||||
 | 
					                self.finished_timeline = True
 | 
				
			||||||
 | 
					            if number_of_items > 0 and self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
				
			||||||
 | 
					                self.session.sound.play(self.sound)
 | 
				
			||||||
 | 
					            # Autoread settings
 | 
				
			||||||
 | 
					            if avoid_autoreading == False and mandatory == True and number_of_items > 0 and self.name in self.session.settings["other_buffers"]["autoread_buffers"]:
 | 
				
			||||||
 | 
					                self.auto_read(number_of_items)
 | 
				
			||||||
 | 
					            return number_of_items
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_more_items(self):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            cursor = self.session.db["cursors"].get(self.name)
 | 
				
			||||||
 | 
					            items = getattr(self.session.twitter, self.function)(return_cursors=True, users=True, cursor=cursor, count=self.session.settings["general"]["max_tweets_per_call"], *self.args, **self.kwargs)
 | 
				
			||||||
 | 
					            if type(items) == tuple:
 | 
				
			||||||
 | 
					                items, cursor = items
 | 
				
			||||||
 | 
					                if type(cursor) == tuple:
 | 
				
			||||||
 | 
					                    cursor = cursor[1]
 | 
				
			||||||
 | 
					                cursors = self.session.db["cursors"]
 | 
				
			||||||
 | 
					                cursors[self.name] = cursor
 | 
				
			||||||
 | 
					                self.session.db["cursors"] = cursors
 | 
				
			||||||
 | 
					            results = [i for i in items]
 | 
				
			||||||
 | 
					            items = results
 | 
				
			||||||
 | 
					            log.debug("Retrieved %d items from cursored search in function %s" % (len(items), self.function))
 | 
				
			||||||
 | 
					        except TweepError as e:
 | 
				
			||||||
 | 
					            log.error("Error %s: %s" % (e.api_code, e.reason))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        if items == None:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        items_db = self.session.db[self.name]
 | 
				
			||||||
 | 
					        for i in items:
 | 
				
			||||||
 | 
					            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                items_db.insert(0, i)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                items_db.append(i)
 | 
				
			||||||
 | 
					        self.session.db[self.name] = items_db
 | 
				
			||||||
 | 
					        selected = self.buffer.list.get_selected()
 | 
				
			||||||
 | 
					        if self.session.settings["general"]["reverse_timelines"] == True:
 | 
				
			||||||
 | 
					            for i in items:
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					            self.buffer.list.select_item(selected)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            for i in items:
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					        output.speak(_(u"%s items retrieved") % (len(items)), True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def put_items_on_list(self, number_of_items):
 | 
				
			||||||
 | 
					        log.debug("The list contains %d items" % (self.buffer.list.get_count(),))
 | 
				
			||||||
 | 
					#  log.debug("Putting %d items on the list..." % (number_of_items,))
 | 
				
			||||||
 | 
					        if self.buffer.list.get_count() == 0:
 | 
				
			||||||
 | 
					            for i in self.session.db[self.name]:
 | 
				
			||||||
 | 
					                tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
				
			||||||
 | 
					                self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
 | 
					            self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
 | 
				
			||||||
 | 
					#   self.buffer.set_list_position()
 | 
				
			||||||
 | 
					        elif self.buffer.list.get_count() > 0:
 | 
				
			||||||
 | 
					            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                for i in self.session.db[self.name][len(self.session.db[self.name])-number_of_items:]:
 | 
				
			||||||
 | 
					                    tweet = self.compose_function(i, self.session.db)
 | 
				
			||||||
 | 
					                    self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                items = self.session.db[self.name][0:number_of_items]
 | 
				
			||||||
 | 
					                items.reverse()
 | 
				
			||||||
 | 
					                for i in items:
 | 
				
			||||||
 | 
					                    tweet = self.compose_function(i, self.session.db)
 | 
				
			||||||
 | 
					                    self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					        log.debug("now the list contains %d items" % (self.buffer.list.get_count(),))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_right_tweet(self):
 | 
				
			||||||
 | 
					        tweet = self.session.db[self.name][self.buffer.list.get_selected()]
 | 
				
			||||||
 | 
					        return tweet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def add_new_item(self, item):
 | 
				
			||||||
 | 
					        tweet = self.compose_function(item, self.session.db, self.session.settings["general"]["relative_times"], self.session)
 | 
				
			||||||
 | 
					        if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					            self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.list.insert_item(True, *tweet)
 | 
				
			||||||
 | 
					        if self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
				
			||||||
 | 
					            output.speak(" ".join(tweet))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def clear_list(self):
 | 
				
			||||||
 | 
					        dlg = commonMessageDialogs.clear_list()
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            self.session.db[self.name] = []
 | 
				
			||||||
 | 
					            self.session.db["cursors"][self.name] = -1
 | 
				
			||||||
 | 
					            self.buffer.list.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def interact(self):
 | 
				
			||||||
 | 
					        user.profileController(self.session, user=self.get_right_tweet().screen_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def show_menu(self, ev, pos=0, *args, **kwargs):
 | 
				
			||||||
 | 
					        menu = menus.peoplePanelMenu()
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.send_message, menuitem=menu.reply)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.user_actions, menuitem=menu.userActions)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.details, menuitem=menu.details)
 | 
				
			||||||
 | 
					#  widgetUtils.connect_event(menu, widgetUtils.MENU, self.lists, menuitem=menu.lists)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)
 | 
				
			||||||
 | 
					        if hasattr(menu, "openInBrowser"):
 | 
				
			||||||
 | 
					            widgetUtils.connect_event(menu, widgetUtils.MENU, self.open_in_browser, menuitem=menu.openInBrowser)
 | 
				
			||||||
 | 
					        if pos != 0:
 | 
				
			||||||
 | 
					            self.buffer.PopupMenu(menu, pos)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.PopupMenu(menu, ev.GetPosition())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def details(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        pub.sendMessage("execute-action", action="user_details")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def auto_read(self, number_of_items):
 | 
				
			||||||
 | 
					        if number_of_items == 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
				
			||||||
 | 
					            if self.session.settings["general"]["reverse_timelines"] == False:
 | 
				
			||||||
 | 
					                tweet = self.session.db[self.name][-1]
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                tweet = self.session.db[self.name][0]
 | 
				
			||||||
 | 
					            output.speak(" ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], self.session)))
 | 
				
			||||||
 | 
					        elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
 | 
				
			||||||
 | 
					            output.speak(_(u"{0} new followers.").format(number_of_items))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def open_in_browser(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        tweet = self.get_tweet()
 | 
				
			||||||
 | 
					        output.speak(_(u"Opening item in web browser..."))
 | 
				
			||||||
 | 
					        url = "https://twitter.com/{screen_name}".format(screen_name=tweet.screen_name)
 | 
				
			||||||
 | 
					        webbrowser.open(url)
 | 
				
			||||||
							
								
								
									
										113
									
								
								src/controller/buffers/twitter/search.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/controller/buffers/twitter/search.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					if platform.system() == "Windows":
 | 
				
			||||||
 | 
					    from wxUI import  commonMessageDialogs
 | 
				
			||||||
 | 
					elif platform.system() == "Linux":
 | 
				
			||||||
 | 
					    from gi.repository import Gtk
 | 
				
			||||||
 | 
					    from gtkUI import commonMessageDialogs
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from . import base, people
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.twitter.searchBuffer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SearchBuffer(base.BaseBuffer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=False):
 | 
				
			||||||
 | 
					        if force == False:
 | 
				
			||||||
 | 
					            dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
 | 
				
			||||||
 | 
					                self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
 | 
				
			||||||
 | 
					                self.session.settings.write()
 | 
				
			||||||
 | 
					                if self.name in self.session.db:
 | 
				
			||||||
 | 
					                    self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SearchPeopleBuffer(people.PeopleBuffer):
 | 
				
			||||||
 | 
					    """ This is identical to a normal peopleBufferController, except that uses the page parameter instead of a cursor."""
 | 
				
			||||||
 | 
					    def __init__(self, parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs):
 | 
				
			||||||
 | 
					        super(SearchPeopleBuffer, self).__init__(parent, function, name, sessionObject, account, bufferType="peoplePanel", *args, **kwargs)
 | 
				
			||||||
 | 
					        if ("page" in self.kwargs) == False:
 | 
				
			||||||
 | 
					            self.page = 1
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.page = self.kwargs.pop("page")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_more_items(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        # Add 1 to the page parameter, put it in kwargs and calls to get_more_items in the parent buffer.
 | 
				
			||||||
 | 
					        self.page = self.page +1
 | 
				
			||||||
 | 
					        self.kwargs["page"] = self.page
 | 
				
			||||||
 | 
					        super(SearchPeopleBuffer, self).get_more_items(*args, **kwargs)
 | 
				
			||||||
 | 
					        # remove the parameter again to make sure start_stream won't fetch items for this page indefinitely.
 | 
				
			||||||
 | 
					        self.kwargs.pop("page")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=False):
 | 
				
			||||||
 | 
					        if force == False:
 | 
				
			||||||
 | 
					            dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
 | 
				
			||||||
 | 
					                self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
 | 
				
			||||||
 | 
					                self.session.settings.write()
 | 
				
			||||||
 | 
					                if self.name in self.session.db:
 | 
				
			||||||
 | 
					                    self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConversationBuffer(SearchBuffer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def start_stream(self, start=False, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
				
			||||||
 | 
					        # starts stream every 3 minutes.
 | 
				
			||||||
 | 
					        current_time = time.time()
 | 
				
			||||||
 | 
					        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
 | 
				
			||||||
 | 
					            self.execution_time = current_time
 | 
				
			||||||
 | 
					            if start == True:
 | 
				
			||||||
 | 
					                self.statuses = []
 | 
				
			||||||
 | 
					                self.ids = []
 | 
				
			||||||
 | 
					                self.statuses.append(self.tweet)
 | 
				
			||||||
 | 
					                self.ids.append(self.tweet.id)
 | 
				
			||||||
 | 
					                tweet = self.tweet
 | 
				
			||||||
 | 
					                if not hasattr(tweet, "in_reply_to_status_id"):
 | 
				
			||||||
 | 
					                    tweet.in_reply_to_status_id = None
 | 
				
			||||||
 | 
					                while tweet.in_reply_to_status_id != None:
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        tweet = self.session.twitter.get_status(id=tweet.in_reply_to_status_id, tweet_mode="extended")
 | 
				
			||||||
 | 
					                    except TweepError as err:
 | 
				
			||||||
 | 
					                        break
 | 
				
			||||||
 | 
					                    self.statuses.insert(0, tweet)
 | 
				
			||||||
 | 
					                    self.ids.append(tweet.id)
 | 
				
			||||||
 | 
					                if tweet.in_reply_to_status_id == None:
 | 
				
			||||||
 | 
					                    self.kwargs["since_id"] = tweet.id
 | 
				
			||||||
 | 
					                    self.ids.append(tweet.id)
 | 
				
			||||||
 | 
					            val2 = self.session.search(self.name, tweet_mode="extended", *self.args, **self.kwargs)
 | 
				
			||||||
 | 
					            for i in val2:
 | 
				
			||||||
 | 
					                if i.in_reply_to_status_id in self.ids:
 | 
				
			||||||
 | 
					                    self.statuses.append(i)
 | 
				
			||||||
 | 
					                    self.ids.append(i.id)
 | 
				
			||||||
 | 
					                    tweet = i
 | 
				
			||||||
 | 
					            number_of_items = self.session.order_buffer(self.name, self.statuses)
 | 
				
			||||||
 | 
					            log.debug("Number of items retrieved: %d" % (number_of_items,))
 | 
				
			||||||
 | 
					            self.put_items_on_list(number_of_items)
 | 
				
			||||||
 | 
					            if number_of_items > 0 and self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
				
			||||||
 | 
					                self.session.sound.play(self.sound)
 | 
				
			||||||
 | 
					            # Autoread settings
 | 
				
			||||||
 | 
					            if avoid_autoreading == False and mandatory == True and number_of_items > 0 and self.name in self.session.settings["other_buffers"]["autoread_buffers"]:
 | 
				
			||||||
 | 
					                self.auto_read(number_of_items)
 | 
				
			||||||
 | 
					            return number_of_items
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=False):
 | 
				
			||||||
 | 
					        if force == False:
 | 
				
			||||||
 | 
					            dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            if self.name in self.session.db:
 | 
				
			||||||
 | 
					                self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					        elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
							
								
								
									
										145
									
								
								src/controller/buffers/twitter/trends.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								src/controller/buffers/twitter/trends.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,145 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import platform
 | 
				
			||||||
 | 
					if platform.system() == "Windows":
 | 
				
			||||||
 | 
					    import wx
 | 
				
			||||||
 | 
					    from wxUI import buffers, commonMessageDialogs, menus
 | 
				
			||||||
 | 
					    from controller import user
 | 
				
			||||||
 | 
					elif platform.system() == "Linux":
 | 
				
			||||||
 | 
					    from gi.repository import Gtk
 | 
				
			||||||
 | 
					    from gtkUI import buffers, commonMessageDialogs
 | 
				
			||||||
 | 
					from controller import messages
 | 
				
			||||||
 | 
					import widgetUtils
 | 
				
			||||||
 | 
					import output
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from mysc.thread_utils import call_threaded
 | 
				
			||||||
 | 
					from tweepy.error import TweepError
 | 
				
			||||||
 | 
					from pubsub import pub
 | 
				
			||||||
 | 
					from controller.buffers import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger("controller.buffers.twitter.trends")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TrendsBuffer(base.Buffer):
 | 
				
			||||||
 | 
					    def __init__(self, parent, name, session, account, trendsFor, *args, **kwargs):
 | 
				
			||||||
 | 
					        super(TrendsBuffer, self).__init__(parent=parent, session=session)
 | 
				
			||||||
 | 
					        self.trendsFor = trendsFor
 | 
				
			||||||
 | 
					        self.session = session
 | 
				
			||||||
 | 
					        self.account = account
 | 
				
			||||||
 | 
					        self.invisible = True
 | 
				
			||||||
 | 
					        self.buffer = buffers.trendsPanel(parent, name)
 | 
				
			||||||
 | 
					        self.buffer.account = account
 | 
				
			||||||
 | 
					        self.type = self.buffer.type
 | 
				
			||||||
 | 
					        self.bind_events()
 | 
				
			||||||
 | 
					        self.sound = "trends_updated.ogg"
 | 
				
			||||||
 | 
					        self.trends = []
 | 
				
			||||||
 | 
					        self.name = name
 | 
				
			||||||
 | 
					        self.buffer.name = name
 | 
				
			||||||
 | 
					        self.compose_function = self.compose_function_
 | 
				
			||||||
 | 
					        self.get_formatted_message = self.get_message
 | 
				
			||||||
 | 
					        self.reply = self.search_topic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
 | 
				
			||||||
 | 
					        # starts stream every 3 minutes.
 | 
				
			||||||
 | 
					        current_time = time.time()
 | 
				
			||||||
 | 
					        if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
 | 
				
			||||||
 | 
					            self.execution_time = current_time
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                data = self.session.twitter.trends_place(id=self.trendsFor)
 | 
				
			||||||
 | 
					            except TweepError as err:
 | 
				
			||||||
 | 
					                log.error("Error %s: %s" % (err.api_code, err.reason))
 | 
				
			||||||
 | 
					            if not hasattr(self, "name_"):
 | 
				
			||||||
 | 
					                self.name_ = data[0]["locations"][0]["name"]
 | 
				
			||||||
 | 
					            self.trends = data[0]["trends"]
 | 
				
			||||||
 | 
					            self.put_items_on_the_list()
 | 
				
			||||||
 | 
					            if self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
 | 
				
			||||||
 | 
					                self.session.sound.play(self.sound)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def put_items_on_the_list(self):
 | 
				
			||||||
 | 
					        selected_item = self.buffer.list.get_selected()
 | 
				
			||||||
 | 
					        self.buffer.list.clear()
 | 
				
			||||||
 | 
					        for i in self.trends:
 | 
				
			||||||
 | 
					            tweet = self.compose_function(i)
 | 
				
			||||||
 | 
					            self.buffer.list.insert_item(False, *tweet)
 | 
				
			||||||
 | 
					            self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def compose_function_(self, trend):
 | 
				
			||||||
 | 
					        return [trend["name"]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def bind_events(self):
 | 
				
			||||||
 | 
					        log.debug("Binding events...")
 | 
				
			||||||
 | 
					        self.buffer.list.list.Bind(wx.EVT_CHAR_HOOK, self.get_event)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.tweet_about_this_trend, self.buffer.tweetTrendBtn)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_status, self.buffer.tweet)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.search_topic, self.buffer.search_topic)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_message(self):
 | 
				
			||||||
 | 
					        return self.compose_function(self.trends[self.buffer.list.get_selected()])[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def remove_buffer(self, force=False):
 | 
				
			||||||
 | 
					        if force == False:
 | 
				
			||||||
 | 
					            dlg = commonMessageDialogs.remove_buffer()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            dlg = widgetUtils.YES
 | 
				
			||||||
 | 
					        if dlg == widgetUtils.YES:
 | 
				
			||||||
 | 
					            if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]:
 | 
				
			||||||
 | 
					                self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3])
 | 
				
			||||||
 | 
					                self.session.settings.write()
 | 
				
			||||||
 | 
					                if self.name in self.session.db:
 | 
				
			||||||
 | 
					                    self.session.db.pop(self.name)
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        elif dlg == widgetUtils.NO:
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def url(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        self.tweet_about_this_trend()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def search_topic(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        topic = self.trends[self.buffer.list.get_selected()]["name"]
 | 
				
			||||||
 | 
					        pub.sendMessage("search", term=topic)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def show_menu(self, ev, pos=0, *args, **kwargs):
 | 
				
			||||||
 | 
					        menu = menus.trendsPanelMenu()
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.search_topic, menuitem=menu.search_topic)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.tweet_about_this_trend, menuitem=menu.tweetThisTrend)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
 | 
				
			||||||
 | 
					        widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)
 | 
				
			||||||
 | 
					        if pos != 0:
 | 
				
			||||||
 | 
					            self.buffer.PopupMenu(menu, pos)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.buffer.PopupMenu(menu, ev.GetPosition())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def view(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        pub.sendMessage("execute-action", action="view_item")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def copy(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        pub.sendMessage("execute-action", action="copy_to_clipboard")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tweet_about_this_trend(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        if self.buffer.list.get_count() == 0: return
 | 
				
			||||||
 | 
					        title = _(u"Tweet")
 | 
				
			||||||
 | 
					        caption = _(u"Write the tweet here")
 | 
				
			||||||
 | 
					        tweet = messages.tweet(self.session, title, caption, self.get_message()+ " ")
 | 
				
			||||||
 | 
					        tweet.message.set_cursor_at_end()
 | 
				
			||||||
 | 
					        if tweet.message.get_response() == widgetUtils.OK:
 | 
				
			||||||
 | 
					            text = tweet.message.get_text()
 | 
				
			||||||
 | 
					            if len(text) > 280 and tweet.message.get("long_tweet") == True:
 | 
				
			||||||
 | 
					                if tweet.image == None:
 | 
				
			||||||
 | 
					                    text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text, 1)
 | 
				
			||||||
 | 
					            if tweet.image == None:
 | 
				
			||||||
 | 
					                call_threaded(self.session.api_call, call_name="update_status", status=text)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                call_threaded(self.session.api_call, call_name="update_status_with_media", status=text, media=tweet.image)
 | 
				
			||||||
 | 
					        if hasattr(tweet.message, "destroy"): tweet.message.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def show_menu_by_key(self, ev):
 | 
				
			||||||
 | 
					        if self.buffer.list.get_count() == 0:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        if ev.GetKeyCode() == wx.WXK_WINDOWS_MENU:
 | 
				
			||||||
 | 
					            self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def open_in_browser(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        output.speak(_(u"This action is not supported in the buffer, yet."))
 | 
				
			||||||
@@ -22,8 +22,7 @@ elif system == "Linux":
 | 
				
			|||||||
    from gtkUI import (view, commonMessageDialogs)
 | 
					    from gtkUI import (view, commonMessageDialogs)
 | 
				
			||||||
from sessions.twitter import utils, compose
 | 
					from sessions.twitter import utils, compose
 | 
				
			||||||
from sessionmanager import manager, sessionManager
 | 
					from sessionmanager import manager, sessionManager
 | 
				
			||||||
 | 
					from controller import buffers
 | 
				
			||||||
from controller.buffers import baseBuffers, twitterBuffers
 | 
					 | 
				
			||||||
from . import messages
 | 
					from . import messages
 | 
				
			||||||
import sessions
 | 
					import sessions
 | 
				
			||||||
from sessions.twitter  import session as session_
 | 
					from sessions.twitter  import session as session_
 | 
				
			||||||
@@ -274,7 +273,7 @@ class Controller(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def create_ignored_session_buffer(self, session):
 | 
					    def create_ignored_session_buffer(self, session):
 | 
				
			||||||
        self.accounts.append(session.settings["twitter"]["user_name"])
 | 
					        self.accounts.append(session.settings["twitter"]["user_name"])
 | 
				
			||||||
        account = baseBuffers.accountPanel(self.view.nb, session.settings["twitter"]["user_name"], session.settings["twitter"]["user_name"], session.session_id)
 | 
					        account = buffers.base.AccountBuffer(self.view.nb, session.settings["twitter"]["user_name"], session.settings["twitter"]["user_name"], session.session_id)
 | 
				
			||||||
        account.logged = False
 | 
					        account.logged = False
 | 
				
			||||||
        account.setup_account()
 | 
					        account.setup_account()
 | 
				
			||||||
        self.buffers.append(account)
 | 
					        self.buffers.append(account)
 | 
				
			||||||
@@ -294,96 +293,96 @@ class Controller(object):
 | 
				
			|||||||
        session.get_user_info()
 | 
					        session.get_user_info()
 | 
				
			||||||
        if createAccounts == True:
 | 
					        if createAccounts == True:
 | 
				
			||||||
            self.accounts.append(session.db["user_name"])
 | 
					            self.accounts.append(session.db["user_name"])
 | 
				
			||||||
            account = baseBuffers.accountPanel(self.view.nb, session.db["user_name"], session.db["user_name"], session.session_id)
 | 
					            account = buffers.base.AccountBuffer(self.view.nb, session.db["user_name"], session.db["user_name"], session.session_id)
 | 
				
			||||||
            account.setup_account()
 | 
					            account.setup_account()
 | 
				
			||||||
            self.buffers.append(account)
 | 
					            self.buffers.append(account)
 | 
				
			||||||
            self.view.add_buffer(account.buffer , name=session.db["user_name"])
 | 
					            self.view.add_buffer(account.buffer , name=session.db["user_name"])
 | 
				
			||||||
        for i in session.settings['general']['buffer_order']:
 | 
					        for i in session.settings['general']['buffer_order']:
 | 
				
			||||||
            if i == 'home':
 | 
					            if i == 'home':
 | 
				
			||||||
                home = twitterBuffers.baseBufferController(self.view.nb, "home_timeline", "home_timeline", session, session.db["user_name"], sound="tweet_received.ogg", tweet_mode="extended")
 | 
					                home = buffers.twitter.BaseBuffer(self.view.nb, "home_timeline", "home_timeline", session, session.db["user_name"], sound="tweet_received.ogg", tweet_mode="extended")
 | 
				
			||||||
                self.buffers.append(home)
 | 
					                self.buffers.append(home)
 | 
				
			||||||
                self.view.insert_buffer(home.buffer, name=_(u"Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(home.buffer, name=_(u"Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'mentions':
 | 
					            elif i == 'mentions':
 | 
				
			||||||
                mentions = twitterBuffers.baseBufferController(self.view.nb, "mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended")
 | 
					                mentions = buffers.twitter.BaseBuffer(self.view.nb, "mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended")
 | 
				
			||||||
                self.buffers.append(mentions)
 | 
					                self.buffers.append(mentions)
 | 
				
			||||||
                self.view.insert_buffer(mentions.buffer, name=_(u"Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(mentions.buffer, name=_(u"Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'dm':
 | 
					            elif i == 'dm':
 | 
				
			||||||
                dm = twitterBuffers.directMessagesController(self.view.nb, "list_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_direct_message", sound="dm_received.ogg")
 | 
					                dm = buffers.twitter.DirectMessagesBuffer(self.view.nb, "list_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_direct_message", sound="dm_received.ogg")
 | 
				
			||||||
                self.buffers.append(dm)
 | 
					                self.buffers.append(dm)
 | 
				
			||||||
                self.view.insert_buffer(dm.buffer, name=_(u"Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(dm.buffer, name=_(u"Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'sent_dm':
 | 
					            elif i == 'sent_dm':
 | 
				
			||||||
                sent_dm = twitterBuffers.sentDirectMessagesController(self.view.nb, "", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_direct_message")
 | 
					                sent_dm = buffers.twitter.SentDirectMessagesBuffer(self.view.nb, "", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_direct_message")
 | 
				
			||||||
                self.buffers.append(sent_dm)
 | 
					                self.buffers.append(sent_dm)
 | 
				
			||||||
                self.view.insert_buffer(sent_dm.buffer, name=_(u"Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(sent_dm.buffer, name=_(u"Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'sent_tweets':
 | 
					            elif i == 'sent_tweets':
 | 
				
			||||||
                sent_tweets = twitterBuffers.baseBufferController(self.view.nb, "user_timeline", "sent_tweets", session, session.db["user_name"], screen_name=session.db["user_name"], tweet_mode="extended")
 | 
					                sent_tweets = buffers.twitter.BaseBuffer(self.view.nb, "user_timeline", "sent_tweets", session, session.db["user_name"], screen_name=session.db["user_name"], tweet_mode="extended")
 | 
				
			||||||
                self.buffers.append(sent_tweets)
 | 
					                self.buffers.append(sent_tweets)
 | 
				
			||||||
                self.view.insert_buffer(sent_tweets.buffer, name=_(u"Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(sent_tweets.buffer, name=_(u"Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'favorites':
 | 
					            elif i == 'favorites':
 | 
				
			||||||
                favourites = twitterBuffers.baseBufferController(self.view.nb, "favorites", "favourites", session, session.db["user_name"], sound="favourite.ogg", tweet_mode="extended")
 | 
					                favourites = buffers.twitter.BaseBuffer(self.view.nb, "favorites", "favourites", session, session.db["user_name"], sound="favourite.ogg", tweet_mode="extended")
 | 
				
			||||||
                self.buffers.append(favourites)
 | 
					                self.buffers.append(favourites)
 | 
				
			||||||
                self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'followers':
 | 
					            elif i == 'followers':
 | 
				
			||||||
                followers = twitterBuffers.peopleBufferController(self.view.nb, "followers", "followers", session, session.db["user_name"], sound="update_followers.ogg", screen_name=session.db["user_name"])
 | 
					                followers = buffers.twitter.PeopleBuffer(self.view.nb, "followers", "followers", session, session.db["user_name"], sound="update_followers.ogg", screen_name=session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(followers)
 | 
					                self.buffers.append(followers)
 | 
				
			||||||
                self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'friends':
 | 
					            elif i == 'friends':
 | 
				
			||||||
                friends = twitterBuffers.peopleBufferController(self.view.nb, "friends", "friends", session, session.db["user_name"], screen_name=session.db["user_name"])
 | 
					                friends = buffers.twitter.PeopleBuffer(self.view.nb, "friends", "friends", session, session.db["user_name"], screen_name=session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(friends)
 | 
					                self.buffers.append(friends)
 | 
				
			||||||
                self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'blocks':
 | 
					            elif i == 'blocks':
 | 
				
			||||||
                blocks = twitterBuffers.peopleBufferController(self.view.nb, "blocks", "blocked", session, session.db["user_name"])
 | 
					                blocks = buffers.twitter.PeopleBuffer(self.view.nb, "blocks", "blocked", session, session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(blocks)
 | 
					                self.buffers.append(blocks)
 | 
				
			||||||
                self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
            elif i == 'muted':
 | 
					            elif i == 'muted':
 | 
				
			||||||
                muted = twitterBuffers.peopleBufferController(self.view.nb, "mutes", "muted", session, session.db["user_name"])
 | 
					                muted = buffers.twitter.PeopleBuffer(self.view.nb, "mutes", "muted", session, session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(muted)
 | 
					                self.buffers.append(muted)
 | 
				
			||||||
                self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					                self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        timelines = baseBuffers.emptyPanel(self.view.nb, "timelines", session.db["user_name"])
 | 
					        timelines = buffers.base.EmptyBuffer(self.view.nb, "timelines", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(timelines)
 | 
					        self.buffers.append(timelines)
 | 
				
			||||||
        self.view.insert_buffer(timelines.buffer , name=_(u"Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(timelines.buffer , name=_(u"Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["timelines"]:
 | 
					        for i in session.settings["other_buffers"]["timelines"]:
 | 
				
			||||||
            tl = twitterBuffers.baseBufferController(self.view.nb, "user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], sound="tweet_timeline.ogg", bufferType=None, user_id=i, tweet_mode="extended")
 | 
					            tl = buffers.twitter.BaseBuffer(self.view.nb, "user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], sound="tweet_timeline.ogg", bufferType=None, user_id=i, tweet_mode="extended")
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"]))
 | 
				
			||||||
        favs_timelines = baseBuffers.emptyPanel(self.view.nb, "favs_timelines", session.db["user_name"])
 | 
					        favs_timelines = buffers.base.EmptyBuffer(self.view.nb, "favs_timelines", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(favs_timelines)
 | 
					        self.buffers.append(favs_timelines)
 | 
				
			||||||
        self.view.insert_buffer(favs_timelines.buffer , name=_(u"Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(favs_timelines.buffer , name=_(u"Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["favourites_timelines"]:
 | 
					        for i in session.settings["other_buffers"]["favourites_timelines"]:
 | 
				
			||||||
            tl = twitterBuffers.baseBufferController(self.view.nb, "favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, sound="favourites_timeline_updated.ogg", user_id=i, tweet_mode="extended")
 | 
					            tl = buffers.twitter.BaseBuffer(self.view.nb, "favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, sound="favourites_timeline_updated.ogg", user_id=i, tweet_mode="extended")
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
 | 
				
			||||||
        followers_timelines = baseBuffers.emptyPanel(self.view.nb, "followers_timelines", session.db["user_name"])
 | 
					        followers_timelines = buffers.base.EmptyBuffer(self.view.nb, "followers_timelines", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(followers_timelines)
 | 
					        self.buffers.append(followers_timelines)
 | 
				
			||||||
        self.view.insert_buffer(followers_timelines.buffer , name=_(u"Followers' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(followers_timelines.buffer , name=_(u"Followers' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["followers_timelines"]:
 | 
					        for i in session.settings["other_buffers"]["followers_timelines"]:
 | 
				
			||||||
            tl = twitterBuffers.peopleBufferController(self.view.nb, "followers", "%s-followers" % (i,), session, session.db["user_name"], sound="new_event.ogg", user_id=i)
 | 
					            tl = buffers.twitter.PeopleBuffer(self.view.nb, "followers", "%s-followers" % (i,), session, session.db["user_name"], sound="new_event.ogg", user_id=i)
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"Followers for {}").format(i,), pos=self.view.search("followers_timelines", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"Followers for {}").format(i,), pos=self.view.search("followers_timelines", session.db["user_name"]))
 | 
				
			||||||
        friends_timelines = baseBuffers.emptyPanel(self.view.nb, "friends_timelines", session.db["user_name"])
 | 
					        friends_timelines = buffers.base.EmptyBuffer(self.view.nb, "friends_timelines", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(friends_timelines)
 | 
					        self.buffers.append(friends_timelines)
 | 
				
			||||||
        self.view.insert_buffer(friends_timelines.buffer , name=_(u"Friends' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(friends_timelines.buffer , name=_(u"Friends' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["friends_timelines"]:
 | 
					        for i in session.settings["other_buffers"]["friends_timelines"]:
 | 
				
			||||||
            tl = twitterBuffers.peopleBufferController(self.view.nb, "friends", "%s-friends" % (i,), session, session.db["user_name"], sound="new_event.ogg", user_id=i)
 | 
					            tl = buffers.twitter.PeopleBuffer(self.view.nb, "friends", "%s-friends" % (i,), session, session.db["user_name"], sound="new_event.ogg", user_id=i)
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"Friends for {}").format(i,), pos=self.view.search("friends_timelines", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"Friends for {}").format(i,), pos=self.view.search("friends_timelines", session.db["user_name"]))
 | 
				
			||||||
        lists = baseBuffers.emptyPanel(self.view.nb, "lists", session.db["user_name"])
 | 
					        lists = buffers.base.EmptyBuffer(self.view.nb, "lists", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(lists)
 | 
					        self.buffers.append(lists)
 | 
				
			||||||
        self.view.insert_buffer(lists.buffer , name=_(u"Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(lists.buffer , name=_(u"Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["lists"]:
 | 
					        for i in session.settings["other_buffers"]["lists"]:
 | 
				
			||||||
            tl = twitterBuffers.listBufferController(self.view.nb, "list_timeline", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, sound="list_tweet.ogg", list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended")
 | 
					            tl = buffers.twitter.ListBuffer(self.view.nb, "list_timeline", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, sound="list_tweet.ogg", list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended")
 | 
				
			||||||
            session.lists.append(tl)
 | 
					            session.lists.append(tl)
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("lists", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("lists", session.db["user_name"]))
 | 
				
			||||||
        searches = baseBuffers.emptyPanel(self.view.nb, "searches", session.db["user_name"])
 | 
					        searches = buffers.base.EmptyBuffer(self.view.nb, "searches", session.db["user_name"])
 | 
				
			||||||
        self.buffers.append(searches)
 | 
					        self.buffers.append(searches)
 | 
				
			||||||
        self.view.insert_buffer(searches.buffer , name=_(u"Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
					        self.view.insert_buffer(searches.buffer , name=_(u"Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["tweet_searches"]:
 | 
					        for i in session.settings["other_buffers"]["tweet_searches"]:
 | 
				
			||||||
            tl = twitterBuffers.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", q=i, tweet_mode="extended")
 | 
					            tl = buffers.twitter.SearchBuffer(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", q=i, tweet_mode="extended")
 | 
				
			||||||
            self.buffers.append(tl)
 | 
					            self.buffers.append(tl)
 | 
				
			||||||
            self.view.insert_buffer(tl.buffer, name=_(u"Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"]))
 | 
					            self.view.insert_buffer(tl.buffer, name=_(u"Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"]))
 | 
				
			||||||
        for i in session.settings["other_buffers"]["trending_topic_buffers"]:
 | 
					        for i in session.settings["other_buffers"]["trending_topic_buffers"]:
 | 
				
			||||||
            buffer = twitterBuffers.trendsBufferController(self.view.nb, "%s_tt" % (i,), session, session.db["user_name"], i, sound="trends_updated.ogg")
 | 
					            buffer = buffers.twitter.TrendsBuffer(self.view.nb, "%s_tt" % (i,), session, session.db["user_name"], i, sound="trends_updated.ogg")
 | 
				
			||||||
            buffer.start_stream(play_sound=False)
 | 
					            buffer.start_stream(play_sound=False)
 | 
				
			||||||
            buffer.searchfunction = self.search
 | 
					            buffer.searchfunction = self.search
 | 
				
			||||||
            self.buffers.append(buffer)
 | 
					            self.buffers.append(buffer)
 | 
				
			||||||
@@ -431,12 +430,12 @@ class Controller(object):
 | 
				
			|||||||
                    buffer.session.settings["other_buffers"]["tweet_searches"].append(term)
 | 
					                    buffer.session.settings["other_buffers"]["tweet_searches"].append(term)
 | 
				
			||||||
                    buffer.session.settings.write()
 | 
					                    buffer.session.settings.write()
 | 
				
			||||||
                    args = {"lang": dlg.get_language(), "result_type": dlg.get_result_type()}
 | 
					                    args = {"lang": dlg.get_language(), "result_type": dlg.get_result_type()}
 | 
				
			||||||
                    search = twitterBuffers.searchBufferController(self.view.nb, "search", "%s-searchterm" % (term,), buffer.session, buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", q=term, tweet_mode="extended", **args)
 | 
					                    search = buffers.twitter.SearchBuffer(self.view.nb, "search", "%s-searchterm" % (term,), buffer.session, buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", q=term, tweet_mode="extended", **args)
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    log.error("A buffer for the %s search term is already created. You can't create a duplicate buffer." % (term,))
 | 
					                    log.error("A buffer for the %s search term is already created. You can't create a duplicate buffer." % (term,))
 | 
				
			||||||
                    return
 | 
					                    return
 | 
				
			||||||
            elif dlg.get("users") == True:
 | 
					            elif dlg.get("users") == True:
 | 
				
			||||||
                search = twitterBuffers.searchPeopleBufferController(self.view.nb, "search_users", "%s-searchUser" % (term,), buffer.session, buffer.session.db["user_name"], bufferType=None, sound="search_updated.ogg", q=term)
 | 
					                search = buffers.twitter.SearchBuffer(self.view.nb, "search_users", "%s-searchUser" % (term,), buffer.session, buffer.session.db["user_name"], bufferType=None, sound="search_updated.ogg", q=term)
 | 
				
			||||||
            search.start_stream(mandatory=True)
 | 
					            search.start_stream(mandatory=True)
 | 
				
			||||||
            pos=self.view.search("searches", buffer.session.db["user_name"])
 | 
					            pos=self.view.search("searches", buffer.session.db["user_name"])
 | 
				
			||||||
            self.insert_buffer(search, pos)
 | 
					            self.insert_buffer(search, pos)
 | 
				
			||||||
@@ -849,7 +848,7 @@ class Controller(object):
 | 
				
			|||||||
                    if usr.id_str in buff.session.settings["other_buffers"]["timelines"]:
 | 
					                    if usr.id_str in buff.session.settings["other_buffers"]["timelines"]:
 | 
				
			||||||
                        commonMessageDialogs.timeline_exist()
 | 
					                        commonMessageDialogs.timeline_exist()
 | 
				
			||||||
                        return
 | 
					                        return
 | 
				
			||||||
                    tl = twitterBuffers.baseBufferController(self.view.nb, "user_timeline", "%s-timeline" % (usr.id_str,), buff.session, buff.session.db["user_name"], bufferType=None, sound="tweet_timeline.ogg", user_id=usr.id_str, tweet_mode="extended")
 | 
					                    tl = buffers.twitter.BaseBuffer(self.view.nb, "user_timeline", "%s-timeline" % (usr.id_str,), buff.session, buff.session.db["user_name"], bufferType=None, sound="tweet_timeline.ogg", user_id=usr.id_str, tweet_mode="extended")
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        tl.start_stream(play_sound=False)
 | 
					                        tl.start_stream(play_sound=False)
 | 
				
			||||||
                    except ValueError:
 | 
					                    except ValueError:
 | 
				
			||||||
@@ -868,7 +867,7 @@ class Controller(object):
 | 
				
			|||||||
                    if usr.id_str in buff.session.settings["other_buffers"]["favourites_timelines"]:
 | 
					                    if usr.id_str in buff.session.settings["other_buffers"]["favourites_timelines"]:
 | 
				
			||||||
                        commonMessageDialogs.timeline_exist()
 | 
					                        commonMessageDialogs.timeline_exist()
 | 
				
			||||||
                        return
 | 
					                        return
 | 
				
			||||||
                    tl = twitterBuffers.baseBufferController(self.view.nb, "favorites", "%s-favorite" % (usr.id_str,), buff.session, buff.session.db["user_name"], bufferType=None, sound="favourites_timeline_updated.ogg", user_id=usr.id_str, tweet_mode="extended")
 | 
					                    tl = buffers.twitter.BaseBuffer(self.view.nb, "favorites", "%s-favorite" % (usr.id_str,), buff.session, buff.session.db["user_name"], bufferType=None, sound="favourites_timeline_updated.ogg", user_id=usr.id_str, tweet_mode="extended")
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        tl.start_stream(play_sound=False)
 | 
					                        tl.start_stream(play_sound=False)
 | 
				
			||||||
                    except ValueError:
 | 
					                    except ValueError:
 | 
				
			||||||
@@ -887,7 +886,7 @@ class Controller(object):
 | 
				
			|||||||
                    if usr.id_str in buff.session.settings["other_buffers"]["followers_timelines"]:
 | 
					                    if usr.id_str in buff.session.settings["other_buffers"]["followers_timelines"]:
 | 
				
			||||||
                        commonMessageDialogs.timeline_exist()
 | 
					                        commonMessageDialogs.timeline_exist()
 | 
				
			||||||
                        return
 | 
					                        return
 | 
				
			||||||
                    tl = twitterBuffers.peopleBufferController(self.view.nb, "followers", "%s-followers" % (usr.id_str,), buff.session, buff.session.db["user_name"], sound="new_event.ogg", user_id=usr.id_str)
 | 
					                    tl = buffers.twitter.PeopleBuffer(self.view.nb, "followers", "%s-followers" % (usr.id_str,), buff.session, buff.session.db["user_name"], sound="new_event.ogg", user_id=usr.id_str)
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        tl.start_stream(play_sound=False)
 | 
					                        tl.start_stream(play_sound=False)
 | 
				
			||||||
                    except ValueError:
 | 
					                    except ValueError:
 | 
				
			||||||
@@ -906,7 +905,7 @@ class Controller(object):
 | 
				
			|||||||
                    if usr.id_str in buff.session.settings["other_buffers"]["friends_timelines"]:
 | 
					                    if usr.id_str in buff.session.settings["other_buffers"]["friends_timelines"]:
 | 
				
			||||||
                        commonMessageDialogs.timeline_exist()
 | 
					                        commonMessageDialogs.timeline_exist()
 | 
				
			||||||
                        return
 | 
					                        return
 | 
				
			||||||
                    tl = twitterBuffers.peopleBufferController(self.view.nb, "friends", "%s-friends" % (usr.id_str,), buff.session, buff.session.db["user_name"], sound="new_event.ogg", user_id=usr.id_str)
 | 
					                    tl = buffers.twitter.PeopleBuffer(self.view.nb, "friends", "%s-friends" % (usr.id_str,), buff.session, buff.session.db["user_name"], sound="new_event.ogg", user_id=usr.id_str)
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        tl.start_stream(play_sound=False)
 | 
					                        tl.start_stream(play_sound=False)
 | 
				
			||||||
                    except ValueError:
 | 
					                    except ValueError:
 | 
				
			||||||
@@ -926,7 +925,7 @@ class Controller(object):
 | 
				
			|||||||
        buffer = self.get_current_buffer()
 | 
					        buffer = self.get_current_buffer()
 | 
				
			||||||
        id = buffer.get_right_tweet().id
 | 
					        id = buffer.get_right_tweet().id
 | 
				
			||||||
        user = buffer.session.get_user(buffer.get_right_tweet().user).screen_name
 | 
					        user = buffer.session.get_user(buffer.get_right_tweet().user).screen_name
 | 
				
			||||||
        search = twitterBuffers.conversationBufferController(self.view.nb, "search", "%s-searchterm" % (id,), buffer.session, buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", since_id=id, q="@{0}".format(user,))
 | 
					        search = buffers.twitter.ConversationBuffer(self.view.nb, "search", "%s-searchterm" % (id,), buffer.session, buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", since_id=id, q="@{0}".format(user,))
 | 
				
			||||||
        search.tweet = buffer.get_right_tweet()
 | 
					        search.tweet = buffer.get_right_tweet()
 | 
				
			||||||
        search.start_stream(start=True)
 | 
					        search.start_stream(start=True)
 | 
				
			||||||
        pos=self.view.search("searches", buffer.session.db["user_name"])
 | 
					        pos=self.view.search("searches", buffer.session.db["user_name"])
 | 
				
			||||||
@@ -953,7 +952,7 @@ class Controller(object):
 | 
				
			|||||||
        if trends.dialog.get_response() == widgetUtils.OK:
 | 
					        if trends.dialog.get_response() == widgetUtils.OK:
 | 
				
			||||||
            woeid = trends.get_woeid()
 | 
					            woeid = trends.get_woeid()
 | 
				
			||||||
            if woeid in buff.session.settings["other_buffers"]["trending_topic_buffers"]: return
 | 
					            if woeid in buff.session.settings["other_buffers"]["trending_topic_buffers"]: return
 | 
				
			||||||
            buffer = twitterBuffers.trendsBufferController(self.view.nb, "%s_tt" % (woeid,), buff.session, buff.account, woeid, sound="trends_updated.ogg")
 | 
					            buffer = buffers.twitter.TrendsBuffer(self.view.nb, "%s_tt" % (woeid,), buff.session, buff.account, woeid, sound="trends_updated.ogg")
 | 
				
			||||||
            buffer.searchfunction = self.search
 | 
					            buffer.searchfunction = self.search
 | 
				
			||||||
            pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])
 | 
					            pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])
 | 
				
			||||||
            self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (trends.get_string()), pos=pos)
 | 
					            self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (trends.get_string()), pos=pos)
 | 
				
			||||||
@@ -1364,41 +1363,37 @@ class Controller(object):
 | 
				
			|||||||
        buff = self.search_buffer("home_timeline", account)
 | 
					        buff = self.search_buffer("home_timeline", account)
 | 
				
			||||||
        if create == True:
 | 
					        if create == True:
 | 
				
			||||||
            if buffer == "favourites":
 | 
					            if buffer == "favourites":
 | 
				
			||||||
                favourites = twitterBuffers.baseBufferController(self.view.nb, "favorites", "favourites", buff.session, buff.session.db["user_name"], tweet_mode="extended")
 | 
					                favourites = buffers.twitter.BaseBuffer(self.view.nb, "favorites", "favourites", buff.session, buff.session.db["user_name"], tweet_mode="extended")
 | 
				
			||||||
                self.buffers.append(favourites)
 | 
					                self.buffers.append(favourites)
 | 
				
			||||||
                self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					                self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
				
			||||||
                favourites.start_stream(play_sound=False)
 | 
					                favourites.start_stream(play_sound=False)
 | 
				
			||||||
            if buffer == "followers":
 | 
					            if buffer == "followers":
 | 
				
			||||||
                followers = twitterBuffers.peopleBufferController(self.view.nb, "followers", "followers", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
 | 
					                followers = buffers.twitter.PeopleBuffer(self.view.nb, "followers", "followers", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(followers)
 | 
					                self.buffers.append(followers)
 | 
				
			||||||
                self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					                self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
				
			||||||
                followers.start_stream(play_sound=False)
 | 
					                followers.start_stream(play_sound=False)
 | 
				
			||||||
            elif buffer == "friends":
 | 
					            elif buffer == "friends":
 | 
				
			||||||
                friends = twitterBuffers.peopleBufferController(self.view.nb, "friends", "friends", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
 | 
					                friends = buffers.twitter.PeopleBuffer(self.view.nb, "friends", "friends", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(friends)
 | 
					                self.buffers.append(friends)
 | 
				
			||||||
                self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					                self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
				
			||||||
                friends.start_stream(play_sound=False)
 | 
					                friends.start_stream(play_sound=False)
 | 
				
			||||||
            elif buffer == "blocked":
 | 
					            elif buffer == "blocked":
 | 
				
			||||||
                blocks = twitterBuffers.peopleBufferController(self.view.nb, "blocks", "blocked", buff.session, buff.session.db["user_name"])
 | 
					                blocks = buffers.twitter.PeopleBuffer(self.view.nb, "blocks", "blocked", buff.session, buff.session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(blocks)
 | 
					                self.buffers.append(blocks)
 | 
				
			||||||
                self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					                self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
				
			||||||
                blocks.start_stream(play_sound=False)
 | 
					                blocks.start_stream(play_sound=False)
 | 
				
			||||||
            elif buffer == "muted":
 | 
					            elif buffer == "muted":
 | 
				
			||||||
                muted = twitterBuffers.peopleBufferController(self.view.nb, "mutes", "muted", buff.session, buff.session.db["user_name"])
 | 
					                muted = buffers.twitter.PeopleBuffer(self.view.nb, "mutes", "muted", buff.session, buff.session.db["user_name"])
 | 
				
			||||||
                self.buffers.append(muted)
 | 
					                self.buffers.append(muted)
 | 
				
			||||||
                self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					                self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
				
			||||||
                muted.start_stream(play_sound=False)
 | 
					                muted.start_stream(play_sound=False)
 | 
				
			||||||
            elif buffer == "events":
 | 
					 | 
				
			||||||
                events = twitterBuffers.eventsBufferController(self.view.nb, "events", buff.session, buff.session.db["user_name"], bufferType="dmPanel", screen_name=buff.session.db["user_name"])
 | 
					 | 
				
			||||||
                self.buffers.append(events)
 | 
					 | 
				
			||||||
                self.view.insert_buffer(events.buffer, name=_(u"Events"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
 | 
					 | 
				
			||||||
        elif create == False:
 | 
					        elif create == False:
 | 
				
			||||||
            self.destroy_buffer(buffer, buff.session.db["user_name"])
 | 
					            self.destroy_buffer(buffer, buff.session.db["user_name"])
 | 
				
			||||||
        elif buffer == "list":
 | 
					        elif buffer == "list":
 | 
				
			||||||
            if create in buff.session.settings["other_buffers"]["lists"]:
 | 
					            if create in buff.session.settings["other_buffers"]["lists"]:
 | 
				
			||||||
                output.speak(_(u"This list is already opened"), True)
 | 
					                output.speak(_(u"This list is already opened"), True)
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
            tl = twitterBuffers.listBufferController(self.view.nb, "list_timeline", create+"-list", buff.session, buff.session.db["user_name"], bufferType=None, list_id=utils.find_list(create, buff.session.db["lists"]), tweet_mode="extended")
 | 
					            tl = buffers.twitter.ListBuffer(self.view.nb, "list_timeline", create+"-list", buff.session, buff.session.db["user_name"], bufferType=None, list_id=utils.find_list(create, buff.session.db["lists"]), tweet_mode="extended")
 | 
				
			||||||
            buff.session.lists.append(tl)
 | 
					            buff.session.lists.append(tl)
 | 
				
			||||||
            pos=self.view.search("lists", buff.session.db["user_name"])
 | 
					            pos=self.view.search("lists", buff.session.db["user_name"])
 | 
				
			||||||
            self.insert_buffer(tl, pos)
 | 
					            self.insert_buffer(tl, pos)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user