Example #1
0
        public Assembly LoadPrecompiledExtension(IExtensionInfo extensionInfo)
        {
            if (IsAmbientExtension(extensionInfo))
            {
                return(null);
            }

            var projectContext = GetProjectContext(extensionInfo);

            if (!IsPrecompiledContext(projectContext))
            {
                return(null);
            }

            if (IsAssemblyLoaded(extensionInfo.Id))
            {
                return(_loadedAssemblies[extensionInfo.Id].Value);
            }

            if (projectContext != null)
            {
                LoadProject(projectContext);
            }
            else
            {
                LoadPrecompiledModule(extensionInfo);
            }

            return(IsAssemblyLoaded(extensionInfo.Id) ? _loadedAssemblies[extensionInfo.Id].Value : null);
        }
        public ExtensionEntry Load(IExtensionInfo extensionInfo)
        {
            try
            {
                var assembly = _extensionLibraryService.LoadAmbientExtension(extensionInfo);

                if (assembly == null)
                {
                    return(null);
                }

                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Loaded referenced ambient extension \"{0}\": assembly name=\"{1}\"", extensionInfo.Id, assembly.FullName);
                }

                return(new ExtensionEntry
                {
                    ExtensionInfo = extensionInfo,
                    Assembly = assembly,
                    ExportedTypes = assembly.ExportedTypes
                });
            }
            catch
            {
                return(null);
            }
        }
        public ExtensionEntry Load(IExtensionInfo extensionInfo)
        {
            if (!ExtensionsSearchPaths.Any(x => extensionInfo.SubPath.StartsWith(x)))
            {
                return(null);
            }

            try
            {
                var assembly = _extensionLibraryService.LoadPrecompiledExtension(extensionInfo);

                if (assembly == null)
                {
                    return(null);
                }

                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Loaded referenced precompiled extension \"{0}\": assembly name=\"{1}\"", extensionInfo.Id, assembly.FullName);
                }

                return(new ExtensionEntry
                {
                    ExtensionInfo = extensionInfo,
                    Assembly = assembly,
                    ExportedTypes = assembly.ExportedTypes
                });
            }
            catch
            {
                return(null);
            }
        }
        private SunsetLake GetSepLake(Dictionary <string, object> args)
        {
            SunsetLake s_lake = new SunsetLake();

            s_lake.RegisterSingleton <ILogger>(LoggerFactory.Auto(this.GetType().Name));
            s_lake.RegisterSingleton <ClassTextReader>(() =>
            {
                return(ClassTextReaderCache.Acquire(this.GetType()));
            });
            s_lake.RegisterSingleton <IExtensionInfo>(() =>
            {
                return(this.GetExtensionInfo());
            });
            s_lake.RegisterSingleton <ILeafUI>(() =>
            {
                ILeafUI leafUI     = this.lake !.Get <ILeafUI>();
                IExtensionInfo inf = this.GetExtensionInfo();
                leafUI.Title       = inf.Name();
                leafUI.Icon        = inf.Icon();
                return(leafUI);
            });
            s_lake.RegisterSingleton <Dictionary <string, object> >(() =>
            {
                return(args ?? new Dictionary <string, object>());
            });
            return(s_lake);
        }
        public ExtensionEntry Load(IExtensionInfo extensionInfo)
        {
            try
            {
                var assembly = Assembly.Load(new AssemblyName(extensionInfo.Id));

                if (assembly == null)
                {
                    return(null);
                }

                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("Loaded referenced ambient extension \"{0}\": assembly name=\"{1}\"", extensionInfo.Id, assembly.FullName);
                }

                return(new ExtensionEntry
                {
                    ExtensionInfo = extensionInfo,
                    Assembly = assembly,
                    ExportedTypes = assembly.ExportedTypes
                });
            }
            catch
            {
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation("An extension found but was not loaded: \"{0}\". It might denote an extension which was not referenced by the running application project.", extensionInfo.Id);
                }

                return(null);
            }
        }
Example #6
0
 internal static Task <object?> CreateTask(IExtensionInfo info,
                                           Dictionary <string, object> args,
                                           Action <Thread> threadReceiver,
                                           ILake source)
 {
     return(new Task <object?>(() =>
     {
         try
         {
             Thread.CurrentThread.Name = $"Extension Task {info.Id}";
             using var procedure = info.OpenProcedure();
             threadReceiver(Thread.CurrentThread);
             procedure.Source = source;
             procedure.Args = args;
             return procedure.Run();
         }
         catch (Exception e)
         {
             SLogger.Warn("ExtensionTask", "Uncaught error", e);
             var title = string.Format(new T().RxGetClassText("error_title_fmt"), info.Name());
             LakeProvider.Lake.Get <IAppManager>().ShowException(title, e.GetType().Name, e);
             return default;
         }
     }));
 }
 public static IFileInfo GetExtensionFileInfo(
     this IHostingEnvironment parentFileSystem,
     IExtensionInfo extensionInfo,
     string subPath)
 {
     return(parentFileSystem.ContentRootFileProvider.GetFileInfo(
                Path.Combine(extensionInfo.SubPath, subPath)));
 }
 public bool Equals([AllowNull] IExtensionInfo other)
 {
     if (other is JSModuleExtensionInfo extInf)
     {
         return(extInf.Id == this.Id);
     }
     return(false);
 }
