# Path: ermesms/plugins/CaptchaDecoder.py
# class CaptchaDecoder(PriorityPlugin):
#     """Classe base dei plugin per la decodifica dei captcha."""
# 
#     def decodeCaptcha(self, stream, senderName):
#         """Questo metodo ritorna la stringa corrispondente all'immagine
#         leggibile dallo stream specificato."""
#         raise NotImplementedError()
# 
# Path: ermesms/errors/CaptchaError.py
# class CaptchaError(SenderError):
#     """Errore per indicare un problema con la connessione ad un sito (scaricamento captcha)."""
# 
#     def __init__(self):
#         """Costruttore standard."""
#         SenderError.__init__(self, repr('Captcha'))
# 
#     def __str__(self):
#         return u"Impossibile decodificare l'immagine captcha."
# 
# Path: ermesms/plugins/uis/GraphicalUI.py
# class GraphicalUI(UI):
#     """Interfaccia grafica in PyQt."""
# 
#     MainFrame = None
# 
#     def isAvailable(self):
#         """Ritorna true se quest'interfaccia è utilizzabile."""
#         #non ci devono essere parametri se -gui non è specificato
#         result = (len(sys.argv) == 1) or ("-gui" in sys.argv)
#         try:
#             #PyQt4 has to be correctly installed
#             from PyQt4 import QtGui, QtCore
#             from ermesms.plugins.uis.MainFrame import MainFrame
#         except ImportError, e:
#             result = False
#             print e
#         return result
# 
#     def getPriority(self):
#         """Ritorna un codice di priorità. In caso più interfacce siano
#         utilizzabili, viene scelta quella a maggiore priorità."""
#         return 3
# 
#     def run(self):
#         """Avvia questa interfaccia."""
#         from PyQt4 import QtGui, QtCore
#         from ermesms.plugins.uis.MainFrame import MainFrame
#         import os
#         self.QtUIApp = QtGui.QApplication(sys.argv)
#         pluginWin=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','qjpeg.dll')
#         pluginMac=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','libqjpeg.dylib')
#         pluginUnix=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','libqjpeg.so')
#         if os.path.isfile(pluginWin) or os.path.isfile(pluginMac) or \
#            os.path.isfile(pluginUnix):
#             self.QtUIApp.setLibraryPaths(
#                 QtCore.QStringList(os.path.join(os.getcwd(),'qt4_plugins')))
#         self.QtUIApp.setQuitOnLastWindowClosed(False)
#         self.MainFrame = MainFrame()
#         self.MainFrame.show()
#         sys.exit(self.QtUIApp.exec_())
# 
# 
#     def showFatalException(self, message):
#         """Questo metodo viene richiamato nel caso in cui venga catturata
#         un'eccezione non gestita nel programma principale."""
#         from PyQt4 import QtGui
#         QtGui.QMessageBox.critical(self.MainFrame, "Errore", message)


from ermesms.plugins.CaptchaDecoder import CaptchaDecoder
from ermesms.errors.CaptchaError import CaptchaError
from ermesms.plugins.uis.GraphicalUI import GraphicalUI
# -*- coding: utf-8 -*-


class AskUserCaptchaDecoder(CaptchaDecoder):
    """Chiede all'utente di decodificare il captcha. E' stupido, lo so."""

    def isAvailable(self):
        """Ritorna true se questo plugin è utilizzabile."""
        #Questo succede se c'è un'interfaccia grafica disponibile
        return GraphicalUI.getInstance().isAvailable()

    def getPriority(self):
        """Ritorna un indice di priorità (intero)."""
        return 1

    def decodeCaptcha(self, stream, sender):
        """Questo metodo ritorna la stringa corrispondente all'immagine
        leggibile dallo stream specificato."""

# Path: ermesms/plugins/CaptchaDecoder.py
# class CaptchaDecoder(PriorityPlugin):
#     """Classe base dei plugin per la decodifica dei captcha."""
# 
#     def decodeCaptcha(self, stream, senderName):
#         """Questo metodo ritorna la stringa corrispondente all'immagine
#         leggibile dallo stream specificato."""
#         raise NotImplementedError()
# 
# Path: ermesms/errors/CaptchaError.py
# class CaptchaError(SenderError):
#     """Errore per indicare un problema con la connessione ad un sito (scaricamento captcha)."""
# 
#     def __init__(self):
#         """Costruttore standard."""
#         SenderError.__init__(self, repr('Captcha'))
# 
#     def __str__(self):
#         return u"Impossibile decodificare l'immagine captcha."
# 
# Path: ermesms/plugins/uis/GraphicalUI.py
# class GraphicalUI(UI):
#     """Interfaccia grafica in PyQt."""
# 
#     MainFrame = None
# 
#     def isAvailable(self):
#         """Ritorna true se quest'interfaccia è utilizzabile."""
#         #non ci devono essere parametri se -gui non è specificato
#         result = (len(sys.argv) == 1) or ("-gui" in sys.argv)
#         try:
#             #PyQt4 has to be correctly installed
#             from PyQt4 import QtGui, QtCore
#             from ermesms.plugins.uis.MainFrame import MainFrame
#         except ImportError, e:
#             result = False
#             print e
#         return result
# 
#     def getPriority(self):
#         """Ritorna un codice di priorità. In caso più interfacce siano
#         utilizzabili, viene scelta quella a maggiore priorità."""
#         return 3
# 
#     def run(self):
#         """Avvia questa interfaccia."""
#         from PyQt4 import QtGui, QtCore
#         from ermesms.plugins.uis.MainFrame import MainFrame
#         import os
#         self.QtUIApp = QtGui.QApplication(sys.argv)
#         pluginWin=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','qjpeg.dll')
#         pluginMac=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','libqjpeg.dylib')
#         pluginUnix=os.path.join(os.getcwd(),'qt4_plugins',
#                                        'imageformats','libqjpeg.so')
#         if os.path.isfile(pluginWin) or os.path.isfile(pluginMac) or \
#            os.path.isfile(pluginUnix):
#             self.QtUIApp.setLibraryPaths(
#                 QtCore.QStringList(os.path.join(os.getcwd(),'qt4_plugins')))
#         self.QtUIApp.setQuitOnLastWindowClosed(False)
#         self.MainFrame = MainFrame()
#         self.MainFrame.show()
#         sys.exit(self.QtUIApp.exec_())
# 
# 
#     def showFatalException(self, message):
#         """Questo metodo viene richiamato nel caso in cui venga catturata
#         un'eccezione non gestita nel programma principale."""
#         from PyQt4 import QtGui
#         QtGui.QMessageBox.critical(self.MainFrame, "Errore", message)


# Path: ermesms/plugins/captchadecoders/AskUserCaptchaDecoder.py
from ermesms.plugins.CaptchaDecoder import CaptchaDecoder
from ermesms.errors.CaptchaError import CaptchaError
from ermesms.plugins.uis.GraphicalUI import GraphicalUI

# -*- coding: utf-8 -*-


class AskUserCaptchaDecoder(CaptchaDecoder):
    """Chiede all'utente di decodificare il captcha. E' stupido, lo so."""

    def isAvailable(self):
        """Ritorna true se questo plugin è utilizzabile."""
        #Questo succede se c'è un'interfaccia grafica disponibile
        return GraphicalUI.getInstance().isAvailable()

    def getPriority(self):
        """Ritorna un indice di priorità (intero)."""
        return 1

    def decodeCaptcha(self, stream, sender):
        """Questo metodo ritorna la stringa corrispondente all'immagine
        leggibile dallo stream specificato."""

        GraphicalUI.getInstance().MainFrame.userDecodeCaptchaRequest(stream)