11using System ;
2+ using System . Collections . Generic ;
23using System . Threading . Tasks ;
34using CommunityToolkit . Mvvm . ComponentModel ;
45using CommunityToolkit . Mvvm . Input ;
6+ using RestSharp ;
57
68namespace LLCOM . ViewModels ;
79
@@ -15,26 +17,102 @@ public SettingPageViewModel() {}
1517 public SettingPageViewModel ( Func < Type , ViewModelBase > getService )
1618 {
1719 _getService = getService ;
18- }
1920
20- [ ObservableProperty ] private string _systemInfo =
21- $ "LLCOM: { System . Reflection . Assembly . GetExecutingAssembly ( ) . GetName ( ) . Version } \n \n " +
22- $ "Operating System: { Environment . OSVersion . VersionString } \n " +
23- $ ".Net CLR: { Environment . Version } \n " +
21+ //初始化系统信息
22+ Task . Run ( ( ) =>
23+ {
24+ var packagesInfo = new List < string > ( ) ;
25+ var assemblies = AppDomain . CurrentDomain . GetAssemblies ( ) ;
26+
27+ foreach ( var assembly in assemblies )
28+ {
29+ var name = assembly . GetName ( ) ;
30+ packagesInfo . Add ( $ "{ name . Name } : { name . Version } ") ;
31+ }
32+
33+ SystemInfo =
34+ $ "LLCOM: { Services . Utils . Version } \n " +
35+ $ "OS: { Environment . OSVersion . VersionString } \n " +
36+ $ ".Net CLR: { Environment . Version } \n " +
2437#if debug
25- $ "Debug mode: true\n " +
38+ $ "Debug mode: true\n " +
2639#else
27- $ "Debug mode: false\n " +
40+ $ "Debug mode: false\n " +
2841#endif
29- $"Location: {Environment.CurrentDirectory}\n " +
30- $ "AppData: TODO\n " +
31- $ "Environment: { Environment . GetEnvironmentVariable ( "PATH" ) } ";
42+ $"Location: {Environment.CurrentDirectory}\n " +
43+ $ "AppData: { Services . Utils . AppPath } \n " +
44+ $ "Packages \n { string . Join ( "\n " , packagesInfo ) } \n " +
45+ $ "Environment: { Environment . GetEnvironmentVariable ( "PATH" ) } ";
46+ } ) ;
47+ }
48+
49+
50+ #region About
51+ [ ObservableProperty ] private string _systemInfo = "Loading..." ;
3252
3353 [ RelayCommand ]
3454 private async Task CopySystemInfo ( )
3555 {
56+ if ( SystemInfo . Length < 20 ) //还没加载完
57+ return ;
3658 await Services . Utils . CopyString ( SystemInfo ) ;
3759 }
3860
61+ [ ObservableProperty ]
62+ [ NotifyPropertyChangedFor ( nameof ( HasNewVersion ) , nameof ( NoNewVersion ) ) ]
63+ private bool _hasCheckedUpdate = false ;
64+
65+ public bool HasNewVersion => HasCheckedUpdate && _updateUrl != null ;
66+ public bool NoNewVersion => HasCheckedUpdate && _updateUrl == null ;
67+
68+ private string ? _updateUrl = null ;
69+
70+ [ RelayCommand ]
71+ private async Task CheckUpdate ( )
72+ {
73+ if ( HasCheckedUpdate && _updateUrl != null )
74+ {
75+ Services . Utils . OpenWebLink ( _updateUrl ) ;
76+ return ;
77+ }
78+
79+ var versionNow = Services . Utils . Version ;
80+ //获取https://api.github.com/repos/chenxuuu/llcom/releases/latest的json结果
81+ var client = new RestClient ( "https://api.github.com/repos/chenxuuu/llcom/releases/latest" ) ;
82+ var request = new RestRequest ( ) ;
83+ var response = await client . ExecuteAsync ( request ) ;
84+ if ( ! response . IsSuccessful || response . Content is null )
85+ return ;
86+
87+ var json = System . Text . Json . JsonDocument . Parse ( response . Content ) ;
88+ var version = json . RootElement . GetProperty ( "tag_name" ) . GetString ( ) ;
89+ if ( version == null )
90+ return ;
91+
92+ //判断在线版本是否新于本地版本,按点分割后比较
93+ var isBigger = true ;
94+ if ( version == versionNow )
95+ isBigger = false ;
96+ else
97+ {
98+ var versionNowSplit = versionNow . Split ( '.' ) ;
99+ var versionSplit = version . Split ( '.' ) ;
100+ for ( int i = 0 ; i < versionNowSplit . Length ; i ++ )
101+ {
102+ if ( int . Parse ( versionNowSplit [ i ] ) > int . Parse ( versionSplit [ i ] ) )
103+ {
104+ isBigger = false ;
105+ break ;
106+ }
107+ }
108+ }
109+
110+ //更新信息
111+ if ( isBigger )
112+ _updateUrl = json . RootElement . GetProperty ( "html_url" ) . GetString ( ) ;
113+
114+ HasCheckedUpdate = true ;
115+ }
116+ #endregion
39117
40118}
0 commit comments