@@ -22,15 +22,16 @@ class SteamApi
2222 public SteamApi ( ) => RefreshSettings ( ) ;
2323 public void RefreshSettings ( )
2424 {
25- timer = new System . Timers . Timer ( Program . Settings . AutomaticRefreshMin * 1000 ) ;
25+ timer = new System . Timers . Timer ( Program . Settings . AutomaticRefreshMin * 60 * 1000 ) ;
2626 timer . Elapsed += new System . Timers . ElapsedEventHandler ( OnTimedEvent ) ;
2727 timer . Enabled = Program . Settings . AutomaticRefresh ;
2828 }
2929 #endregion
3030
31- public static async Task < SteamPlayerPlayerModel > GetSteamPlayer ( string steamid )
31+ #region Static methods
32+ public static async Task < List < SteamPlayerPlayerModel > > GetSteamPlayers ( List < string > steamids )
3233 {
33- var request = WebRequest . Create ( Program . STEAM_API_PLAYER_URL + Program . Settings . SteamApiKey + "&steamids=" + steamid . ToString ( ) ) ;
34+ var request = WebRequest . Create ( Program . STEAM_API_PLAYER_URL + Program . Settings . SteamApiKey + "&steamids=" + String . Join ( "," , steamids ) ) ;
3435 request . Method = "GET" ;
3536
3637 using var webResponse = request . GetResponse ( ) ;
@@ -40,19 +41,54 @@ public static async Task<SteamPlayerPlayerModel> GetSteamPlayer(string steamid)
4041 var data = await reader . ReadToEndAsync ( ) ;
4142 var model = JsonConvert . DeserializeObject < SteamPlayerModel > ( data ) ;
4243
43- return model . response . players . FirstOrDefault ( ) ;
44+ return model . response . players ;
4445 }
4546
46- #region Executen Steam Web Api
47+ public static async Task < string > GetGameInfo ( double appId )
48+ {
49+ var filename = "./gamelist.json" ;
50+ var reloadList = ! File . Exists ( filename ) || File . GetLastWriteTime ( filename ) . AddDays ( 1 ) < DateTime . Now ;
51+
52+ if ( reloadList )
53+ {
54+ var request = WebRequest . Create ( Program . STEAM_API_GAME_LIST_URL ) ;
55+ request . Method = "GET" ;
56+
57+ using var webResponse = request . GetResponse ( ) ;
58+ using var webStream = webResponse . GetResponseStream ( ) ;
59+
60+ using var reader = new StreamReader ( webStream ) ;
61+ var data = await reader . ReadToEndAsync ( ) ;
62+
63+ using ( StreamWriter sw = File . CreateText ( filename ) )
64+ {
65+ sw . WriteLine ( data ) ;
66+ }
67+ }
68+
69+ var content = File . ReadAllText ( filename ) ;
70+ var apps = JsonConvert . DeserializeObject < GameInfo > ( content ) . applist . apps ;
71+ return apps . FirstOrDefault ( x => x . appid . Equals ( appId ) ) . name ?? "Unknown Gamename" ;
72+ }
73+
74+ public static async Task < SteamFileDetailJsonDetailModel > GetCollectionInfo ( double steamCollectionId )
75+ {
76+ var model = await GetPublishedFileDetails < SteamFileDetailJsonModel > ( new List < double > { steamCollectionId } ) ;
77+ return model . response . publishedfiledetails . FirstOrDefault ( ) ;
78+ }
79+ #endregion
80+
81+ #region Execute Steam Web Api
4782 private async void OnTimedEvent ( object source , System . Timers . ElapsedEventArgs e ) => await UpdateSteamMods ( ) ;
4883 public async Task UpdateSteamMods ( )
4984 {
85+ ConsoleExtensions . WriteColor ( @"[//--Execute Refresh----------------------------------------------]" , ConsoleColor . DarkGreen ) ;
86+
5087 if ( Program . Settings . SteamCollection )
5188 {
5289 ConsoleExtensions . WriteColor ( @$ "[// ]Checking Steam collection with id { Program . Settings . SteamCollectionId } ", ConsoleColor . DarkGreen ) ;
5390
5491 var parameters = new List < KeyValuePair < string , string > > ( ) ;
55- //parameters.Add(new KeyValuePair<string, string>("itemcount", "1"));
5692 parameters . Add ( new KeyValuePair < string , string > ( "collectioncount" , "1" ) ) ;
5793 parameters . Add ( new KeyValuePair < string , string > ( "publishedfileids[0]" , Program . Settings . SteamCollectionId . ToString ( ) ) ) ;
5894
@@ -65,9 +101,6 @@ public async Task UpdateSteamMods()
65101
66102 HttpResponseMessage response = await httpClient . PostAsync ( Program . STEAM_API_COLLECTION_URL , content ) ;
67103
68- //Console.WriteLine(await response.Content.ReadAsStringAsync());
69- //return;
70-
71104 var model = JsonConvert . DeserializeObject < SteamCollectionModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
72105 var modIds = model . response . collectiondetails . FirstOrDefault ( ) ? . children . Select ( x => x . publishedfileid ) ;
73106
@@ -86,9 +119,49 @@ private async Task CheckSteamMods(List<double> modIds)
86119 {
87120 ConsoleExtensions . WriteColor ( @$ "[// ]Checking { modIds . Count } Steam mods...", ConsoleColor . DarkGreen ) ;
88121
122+ var filename = "./savedMods.json" ;
123+ var model = await GetPublishedFileDetails < SteamFileDetailJsonModel > ( modIds ) ;
124+ var needUpdateModels = new List < SteamFileDetailJsonDetailModel > ( ) ;
125+ var savedMods = JsonConvert . DeserializeObject < List < LastEditModModel > > ( File . ReadAllText ( filename ) ) ;
126+
127+ foreach ( var mod in model . response . publishedfiledetails )
128+ {
129+ var sMod = savedMods . FirstOrDefault ( x => x . ModId . Equals ( mod . publishedfileid . ToString ( ) ) ) ;
130+ if ( sMod == null || ! sMod . LastUpdate . ToString ( ) . Equals ( mod . time_updated . ToString ( ) ) )
131+ {
132+ needUpdateModels . Add ( mod ) ;
133+ if ( sMod == null )
134+ {
135+ savedMods . Add ( new LastEditModModel
136+ {
137+ ModId = mod . publishedfileid . ToString ( ) ,
138+ LastUpdate = mod . time_updated . ToString ( )
139+ } ) ;
140+ }
141+ else
142+ {
143+ savedMods . Find ( x => x . ModId . Equals ( mod . publishedfileid . ToString ( ) ) ) . LastUpdate = mod . time_updated . ToString ( ) ;
144+ }
145+ }
146+ }
147+
148+ File . WriteAllText ( filename , JsonConvert . SerializeObject ( savedMods ) ) ;
149+
150+ if ( OnUpdatedModsFound != null )
151+ {
152+ OnUpdatedModsFound ( this , new UpdatedModsEventArgs
153+ {
154+ Mods = needUpdateModels
155+ } ) ;
156+ }
157+ }
158+ #endregion
159+
160+ private static async Task < T > GetPublishedFileDetails < T > ( List < double > files )
161+ {
89162 var parameters = new List < KeyValuePair < string , string > > ( ) ;
90163 int i = 0 ;
91- foreach ( var id in modIds )
164+ foreach ( var id in files )
92165 {
93166 parameters . Add ( new KeyValuePair < string , string > ( $ "publishedfileids[{ i ++ } ]", id . ToString ( ) ) ) ;
94167 }
@@ -101,18 +174,10 @@ private async Task CheckSteamMods(List<double> modIds)
101174 content . Headers . Clear ( ) ;
102175 content . Headers . Add ( "Content-Type" , "application/x-www-form-urlencoded" ) ;
103176
104- HttpResponseMessage response = await httpClient . PostAsync ( Program . STEAM_API_MOD_URL , content ) ;
177+ HttpResponseMessage response = await httpClient . PostAsync ( Program . STEAM_API_FILE_DETAILS_URL , content ) ;
105178
106- var model = JsonConvert . DeserializeObject < SteamModJsonModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
107- if ( OnUpdatedModsFound != null )
108- {
109- OnUpdatedModsFound ( this , new UpdatedModsEventArgs
110- {
111- Mods = model . response . publishedfiledetails
112- } ) ;
113- }
179+ return JsonConvert . DeserializeObject < T > ( await response . Content . ReadAsStringAsync ( ) ) ;
114180 }
115181 }
116- #endregion
117182 }
118183}
0 commit comments