Example #9
0
 public TaskInfo(Task <object?> task, IExtensionInfo extension)
 {
     if (task is null)
     {
         throw new ArgumentNullException(nameof(task));
     }
     Task      = task;
     Extension = extension;
 }
Example #10
0
        public Assembly LoadAmbientExtension(IExtensionInfo extensionInfo)
        {
            if (IsAmbientExtension(extensionInfo))
            {
                return(Assembly.Load(new AssemblyName(extensionInfo.Id)));
            }

            return(null);
        }
Example #11
0
        public ThemeExtensionInfo(IExtensionInfo extensionInfo)
        {
            _extensionInfo = extensionInfo;

            // No need to do any further verification since the attributes themselves handle that on the front end
            var themeInfo = _extensionInfo.Manifest.ModuleInfo as ThemeAttribute;

            BaseTheme = themeInfo?.BaseTheme;
        }
 public Task <ExtensionEntry> LoadExtensionAsync(IExtensionInfo extensionInfo)
 {
     this.EnsureInitialized();
     if (this._extensions.TryGetValue(extensionInfo.get_Id(), out V_0))
     {
         return(Task.FromResult <ExtensionEntry>(V_0));
     }
     return(Task.FromResult <ExtensionEntry>(null));
 }
Example #13
0
        private void StateCheck(IExtensionInfo inf)
        {
            IDevice?currentDevice = deviceManager !.Selected;

            if (!inf.IsRunnableCheck(currentDevice))
            {
                throw new DeviceStateIsNotCorrectException(inf.RequiredDeviceState(), currentDevice?.State);
            }
        }
Example #14
0
        public ThemeExtensionInfo(IExtensionInfo extensionInfo)
        {
            _extensionInfo = extensionInfo;

            var baseTheme = _extensionInfo.Manifest.ConfigurationRoot["basetheme"];

            if (baseTheme != null && baseTheme.Length != 0)
            {
                _baseTheme = baseTheme.ToString();
            }
        }
        private void callHandler_OnMyPhoneStatusChanged(object sender, MyPhonePlugins.MyPhoneStatus status)
        {
            if (status == MyPhonePlugins.MyPhoneStatus.LoggedIn)
            {
                this.extensionInfo = sender as MyPhonePlugins.IExtensionInfo;
            }

            LogHelper.Log(Environment.SpecialFolder.ApplicationData, "CallTriggerCmd.log",
                          String.Format("MyPhoneStatusChanged - Status='{0}' - Extension='{1}'", status, extensionInfo == null ? String.Empty : extensionInfo.Number));
            Callback(channel => channel.MyPhoneStatusChanged());
        }
Example #16
0
 public InternalFeatureInfo(
     string id,
     IExtensionInfo extensionInfo)
 {
     _id           = id;
     _name         = id;
     _priority     = 0;
     _category     = null;
     _description  = null;
     _extension    = extensionInfo;
     _dependencies = new string[0];
 }
Example #17
0
        private void StateCheck(IExtensionInfo inf)
        {
            IDevice?currentDevice         = deviceManager !.Selected;
            bool    isNoMatterDeviceState = (inf.RequiredDeviceState() == AutumnBoxExtension.NoMatter);
            bool    deviceStateCorrect    = inf.RequiredDeviceState().HasFlag(currentDevice?.State ?? default);
            bool    runnable = isNoMatterDeviceState || deviceStateCorrect;

            if (!runnable)
            {
                throw new DeviceStateIsNotCorrectException(inf.RequiredDeviceState(), currentDevice?.State);
            }
        }
