Session manager is now fully MVC, it can removes an account too

This commit is contained in:
Manuel Cortez 2015-03-05 11:27:48 -06:00
parent 3f1b00af8f
commit 373ca24a96
3 changed files with 61 additions and 37 deletions

View File

@ -1059,11 +1059,14 @@ class Controller(object):
sm.fill_list() sm.fill_list()
sm.show() sm.show()
for i in sm.new_sessions: for i in sm.new_sessions:
call_threaded(self.add_account, i)
def add_account(self, i):
self.create_buffers(session_.sessions[i]) self.create_buffers(session_.sessions[i])
self.start_buffers(session_.sessions[i]) call_threaded(self.start_buffers, session_.sessions[i])
for i in sm.removed_sessions:
if session_.sessions[i].logged == True:
self.logout_account(session_.sessions[i].session_id)
self.destroy_buffer(session_.sessions[i].settings["twitter"]["user_name"], session_.sessions[i].settings["twitter"]["user_name"])
self.accounts.remove(session_.sessions[i].settings["twitter"]["user_name"])
session_.sessions.pop(i)
def __del__(self): def __del__(self):
config.app.write() config.app.write()

View File

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import wx import shutil
import widgetUtils
import wxUI as view import wxUI as view
import paths import paths
import time import time
@ -17,8 +18,11 @@ class sessionManagerController(object):
super(sessionManagerController, self).__init__() super(sessionManagerController, self).__init__()
log.debug("Setting up the session manager.") log.debug("Setting up the session manager.")
manager.setup() manager.setup()
self.view = view.sessionManagerWindow(self) self.view = view.sessionManagerWindow()
widgetUtils.connect_event(self.view.new, widgetUtils.BUTTON_PRESSED, self.manage_new_account)
widgetUtils.connect_event(self.view.remove, widgetUtils.BUTTON_PRESSED, self.remove)
self.new_sessions = {} self.new_sessions = {}
self.removed_sessions = []
def fill_list(self): def fill_list(self):
sessionsList = [] sessionsList = []
@ -35,11 +39,11 @@ class sessionManagerController(object):
self.sessions.append(i) self.sessions.append(i)
# else: # else:
# log.debug("Ignoring session %s" % (i,)) # log.debug("Ignoring session %s" % (i,))
if hasattr(self, "view"): self.view.fill_list(sessionsList) self.view.fill_list(sessionsList)
def show(self): def show(self):
if self.view.ShowModal() == wx.ID_CANCEL: if self.view.get_response() == widgetUtils.OK:
self.view.Destroy() self.do_ok()
def do_ok(self): def do_ok(self):
log.debug("Starting sessions...") log.debug("Starting sessions...")
@ -52,7 +56,8 @@ class sessionManagerController(object):
session.sessions[i] = s session.sessions[i] = s
self.new_sessions[i] = s self.new_sessions[i] = s
def manage_new_account(self): def manage_new_account(self, *args, **kwargs):
if self.view.new_account_dialog() == widgetUtils.YES:
location = (str(time.time())[-6:]) location = (str(time.time())[-6:])
log.debug("Creating session in the %s path" % (location,)) log.debug("Creating session in the %s path" % (location,))
s = session.Session(location) s = session.Session(location)
@ -66,3 +71,11 @@ class sessionManagerController(object):
log.exception("Error authorising the session") log.exception("Error authorising the session")
self.view.show_unauthorised_error() self.view.show_unauthorised_error()
return return
def remove(self, *args, **kwargs):
if self.view.remove_account_dialog() == widgetUtils.YES:
selected_account = self.sessions[self.view.get_selected()]
self.view.remove_session(self.view.get_selected())
self.removed_sessions.append(selected_account)
self.sessions.remove(selected_account)
shutil.rmtree(path=paths.config_path(selected_account), ignore_errors=True)

View File

