Files
2025-10-25 13:21:06 +02:00

144 lines
4.0 KiB
Python

import json
from kodi_six import xbmc, xbmcvfs
from . import utils as utils
class CronSchedule:
expression = ''
name = 'library'
timer_type = 'xbmc'
command = {'method': 'VideoLibrary.Scan', 'params': {'showdialogs': True}}
next_run = 0
on_delay = False # used to defer processing until after player finishes
def executeCommand(self):
jsonCommand = {'jsonrpc': '2.0', 'method': self.command['method'], 'params': self.command['params'], 'id': 44}
utils.log(json.dumps(jsonCommand))
xbmc.executeJSONRPC(json.dumps(jsonCommand))
def cleanLibrarySchedule(self, selectedIndex):
if(selectedIndex == 1):
# once per day
return "* * *"
elif (selectedIndex == 2):
# once per week
return "* * 0"
else:
# once per month
return "1 * *"
class CustomPathFile:
jsonFile = xbmcvfs.translatePath(utils.data_dir() + "custom_paths.json")
paths = None
contentType = 'video' # all by default
def __init__(self, contentType):
self.paths = []
self.contentType = contentType
# try and read in the custom file
self._readFile()
def getSchedules(self, showDialogs=True):
schedules = []
# create schedules from the path information
for aPath in self.paths:
if(self.contentType == aPath['content']):
schedules.append(self._createSchedule(aPath, showDialogs))
return schedules
def addPath(self, path):
path['id'] = self._getNextId()
self.paths.append(path)
# save the file
self._writeFile()
def deletePath(self, aKey):
# find the given key
index = -1
for i in range(0, len(self.paths)):
if(self.paths[i]['id'] == aKey):
index = i
# if found, delete it
if(i != -1):
del self.paths[index]
# save the file
self._writeFile()
def getPaths(self):
result = []
for aPath in self.paths:
# if type matches the one we want
if(self.contentType == 'all' or self.contentType == aPath['content']):
result.append(aPath)
return result
def _getNextId(self):
result = 0
if(len(self.paths) > 0):
# sort ids, get highest one
maxId = sorted(self.paths, reverse=True, key=lambda k: k['id'])
result = maxId[0]['id']
return result + 1
def _writeFile(self):
# sort the ids
self.paths = sorted(self.paths, reverse=True, key=lambda k: k['id'])
# create the custom file
aFile = xbmcvfs.File(self.jsonFile, 'w')
aFile.write(json.dumps(self.paths))
aFile.close()
def _readFile(self):
if(xbmcvfs.exists(self.jsonFile)):
# read in the custom file
aFile = xbmcvfs.File(self.jsonFile)
# load paths in the format {path:path,expression:expression,content:type}
tempPaths = json.loads(aFile.read())
# update values in path
for aPath in tempPaths:
# old files are only video, update
if('content' not in aPath):
aPath['content'] = 'video'
if('id' not in aPath):
aPath['id'] = self._getNextId()
self.paths.append(aPath)
aFile.close()
else:
# write a blank file
self._writeFile()
def _createSchedule(self, aPath, showDialogs):
aSchedule = CronSchedule()
aSchedule.name = aPath['path']
# command depends on content type
if(aPath['content'] == 'video'):
aSchedule.command = {'method': 'VideoLibrary.Scan', 'params': {'directory': aPath['path'], 'showdialogs': showDialogs}}
else:
aSchedule.command = {'method': 'AudioLibrary.Scan', 'params': {'directory': aPath['path'], 'showdialogs': showDialogs}}
aSchedule.expression = aPath['expression']
return aSchedule