mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-06-18 05:10:09 +10:00
Update
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace DataUtils
|
||||
{
|
||||
internal static class VisualElementsStore
|
||||
{
|
||||
// Publicly accessible instances for internal use
|
||||
public static readonly VisualElementManifest Vemanifest;
|
||||
public static readonly FileResXmlDoc ScaleResources;
|
||||
|
||||
static VisualElementsStore ()
|
||||
{
|
||||
try
|
||||
{
|
||||
string programRoot = GetProgramRootDirectory ();
|
||||
|
||||
// manifest path: VisualElementsManifest.xml in program root
|
||||
string manifestPath = Path.Combine (programRoot, "VisualElementsManifest.xml");
|
||||
|
||||
// scale xml candidate: VisualElements\scale.xml
|
||||
string scaleCandidate = Path.Combine (programRoot, "VisualElements", "scale.xml");
|
||||
|
||||
// If scale.xml exists use it, otherwise fall back to VisualElementsManifest.xml
|
||||
string scalePath = File.Exists (scaleCandidate) ? scaleCandidate : manifestPath;
|
||||
|
||||
// Initialize (constructors will attempt to load)
|
||||
Vemanifest = new VisualElementManifest ();
|
||||
if (File.Exists (manifestPath))
|
||||
{
|
||||
// Use Create to ensure we reflect true load status
|
||||
Vemanifest.Create (manifestPath);
|
||||
}
|
||||
|
||||
FileResXmlDoc tmp = null;
|
||||
if (File.Exists (scalePath))
|
||||
{
|
||||
tmp = new FileResXmlDoc (scalePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if both missing, try manifest as last resort (ResXmlDoc handles manifest-style layout)
|
||||
if (File.Exists (manifestPath))
|
||||
tmp = new FileResXmlDoc (manifestPath);
|
||||
}
|
||||
ScaleResources = tmp;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// swallow exceptions; leave fields null if initialization fails
|
||||
Vemanifest = new VisualElementManifest ();
|
||||
ScaleResources = null;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetProgramRootDirectory ()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Prefer the directory of the executing assembly
|
||||
string codeBase = Assembly.GetExecutingAssembly ().Location;
|
||||
if (!string.IsNullOrEmpty (codeBase))
|
||||
{
|
||||
string dir = Path.GetDirectoryName (codeBase);
|
||||
if (!string.IsNullOrEmpty (dir)) return dir;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
try
|
||||
{
|
||||
return AppDomain.CurrentDomain.BaseDirectory ?? Environment.CurrentDirectory;
|
||||
}
|
||||
catch { }
|
||||
|
||||
return Environment.CurrentDirectory;
|
||||
}
|
||||
}
|
||||
[ComVisible (true)]
|
||||
[ClassInterface (ClassInterfaceType.AutoDual)]
|
||||
public class _I_VisualElement
|
||||
{
|
||||
private string _appid;
|
||||
|
||||
public _I_VisualElement ()
|
||||
{
|
||||
_appid = "App";
|
||||
}
|
||||
|
||||
public _I_VisualElement (string appid)
|
||||
{
|
||||
_appid = string.IsNullOrEmpty (appid) ? "App" : appid;
|
||||
}
|
||||
|
||||
public string Id
|
||||
{
|
||||
get { return _appid; }
|
||||
set { _appid = string.IsNullOrEmpty (value) ? "App" : value; }
|
||||
}
|
||||
|
||||
public string DisplayName
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.DisplayName (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string Logo
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.Logo (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string SmallLogo
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SmallLogo (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string ForegroundText
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VisualElementsStore.Vemanifest == null) return "dark";
|
||||
var t = VisualElementsStore.Vemanifest.ForegroundText (_appid);
|
||||
return t == ManifestTextColor.Light ? "light" : "dark";
|
||||
}
|
||||
}
|
||||
|
||||
public string Lnk32x32Logo
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.Lnk32x32Logo (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string ItemDisplayLogo
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.ItemDisplayLogo (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public bool ShowNameOnTile
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.ShowNameOnTile (_appid) : false; }
|
||||
}
|
||||
|
||||
public string BackgroundColor
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.BackgroundColor (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string SplashScreenImage
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenImage (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string SplashScreenBackgroundColor
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenBackgroundColor (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
public string SplashScreenBackgroundColorDarkMode
|
||||
{
|
||||
get { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenBackgroundColorDarkMode (_appid) : string.Empty; }
|
||||
}
|
||||
|
||||
// Indexer for script-friendly access: v["displayname"]
|
||||
public object this [string propertyName]
|
||||
{
|
||||
get { return Get (propertyName); }
|
||||
}
|
||||
|
||||
// Generic getter by property name (case-insensitive)
|
||||
public object Get (string propertyName)
|
||||
{
|
||||
if (string.IsNullOrEmpty (propertyName)) return string.Empty;
|
||||
string key = propertyName.Trim ().ToLowerInvariant ();
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case "displayname": return DisplayName;
|
||||
case "logo": return Logo;
|
||||
case "smalllogo": return SmallLogo;
|
||||
case "foregroundtext": return ForegroundText;
|
||||
case "lnk32x32logo": return Lnk32x32Logo;
|
||||
case "itemdisplaylogo": return ItemDisplayLogo;
|
||||
case "shownameontile": return ShowNameOnTile;
|
||||
case "backgroundcolor": return BackgroundColor;
|
||||
case "splashscreenimage": return SplashScreenImage;
|
||||
case "splashscreenbackgroundcolor": return SplashScreenBackgroundColor;
|
||||
case "splashscreenbackgroundcolordarkmode": return SplashScreenBackgroundColorDarkMode;
|
||||
default: return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
[ComVisible (true)]
|
||||
[ClassInterface (ClassInterfaceType.AutoDual)]
|
||||
public class _I_VisualElements
|
||||
{
|
||||
public string [] GetIds ()
|
||||
{
|
||||
try
|
||||
{
|
||||
var list = VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.AppIds () : new System.Collections.Generic.List<string> () { "App" };
|
||||
return list.ToArray ();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new string [] { "App" };
|
||||
}
|
||||
}
|
||||
|
||||
public string GetIdsToJson ()
|
||||
{
|
||||
var ids = GetIds ();
|
||||
// Use Utilities.StringArrayToJson (which uses Newtonsoft.Json if available)
|
||||
try
|
||||
{
|
||||
return Utilities.StringArrayToJson (ids);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// fallback
|
||||
return Newtonsoft.Json.JsonConvert.SerializeObject (ids);
|
||||
}
|
||||
}
|
||||
|
||||
public _I_VisualElement Get (string id)
|
||||
{
|
||||
return new _I_VisualElement (id);
|
||||
}
|
||||
|
||||
public _I_VisualElement this [string id]
|
||||
{
|
||||
get { return Get (id); }
|
||||
}
|
||||
|
||||
// Attribute-style methods
|
||||
public string DisplayName (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.DisplayName (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string Logo (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.Logo (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string SmallLogo (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SmallLogo (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string ForegroundText (string appid)
|
||||
{
|
||||
if (VisualElementsStore.Vemanifest == null) return "dark";
|
||||
var t = VisualElementsStore.Vemanifest.ForegroundText (string.IsNullOrEmpty (appid) ? "App" : appid);
|
||||
return t == ManifestTextColor.Light ? "light" : "dark";
|
||||
}
|
||||
public string Lnk32x32Logo (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.Lnk32x32Logo (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string ItemDisplayLogo (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.ItemDisplayLogo (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public bool ShowNameOnTile (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.ShowNameOnTile (string.IsNullOrEmpty (appid) ? "App" : appid) : false; }
|
||||
public string BackgroundColor (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.BackgroundColor (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string SplashScreenImage (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenImage (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string SplashScreenBackgroundColor (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenBackgroundColor (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
public string SplashScreenBackgroundColorDarkMode (string appid) { return VisualElementsStore.Vemanifest != null ? VisualElementsStore.Vemanifest.SplashScreenBackgroundColorDarkMode (string.IsNullOrEmpty (appid) ? "App" : appid) : string.Empty; }
|
||||
|
||||
// Generic getter by attribute name
|
||||
public object GetValue (string appid, string attributeName)
|
||||
{
|
||||
if (string.IsNullOrEmpty (attributeName)) return string.Empty;
|
||||
string key = attributeName.Trim ().ToLowerInvariant ();
|
||||
switch (key)
|
||||
{
|
||||
case "displayname": return DisplayName (appid);
|
||||
case "logo": return Logo (appid);
|
||||
case "smalllogo": return SmallLogo (appid);
|
||||
case "foregroundtext": return ForegroundText (appid);
|
||||
case "lnk32x32logo": return Lnk32x32Logo (appid);
|
||||
case "itemdisplaylogo": return ItemDisplayLogo (appid);
|
||||
case "shownameontile": return ShowNameOnTile (appid);
|
||||
case "backgroundcolor": return BackgroundColor (appid);
|
||||
case "splashscreenimage": return SplashScreenImage (appid);
|
||||
case "splashscreenbackgroundcolor": return SplashScreenBackgroundColor (appid);
|
||||
case "splashscreenbackgroundcolordarkmode": return SplashScreenBackgroundColorDarkMode (appid);
|
||||
default: return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user