コード例 #1
0
ファイル: gui.py プロジェクト: robweber/service.history
    def __init__(self,params):
        self.params = params

        database = Database()
        database.connect()
        database.checkDBStructure()

        self.historyDB = WatchHistory(database)
        self.settings = DBSettings(database)
コード例 #2
0
ファイル: default.py プロジェクト: robweber/service.history
    def __init__(self):
        utils.log("Starting History Service")
        self.playerMonitor = HistoryPlayerMonitor(on_play_started = self.playStarted)
        self.updateMonitor = HistorySettingsMonitor(update_settings = self.onSettingsUpdate)
        
        #setup the database connection
        database = Database()
        database.connect()
        database.checkDBStructure()

        self.historyDB = WatchHistory(database)
        self.settings = DBSettings(database)

        if(utils.getSetting('require_pin_on_change') == 'true'):
            self.require_pin = True

        #backup the settings file
        self._settingsBackup()
コード例 #3
0
ファイル: gui.py プロジェクト: robweber/service.history
class HistoryGUI:
    params = None
    historyDB = None
    settings = None
    
    def __init__(self,params):
        self.params = params

        database = Database()
        database.connect()
        database.checkDBStructure()

        self.historyDB = WatchHistory(database)
        self.settings = DBSettings(database)

    def run(self):
        action = int(params['action'])

        utils.log("action " + str(action))
        if(action == 0):
            self._showHistory()
        elif(action == 1001):
            self._delete(params['id'])

    def _showHistory(self):
        #we are listing files
        xbmcplugin.setContent(int(sys.argv[1]),'files')
        xbmcplugin.setPluginCategory(int(sys.argv[1]),'Play History')
        xbmcplugin.addSortMethod(int(sys.argv[1]),xbmcplugin.SORT_METHOD_NONE)
        context_url = "%s?%s"
        
        #load the history
        history = self.historyDB.getAllOrderedLimit('date',0,30)

        if(len(history) > 0):
            for entry in history:
                entryName = str(entry[2])

                #if the name is blank use the file path
                if(entryName == ''):
                    entryName = str(entry[3])
                    
                item = xbmcgui.ListItem(entryName,str(entry[4]),path=str(entry[3]))
                item.setProperty('IsPlayable','true')
                item.addContextMenuItems([('Delete from History','Xbmc.RunPlugin(%s?%s)' % (str(sys.argv[0]),'action=1001&id=' + str(entry[0])))])
                ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url= "%s" % (entry[3],),listitem=item,isFolder=False)
                
        else:
            item = xbmcgui.ListItem("No Items In History")
            ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url="%s?%s" % (sys.argv[0],"action=0"),listitem=item,isFolder=False)

        xbmcplugin.endOfDirectory(int(sys.argv[1]),cacheToDisc=False)
        
    def _delete(self,id):
        #check if we need PIN confirmation to do this
        if(utils.getSetting('require_pin_on_delete') == 'true'):
            user_try = xbmcgui.Dialog().numeric(0,'PIN Required')

            if(self.settings.checkPIN(user_try)):
                self.historyDB.delete(id)
                xbmc.executebuiltin('Container.Refresh')
            else:
                xbmcgui.Dialog().ok('Error','Incorrect PIN')
        else:
            self.historyDB.delete(id)
            xbmc.executebuiltin('Container.Refresh')
コード例 #4
0
ファイル: set_pin.py プロジェクト: robweber/service.history
import xbmcgui
import resources.lib.utils as utils
from resources.lib.database import Database, DBSettings

# create the dialog
dialog = xbmcgui.Dialog()

database = Database()
database.connect()
database.checkDBStructure()

settings = DBSettings(database)

# check if there is a current pin
current_pin = settings.getPIN()
allow_change = True

if current_pin != "0000":
    allow_change = False

    # ask user to input current pin
    user_input = dialog.numeric(0, "Enter Current PIN")

    if settings.checkPIN(user_input):
        allow_change = True
    else:
        dialog.ok("Error", "Incorrect PIN")

# ask the user for a new pin
if allow_change:
    first_try = dialog.numeric(0, "Enter new PIN")
コード例 #5
0
ファイル: default.py プロジェクト: robweber/service.history
class HistoryService:
    playerMonitor = None
    updateMonitor = None
    historyDB = None
    settings = None
    require_pin = False  #need to store this as it might change
    
    def __init__(self):
        utils.log("Starting History Service")
        self.playerMonitor = HistoryPlayerMonitor(on_play_started = self.playStarted)
        self.updateMonitor = HistorySettingsMonitor(update_settings = self.onSettingsUpdate)
        
        #setup the database connection
        database = Database()
        database.connect()
        database.checkDBStructure()

        self.historyDB = WatchHistory(database)
        self.settings = DBSettings(database)

        if(utils.getSetting('require_pin_on_change') == 'true'):
            self.require_pin = True

        #backup the settings file
        self._settingsBackup()

    def run(self):
        while(not xbmc.abortRequested):
            xbmc.sleep(500)

    def playStarted(self):
        
        if(self.playerMonitor.isPlayingVideo() and utils.getSetting('monitor_video') == 'true'):
            videoTag = self.playerMonitor.getVideoInfoTag()

            utils.log("Logging: " + videoTag.getTitle(),xbmc.LOGDEBUG)
            self.historyDB.insert(("video",videoTag.getTitle(),self.playerMonitor.getPlayingFile(),int(time.time())))
            
        elif(self.playerMonitor.isPlayingAudio() and utils.getSetting('monitor_music') == 'true'):
            audioTag = self.playerMonitor.getMusicInfoTag()

            utils.log("Logging: " + audioTag.getTitle(),xbmc.LOGDEBUG)
            self.historyDB.insert(('audio',audioTag.getTitle(),self.playerMonitor.getPlayingFile(),int(time.time())))

    def onSettingsUpdate(self):
        #check if a pin is required to change settings
        if(self.require_pin):
            dialog = xbmcgui.Dialog()
            
            #ask the user for their pin
            user_try = dialog.numeric(0,'Pin required to change settings')

            if(self.settings.checkPIN(user_try)):
                #make backup of new settings
                self._settingsBackup()
                
                if(utils.getSetting('require_pin_on_change') == 'false'):
                    self.require_pin = False
            else:
                #restore the settings file
                self._settingsRestore()
                dialog.ok('Error','Incorrect PIN')
        else:
            #check this setting in case it's the one that changed
            if(utils.getSetting('require_pin_on_change') == 'true'):
                    self.require_pin = True

    def _settingsBackup(self):
        #make a backup of the settings file (in case pin is incorrect)
        settings_file = xbmc.translatePath(utils.data_dir() + "settings.xml")

        if(xbmcvfs.exists(settings_file)):
            xbmcvfs.copy(settings_file,settings_file + ".bak")

    def _settingsRestore(self):
        #restore the settings file (in case pin is incorrect)
        settings_file = xbmc.translatePath(utils.data_dir() + "settings.xml")

        if(xbmcvfs.exists(settings_file)):
            xbmcvfs.copy(settings_file + ".bak",settings_file)