@@ -22,15 +22,16 @@ class SteamApi
22
22
public SteamApi ( ) => RefreshSettings ( ) ;
23
23
public void RefreshSettings ( )
24
24
{
25
- timer = new System . Timers . Timer ( Program . Settings . AutomaticRefreshMin * 1000 ) ;
25
+ timer = new System . Timers . Timer ( Program . Settings . AutomaticRefreshMin * 60 * 1000 ) ;
26
26
timer . Elapsed += new System . Timers . ElapsedEventHandler ( OnTimedEvent ) ;
27
27
timer . Enabled = Program . Settings . AutomaticRefresh ;
28
28
}
29
29
#endregion
30
30
31
- public static async Task < SteamPlayerPlayerModel > GetSteamPlayer ( string steamid )
31
+ #region Static methods
32
+ public static async Task < List < SteamPlayerPlayerModel > > GetSteamPlayers ( List < string > steamids )
32
33
{
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 ) ) ;
34
35
request . Method = "GET" ;
35
36
36
37
using var webResponse = request . GetResponse ( ) ;
@@ -40,19 +41,54 @@ public static async Task<SteamPlayerPlayerModel> GetSteamPlayer(string steamid)
40
41
var data = await reader . ReadToEndAsync ( ) ;
41
42
var model = JsonConvert . DeserializeObject < SteamPlayerModel > ( data ) ;
42
43
43
- return model . response . players . FirstOrDefault ( ) ;
44
+ return model . response . players ;
44
45
}
45
46
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
47
82
private async void OnTimedEvent ( object source , System . Timers . ElapsedEventArgs e ) => await UpdateSteamMods ( ) ;
48
83
public async Task UpdateSteamMods ( )
49
84
{
85
+ ConsoleExtensions . WriteColor ( @"[//--Execute Refresh----------------------------------------------]" , ConsoleColor . DarkGreen ) ;
86
+
50
87
if ( Program . Settings . SteamCollection )
51
88
{
52
89
ConsoleExtensions . WriteColor ( @$ "[// ]Checking Steam collection with id { Program . Settings . SteamCollectionId } ", ConsoleColor . DarkGreen ) ;
53
90
54
91
var parameters = new List < KeyValuePair < string , string > > ( ) ;
55
- //parameters.Add(new KeyValuePair<string, string>("itemcount", "1"));
56
92
parameters . Add ( new KeyValuePair < string , string > ( "collectioncount" , "1" ) ) ;
57
93
parameters . Add ( new KeyValuePair < string , string > ( "publishedfileids[0]" , Program . Settings . SteamCollectionId . ToString ( ) ) ) ;
58
94
@@ -65,9 +101,6 @@ public async Task UpdateSteamMods()
65
101
66
102
HttpResponseMessage response = await httpClient . PostAsync ( Program . STEAM_API_COLLECTION_URL , content ) ;
67
103
68
- //Console.WriteLine(await response.Content.ReadAsStringAsync());
69
- //return;
70
-
71
104
var model = JsonConvert . DeserializeObject < SteamCollectionModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
72
105
var modIds = model . response . collectiondetails . FirstOrDefault ( ) ? . children . Select ( x => x . publishedfileid ) ;
73
106
@@ -86,9 +119,49 @@ private async Task CheckSteamMods(List<double> modIds)
86
119
{
87
120
ConsoleExtensions . WriteColor ( @$ "[// ]Checking { modIds . Count } Steam mods...", ConsoleColor . DarkGreen ) ;
88
121
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
+ {
89
162
var parameters = new List < KeyValuePair < string , string > > ( ) ;
90
163
int i = 0 ;
91
- foreach ( var id in modIds )
164
+ foreach ( var id in files )
92
165
{
93
166
parameters . Add ( new KeyValuePair < string , string > ( $ "publishedfileids[{ i ++ } ]", id . ToString ( ) ) ) ;
94
167
}
@@ -101,18 +174,10 @@ private async Task CheckSteamMods(List<double> modIds)
101
174
content . Headers . Clear ( ) ;
102
175
content . Headers . Add ( "Content-Type" , "application/x-www-form-urlencoded" ) ;
103
176
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 ) ;
105
178
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 ( ) ) ;
114
180
}
115
181
}
116
- #endregion
117
182
}
118
183
}
0 commit comments