示例#1
0
 def _verifyPluginFolder(
         self, folder: str) -> typing.List[typing.Type[PluginMixin]]:
     self._logger.info("Verify plugin in folder: %s", folder)
     oldClasses = [x.clazz for x in self._app.getConfig().plugins]
     root = Path(folder)
     if not (root / "__init__.py").exists():
         raise RuntimeError("Plugin folder must contains __init__.py")
     targetPath = Path(f"IceSpringMusicPlayer/plugins/{root.name}")
     if targetPath.exists():
         self._logger.info("Plugin already exists.")
         raise RuntimeError("Plugin Already Exists")
     self._logger.info("Copy plugin folder to plugins dir %s", targetPath)
     root.copytree(targetPath)
     try:
         classes = self.findPluginClassesInFolder(str(targetPath))
         classes = [x for x in classes if x not in oldClasses]
     except Exception as e:
         self._logger.info("Exception occurred: %s", e, e)
         self._logger.info("Remove folder: %s", targetPath)
         targetPath.rmtree()
         raise e
     if len(classes) == 0:
         self._logger.info("No plugin found in folder, remove folder")
         targetPath.rmtree()
         raise RuntimeError("No plugin found")
     return classes
示例#2
0
 def _loadConfig(self) -> Config:
     self._logger.info("Load config")
     path = Path("config.json")
     if not path.exists():
         self._logger.info("No config.json file, return default config")
         return self.getDefaultConfig()
     jd = json.loads(path.read_text(), object_pairs_hook=Config.fromJson)
     config = Config(
         **{
             **self.getDefaultConfig().__dict__,
             **{k: v
                for k, v in jd.items() if k in Config.__annotations__}
         })
     self._logger.info("Process plugin configs (%d plugins)",
                       len(self._pluginService.getPluginClasses()))
     for plugin in config.plugins:
         self._logger.info("Plugin in config: %s", plugin)
         jd = json.loads(json.dumps(
             plugin.config,
             default=plugin.clazz.getPluginConfigClass().pythonToJson),
                         object_pairs_hook=plugin.clazz.
                         getPluginConfigClass().jsonToPython)
         plugin.config = gg(plugin.clazz.getPluginConfigClass())(**jd)
     self._logger.info("Process plugins not in config")
     loadedClasses = [x.clazz for x in config.plugins]
     for clazz in self._pluginService.getPluginClasses():
         if clazz not in loadedClasses:
             self._logger.info("Plugin not in config: %s", clazz)
             config.plugins.append(
                 Plugin(clazz=clazz,
                        disabled=False,
                        config=clazz.getPluginConfigClass().
                        getDefaultObject()))
     self._logger.info("Sort plugins")
     config.plugins.sort(
         key=lambda x: x.clazz.__module__ + "." + x.clazz.__name__)
     self._logger.info("Load layout config")
     self._loadElementConfig(config.layout)
     self._logger.info("Loaded config: %s", config)
     return config
示例#3
0
import shutil
import sys
from subprocess import Popen, PIPE

import PyInstaller.__main__
from IceSpringPathLib import Path
from PyInstaller.utils.hooks import collect_submodules

from IceSpringMusicPlayer.utils.logUtils import LogUtils

name = "IceSpringMusicPlayer"
vsHome = Path(r"C:\Program Files (x86)\Microsoft Visual Studio\2019").absolute()
vcvarsall = vsHome / r"BuildTools\VC\Auxiliary\Build\vcvarsall.bat"
ffmpegHome = Path("./ffmpeg").absolute()
fftwDll = Path("libfftw3f-3.dll").absolute()
assert vsHome.exists()
assert vcvarsall.exists()
assert ffmpegHome.exists()
assert ffmpegHome.__truediv__("ffmpeg.exe").exists()
assert ffmpegHome.__truediv__("ffprobe.exe").exists()
assert fftwDll.exists()

LogUtils.initLogging()
logging.getLogger().setLevel(logging.INFO)
logging.info("Removing application directory if exists...")
Path(f"dist/{name}").exists() and Path(f"dist/{name}").rmtree()

logging.info("Checking for backup directory...")
if Path(f"dist/{name}-backup").exists():
    logging.info("Backup directory exists, restoring it...")
    Path(f"dist/{name}-backup").copytree(Path(f"dist/{name}"))