/****************************************************************************** // RomRepoMgr - ROM repository manager // ---------------------------------------------------------------------------- // // Author(s) : Natalia Portillo // // --[ License ] -------------------------------------------------------------- // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // ---------------------------------------------------------------------------- // Copyright © 2020 Natalia Portillo *******************************************************************************/ using System; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Reactive; using System.Reflection; using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.DotNet.PlatformAbstractions; using ReactiveUI; using RomRepoMgr.Models; using RomRepoMgr.Views; namespace RomRepoMgr.ViewModels { public sealed class AboutViewModel : ViewModelBase { readonly About _view; string _versionText; public AboutViewModel(About view) { _view = view; VersionText = (Attribute.GetCustomAttribute(typeof(App).Assembly, typeof(AssemblyInformationalVersionAttribute)) as AssemblyInformationalVersionAttribute)?.InformationalVersion; WebsiteCommand = ReactiveCommand.Create(ExecuteWebsiteCommand); LicenseCommand = ReactiveCommand.Create(ExecuteLicenseCommand); CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand); Assemblies = new ObservableCollection(); // TODO: They do not load in time Task.Run(() => { foreach(Assembly assembly in AppDomain.CurrentDomain.GetAssemblies().OrderBy(a => a.FullName)) { string name = assembly.GetName().Name; string version = (Attribute.GetCustomAttribute(assembly, typeof(AssemblyInformationalVersionAttribute)) as AssemblyInformationalVersionAttribute)?.InformationalVersion; if(name is null || version is null) continue; Assemblies.Add(new AssemblyModel { Name = name, Version = version }); } }); } [NotNull] public string AboutLabel => "About"; [NotNull] public string LibrariesLabel => "Libraries"; [NotNull] public string AuthorsLabel => "Authors"; [NotNull] public string Title => "About ROM Repository Manager"; [NotNull] public string SoftwareName => "RomRepoMgr"; [NotNull] public string SuiteName => "ROM Repository Manager"; [NotNull] public string Copyright => "© 2020 Natalia Portillo"; [NotNull] public string Website => "https://www.claunia.com"; [NotNull] public string License => "License: GNU General Public License Version 3"; [NotNull] public string CloseLabel => "Close"; [NotNull] public string AssembliesLibraryText => "Library"; [NotNull] public string AssembliesVersionText => "Version"; [NotNull] public string Authors => @"Developers: Natalia Portillo "; public ReactiveCommand WebsiteCommand { get; } public ReactiveCommand LicenseCommand { get; } public ReactiveCommand CloseCommand { get; } public ObservableCollection Assemblies { get; } public string VersionText { get => _versionText; set => this.RaiseAndSetIfChanged(ref _versionText, value); } void ExecuteWebsiteCommand() { var process = new Process { StartInfo = { UseShellExecute = false, CreateNoWindow = true, Arguments = "https://www.claunia.com" } }; switch(RuntimeEnvironment.OperatingSystemPlatform) { case Platform.Unknown: return; case Platform.Windows: process.StartInfo.FileName = "cmd"; process.StartInfo.Arguments = $"/c start {process.StartInfo.Arguments.Replace("&", "^&")}"; break; case Platform.FreeBSD: case Platform.Linux: process.StartInfo.FileName = "xdg-open"; break; case Platform.Darwin: process.StartInfo.FileName = "open"; break; default: if(Debugger.IsAttached) throw new ArgumentOutOfRangeException(); return; } process.Start(); } void ExecuteLicenseCommand() { /* var dialog = new LicenseDialog(); dialog.DataContext = new LicenseViewModel(dialog); dialog.ShowDialog(_view);*/ } void ExecuteCloseCommand() => _view.Close(); } }