← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~phill-ridout/openlp/path_fixes into lp:openlp

 

Phill has proposed merging lp:~phill-ridout/openlp/path_fixes into lp:openlp.

Commit message:
Path fix ups

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~phill-ridout/openlp/path_fixes/+merge/369195
-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~phill-ridout/openlp/path_fixes into lp:openlp.
=== modified file 'openlp/core/common/json.py'
--- openlp/core/common/json.py	2019-05-26 10:30:37 +0000
+++ openlp/core/common/json.py	2019-06-21 22:10:16 +0000
@@ -111,6 +111,8 @@
         :param dict obj: A decoded JSON object
         :return: The custom object from the serialized data if the custom object is registered, else obj
         """
+        if '__Path__' in obj:
+            return PathSerializer.encode_json(obj, **self.kwargs)
         try:
             key = obj['json_meta']['class']
         except KeyError:
@@ -150,8 +152,8 @@
         if isinstance(obj, JSONMixin):
             return obj.json_object()
         elif obj.__class__.__name__ in _registered_classes:
-            return _registered_classes[obj.__class__.__name__].json_object(obj)
-        return super().default(obj)
+            return _registered_classes[obj.__class__.__name__].json_object(obj, **self.kwargs)
+        return super().default(obj, **self.kwargs)
 
 
 def is_serializable(obj):
@@ -174,17 +176,22 @@
         :param kwargs: Contains any extra parameters. Not used!
         :return Path: The deserialized Path object
         """
-        path = Path(*obj['parts'])
+        if '__Path__' in obj:
+            parts = obj['__Path__']
+        else:
+            parts = obj['parts']
+        path = Path(*parts)
         if base_path and not path.is_absolute():
             return base_path / path
         return path
 
     @classmethod
-    def json_object(cls, obj, base_path=None, **kwargs):
+    def json_object(cls, obj, base_path=None, is_js=False, **kwargs):
         """
         Create a dictionary that can be JSON decoded.
 
         :param Path base_path: If specified, an absolute path to make a relative path from.
+        :param bool is_js: Encode the path as a uri. For example for use in the js rendering code.
         :param kwargs: Contains any extra parameters. Not used!
         :return: The dictionary representation of this Path object.
         :rtype: dict[tuple]
@@ -193,6 +200,8 @@
         if base_path:
             with suppress(ValueError):
                 path = path.relative_to(base_path)
+        if is_js is True:
+            return path.as_uri()
         json_dict = {'parts': path.parts}
         cls.attach_meta(json_dict)
         return json_dict

=== modified file 'openlp/core/common/settings.py'
--- openlp/core/common/settings.py	2019-06-14 17:54:04 +0000
+++ openlp/core/common/settings.py	2019-06-21 22:10:16 +0000
@@ -612,7 +612,7 @@
             elif isinstance(default_value, dict):
                 return {}
         elif isinstance(setting, str):
-            if 'json_meta' in setting or setting.startswith('{'):
+            if 'json_meta' in setting or '__Path__' in setting or setting.startswith('{'):
                 return json.loads(setting, cls=OpenLPJSONDecoder)
         # Convert the setting to the correct type.
         if isinstance(default_value, bool):

=== modified file 'openlp/core/display/html/display.js'
--- openlp/core/display/html/display.js	2019-03-16 10:26:05 +0000
+++ openlp/core/display/html/display.js	2019-06-21 22:10:16 +0000
@@ -118,20 +118,6 @@
 }
 
 /**
- * The paths we get are JSON versions of Python Path objects, so let's just fix that.
- * @private
- * @param {object} path - The Path object
- * @returns {string} The actual file path
- */
-function _pathToString(path) {
-    var filename = path.__Path__.join("/").replace("//", "/");
-    if (!filename.startsWith("/")) {
-        filename = "/" + filename;
-    }
-    return filename;
-}
-
-/**
  * An audio player with a play list
  */
 var AudioPlayer = function (audioElement) {
@@ -676,13 +662,13 @@
         }
         break;
       case BackgroundType.Image:
-        background_filename = _pathToString(theme.background_filename);
-        backgroundStyle["background-image"] = "url('file://" + background_filename + "')";
+        backgroundStyle["background-image"] = "url('" + theme.background_filename + "')";
+        console.warn(backgroundStyle["background-image"]);
         break;
       case BackgroundType.Video:
-        background_filename = _pathToString(theme.background_filename);
         backgroundStyle["background-color"] = theme.background_border_color;
-        backgroundHtml = "<video loop autoplay muted><source src='file://" + background_filename + "'></video>";
+        backgroundHtml = "<video loop autoplay muted><source src='" + theme.background_filename + "'></video>";
+        console.warn(backgroundHtml);
         break;
       default:
         backgroundStyle["background"] = "#000";

=== modified file 'openlp/core/display/window.py'
--- openlp/core/display/window.py	2019-05-23 19:33:46 +0000
+++ openlp/core/display/window.py	2019-06-21 22:10:16 +0000
@@ -332,9 +332,9 @@
             theme_copy = copy.deepcopy(theme)
             theme_copy.background_type = 'image'
             theme_copy.background_filename = self.checkerboard_path
-            exported_theme = theme_copy.export_theme()
+            exported_theme = theme_copy.export_theme(is_js=True)
         else:
-            exported_theme = theme.export_theme()
+            exported_theme = theme.export_theme(is_js=True)
         self.run_javascript('Display.setTheme({theme});'.format(theme=exported_theme))
 
     def get_video_types(self):

=== modified file 'openlp/core/lib/theme.py'
--- openlp/core/lib/theme.py	2019-05-22 06:47:00 +0000
+++ openlp/core/lib/theme.py	2019-06-21 22:10:16 +0000
@@ -225,17 +225,18 @@
             jsn = json.loads(theme, cls=OpenLPJSONDecoder)
         self.expand_json(jsn)
 
-    def export_theme(self, theme_path=None):
+    def export_theme(self, theme_path=None, is_js=False):
         """
         Loop through the fields and build a dictionary of them
 
+        :param pathlib.Path | None theme_path:
+        :param bool is_js: For internal use, for example with the theme js code.
+        :return str: The json encoded theme object
         """
         theme_data = {}
         for attr, value in self.__dict__.items():
             theme_data["{attr}".format(attr=attr)] = value
-        if theme_path:
-            return json.dumps(theme_data, cls=OpenLPJSONEncoder, base_path=theme_path)
-        return json.dumps(theme_data, cls=OpenLPJSONEncoder)
+        return json.dumps(theme_data, cls=OpenLPJSONEncoder, base_path=theme_path, is_js=is_js)
 
     def parse(self, xml):
         """

=== modified file 'openlp/plugins/presentations/lib/presentationcontroller.py'
--- openlp/plugins/presentations/lib/presentationcontroller.py	2019-06-11 05:01:02 +0000
+++ openlp/plugins/presentations/lib/presentationcontroller.py	2019-06-21 22:10:16 +0000
@@ -129,7 +129,7 @@
             thumbnail_folder_path = self.get_thumbnail_folder()
             temp_folder_path = self.get_temp_folder()
             if thumbnail_folder_path.exists():
-                thumbnail_folder_path.rmtree()
+                shutil.rmtree(thumbnail_folder_path)
             if temp_folder_path.exists():
                 shutil.rmtree(temp_folder_path)
         except OSError:


Follow ups