private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); OpenFileDialog ofd = new OpenFileDialog() { Filter = "Musix Plugins|*.MusixPlugin" }; if (ofd.ShowDialog() == DialogResult.OK) { PackedPlugin pl = PackedPlugin.LoadFrom(File.OpenRead(ofd.FileName)); Console.WriteLine($"Name: {pl.PluginName}"); Console.WriteLine($"Author: {pl.AuthorName}"); Console.WriteLine($"Desc: {pl.PluginDescription}"); Console.WriteLine($"Desc: {string.Join(", ", pl.PluginTags)}"); Console.WriteLine($"Website: {pl.WebsiteURL}"); Console.WriteLine($"Plats: {pl.PlatformCompatability.Platforms.Count}"); pl.PlatformCompatability.Platforms.ForEach(x => Console.WriteLine($"Plat: {x.PlatformName} [{x.MinVersion}]")); pl.LoadDependancies(); } Application.Run(new Packer()); }
private void MainWindow_Load(object sender, EventArgs e) { Instance = this; DateTime Started = DateTime.Now; FileInfo AppBaseInfo = new FileInfo(Application.ExecutablePath); Environment.CurrentDirectory = AppBaseInfo.DirectoryName; ConfigManager.Init(); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; CheckFolders(); FormClosing += MainWindow_FormClosing; DateTime PStarted = DateTime.Now; foreach (string PluginFile in Directory.GetFiles("Plugins", "*.dll")) { FileInfo info = new FileInfo(PluginFile); try { string SName = info.Name.Substring(0, info.Name.Length - info.Extension.Length); Console.WriteLine($">{SName}"); Console.WriteLine($"Loading plugin {SName}..."); List <string> Deps = new List <string>(); if (Directory.Exists(Path.Combine("Plugins", SName))) { foreach (string Dependancy in Directory.GetFiles(Path.Combine("Plugins", SName), "*.dll")) { Console.WriteLine($">{Dependancy}"); Deps.Add(Dependancy); } } Console.WriteLine($"Discovered {Deps.Count} dependancies"); Console.WriteLine($"Loading {Deps.Count} dependancies for plugin {info.Name}..."); foreach (string asm in Deps) { Assembly asmb = Assembly.LoadFrom(asm); if (!PluginDependancies.ContainsKey(asmb.FullName)) { PluginDependancies.Add(asmb.FullName, asmb); AppDomain.CurrentDomain.Load(File.ReadAllBytes(asm)); } } Console.WriteLine($"Loaded {Deps.Count} for plugin {SName}"); Assembly Plugin = Assembly.LoadFrom(PluginFile); foreach (Type t in Plugin.GetTypes()) { if (typeof(IMusixPlugin).IsAssignableFrom(t)) { Console.WriteLine($"Initializing plugin {info.Name}..."); IMusixPlugin entryPoint = ((IMusixPlugin)Activator.CreateInstance(t)); entryPoint.Load(); Plugins.Add(entryPoint.Name, entryPoint); Console.WriteLine($"Initialized plugin {entryPoint.Name}"); } } } catch (Exception ex) { Console.WriteLine($"Failed to load plugin {info.Name}; {ex.Message}"); Console.WriteLine(ex.Message); throw; } } Console.WriteLine("[PluginLoader] loading packed plugins"); foreach (string PackedPluginFile in Directory.GetFiles("Plugins", "*.mxpl").Concat(Directory.GetFiles("Plugins", "*.musixplugin"))) { PackedPlugin plugin = PackedPlugin.LoadFrom(File.OpenRead(PackedPluginFile)); Console.WriteLine($"Loading packed plugin: {plugin.PluginName} by {plugin.AuthorName}"); foreach (Assembly LoadedDep in plugin.LoadDependancies()) { if (!PluginDependancies.ContainsKey(LoadedDep.FullName)) { PluginDependancies.Add(LoadedDep.FullName, LoadedDep); } } Assembly[] Deps = plugin.LoadDependancies(); Console.WriteLine($"Loaded {Deps.Length} dependencies for plugin {plugin.PluginName}"); Assembly Plugin = plugin.LoadPlugin(); foreach (Type t in Plugin.GetTypes()) { if (typeof(IMusixPlugin).IsAssignableFrom(t)) { Console.WriteLine($"Initializing plugin {plugin.PluginName}..."); IMusixPlugin entryPoint = ((IMusixPlugin)Activator.CreateInstance(t)); entryPoint.Load(); Plugins.Add(entryPoint.Name, entryPoint); Console.WriteLine($"Initialized plugin {entryPoint.Name}"); } } } Console.WriteLine($"[Plugins Loaded] took {Math.Round(DateTime.Now.Subtract(PStarted).TotalMilliseconds),2} millisecond/s."); Client = new MusixClient("955b354ccd0e4270b6ad97f8b4003d9a", "5a008b85c33b499da7857fbdf05f08ef", "ImageCache", "AudioCache"); Client.OnClientReady += Client_OnClientReady; Client.StartClient(); AcceptButton = new Button(); Activated += MainWindow_Activated; Deactivate += MainWindow_Deactivate; ((Button)AcceptButton).Click += BtnAccept_Click; MenuItems.Add(typeof(SearchMenuItem), new SearchMenuItem()); MenuItems.Add(typeof(DownloadsMenuItem), new DownloadsMenuItem()); MenuItems.Add(typeof(SettingsMenuItem), new SettingsMenuItem()); MDSSideBar.AddItem(MenuItems[typeof(SearchMenuItem)]); MDSSideBar.AddItem(MenuItems[typeof(DownloadsMenuItem)]); MDSSideBar.AddItem(MenuItems[typeof(SettingsMenuItem)]); foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { foreach (Type t in asm.GetTypes().Where(x => typeof(IMusixMenuItem).IsAssignableFrom(x) && !x.IsInterface)) { if (!MenuItems.ContainsKey(t)) { IMusixMenuItem newItem = (IMusixMenuItem)Activator.CreateInstance(t); MDSSideBar.AddItem(newItem); MenuItems.Add(t, newItem); } } } foreach (var item in MenuItems) { if (Attribute.GetCustomAttribute(item.Value.GetType(), typeof(AutoInitialize)) != null) { Control ct = item.Value.GetMenuControl(); ct.Visible = false; ct.Dock = DockStyle.Fill; if (!PNContent.Controls.Contains(ct)) { PNContent.Controls.Add(ct); } } } MDSSideBar.OnSelectionChanged += MDSSideBar_OnSelectionChanged; MDSSideBar.SelectItemAtIndex(0); SendStyle(EStyle.Blue); DateTime Finished = DateTime.Now; Console.WriteLine($"[Initialized] took {Math.Round(Finished.Subtract(Started).TotalMilliseconds),3} millisecond/s."); }