Example #18
0
        public ThemeExtensionInfo(IExtensionInfo extensionInfo)
        {
            _extensionInfo = extensionInfo;

            var themeInfo = _extensionInfo.Manifest.ModuleInfo as ThemeAttribute;
            var baseTheme = themeInfo?.BaseTheme;

            if (baseTheme != null && baseTheme.Length != 0)
            {
                _baseTheme = baseTheme.Trim().ToString();
            }
        }
 public static byte[] Icon(this IExtensionInfo extensionInfo)
 {
     try
     {
         string iconSource = extensionInfo.Metadata[ExtensionMetadataKeys.ICON]?.Invoke() as string ?? BASE64ICON;
         return(ReadAsBase64(iconSource) ??
                ReadAsResource(extensionInfo as ClassExtensionInfo, iconSource) ??
                Convert.FromBase64String(iconSource));
     }
     catch
     {
         return(Convert.FromBase64String(BASE64ICON));
     }
Example #20
0
        public static string Description(this IExtensionInfo extensionInfo)
        {
            string DEFAULT_VALUE = String.Empty;

            try
            {
                return(extensionInfo.Metadata[ExtensionMetadataKeys.DESCRIPTION]?.Invoke() as string ?? DEFAULT_VALUE);
            }
            catch (Exception)
            {
                return(DEFAULT_VALUE);
            }
        }
Example #21
0
        public Task <object?> Start(IExtensionInfo inf, Dictionary <string, object>?args = null)
        {
            StateCheck(inf);
            string id   = GenerateId();
            var    task = ExtensionTaskFactory.CreateTask(inf, args ?? new Dictionary <string, object>(), (thread) =>
            {
                taskInfos[id].Thread = thread;
            }, lake !);

            taskInfos[id] = new TaskInfo(task, inf);
            task.Start();
            return(task);
        }
Example #22
0
        public static Version Version(this IExtensionInfo extensionInfo)
        {
            var DEFAULT_VALUE = new Version(1, 0, 0);

            try
            {
                return(extensionInfo.Metadata[ExtensionMetadataKeys.VERSION]?.Invoke() as Version ?? DEFAULT_VALUE);
            }
            catch (Exception)
            {
                return(DEFAULT_VALUE);
            }
        }
        public static string Name(this IExtensionInfo extensionInfo)
        {
            const string DEFAULT_VALUE = "Unknown Extension";

            try
            {
                return(extensionInfo.Metadata[ExtensionMetadataKeys.NAME]?.Invoke() as string ?? DEFAULT_VALUE);
            }
            catch
            {
                return(DEFAULT_VALUE);
            }
        }
 public InternalFeatureInfo(
     string id,
     IExtensionInfo extensionInfo)
 {
     Id                = id;
     Name              = id;
     Priority          = 0;
     Category          = null;
     Description       = null;
     DefaultTenantOnly = false;
     Extension         = extensionInfo;
     Dependencies      = new string[0];
 }
        public static bool NeedRoot(this IExtensionInfo extensionInfo)
        {
            const bool DEFAULT_VALUE = false;

            try
            {
                return(extensionInfo.Metadata[ExtensionMetadataKeys.ROOT]?.Invoke() as bool? ?? DEFAULT_VALUE);
            }
            catch
            {
                return(DEFAULT_VALUE);
            }
        }
Example #26
0
        public Task <ExtensionEntry> LoadExtensionAsync(IExtensionInfo extensionInfo)
        {
            EnsureInitialized();

            ExtensionEntry extension;

            if (_extensions.TryGetValue(extensionInfo.Id, out extension))
            {
                return(Task.FromResult(extension));
            }

            return(Task.FromResult <ExtensionEntry>(null));
        }
Example #27
0
        public IEnumerable <IFeatureInfo> GetFeatures(
            IExtensionInfo extensionInfo,
            IManifestInfo manifestInfo)
        {
            List <IFeatureInfo> featureInfos =
                new List <IFeatureInfo>();

            foreach (var provider in _featuresProviders)
            {
                featureInfos.AddRange(provider.GetFeatures(extensionInfo, manifestInfo));
            }

            return(featureInfos);
        }
Example #28
0
 public ExtensionEntry Load(IExtensionInfo extensionInfo)
 {
     foreach (var loader in _extensionLoaders.OrderBy(x => x.Order))
     {
         var entry = loader.Load(extensionInfo);
         if (entry != null)
         {
             return(entry);
         }
     }
     return(new ExtensionEntry {
         ExtensionInfo = extensionInfo, IsError = true, ExportedTypes = Enumerable.Empty <Type>()
     });
 }
 public ExtensionEntry Load(IExtensionInfo extensionInfo)
 {
     foreach (var loader in _extensionLoaders.OrderBy(x => x.Order))
     {
         var entry = loader.Load(extensionInfo);
         if (entry != null)
         {
             return(entry);
         }
     }
     return(new ExtensionEntry {
         ExtensionInfo = extensionInfo, IsError = true
     });
 }
Example #30
0
        public Task <ExtensionEntry> LoadExtensionAsync(IExtensionInfo extensionInfo)
        {
            // Results are cached so that there is no mismatch when loading an assembly twice.
            // Otherwise the same types would not match.
            return(_extensions.GetOrAdd(extensionInfo.Id, (key) =>
            {
                var extension = _extensionLoader.Load(extensionInfo);

                if (extension.IsError && L.IsEnabled(LogLevel.Warning))
                {
                    L.LogError("No suitable loader found for extension \"{0}\"", extensionInfo.Id);
                }

                return Task.FromResult(extension);
            }));
        }