Jim Cartlidge 4 lat temu
rodzic
commit
d27d2a8990

+ 23 - 12
Emby.Server.Implementations/ApplicationHost.cs

@@ -1051,27 +1051,38 @@ namespace Emby.Server.Implementations
             var dllList = new List<string>();
             var versions = new List<(Version PluginVersion, string Name, string Path)>();
             var directories = Directory.EnumerateDirectories(path, "*.*", SearchOption.TopDirectoryOnly);
+            string metafile;
 
             foreach (var dir in directories)
             {
                 try
                 {
-                    var manifest = _jsonSerializer.DeserializeFromFile<PlugInManifest>(Path.Combine(dir, "meta.json"));
-
-                    if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
+                    metafile = Path.Combine(dir, "meta.json");
+                    if (File.Exists(metafile))
                     {
-                        targetAbi = new Version(0, 0, 0, 1);
-                    }
+                        var manifest = _jsonSerializer.DeserializeFromFile<PluginManifest>(metafile);
 
-                    if (!Version.TryParse(manifest.Version, out var version))
-                    {
-                        version = new Version(0, 0, 0, 1);
-                    }
+                        if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
+                        {
+                            targetAbi = new Version(0, 0, 0, 1);
+                        }
 
-                    if (targetAbi >= ApplicationVersion)
+                        if (!Version.TryParse(manifest.Version, out var version))
+                        {
+                            version = new Version(0, 0, 0, 1);
+                        }
+
+                        if (ApplicationVersion <= targetAbi)
+                        {
+                            // Only load Plugins if the plugin is built for this version or below.
+                            versions.Add((version, manifest.Name, dir));
+                        }
+                    }
+                    else
                     {
-                        // Only load Plugins for this version or below.
-                        versions.Add((version, manifest.Name, dir));
+                        metafile = dir.Split(new char[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
+                        // Add it under the path name and version 0.0.0.1.
+                        versions.Add((new Version("0.0.0.1"), metafile, dir));
                     }
                 }
                 catch

+ 10 - 10
Emby.Server.Implementations/Plugins/PlugInManifest.cs

@@ -9,52 +9,52 @@ namespace Emby.Server.Implementations.Plugins
     {
         /// <summary>
         /// Gets or sets the category of the plugin.
-        /// </summary>  
+        /// </summary>
         public string Category { get; set; }
 
         /// <summary>
         /// Gets or sets the changelog information.
-        /// </summary>  
+        /// </summary>
         public string Changelog { get; set; }
 
         /// <summary>
         /// Gets or sets the description of the plugin.
-        /// </summary>  
+        /// </summary>
         public string Description { get; set; }
 
         /// <summary>
         /// Gets or sets the Global Unique Identifier for the plugin.
-        /// </summary>  
+        /// </summary>
         public Guid Guid { get; set; }
 
         /// <summary>
         /// Gets or sets the Name of the plugin.
-        /// </summary>  
+        /// </summary>
         public string Name { get; set; }
 
         /// <summary>
         /// Gets or sets an overview of the plugin.
-        /// </summary>      
+        /// </summary>
         public string Overview { get; set; }
 
         /// <summary>
         /// Gets or sets the owner of the plugin.
-        /// </summary>  
+        /// </summary>
         public string Owner { get; set; }
 
         /// <summary>
         /// Gets or sets the compatibility version for the plugin.
-        /// </summary>     
+        /// </summary>
         public string TargetAbi { get; set; }
 
         /// <summary>
         /// Gets or sets the timestamp of the plugin.
-        /// </summary>     
+        /// </summary>
         public DateTime Timestamp { get; set; }
 
         /// <summary>
         /// Gets or sets the Version number of the plugin.
-        /// </summary>     
+        /// </summary>
         public string Version { get; set; }
     }
 }