class MediathekViewService(KodiService):
    def __init__(self):
        super(MediathekViewService, self).__init__()
        self.setTopic('Service')
        self.settings = Settings()
        self.notifier = Notifier()
        self.monitor = MediathekViewMonitor(self, 'instanceid')
        self.updater = MediathekViewUpdater(self.getNewLogger('Updater'),
                                            self.notifier, self.settings,
                                            self.monitor)

    def Init(self):
        self.info('Init (instance id: {})', self.monitor.instance_id)
        self.monitor.RegisterInstance()
        self.updater.Init(convert=True)
        self.settings.ResetUserActivity()

    def Run(self):
        self.info('Starting up... (instance id: {})', self.monitor.instance_id)
        while not self.monitor.abortRequested():
            if self.settings.Reload() is True:
                # database configuration changed
                self.info(
                    '===== Database Configuration has changed - Reloading the updater ====='
                )
                self.updater.Reload()

            updateop = self.updater.GetCurrentUpdateOperation()
            if updateop == 1:
                # full update
                self.info('Initiating full update...')
                self.settings.SaveUpdateInstance(self.monitor.instance_id)
                self.updater.Update(True)
            elif updateop == 2:
                # differential update
                self.info('Initiating differential update...')
                self.settings.SaveUpdateInstance(self.monitor.instance_id)
                self.updater.Update(False)
            # Sleep/wait for abort for 60 seconds
            if self.monitor.waitForAbort(15):
                # Abort was requested while waiting. We should exit
                break
        self.info('Shutting down... (instance id: {})',
                  self.monitor.instance_id)

    def Exit(self):
        self.info('Exit (instance id: {})', self.monitor.instance_id)
        self.updater.Exit()
        self.monitor.UnregisterInstance()

    def ReloadSettings(self):
        # self.info("===== RELOAD SETTINGS =====")
        # TODO: support online reconfiguration
        #       currently there is a bug in Kodi: this event is only
        #       triggered if the reconfiguration happen inside the
        #       addon (via setSetting). If teh user changes something
        #       via the settings page, NOTHING WILL HAPPEN!
        pass
Ejemplo n.º 2
0
class MediathekViewService(KodiService):
    def __init__(self):
        super(MediathekViewService, self).__init__()
        self.setTopic('Service')
        self.settings = Settings()
        self.notifier = Notifier()
        self.monitor = MediathekViewMonitor(self)
        self.updater = MediathekViewUpdater(self.getNewLogger('Updater'),
                                            self.notifier, self.settings,
                                            self.monitor)

    def Init(self):
        self.info('Init')
        self.updater.Init()

    def Run(self):
        self.info('Starting up...')
        while not self.monitor.abortRequested():
            updateop = self.updater.GetCurrentUpdateOperation()
            if updateop == 1:
                # full update
                self.info('Initiating full update...')
                self.updater.Update(True)
            elif updateop == 2:
                # differential update
                self.info('Initiating differential update...')
                self.updater.Update(False)
            # Sleep/wait for abort for 60 seconds
            if self.monitor.waitForAbort(60):
                # Abort was requested while waiting. We should exit
                break
        self.info('Shutting down...')

    def Exit(self):
        self.info('Exit')
        self.updater.Exit()

    def ReloadSettings(self):
        # TODO: support online reconfiguration
        pass
Ejemplo n.º 3
0
class UpdateApp(AppLogger):
    def __init__(self):
        try:
            self.mypath = os.path.dirname(sys.argv[0])
            tree = ET.parse(self.mypath + '/addon.xml')
            version = tree.getroot().attrib['version']
            AppLogger.__init__(self, os.path.basename(sys.argv[0]), version)
        except Exception:
            AppLogger.__init__(self, os.path.basename(sys.argv[0]), '0.0')

    def Init(self):
        parser = argparse.ArgumentParser(
            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
            description=
            'This is the standalone database updater. It downloads the current database update from mediathekview.de and integrates it in a local database'
        )
        parser.add_argument('-v',
                            '--verbose',
                            default=0,
                            action='count',
                            help='Show progress messages')
        subparsers = parser.add_subparsers(dest='dbtype',
                                           help='target database')
        sqliteopts = subparsers.add_parser(
            'sqlite', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        sqliteopts.add_argument(
            '-p',
            '--path',
            dest='path',
            help='alternative path for the sqlite database',
            default='./')
        mysqlopts = subparsers.add_parser(
            'mysql', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        mysqlopts.add_argument('-H',
                               '--host',
                               dest='host',
                               help='hostname or ip address',
                               default='localhost')
        mysqlopts.add_argument('-P',
                               '--port',
                               dest='port',
                               help='connection port',
                               default='3306')
        mysqlopts.add_argument('-u',
                               '--user',
                               dest='user',
                               help='connection username',
                               default='mediathekview')
        mysqlopts.add_argument('-p',
                               '--password',
                               dest='password',
                               help='connection password',
                               default=None)
        mysqlopts.add_argument('-d',
                               '--database',
                               dest='database',
                               default='mediathekview',
                               help='database name')
        self.args = parser.parse_args()
        self.verbosity = self.args.verbose

        self.info('Startup')
        self.settings = Settings(self.args)
        self.notifier = Notifier()
        self.monitor = MediathekViewMonitor()
        self.updater = MediathekViewUpdater(
            self.getNewLogger('MediathekViewUpdater'), self.notifier,
            self.settings, self.monitor)
        self.updater.Init()

    def Run(self):
        self.info('Starting up...')
        updateop = self.updater.GetCurrentUpdateOperation()
        if updateop == 1:
            # full update
            self.info('Initiating full update...')
            self.updater.Update(True)
        elif updateop == 2:
            # differential update
            self.info('Initiating differential update...')
            self.updater.Update(False)
        self.info('Exiting...')

    def Exit(self):
        self.updater.Exit()