AntiBoss.py :  » Network » emesene » emesene-1.6.2 » plugins_base » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Network » emesene 
emesene » emesene 1.6.2 » plugins_base » AntiBoss.py
# -*- coding: utf-8 -*-

import Plugin
import gtk
import TrayIcon
import PluginManager
from Parser import TAGS_NONE

DIALOG_TYPE_SET = 0
DIALOG_TYPE_CONFIG = 1


class MainClass(Plugin.Plugin):
    '''
    Main class of the plugin. It listens for self-status-changed event,
    connects to unifiedParser, and provide a configuration dialog.
    '''

    description = _('Hide Emesene with a keyboard shortcut (CTRL + SPACE)')
    authors = {'Daniele S.' : 'oppifjellet@gmail.com',
               'arielj' : 'arieljuod@gmail.com'}
    website = ''
    displayName = _('Ninja Mode (Anti Boss Plugin)')
    name = 'NinjaMode'
    def __init__(self, controller, msn):
        '''Constructor'''

        Plugin.Plugin.__init__(self, controller, msn)
        self.config = controller.config
        self.config.readPluginConfig(self.name)
        self.antiBoss = AntiBoss(controller, msn, self.config, self)
        self.enabled = False

    def start(self):
        print "AntiBoss started"
        '''self.controller.emit('preferences-changed')  '''
        self.convOpen = self.controller.conversationManager.\
                  connect_after('new-conversation-ui', self.newConversation)

        self.convClose = self.controller.conversationManager.connect(\
                             'close-conversation-ui',self.closeConversation)

        self.mainActv = self.controller.mainWindow.connect(\
                             'show', self.winRestored)

        self.receivemessageId = self.controller.conversationManager.connect_after( \
                             'receive-message', self.onReceivedMessage)

        self.antiBoss.hookKeyboard(self.controller.mainWindow)

        for conversation in self.getOpenConversations():
            self.antiBoss.hookKeyboard(conversation.parentConversationWindow)

        self.enabled = True

    def stop(self):
        print "AntiBoss stopped";
        self.antiBoss.unhookKeyboard(self.controller.mainWindow)

        for conversation in self.getOpenConversations():
            self.antiBoss.unhookKeyboard(conversation.parentConversationWindow)

        # clean up everything
        self.controller.conversationManager.disconnect(self.convOpen)
        self.controller.conversationManager.disconnect(self.convClose)
        self.controller.conversationManager.disconnect(self.receivemessageId)
        self.controller.mainWindow.disconnect(self.mainActv)

        self.enabled = False

    def check(self):
        if TrayIcon.disabled:
            return (False, _("TrayIcon disabled"))
        return (True, 'Ok')

    def newConversation(self, conversationManager=None, conversation=None, window=None):
        self.antiBoss.hookKeyboard(window)
        if self.antiBoss.ninjamode:
            window.hide()

    def closeConversation(self, conversationManager=None, conversation=None, window=None):
        self.antiBoss.unhookKeyboard(window)

    def winRestored(self, *args):
        self.antiBoss.restore()

    def onReceivedMessage(self, cm, conversation, mail, nick, message, format, charset, p4c):
        if self.antiBoss.ninjamode:
            conversation.parentConversationWindow.hide()

class AntiBoss:
    '''
    This is the core class of the plugin. It gives methods to parse the custom
    statuses of users, to change or remove custom status of current user, and
    to save and remove custom statuses.
    '''

    def __init__ (self, controller, msn, config, plugin):
        '''Constructor'''
        self.controller = controller
        self.msn = msn
        self.config = config
        self.plugin = plugin
        self.ninjamode = False
        # Create an accelerator group
        self.ag = gtk.AccelGroup()
        self.ag.connect_group(gtk.keysyms.space, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE, self.accelRaised)

    def hookKeyboard(self, window):
        # Add the accelerator group to the window
        window.add_accel_group(self.ag)

    def unhookKeyboard(self, window):
        window.remove_accel_group(self.ag)

    def accelRaised(self, accel_group, acceleratable, keyval, modifier):

        #hack: disable Custom Status Plugin
        self.wasCustomStatusActive = self.controller.pluginManager.stopPlugin('CustomStatus')

        #hack: disable Old Notification Plugin
        self.wasOldNotificationActive = self.controller.pluginManager.stopPlugin('OldNotifications')

        #hack: disable New Notification Plugin
        self.wasNotificationActive = self.controller.pluginManager.stopPlugin('NotifyOsdImproved')

        #hack: disable TrayIcon in order to block updates on status change
        self.has_tray = not TrayIcon.disabled
        if self.has_tray:
            TrayIcon.disabled = True

        self.oldSoundConfig = self.config.user['enableSounds'] 
        self.config.user['enableSounds'] = False
        self.oldHideNewConfig = self.config.user['hideNewWindow']
        self.config.user['hideNewWindow'] = True

        # remember the old status to restore later
        self.oldStatus = self.msn.status
        self.oldTip = self.controller.trayIcon.tray.set_tooltip('x)')
        if self.msn.connected and self.msn.status != 'BSY' and self.msn.status != 'HDN' and self.msn.status != 'FLN':
            self.msn.changeStatus('BSY')

        # change the tray image
        pixbuf = self.controller.theme.getImage('brush-small')
        self.controller.trayIcon.tray.set_from_pixbuf( pixbuf )

        # nascondi anche tutte le conversazioni aperte
        for conversation in self.plugin.getOpenConversations():
            if conversation.parentConversationWindow.get_property("visible"):
                conversation.parentConversationWindow.hide()

        # restore the trayicon
        if self.has_tray:
            TrayIcon.disabled = False

        # hides or closes the application
        self.controller.mainWindow.hideOrClose()

        self.ninjamode = True

    def restore(self):
        if self.ninjamode:
            #if self.msn.status != self.oldStatus:
            self.msn.changeStatus(self.oldStatus)
            for conversation in self.plugin.getOpenConversations():
                conversation.parentConversationWindow.present()

            #restore Old Notifications Plugin
            if self.wasOldNotificationActive:
                self.controller.pluginManager.startPlugin('OldNotifications')

            #restore New Notifications Plugin
            if self.wasNotificationActive:
                self.controller.pluginManager.startPlugin('NotifyOsdImproved')

            #restore CustomStatus Plugin
            if self.wasCustomStatusActive:
                self.controller.pluginManager.startPlugin('CustomStatus')

            self.config.user['enableSounds'] = self.oldSoundConfig
            self.config.user['hideNewWindow'] = self.oldHideNewConfig

            self.ninjamode = False

    def loadSavedHotkey(self):
        '''Method that loads saved accelerator.'''

        accel = self.config.getPluginValue(self.name,\
                                                'accelerator_group', 0)
        return accel

    def saveHotkey(self, accel):
        '''Method that saves the custom statuses saved list to config file.'''

        # We need to update custom statuses count
        self.config.setPluginValue(self.name, 'accelerator_group', accel)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.