public override WidgetPackage PackWidget(WidgetBase widget) { var package = base.PackWidget(widget); var sectionWidget = package.Widget as Models.SectionWidget; var pluginRootPath = _pluginLoader.GetPlugins().First(m => m.ID == SectionPlug.PluginID).RelativePath; var cmsApplicationContext = ApplicationContext as CMSApplicationContext; var rootPath = cmsApplicationContext.MapPath("~/"); sectionWidget.Groups.Each(g => { sectionWidget.Template = _sectionTemplateService.Get(g.PartialView); packFiles.Each(f => { string file = cmsApplicationContext.MapPath(Path.Combine(pluginRootPath, f).FormatWith(sectionWidget.Template.TemplateName)); if (File.Exists(file)) { FileInfo fileInfo = new FileInfo(file); package.Files.Add(new PackageManger.FileInfo { FileName = fileInfo.Name, FilePath = "~/" + f.FormatWith(sectionWidget.Template.TemplateName), Content = File.ReadAllBytes(file) }); } }); }); return(package); }
public PluginRazorViewEngineOptionsSetup(IHostingEnvironment hostingEnvironment, IPluginLoader loader) : base(options => { if (hostingEnvironment.IsDevelopment()) { options.FileProviders.Add(new DeveloperViewFileProvider(hostingEnvironment)); } loader.GetPlugins().Where(m => m.Enable && m.ID.IsNotNullAndWhiteSpace()).Each(m => { var directory = new DirectoryInfo(m.RelativePath); if (hostingEnvironment.IsDevelopment()) { options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension); } else { options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension); } }); options.ViewLocationFormats.Add("/Views/{0}" + RazorViewEngine.ViewExtension); }) { }
private static void ConfigureRazor(RazorViewEngineOptions options, IHostingEnvironment hostingEnvironment, IPluginLoader loader) { if (hostingEnvironment.IsDevelopment()) { options.FileProviders.Add(new DeveloperViewFileProvider()); } loader.GetPluginAssemblies().Each(assembly => { var reference = MetadataReference.CreateFromFile(assembly.Location); options.AdditionalCompilationReferences.Add(reference); }); //options.CompilationCallback = context => //{ // var reference = MetadataReference.CreateFromFile(@"D:\Projects\ZKEACMS.Core\src\TestAss\bin\Debug\netstandard1.6\TestAss.dll"); // context.Compilation = context.Compilation.AddReferences(reference); //}; loader.GetPlugins().Where(m => m.Enable && m.ID.IsNotNullAndWhiteSpace()).Each(m => { var directory = new DirectoryInfo(m.RelativePath); if (hostingEnvironment.IsDevelopment()) { options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension); } else { options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension); } }); options.ViewLocationFormats.Add("/Views/{0}" + RazorViewEngine.ViewExtension); }
/// <summary> /// Loads plugins. /// </summary> protected override async Task RefreshAsync(bool force, CancellationToken token) { if (Plugins == null) { Plugins = _pluginLoader.GetPlugins().Where(p => p.IsVisible).ToArray(); if (_request.PluginName == null) { ServerConfiguration config; try { config = await _serverAccess.LoadConfigurationAsync(); _settings.Configuration = config; } catch { // something went wrong during the fetch, use the saved config } } else { var plugin = Plugins.FirstOrDefault(p => p.Id.Equals(_request.PluginName, StringComparison.OrdinalIgnoreCase)); if (plugin != null) { _navigationService.RemoveCurrentFromBackStack(); OpenPlugin(plugin); } } // Filter the plugins anyway, but let the user go to a plugin // from an outside source even if it's filtered out FilterPlugins(); } }
public static void Initialize( IPluginLoader pluginLoader, INavigationService navigationService ) { DataViewModelOptions.AddNetworkExceptionType( typeof( WebException ) ); DataViewModelOptions.AddNetworkExceptionType( typeof( OperationCanceledException ) ); Container.Bind<IMainSettings, MainSettings>(); Container.Bind<IServerAccess, ServerAccess>(); foreach ( var plugin in pluginLoader.GetPlugins() ) { plugin.Initialize( navigationService ); } // SecureRequestHandler depends on the auth plugin, so it must be initialized after it Container.Bind<ISecureRequestHandler, SecureRequestHandler>(); }
public static void Initialize(IPluginLoader pluginLoader, INavigationService navigationService) { DataViewModelOptions.AddNetworkExceptionType(typeof(WebException)); DataViewModelOptions.AddNetworkExceptionType(typeof(OperationCanceledException)); Container.Bind <IMainSettings, MainSettings>(); Container.Bind <IServerAccess, ServerAccess>(); foreach (var plugin in pluginLoader.GetPlugins()) { plugin.Initialize(navigationService); } // SecureRequestHandler depends on the auth plugin, so it must be initialized after it Container.Bind <ISecureRequestHandler, SecureRequestHandler>(); }
/// <summary> /// Creates a new App. /// </summary> public App() { InitializeComponent(); // Services _navigationService = Container.Bind <IWindowsPhoneNavigationService, WindowsPhoneNavigationService>(); Container.Bind <ISettingsStorage, WindowsPhoneSettingsStorage>(); Container.Bind <IHttpClient, HttpClient>(); Container.Bind <IBrowserService, BrowserService>(); Container.Bind <IEmailService, EmailService>(); Container.Bind <IPhoneService, PhoneService>(); Container.Bind <ILocationService, LocationService>(); Container.Bind <ITileService, TileService>(); Container.Bind <IDeviceIdentifier, DeviceIdentifier>(); Container.Bind <IRatingService, RatingService>(); Container.Bind <IDataCache, WindowsPhoneDataCache>(); Container.Bind <ICredentialsStorage, WindowsPhoneCredentialsStorage>(); _pluginLoader = Container.Bind <IPluginLoader, PluginLoader>(); _logger = Container.Bind <Logger, GoogleAnalyticsLogger>(); // Common part of plugins & services initialization AppInitializer.Initialize(_pluginLoader, _navigationService); // View-ViewModels bindings for Main _navigationService.Bind <MainViewModel>("/Views/MainView.xaml"); _navigationService.Bind <SettingsViewModel>("/Views/SettingsView.xaml"); _navigationService.Bind <AboutViewModel>("/Views/AboutView.xaml"); // URI mapping LauncherEx.RegisterProtocol(PocketCampusProtocol, NavigateToCustomUri); // WP-specific part of plugin initialization _plugins = _pluginLoader.GetPlugins().Cast <IWindowsPhonePlugin>().ToArray(); foreach (var plugin in _plugins) { plugin.Initialize(_navigationService); } // Debug settings DebugSettings.UserIdleDetectionMode = IdleDetectionMode.Disabled; // Theme initialization ThemeManager.OverrideOptions = ThemeManagerOverrideOptions.ApplicationBarColors; ThemeManager.ToLightTheme(); ThemeManager.SetAccentColor((Color)Resources["AppAccentColor"]); }
public SectionGroup GenerateContentFromConfig(SectionGroup group) { string configFile = _pluginLoader.GetPlugins().First(m => m.ID == SectionPlug.PluginID).RelativePath + @"\Thumbnail\{0}.xml".FormatWith(group.PartialView); List <SectionContent> contents = new List <SectionContent>(); if (File.Exists(configFile)) { XmlDocument doc = new XmlDocument(); FileStream fileStream = new FileStream(configFile, FileMode.Open); doc.Load(fileStream); var nodes = doc.SelectNodes("/required/item"); foreach (XmlNode item in nodes) { var attr = item.Attributes["type"]; if (attr != null && attr.Value.IsNotNullAndWhiteSpace()) { try { if (SectionPlug.ContentTypes.ContainsKey(attr.Value)) { var content = Activator.CreateInstance(SectionPlug.ContentTypes[attr.Value]) as SectionContent; var properties = item.SelectNodes("property"); foreach (XmlNode property in properties) { var name = property.Attributes["name"]; if (name != null && name.Value.IsNotNullAndWhiteSpace() && property.InnerText.IsNotNullAndWhiteSpace()) { ClassAction.SetObjPropertyValue(content, name.Value, property.InnerText); } } content.SectionGroupId = group.ID; content.SectionWidgetId = group.SectionWidgetId; contents.Add(content); } } catch (Exception ex) { Logger.Error(ex); } } } } group.SectionContents = contents; return(group); }
/// <summary> /// Creates a new App. /// </summary> public App() { InitializeComponent(); // Services _navigationService = Container.Bind<IWindowsPhoneNavigationService, WindowsPhoneNavigationService>(); Container.Bind<ISettingsStorage, WindowsPhoneSettingsStorage>(); Container.Bind<IHttpClient, HttpClient>(); Container.Bind<IBrowserService, BrowserService>(); Container.Bind<IEmailService, EmailService>(); Container.Bind<IPhoneService, PhoneService>(); Container.Bind<ILocationService, LocationService>(); Container.Bind<ITileService, TileService>(); Container.Bind<IDeviceIdentifier, DeviceIdentifier>(); Container.Bind<IRatingService, RatingService>(); Container.Bind<IDataCache, WindowsPhoneDataCache>(); Container.Bind<ICredentialsStorage, WindowsPhoneCredentialsStorage>(); _pluginLoader = Container.Bind<IPluginLoader, PluginLoader>(); _logger = Container.Bind<Logger, GoogleAnalyticsLogger>(); // Common part of plugins & services initialization AppInitializer.Initialize( _pluginLoader, _navigationService ); // View-ViewModels bindings for Main _navigationService.Bind<MainViewModel>( "/Views/MainView.xaml" ); _navigationService.Bind<SettingsViewModel>( "/Views/SettingsView.xaml" ); _navigationService.Bind<AboutViewModel>( "/Views/AboutView.xaml" ); // URI mapping LauncherEx.RegisterProtocol( PocketCampusProtocol, NavigateToCustomUri ); // WP-specific part of plugin initialization _plugins = _pluginLoader.GetPlugins().Cast<IWindowsPhonePlugin>().ToArray(); foreach ( var plugin in _plugins ) { plugin.Initialize( _navigationService ); } // Debug settings DebugSettings.UserIdleDetectionMode = IdleDetectionMode.Disabled; // Theme initialization ThemeManager.OverrideOptions = ThemeManagerOverrideOptions.ApplicationBarColors; ThemeManager.ToLightTheme(); ThemeManager.SetAccentColor( (Color) Resources["AppAccentColor"] ); }
private void Initialize() { CustomXamlResourceLoader.Current = new LocalizingResourceLoader(); LocalizationHelper.Initialize(); DataViewModelOptions.AddNetworkExceptionType( typeof( WebException ) ); DataViewModelOptions.AddNetworkExceptionType( typeof( OperationCanceledException ) ); // ThinMVVM types Container.Bind<ISettingsStorage, WindowsRuntimeSettingsStorage>(); Container.Bind<IDataCache, WindowsRuntimeDataCache>(); _navigationService = Container.Bind<IWindowsRuntimeNavigationService, WindowsRuntimeNavigationService>(); // Basic types _pluginLoader = Container.Bind<IPluginLoader, PluginLoader>(); _settings = Container.Bind<IMainSettings, MainSettings>(); Container.Bind<IHttpClient, HttpClient>(); Container.Bind<IHttpHeaders, HttpHeaders>(); Container.Bind<IBrowserService, BrowserService>(); Container.Bind<IEmailService, EmailService>(); Container.Bind<IPhoneService, PhoneService>(); Container.Bind<ILocationService, LocationService>(); Container.Bind<ITileService, TileService>(); Container.Bind<IDeviceIdentifier, DeviceIdentifier>(); Container.Bind<IAppRatingService, AppRatingService>(); Container.Bind<ICredentialsStorage, CredentialsStorage>(); // Logger Container.Bind<Logger, GoogleAnalyticsLogger>().Start(); // Types dependent on one of the above types _serverAccess = Container.Bind<IServerAccess, ServerAccess>(); _protocolHandler = new ProtocolHandler( _pluginLoader, _navigationService ); // Views from Main _navigationService.Bind<AboutViewModel, AboutView>(); _navigationService.Bind<MainViewModel, MainView>(); _navigationService.Bind<SettingsViewModel, SettingsView>(); // Register pocketcampus:// URIs to avoid going to the system and back when they're used inside of the app LauncherEx.RegisterProtocol( ProtocolHandler.PocketCampusProtocol, _protocolHandler.NavigateToCustomUri ); // Initialize plugins, both their common part and their WinRT part foreach ( var plugin in _pluginLoader.GetPlugins().Cast<IWindowsRuntimePlugin>() ) { plugin.Initialize( (INavigationService) _navigationService ); plugin.Initialize( _navigationService ); } // Handle the back button, since Windows Phone doesn't do it for us any more (unlike WP8 "Silverlight") HardwareButtons.BackPressed += ( _, e ) => { e.Handled = true; _navigationService.NavigateBack(); }; }
public IActionResult Index() { return(View(_pluginLoader.GetPlugins())); }
public ProtocolHandler( IPluginLoader pluginLoader, INavigationService navigationService ) { _plugins = pluginLoader.GetPlugins(); _navigationService = navigationService; }