X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fdialcentral_qt.py;h=0f4150b13e0b4d22149d5251347a31d1244feeca;hb=8af5627ea879c80cf6adb1dc64df17a36e1a4cb0;hp=4626fe72fb8cb1550a77793fbed23662cf5e8742;hpb=3c060f7cbbe37c00bd60aae1a21c6f2b74d8d8e1;p=gc-dialer diff --git a/src/dialcentral_qt.py b/src/dialcentral_qt.py index 4626fe7..0f4150b 100755 --- a/src/dialcentral_qt.py +++ b/src/dialcentral_qt.py @@ -8,14 +8,14 @@ import base64 import ConfigParser import functools import logging +import logging.handlers from PyQt4 import QtGui from PyQt4 import QtCore -import dbus -import dbus.mainloop.glib import constants -import call_handler +import alarm_handler +import led_handler from util import qtpie from util import qwrappers from util import qui_utils @@ -27,29 +27,6 @@ import session _moduleLogger = logging.getLogger(__name__) -class LedWrapper(object): - - def __init__(self): - self._ledHandler = None - self._init = False - - def off(self): - self._lazy_init() - if self._ledHandler is not None: - self._ledHandler.off() - - def _lazy_init(self): - if self._init: - return - self._init = True - try: - import led_handler - self._ledHandler = led_handler.LedHandler() - except Exception, e: - _moduleLogger.exception('Unable to initialize LED Handling: "%s"' % str(e)) - self._ledHandler = None - - class Dialcentral(qwrappers.ApplicationWrapper): _DATA_PATHS = [ @@ -60,24 +37,12 @@ class Dialcentral(qwrappers.ApplicationWrapper): def __init__(self, app): self._dataPath = None self._aboutDialog = None - self._ledHandler = LedWrapper() self.notifyOnMissed = False self.notifyOnVoicemail = False self.notifyOnSms = False - try: - import alarm_handler - if alarm_handler.AlarmHandler is not alarm_handler._NoneAlarmHandler: - self._alarmHandler = alarm_handler.AlarmHandler() - else: - self._alarmHandler = None - except (ImportError, OSError): - self._alarmHandler = None - except Exception: - _moduleLogger.exception("Notification failure") - self._alarmHandler = None - if self._alarmHandler is None: - _moduleLogger.info("No notification support") + self._ledHandler = led_handler.LedHandler() + self._alarmHandler = alarm_handler.AlarmHandler() qwrappers.ApplicationWrapper.__init__(self, app, constants) @@ -126,28 +91,27 @@ class Dialcentral(qwrappers.ApplicationWrapper): except Exception: _moduleLogger.exception("Unknown loading error") - if self._alarmHandler is not None: - try: - self._alarmHandler.load_settings(config, "alarm") - self.notifyOnMissed = config.getboolean("2 - Account Info", "notifyOnMissed") - self.notifyOnVoicemail = config.getboolean("2 - Account Info", "notifyOnVoicemail") - self.notifyOnSms = config.getboolean("2 - Account Info", "notifyOnSms") - except ConfigParser.NoOptionError, e: - _moduleLogger.info( - "Settings file %s is missing option %s" % ( - constants._user_settings_, - e.option, - ), - ) - except ConfigParser.NoSectionError, e: - _moduleLogger.info( - "Settings file %s is missing section %s" % ( - constants._user_settings_, - e.section, - ), - ) - except Exception: - _moduleLogger.exception("Unknown loading error") + try: + self._alarmHandler.load_settings(config, "alarm") + self.notifyOnMissed = config.getboolean("2 - Account Info", "notifyOnMissed") + self.notifyOnVoicemail = config.getboolean("2 - Account Info", "notifyOnVoicemail") + self.notifyOnSms = config.getboolean("2 - Account Info", "notifyOnSms") + except ConfigParser.NoOptionError, e: + _moduleLogger.info( + "Settings file %s is missing option %s" % ( + constants._user_settings_, + e.option, + ), + ) + except ConfigParser.NoSectionError, e: + _moduleLogger.info( + "Settings file %s is missing section %s" % ( + constants._user_settings_, + e.section, + ), + ) + except Exception: + _moduleLogger.exception("Unknown loading error") creds = ( base64.b64decode(blob) @@ -171,9 +135,8 @@ class Dialcentral(qwrappers.ApplicationWrapper): blob = base64.b64encode(value) config.set(constants.__pretty_app_name__, "bin_blob_%i" % i, blob) - if self._alarmHandler is not None: - config.add_section("alarm") - self._alarmHandler.save_settings(config, "alarm") + config.add_section("alarm") + self._alarmHandler.save_settings(config, "alarm") config.add_section("2 - Account Info") config.set("2 - Account Info", "notifyOnMissed", repr(self.notifyOnMissed)) config.set("2 - Account Info", "notifyOnVoicemail", repr(self.notifyOnVoicemail)) @@ -196,6 +159,17 @@ class Dialcentral(qwrappers.ApplicationWrapper): else: return None + def get_resource(self, name): + if self._dataPath is None: + for path in self._DATA_PATHS: + if os.path.exists(os.path.join(path, name)): + self._dataPath = path + break + if self._dataPath is not None: + return os.path.join(self._dataPath, name) + else: + return None + def _close_windows(self): qwrappers.ApplicationWrapper._close_windows(self) if self._aboutDialog is not None: @@ -345,7 +319,6 @@ class MainWindow(qwrappers.WindowWrapper): def __init__(self, parent, app): qwrappers.WindowWrapper.__init__(self, parent, app) self._window.setWindowTitle("%s" % constants.__pretty_app_name__) - #self._freezer = qwrappers.AutoFreezeWindowFeature(self._app, self._window) self._errorLog = self._app.errorLog self._session = session.Session(self._errorLog, constants._data_path_) @@ -353,12 +326,8 @@ class MainWindow(qwrappers.WindowWrapper): self._session.loggedIn.connect(self._on_login) self._session.loggedOut.connect(self._on_logout) self._session.draft.recipientsChanged.connect(self._on_recipients_changed) - self._voicemailRefreshDelay = QtCore.QTimer() - self._voicemailRefreshDelay.setInterval(30 * 1000) - self._voicemailRefreshDelay.timeout.connect(self._on_call_missed) - self._voicemailRefreshDelay.setSingleShot(True) - self._callHandler = call_handler.MissedCallWatcher() - self._callHandler.callMissed.connect(self._voicemailRefreshDelay.start) + self._session.newMessages.connect(self._on_new_message_alert) + self._app.alarmHandler.applicationNotifySignal.connect(self._on_app_alert) self._defaultCredentials = "", "" self._curentCredentials = "", "" self._currentTab = 0 @@ -549,14 +518,12 @@ class MainWindow(qwrappers.WindowWrapper): if self._accountDialog is None: import dialogs self._accountDialog = dialogs.AccountDialog(self._app) - if self._app.alarmHandler is None: - self._accountDialog.setIfNotificationsSupported(False) - if self._app.alarmHandler is not None: - self._accountDialog.notifications = self._app.alarmHandler.isEnabled - self._accountDialog.notificationTime = self._app.alarmHandler.recurrence - self._accountDialog.notifyOnMissed = self._app.notifyOnMissed - self._accountDialog.notifyOnVoicemail = self._app.notifyOnVoicemail - self._accountDialog.notifyOnSms = self._app.notifyOnSms + self._accountDialog.setIfNotificationsSupported(self._app.alarmHandler.backgroundNotificationsSupported) + self._accountDialog.notifications = self._app.alarmHandler.alarmType + self._accountDialog.notificationTime = self._app.alarmHandler.recurrence + self._accountDialog.notifyOnMissed = self._app.notifyOnMissed + self._accountDialog.notifyOnVoicemail = self._app.notifyOnVoicemail + self._accountDialog.notifyOnSms = self._app.notifyOnSms self._accountDialog.set_callbacks( self._session.get_callback_numbers(), self._session.get_callback_number() ) @@ -575,12 +542,21 @@ class MainWindow(qwrappers.WindowWrapper): else: callbackNumber = self._accountDialog.selectedCallback self._session.set_callback_number(callbackNumber) - if self._app.alarmHandler is not None: - self._app.alarmHandler.apply_settings(self._accountDialog.notifications, self._accountDialog.notificationTime) - self._app.notifyOnMissed = self._accountDialog.notifyOnMissed - self._app.notifyOnVoicemail = self._accountDialog.notifyOnVoicemail - self._app.notifyOnSms = self._accountDialog.notifyOnSms - self._app.save_settings() + + if ( + self._accountDialog.notifyOnMissed or + self._accountDialog.notifyOnVoicemail or + self._accountDialog.notifyOnSms + ): + notifications = self._accountDialog.notifications + else: + notifications = self._accountDialog.ALARM_NONE + self._app.alarmHandler.apply_settings(notifications, self._accountDialog.notificationTime) + + self._app.notifyOnMissed = self._accountDialog.notifyOnMissed + self._app.notifyOnVoicemail = self._accountDialog.notifyOnVoicemail + self._app.notifyOnSms = self._accountDialog.notifyOnSms + self._app.save_settings() elif response == QtGui.QDialog.Rejected: _moduleLogger.info("Cancelled") else: @@ -588,9 +564,13 @@ class MainWindow(qwrappers.WindowWrapper): @QtCore.pyqtSlot() @misc_utils.log_exception(_moduleLogger) - def _on_call_missed(self): + def _on_new_message_alert(self): with qui_utils.notify_error(self._errorLog): - self._session.update_messages(True) + if self._app.alarmHandler.alarmType == self._app.alarmHandler.ALARM_APPLICATION: + if self._currentTab == self.MESSAGES_TAB or not self._app.ledHandler.isReal: + self._errorLog.push_message("New messages available") + else: + self._app.ledHandler.on() @QtCore.pyqtSlot(str) @misc_utils.log_exception(_moduleLogger) @@ -612,7 +592,6 @@ class MainWindow(qwrappers.WindowWrapper): for tab in self._tabsContents: tab.enable() self._initialize_tab(self._currentTab) - self._callHandler.start() @QtCore.pyqtSlot() @misc_utils.log_exception(_moduleLogger) @@ -620,7 +599,18 @@ class MainWindow(qwrappers.WindowWrapper): with qui_utils.notify_error(self._errorLog): for tab in self._tabsContents: tab.disable() - self._callHandler.stop() + + @QtCore.pyqtSlot() + @misc_utils.log_exception(_moduleLogger) + def _on_app_alert(self): + with qui_utils.notify_error(self._errorLog): + if self._session.state == self._session.LOGGEDIN_STATE: + messageType = { + (True, True): self._session.MESSAGE_ALL, + (True, False): self._session.MESSAGE_TEXTS, + (False, True): self._session.MESSAGE_VOICEMAILS, + }[(self._app.notifyOnSms, self._app.notifyOnVoicemail)] + self._session.update_messages(messageType, force=True) @QtCore.pyqtSlot() @misc_utils.log_exception(_moduleLogger) @@ -653,6 +643,8 @@ class MainWindow(qwrappers.WindowWrapper): with qui_utils.notify_error(self._errorLog): self._currentTab = index self._initialize_tab(index) + if self._app.alarmHandler.alarmType == self._app.alarmHandler.ALARM_APPLICATION: + self._app.ledHandler.off() @QtCore.pyqtSlot() @QtCore.pyqtSlot(bool) @@ -685,8 +677,24 @@ class MainWindow(qwrappers.WindowWrapper): def run(): + try: + os.makedirs(constants._data_path_) + except OSError, e: + if e.errno != 17: + raise + + logFormat = '(%(relativeCreated)5d) %(levelname)-5s %(threadName)s.%(name)s.%(funcName)s: %(message)s' + logging.basicConfig(level=logging.DEBUG, format=logFormat) + rotating = logging.handlers.RotatingFileHandler(constants._user_logpath_, maxBytes=512*1024, backupCount=1) + rotating.setFormatter(logging.Formatter(logFormat)) + root = logging.getLogger() + root.addHandler(rotating) + _moduleLogger.info("%s %s-%s" % (constants.__app_name__, constants.__version__, constants.__build__)) + _moduleLogger.info("OS: %s" % (os.uname()[0], )) + _moduleLogger.info("Kernel: %s (%s) for %s" % os.uname()[2:]) + _moduleLogger.info("Hostname: %s" % os.uname()[1]) + app = QtGui.QApplication([]) - l = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) handle = Dialcentral(app) qtpie.init_pies() return app.exec_() @@ -695,13 +703,5 @@ def run(): if __name__ == "__main__": import sys - logFormat = '(%(relativeCreated)5d) %(levelname)-5s %(threadName)s.%(name)s.%(funcName)s: %(message)s' - logging.basicConfig(level=logging.DEBUG, format=logFormat) - try: - os.makedirs(constants._data_path_) - except OSError, e: - if e.errno != 17: - raise - val = run() sys.exit(val)