Change Skin -> Theme
To better align with commonly used terminology in industry renamed all references from Skin -> Theme.
This commit is contained in:
		| @ -3,8 +3,8 @@ using Oqtane.Models; | ||||
| 
 | ||||
| namespace Oqtane.Repository | ||||
| { | ||||
|     public interface ISkinRepository | ||||
|     public interface IThemeRepository | ||||
|     { | ||||
|         IEnumerable<Skin> GetSkins(); | ||||
|         IEnumerable<Theme> GetThemes(); | ||||
|     } | ||||
| } | ||||
| @ -1,123 +0,0 @@ | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using Oqtane.Models; | ||||
| using System.Reflection; | ||||
| using System; | ||||
| using Oqtane.Skins; | ||||
|  | ||||
| namespace Oqtane.Repository | ||||
| { | ||||
|     public class SkinRepository : ISkinRepository | ||||
|     { | ||||
|         private readonly List<Skin> skins; | ||||
|  | ||||
|         public SkinRepository() | ||||
|         { | ||||
|             skins = LoadSkins(); | ||||
|         } | ||||
|  | ||||
|         private List<Skin> LoadSkins() | ||||
|         { | ||||
|             List<Skin> skins = new List<Skin>(); | ||||
|  | ||||
|             // iterate through Oqtane skin assemblies | ||||
|             foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) | ||||
|             { | ||||
|                 if (assembly.FullName.StartsWith("Oqtane.Client") || assembly.FullName.StartsWith("Oqtane.Skin.")) | ||||
|                 { | ||||
|                     skins = LoadSkinsFromAssembly(skins, assembly); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return skins; | ||||
|         } | ||||
|  | ||||
|         private List<Skin> LoadSkinsFromAssembly(List<Skin> skins, Assembly assembly) | ||||
|         { | ||||
|             Skin skin; | ||||
|             Type[] skincontroltypes = assembly.GetTypes().Where(item => item.GetInterfaces().Contains(typeof(ISkinControl))).ToArray(); | ||||
|             foreach (Type skincontroltype in skincontroltypes) | ||||
|             { | ||||
|                 if (skincontroltype.Name != "SkinBase") | ||||
|                 { | ||||
|                     string[] typename = skincontroltype.AssemblyQualifiedName.Split(',').Select(item => item.Trim()).ToList().ToArray(); | ||||
|                     string[] segments = typename[0].Split('.'); | ||||
|                     Array.Resize(ref segments, segments.Length - 1); | ||||
|                     string Namespace = string.Join(".", segments); | ||||
|  | ||||
|                     int index = skins.FindIndex(item => item.SkinName == Namespace); | ||||
|                     if (index == -1) | ||||
|                     { | ||||
|                         /// determine if this skin implements ISkin | ||||
|                         Type skintype = assembly.GetTypes() | ||||
|                             .Where(item => item.Namespace.StartsWith(Namespace)) | ||||
|                             .Where(item => item.GetInterfaces().Contains(typeof(ISkin))).FirstOrDefault(); | ||||
|                         if (skintype != null) | ||||
|                         { | ||||
|                             var skinobject = Activator.CreateInstance(skintype); | ||||
|                             skin = new Skin | ||||
|                             { | ||||
|                                 SkinName = Namespace, | ||||
|                                 Name = (string)skintype.GetProperty("Name").GetValue(skinobject), | ||||
|                                 Version = (string)skintype.GetProperty("Version").GetValue(skinobject), | ||||
|                                 Owner = (string)skintype.GetProperty("Owner").GetValue(skinobject), | ||||
|                                 Url = (string)skintype.GetProperty("Url").GetValue(skinobject), | ||||
|                                 Contact = (string)skintype.GetProperty("Contact").GetValue(skinobject), | ||||
|                                 License = (string)skintype.GetProperty("License").GetValue(skinobject), | ||||
|                                 Dependencies = (string)skintype.GetProperty("Dependencies").GetValue(skinobject), | ||||
|                                 SkinControls = "", | ||||
|                                 PaneLayouts = "", | ||||
|                                 ContainerControls = "", | ||||
|                                 AssemblyName = assembly.FullName.Split(",")[0] | ||||
|                             }; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             skin = new Skin | ||||
|                             { | ||||
|                                 SkinName = Namespace, | ||||
|                                 Name = skincontroltype.Name, | ||||
|                                 Version = new Version(1, 0, 0).ToString(), | ||||
|                                 Owner = "", | ||||
|                                 Url = "", | ||||
|                                 Contact = "", | ||||
|                                 License = "", | ||||
|                                 Dependencies = "", | ||||
|                                 SkinControls = "", | ||||
|                                 PaneLayouts = "", | ||||
|                                 ContainerControls = "", | ||||
|                                 AssemblyName = assembly.FullName.Split(",")[0] | ||||
|                             }; | ||||
|                         } | ||||
|                         skins.Add(skin); | ||||
|                         index = skins.FindIndex(item => item.SkinName == Namespace); | ||||
|                     } | ||||
|                     skin = skins[index]; | ||||
|                     // layouts and skins | ||||
|                     if (skincontroltype.FullName.EndsWith("Layout")) | ||||
|                     { | ||||
|                         skin.PaneLayouts += (skincontroltype.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         skin.SkinControls += (skincontroltype.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     // containers | ||||
|                     Type[] containertypes = assembly.GetTypes().Where(item => item.Namespace.StartsWith(Namespace)).Where(item => item.GetInterfaces().Contains(typeof(IContainerControl))).ToArray(); | ||||
|                     foreach (Type containertype in containertypes) | ||||
|                     { | ||||
|                         skin.ContainerControls += (containertype.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     skins[index] = skin; | ||||
|                 } | ||||
|             } | ||||
|             return skins; | ||||
|         } | ||||
|  | ||||
|         public IEnumerable<Skin> GetSkins() | ||||
|         { | ||||
|             return skins; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										124
									
								
								Oqtane.Server/Repository/ThemeRepository.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								Oqtane.Server/Repository/ThemeRepository.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,124 @@ | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using Oqtane.Models; | ||||
| using System.Reflection; | ||||
| using System; | ||||
| using Oqtane.Themes; | ||||
|  | ||||
| namespace Oqtane.Repository | ||||
| { | ||||
|     public class ThemeRepository : IThemeRepository | ||||
|     { | ||||
|         private readonly List<Theme> themes; | ||||
|  | ||||
|         public ThemeRepository() | ||||
|         { | ||||
|             themes = LoadThemes(); | ||||
|         } | ||||
|  | ||||
|         private List<Theme> LoadThemes() | ||||
|         { | ||||
|             List<Theme> themes = new List<Theme>(); | ||||
|  | ||||
|             // iterate through Oqtane theme assemblies | ||||
|             // TODO: Remove restriction on assembly | ||||
|             foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) | ||||
|             { | ||||
|                 if (assembly.FullName.StartsWith("Oqtane.Client") || assembly.FullName.StartsWith("Oqtane.Theme.")) | ||||
|                 { | ||||
|                     themes = LoadThemesFromAssembly(themes, assembly); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return themes; | ||||
|         } | ||||
|  | ||||
|         private List<Theme> LoadThemesFromAssembly(List<Theme> themes, Assembly assembly) | ||||
|         { | ||||
|             Theme theme; | ||||
|             Type[] themeControlTypes = assembly.GetTypes().Where(item => item.GetInterfaces().Contains(typeof(IThemeControl))).ToArray(); | ||||
|             foreach (Type themeControlType in themeControlTypes) | ||||
|             { | ||||
|                 if (themeControlType.Name != "ThemeBase") | ||||
|                 { | ||||
|                     string[] typename = themeControlType.AssemblyQualifiedName.Split(',').Select(item => item.Trim()).ToList().ToArray(); | ||||
|                     string[] segments = typename[0].Split('.'); | ||||
|                     Array.Resize(ref segments, segments.Length - 1); | ||||
|                     string Namespace = string.Join(".", segments); | ||||
|  | ||||
|                     int index = themes.FindIndex(item => item.ThemeName == Namespace); | ||||
|                     if (index == -1) | ||||
|                     { | ||||
|                         /// determine if this theme implements ITheme | ||||
|                         Type themeType = assembly.GetTypes() | ||||
|                             .Where(item => item.Namespace.StartsWith(Namespace)) | ||||
|                             .Where(item => item.GetInterfaces().Contains(typeof(ITheme))).FirstOrDefault(); | ||||
|                         if (themeType != null) | ||||
|                         { | ||||
|                             var themeObject = Activator.CreateInstance(themeType); | ||||
|                             theme = new Theme | ||||
|                             { | ||||
|                                 ThemeName = Namespace, | ||||
|                                 Name = (string)themeType.GetProperty("Name").GetValue(themeObject), | ||||
|                                 Version = (string)themeType.GetProperty("Version").GetValue(themeObject), | ||||
|                                 Owner = (string)themeType.GetProperty("Owner").GetValue(themeObject), | ||||
|                                 Url = (string)themeType.GetProperty("Url").GetValue(themeObject), | ||||
|                                 Contact = (string)themeType.GetProperty("Contact").GetValue(themeObject), | ||||
|                                 License = (string)themeType.GetProperty("License").GetValue(themeObject), | ||||
|                                 Dependencies = (string)themeType.GetProperty("Dependencies").GetValue(themeObject), | ||||
|                                 ThemeControls = "", | ||||
|                                 PaneLayouts = "", | ||||
|                                 ContainerControls = "", | ||||
|                                 AssemblyName = assembly.FullName.Split(",")[0] | ||||
|                             }; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             theme = new Theme | ||||
|                             { | ||||
|                                 ThemeName = Namespace, | ||||
|                                 Name = themeControlType.Name, | ||||
|                                 Version = new Version(1, 0, 0).ToString(), | ||||
|                                 Owner = "", | ||||
|                                 Url = "", | ||||
|                                 Contact = "", | ||||
|                                 License = "", | ||||
|                                 Dependencies = "", | ||||
|                                 ThemeControls = "", | ||||
|                                 PaneLayouts = "", | ||||
|                                 ContainerControls = "", | ||||
|                                 AssemblyName = assembly.FullName.Split(",")[0] | ||||
|                             }; | ||||
|                         } | ||||
|                         themes.Add(theme); | ||||
|                         index = themes.FindIndex(item => item.ThemeName == Namespace); | ||||
|                     } | ||||
|                     theme = themes[index]; | ||||
|                     // layouts and themes | ||||
|                     if (themeControlType.FullName.EndsWith("Layout")) | ||||
|                     { | ||||
|                         theme.PaneLayouts += (themeControlType.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         theme.ThemeControls += (themeControlType.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     // containers | ||||
|                     Type[] containertypes = assembly.GetTypes().Where(item => item.Namespace.StartsWith(Namespace)).Where(item => item.GetInterfaces().Contains(typeof(IContainerControl))).ToArray(); | ||||
|                     foreach (Type containertype in containertypes) | ||||
|                     { | ||||
|                         theme.ContainerControls += (containertype.FullName + ", " + typename[1] + ";"); | ||||
|                     } | ||||
|                     themes[index] = theme; | ||||
|                 } | ||||
|             } | ||||
|             return themes; | ||||
|         } | ||||
|  | ||||
|         public IEnumerable<Theme> GetThemes() | ||||
|         { | ||||
|             return themes; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Mitchel Sellers
					Mitchel Sellers