@ -3,9 +3,8 @@ import wx
from multiplatform_widgets import widgets from multiplatform_widgets import widgets
class sessionManagerWindow(wx.Dialog): class sessionManagerWindow(wx.Dialog):
def __init__(self, controller): def __init__(self):
super(sessionManagerWindow, self).__init__(parent=None, title="Session manager", size=wx.DefaultSize) super(sessionManagerWindow, self).__init__(parent=None, title="Session manager", size=wx.DefaultSize)
self.controller = controller
panel = wx.Panel(self) panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(panel, -1, u"Select a twitter account to start TW Blue", size=wx.DefaultSize) label = wx.StaticText(panel, -1, u"Select a twitter account to start TW Blue", size=wx.DefaultSize)
@ -14,14 +13,13 @@ class sessionManagerWindow(wx.Dialog):
listSizer.Add(label, 0, wx.ALL, 5) listSizer.Add(label, 0, wx.ALL, 5)
listSizer.Add(self.list.list, 0, wx.ALL, 5) listSizer.Add(self.list.list, 0, wx.ALL, 5)
sizer.Add(listSizer, 0, wx.ALL, 5) sizer.Add(listSizer, 0, wx.ALL, 5)
new = wx.Button(panel, -1, u"New account", size=wx.DefaultSize) self.new = wx.Button(panel, -1, u"New account", size=wx.DefaultSize)
new.Bind(wx.EVT_BUTTON, self.new_account) self.remove = wx.Button(panel, -1, _(u"Remove account"))
ok = wx.Button(panel, wx.ID_OK, size=wx.DefaultSize) ok = wx.Button(panel, wx.ID_OK, size=wx.DefaultSize)
ok.SetDefault() ok.SetDefault()
ok.Bind(wx.EVT_BUTTON, self.ok)
cancel = wx.Button(panel, wx.ID_CANCEL, size=wx.DefaultSize) cancel = wx.Button(panel, wx.ID_CANCEL, size=wx.DefaultSize)
buttons = wx.BoxSizer(wx.HORIZONTAL) buttons = wx.BoxSizer(wx.HORIZONTAL)
buttons.Add(new, 0, wx.ALL, 5) buttons.Add(self.new, 0, wx.ALL, 5)
buttons.Add(ok, 0, wx.ALL, 5) buttons.Add(ok, 0, wx.ALL, 5)
buttons.Add(cancel, 0, wx.ALL, 5) buttons.Add(cancel, 0, wx.ALL, 5)
sizer.Add(buttons, 0, wx.ALL, 5) sizer.Add(buttons, 0, wx.ALL, 5)
@ -43,12 +41,8 @@ class sessionManagerWindow(wx.Dialog):
self.controller.do_ok() self.controller.do_ok()
self.EndModal(wx.ID_OK) self.EndModal(wx.ID_OK)
def new_account(self, ev): def new_account_dialog(self):
dlg = wx.MessageDialog(self, _(u"The request for the required Twitter authorization to continue will be opened on your browser. You only need to do it once. Would you like to autorhise a new account now?"), _(u"Authorisation"), wx.YES_NO) return wx.MessageDialog(self, _(u"The request for the required Twitter authorization to continue will be opened on your browser. You only need to do it once. Would you like to autorhise a new account now?"), _(u"Authorisation"), wx.YES_NO).ShowModal()
if dlg.ShowModal() == wx.ID_NO:
return
else:
self.controller.manage_new_account()
def add_new_session_to_list(self): def add_new_session_to_list(self):
total = self.list.get_count() total = self.list.get_count()
@ -56,5 +50,19 @@ class sessionManagerWindow(wx.Dialog):
self.list.insert_item(False, name) self.list.insert_item(False, name)
if self.list.get_count() == 1: if self.list.get_count() == 1:
self.list.select_item(0) self.list.select_item(0)
def show_unauthorised_error(self): def show_unauthorised_error(self):
wx.MessageDialog(None, _(u"Your access token is invalid or the authorisation has failed. Please try again."), _(u"Invalid user token"), wx.ICON_ERROR).ShowModal() wx.MessageDialog(None, _(u"Your access token is invalid or the authorisation has failed. Please try again."), _(u"Invalid user token"), wx.ICON_ERROR).ShowModal()
def get_response(self):
return self.ShowModal()
def remove_account_dialog(self):
return wx.MessageDialog(self, _(u"Do you really want delete this account?"), _(u"Remove account"), wx.YES_NO).ShowModal()
def get_selected(self):
return self.list.get_selected()
def remove_session(self, sessionID):
self.list.remove_item(sessionID)