LoadData(BaseIni ini, DateTime? date = null) {
139 | // 现有数据未浏览完,无需加载更多,或已无更多数据
140 | if (indexFocus < metas.Count - 1) {
141 | return true;
142 | }
143 | // 无网络连接
144 | if (!NetworkInterface.GetIsNetworkAvailable()) {
145 | return false;
146 | }
147 | await base.LoadData(ini, date);
148 |
149 | if (nextPage >= pageUrls.Count) {
150 | string urlBjp = nextPage >= 100 ? string.Format(URL_API_DAY, (int)Math.Ceiling((nextPage + 1) / 100.0)) : URL_API_TODAY;
151 | try {
152 | HttpClient client = new HttpClient();
153 | string htmlData = await client.GetStringAsync(urlBjp);
154 | ParsePages(htmlData);
155 | } catch (Exception e) {
156 | Debug.WriteLine(e);
157 | }
158 | }
159 | if (nextPage >= pageUrls.Count) {
160 | return metas.Count > 0;
161 | }
162 |
163 | string url = pageUrls[nextPage++];
164 | Debug.WriteLine("provider url: " + url);
165 | try {
166 | HttpClient client = new HttpClient();
167 | string htmlData = await client.GetStringAsync(url);
168 | List metasAdd = new List {
169 | ParseBean(htmlData)
170 | };
171 | AppendMetas(metasAdd);
172 | } catch (Exception e) {
173 | Debug.WriteLine(e);
174 | }
175 |
176 | return metas.Count > 0;
177 | }
178 | }
179 |
180 | //public class NasaProvider2 : BaseProvider {
181 | // // 下一页数据索引(日期编号)(用于按需加载)
182 | // private DateTime nextPage = DateTime.Now;
183 |
184 | // private const string URL_API_HOST = "https://apod.nasa.gov/apod/";
185 | // private const string URL_API_TODAY = URL_API_HOST + "astropix.html";
186 | // // 注意时差导致404
187 | // private const string URL_API_DAY = URL_API_HOST + "ap{0}.html";
188 |
189 | // private Meta ParseBean(string htmlData) {
190 | // Meta meta = new Meta();
191 | // Match match = Regex.Match(htmlData, @"href=""(ap(\d{6}))\.html""> ?< ?");
192 | // if (match.Success) {
193 | // DateTime dateYesterday = DateTime.ParseExact(match.Groups[2].Value, "yyMMdd",
194 | // new System.Globalization.CultureInfo("en-US"));
195 | // meta.Id = match.Groups[1].Value;
196 | // meta.Date = dateYesterday.AddDays(1);
197 | // }
198 | // if (meta.Id == null || meta.Date == null) {
199 | // return null;
200 | // }
201 | // match = Regex.Match(htmlData, @"href=""(image.+?)""");
202 | // if (match.Success) {
203 | // meta.Uhd = URL_API_HOST + match.Groups[1].Value;
204 | // }
205 | // match = Regex.Match(htmlData, @"SRC=""(image.+?)""");
206 | // if (match.Success) {
207 | // meta.Thumb = URL_API_HOST + match.Groups[1].Value;
208 | // }
209 | // match = Regex.Match(htmlData, @"(.+?) ?
");
210 | // if (match.Success) {
211 | // meta.Title = match.Groups[1].Value.Trim();
212 | // }
213 | // match = Regex.Match(htmlData, @"( *?Image Credit.+?)", RegexOptions.Singleline);
214 | // if (match.Success) {
215 | // string line = HtmlUtilities.ConvertToText(match.Groups[1].Value);
216 | // Debug.WriteLine(line);
217 | // meta.Copyright = "© " + line.Split(":", 2)[1].Split(";")[0].Trim();
218 | // } else {
219 | // match = Regex.Match(htmlData, @"(.+?Images:.+?)", RegexOptions.Singleline);
220 | // if (match.Success) {
221 | // string line = HtmlUtilities.ConvertToText(match.Groups[1].Value);
222 | // Debug.WriteLine(line);
223 | // meta.Copyright = "© " + line.Split("Images:", 2)[1].Split(";")[0].Trim();
224 | // }
225 | // }
226 | // match = Regex.Match(htmlData, @" ?Explanation: ?(.+?)", RegexOptions.Singleline);
227 | // if (match.Success) {
228 | // meta.Story = HtmlUtilities.ConvertToText(match.Groups[1].Value).Trim();
229 | // }
230 |
231 | // return meta;
232 | // }
233 |
234 | // public override async Task LoadData(Ini ini, DateTime? date = null) {
235 | // // 现有数据未浏览完,无需加载更多,或已无更多数据
236 | // if (indexFocus < metas.Count - 1) {
237 | // return true;
238 | // }
239 | // // 无网络连接
240 | // if (!NetworkInterface.GetIsNetworkAvailable()) {
241 | // return false;
242 | // }
243 |
244 | // string url = nextPage.DayOfYear == DateTime.Now.DayOfYear ? URL_API_TODAY
245 | // : string.Format(URL_API_DAY, nextPage.ToString("yyMMdd"));
246 | // nextPage = nextPage.AddDays(-1);
247 | // try {
248 | // HttpClient client = new HttpClient();
249 | // string htmlData = await client.GetStringAsync(url);
250 | // Meta metaNew = ParseBean(htmlData);
251 | // if (metaNew == null) {
252 | // return metas.Count > 0;
253 | // }
254 | // bool exists = false;
255 | // foreach (Meta meta in metas) {
256 | // exists |= metaNew.Id == meta.Id;
257 | // }
258 | // if (!exists) {
259 | // metas.Add(metaNew);
260 | // }
261 | // if (nextPage.DayOfYear == metaNew.Date.DayOfYear) { // 解决时差问题
262 | // nextPage = nextPage.AddDays(-1);
263 | // }
264 | // } catch (Exception e) {
265 | // Debug.WriteLine(e);
266 | // }
267 |
268 | // return metas.Count > 0;
269 | // }
270 | //}
271 |
272 | //public class NasachinaProvider : BaseProvider {
273 | // // 下一页数据索引(从1开始)(用于按需加载)
274 | // private int nextPage = 1;
275 |
276 | // private const string URL_API = "https://www.nasachina.cn/apod/page/{0}";
277 |
278 | // private List ParseBeans(string htmlData) {
279 | // List metas = new List();
280 | // foreach (Match m in Regex.Matches(htmlData, @"", RegexOptions.Singleline)) {
281 | // Meta meta = new Meta();
282 | // Match match = Regex.Match(m.Value, @"id=""(.+?)""");
283 | // if (match.Success) {
284 | // meta.Id = match.Groups[1].Value;
285 | // }
286 | // match = Regex.Match(m.Value, @"published.+?datetime=""(.+?)T");
287 | // if (match.Success) {
288 | // meta.Date = Convert.ToDateTime(match.Groups[1].Value);
289 | // }
290 | // if (meta.Id == null || meta.Date == null) {
291 | // continue;
292 | // }
293 | // //match = Regex.Match(m.Value, @"srcset=""(.+?)""");
294 | // //if (match.Success) { // TODO
295 | // // string[] urls = match.Groups[1].Value.Split(",");
296 | // // Array.Sort(urls, (p1, p2) => p2.Split(" ")[1].CompareTo(p1.Split(" ")[1]));
297 | // // Debug.WriteLine(string.Join(", ", urls));
298 | // // meta.Uhd = urls[0].Trim().Split(" ")[0];
299 | // // meta.Thumb = urls[urls.Length - 1].Trim().Split(" ")[0];
300 | // //}
301 | // match = Regex.Match(m.Value, @"src=""(.+?)""");
302 | // if (match.Success) {
303 | // meta.Thumb = match.Groups[1].Value;
304 | // meta.Uhd = match.Groups[1].Value; // TODO
305 | // }
306 | // match = Regex.Match(m.Value, @"", RegexOptions.Singleline);
307 | // if (match.Success) {
308 | // meta.Title = HtmlUtilities.ConvertToText(match.Value).Trim();
309 | // }
310 | // metas.Add(meta);
311 | // }
312 |
313 | // return metas;
314 | // }
315 |
316 | // public override async Task LoadData(Ini ini) {
317 | // // 现有数据未浏览完,无需加载更多,或已无更多数据
318 | // if (indexFocus < metas.Count - 1) {
319 | // return true;
320 | // }
321 | // // 无网络连接
322 | // if (!NetworkInterface.GetIsNetworkAvailable()) {
323 | // return false;
324 | // }
325 |
326 | // string url = string.Format(URL_API, nextPage++);
327 | // Debug.WriteLine("provider url: " + url);
328 | // try {
329 | // HttpClient client = new HttpClient();
330 | // string htmlData = await client.GetStringAsync(url);
331 | // //Debug.WriteLine("provider data: " + htmlData);
332 | // List metasNew = ParseBeans(htmlData);
333 | // foreach (Meta metaNew in metasNew) {
334 | // bool exists = false;
335 | // foreach (Meta meta in metas) {
336 | // exists |= metaNew.Id == meta.Id;
337 | // }
338 | // if (!exists) {
339 | // metas.Add(metaNew);
340 | // }
341 | // }
342 | // } catch (Exception e) {
343 | // Debug.WriteLine(e);
344 | // }
345 |
346 | // return metas.Count > 0;
347 | // }
348 | //}
349 | }
350 |
--------------------------------------------------------------------------------
/Utils/Ini.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using TimelineWallpaper.Providers;
3 |
4 | namespace TimelineWallpaper.Utils {
5 | public class Ini {
6 | private readonly Dictionary Inis = new Dictionary() {
7 | { BingIni.ID, new BingIni() },
8 | { NasaIni.ID, new NasaIni() },
9 | { OneplusIni.ID, new OneplusIni() },
10 | { TimelineIni.ID, new TimelineIni() },
11 | { Himawari8Ini.ID, new Himawari8Ini() },
12 | { YmyouliIni.ID, new YmyouliIni() },
13 | { InfinityIni.ID, new InfinityIni() },
14 | { OneIni.ID, new OneIni() },
15 | { QingbzIni.ID, new QingbzIni() },
16 | { ObzhiIni.ID, new ObzhiIni() },
17 | { G3Ini.ID, new G3Ini() },
18 | { WallhereIni.ID, new WallhereIni() },
19 | { AbyssIni.ID, new AbyssIni() },
20 | { DaihanIni.ID, new DaihanIni() },
21 | { DmoeIni.ID, new DmoeIni() },
22 | { ToubiecIni.ID, new ToubiecIni() },
23 | { MtyIni.ID, new MtyIni() },
24 | { SeovxIni.ID, new SeovxIni() }
25 | };
26 |
27 | private readonly HashSet THEME = new HashSet() { "", "light", "dark" };
28 |
29 | private string provider = BingIni.ID;
30 | public string Provider {
31 | set => provider = Inis.ContainsKey(value) ? value : BingIni.ID;
32 | get => provider;
33 | }
34 |
35 | private string desktopProvider = "";
36 | public string DesktopProvider {
37 | set => desktopProvider = Inis.ContainsKey(value) ? value : "";
38 | get => desktopProvider;
39 | }
40 |
41 | private string lockProvider = "";
42 | public string LockProvider {
43 | set => lockProvider = Inis.ContainsKey(value) ? value : "";
44 | get => lockProvider;
45 | }
46 |
47 | private string theme = "";
48 | public string Theme {
49 | set => theme = THEME.Contains(value) ? value : "";
50 | get => theme;
51 | }
52 |
53 | public bool SetIni(string provider, BaseIni ini) {
54 | if (Inis.ContainsKey(provider) && ini != null) {
55 | Inis[provider] = ini;
56 | return true;
57 | }
58 | return false;
59 | }
60 |
61 | public BaseIni GetIni(string provider = null) {
62 | return provider != null && Inis.ContainsKey(provider)
63 | ? Inis[provider] : Inis[this.provider];
64 | }
65 |
66 | public BaseProvider GenerateProvider(string provider = null) {
67 | return provider != null && Inis.ContainsKey(provider)
68 | ? Inis[provider].GenerateProvider() : Inis[this.provider].GenerateProvider();
69 | }
70 |
71 | override public string ToString() {
72 | string paras = Inis[provider].ToString();
73 | return $"/{Provider}?desktopprovider={DesktopProvider}&lockprovider={LockProvider}" + (paras.Length > 0 ? "&" : "") + paras;
74 | }
75 | }
76 |
77 | public class BaseIni {
78 | private int desktopPeriod = 24;
79 | public int DesktopPeriod {
80 | set => desktopPeriod = value <= 0 || value > 24 ? 24 : value;
81 | get => desktopPeriod;
82 | }
83 |
84 | private int lockPeriod = 24;
85 | public int LockPeriod {
86 | set => lockPeriod = value <= 0 || value > 24 ? 24 : value;
87 | get => lockPeriod;
88 | }
89 |
90 | // 时序图源
91 | public virtual bool IsSequential() => true;
92 |
93 | public virtual BaseProvider GenerateProvider() => new BingProvider();
94 | }
95 |
96 | public class BingIni : BaseIni {
97 | public const string ID = "bing";
98 | public static readonly List LANG = new List() { "", "zh-cn", "en-us", "ja-jp", "de-de", "fr-fr" };
99 |
100 | private string lang = "";
101 | public string Lang {
102 | set => lang = LANG.Contains(value) ? value : "";
103 | get => lang;
104 | }
105 |
106 | public override BaseProvider GenerateProvider() => new BingProvider() { Id = ID };
107 |
108 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&lang={Lang}";
109 | }
110 |
111 | public class NasaIni : BaseIni {
112 | public const string ID = "nasa";
113 | public static readonly List MIRROR = new List() { "", "bjp" };
114 |
115 | private string mirror = "";
116 | public string Mirror {
117 | set => mirror = MIRROR.Contains(value) ? value : "";
118 | get => mirror;
119 | }
120 |
121 | public override BaseProvider GenerateProvider() {
122 | switch (mirror) {
123 | case "bjp":
124 | return new NasabjpProvider() { Id = ID };
125 | default:
126 | return new NasaProvider() { Id = ID };
127 | }
128 | }
129 |
130 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&mirror={Mirror}";
131 | }
132 |
133 | public class OneplusIni : BaseIni {
134 | public const string ID = "oneplus";
135 | public static readonly List ORDER = new List() { "date", "rate", "view" };
136 |
137 | private string order = "date";
138 | public string Order {
139 | set => order = ORDER.Contains(value) ? value : "date";
140 | get => order;
141 | }
142 |
143 | public override bool IsSequential() => "date".Equals(order);
144 |
145 | public override BaseProvider GenerateProvider() => new OneplusProvider() { Id = ID };
146 |
147 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}";
148 | }
149 |
150 | public class TimelineIni : BaseIni {
151 | public const string ID = "timeline";
152 | public static readonly List ORDER = new List() { "date", "score", "random" };
153 | public static readonly List CATE = new List() { "", "landscape", "portrait", "culture", "term" };
154 |
155 | private string order = "date";
156 | public string Order {
157 | set => order = ORDER.Contains(value) ? value : "date";
158 | get => order;
159 | }
160 |
161 | private string cate = "";
162 | public string Cate {
163 | set => cate = CATE.Contains(value) ? value : "";
164 | get => cate;
165 | }
166 |
167 | public int Authorize { set; get; } = 1;
168 |
169 | public override bool IsSequential() => "date".Equals(order);
170 |
171 | public override BaseProvider GenerateProvider() => new TimelineProvider() { Id = ID };
172 |
173 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}&cate={Cate}&authorize={Authorize}";
174 | }
175 |
176 | public class Himawari8Ini : BaseIni {
177 | public const string ID = "himawari8";
178 |
179 | private float offset = 0;
180 | public float Offset {
181 | set => offset = value < -1 ? -1 : (value > 1 ? 1 : value);
182 | get => offset;
183 | }
184 |
185 | public Himawari8Ini() {
186 | DesktopPeriod = 1;
187 | LockPeriod = 2;
188 | }
189 |
190 | public override bool IsSequential() => false;
191 |
192 | public override BaseProvider GenerateProvider() => new Himawari8Provider() { Id = ID };
193 |
194 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
195 | }
196 |
197 | public class YmyouliIni : BaseIni {
198 | public const string ID = "ymyouli";
199 | public static readonly List ORDER = new List() { "date", "score", "random" };
200 | public static readonly List CATE = new List() { "", "acgcharacter", "acgscene", "sky",
201 | "war", "sword", "artistry", "car", "portrait", "animal", "delicacy", "nature" };
202 |
203 | private string order = "random";
204 | public string Order {
205 | set => order = ORDER.Contains(value) ? value : "random";
206 | get => order;
207 | }
208 |
209 | private string cate = "";
210 | public string Cate {
211 | set => cate = CATE.Contains(value) ? value : "";
212 | get => cate;
213 | }
214 |
215 | public int R18 { set; get; } = 0;
216 |
217 | public override bool IsSequential() => false;
218 |
219 | public override BaseProvider GenerateProvider() => new YmyouliProvider() { Id = ID };
220 |
221 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}&cate={Cate}&r18={R18}";
222 | }
223 |
224 | public class InfinityIni : BaseIni {
225 | public const string ID = "infinity";
226 | public static readonly List ORDER = new List() { "", "rate" };
227 |
228 | private string order = "";
229 | public string Order {
230 | set => order = ORDER.Contains(value) ? value : "";
231 | get => order;
232 | }
233 |
234 | public override bool IsSequential() => false;
235 |
236 | public override BaseProvider GenerateProvider() => new InfinityProvider() { Id = ID };
237 |
238 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}";
239 | }
240 |
241 | public class OneIni : BaseIni {
242 | public const string ID = "one";
243 | public static readonly List ORDER = new List() { "date", "random" };
244 |
245 | private string order = "date";
246 | public string Order {
247 | set => order = ORDER.Contains(value) ? value : "date";
248 | get => order;
249 | }
250 |
251 | public override bool IsSequential() => "date".Equals(order);
252 |
253 | public override BaseProvider GenerateProvider() => new OneProvider() { Id = ID };
254 |
255 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}";
256 | }
257 |
258 | public class QingbzIni : BaseIni {
259 | public const string ID = "qingbz";
260 | public static readonly List ORDER = new List() { "date", "score", "random" };
261 | public static readonly List CATE = new List() { "", "portrait", "acg", "nature",
262 | "star", "color", "car", "game", "animal" };
263 |
264 | private string order = "random";
265 | public string Order {
266 | set => order = ORDER.Contains(value) ? value : "random";
267 | get => order;
268 | }
269 |
270 | private string cate = "";
271 | public string Cate {
272 | set => cate = CATE.Contains(value) ? value : "";
273 | get => cate;
274 | }
275 |
276 | public int R18 { set; get; } = 0;
277 |
278 | public override bool IsSequential() => false;
279 |
280 | public override BaseProvider GenerateProvider() => new QingbzProvider() { Id = ID };
281 |
282 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}&cate={Cate}&r18={R18}";
283 | }
284 |
285 | public class ObzhiIni : BaseIni {
286 | public const string ID = "obzhi";
287 | public static readonly List ORDER = new List() { "date", "score", "random" };
288 | public static readonly List CATE = new List() { "", "acg", "specific", "concise",
289 | "nature", "portrait", "game", "animal" };
290 |
291 | private string order = "random";
292 | public string Order {
293 | set => order = ORDER.Contains(value) ? value : "random";
294 | get => order;
295 | }
296 |
297 | private string cate = "";
298 | public string Cate {
299 | set => cate = CATE.Contains(value) ? value : "";
300 | get => cate;
301 | }
302 |
303 | public int R18 { set; get; } = 0;
304 |
305 | public override bool IsSequential() => false;
306 |
307 | public override BaseProvider GenerateProvider() => new ObzhiProvider() { Id = ID };
308 |
309 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}&cate={Cate}&r18={R18}";
310 | }
311 |
312 | public class G3Ini : BaseIni {
313 | public const string ID = "3g";
314 | private readonly HashSet ORDER = new HashSet() { "date", "view" };
315 |
316 | private string order = "date";
317 | public string Order {
318 | set => order = ORDER.Contains(value) ? value : "date";
319 | get => order;
320 | }
321 |
322 | public override bool IsSequential() => false;
323 |
324 | public override BaseProvider GenerateProvider() => new G3Provider() { Id = ID };
325 |
326 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}";
327 | }
328 |
329 | public class WallhereIni : BaseIni {
330 | public const string ID = "wallhere";
331 | public static readonly List ORDER = new List() { "date", "score", "random" };
332 | public static readonly List CATE = new List() { "", "acg", "photograph" };
333 |
334 | private string order = "random";
335 | public string Order {
336 | set => order = ORDER.Contains(value) ? value : "random";
337 | get => order;
338 | }
339 |
340 | private string cate = "";
341 | public string Cate {
342 | set => cate = CATE.Contains(value) ? value : "";
343 | get => cate;
344 | }
345 |
346 | public int R18 { set; get; } = 0;
347 |
348 | public override bool IsSequential() => false;
349 |
350 | public override BaseProvider GenerateProvider() => new WallhereProvider() { Id = ID };
351 |
352 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&order={Order}&cate={Cate}&r18={R18}";
353 | }
354 |
355 | public class AbyssIni : BaseIni {
356 | public const string ID = "abyss";
357 |
358 | public override bool IsSequential() => false;
359 |
360 | public override BaseProvider GenerateProvider() => new AbyssProvider() { Id = ID };
361 |
362 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
363 | }
364 |
365 | public class DaihanIni : BaseIni {
366 | public const string ID = "daihan";
367 |
368 | public override bool IsSequential() => false;
369 |
370 | public override BaseProvider GenerateProvider() => new DaihanProvider() { Id = ID };
371 |
372 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
373 | }
374 |
375 | public class DmoeIni : BaseIni {
376 | public const string ID = "dmoe";
377 |
378 | public override bool IsSequential() => false;
379 |
380 | public override BaseProvider GenerateProvider() => new DmoeProvider() { Id = ID };
381 |
382 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
383 | }
384 |
385 | public class ToubiecIni : BaseIni {
386 | public const string ID = "toubiec";
387 |
388 | public override bool IsSequential() => false;
389 |
390 | public override BaseProvider GenerateProvider() => new ToubiecProvider() { Id = ID };
391 |
392 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
393 | }
394 |
395 | public class MtyIni : BaseIni {
396 | public const string ID = "mty";
397 |
398 | public override bool IsSequential() => false;
399 |
400 | public override BaseProvider GenerateProvider() => new MtyProvider() { Id = ID };
401 |
402 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}";
403 | }
404 |
405 | public class SeovxIni : BaseIni {
406 | public const string ID = "seovx";
407 | private readonly HashSet CATE = new HashSet() { "", "d", "ha" };
408 |
409 | private string cate = "d";
410 | public string Cate {
411 | set => cate = CATE.Contains(value) ? value : "d";
412 | get => cate;
413 | }
414 |
415 | public override bool IsSequential() => false;
416 |
417 | public override BaseProvider GenerateProvider() => new SeovxProvider() { Id = ID };
418 |
419 | override public string ToString() => $"desktopperiod={DesktopPeriod}&lockperiod={LockPeriod}&cate={Cate}";
420 | }
421 | }
422 |
--------------------------------------------------------------------------------
/TimelineWallpaper.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {C3BF495A-6BF6-4D5B-9ED9-2C3213399FB8}
8 | AppContainerExe
9 | Properties
10 | TimelineWallpaper
11 | TimelineWallpaper
12 | en-US
13 | UAP
14 | 10.0.22000.0
15 | 10.0.19041.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 | true
20 | True
21 | False
22 | TimelineWallpaper_TemporaryKey.pfx
23 | SHA256
24 | True
25 | False
26 | Auto
27 | x64
28 | D:\uwp\TimelineWallpaper\AppPackages
29 | 0
30 | True
31 | True
32 | D:\uwp\TimelineWallpaper\AppPackages\
33 |
34 |
35 | true
36 | bin\x86\Debug\
37 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
38 | ;2008
39 | full
40 | x86
41 | false
42 | prompt
43 | true
44 |
45 |
46 | bin\x86\Release\
47 | TRACE;NETFX_CORE;WINDOWS_UWP
48 | true
49 | ;2008
50 | pdbonly
51 | x86
52 | false
53 | prompt
54 | true
55 | true
56 |
57 |
58 | true
59 | bin\ARM\Debug\
60 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
61 | ;2008
62 | full
63 | ARM
64 | false
65 | prompt
66 | true
67 |
68 |
69 | bin\ARM\Release\
70 | TRACE;NETFX_CORE;WINDOWS_UWP
71 | true
72 | ;2008
73 | pdbonly
74 | ARM
75 | false
76 | prompt
77 | true
78 | true
79 |
80 |
81 | true
82 | bin\ARM64\Debug\
83 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
84 | ;2008
85 | full
86 | ARM64
87 | false
88 | prompt
89 | true
90 | true
91 |
92 |
93 | bin\ARM64\Release\
94 | TRACE;NETFX_CORE;WINDOWS_UWP
95 | true
96 | ;2008
97 | pdbonly
98 | ARM64
99 | false
100 | prompt
101 | true
102 | true
103 |
104 |
105 | true
106 | bin\x64\Debug\
107 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
108 | ;2008
109 | full
110 | x64
111 | false
112 | prompt
113 | true
114 | true
115 | false
116 |
117 |
118 | bin\x64\Release\
119 | TRACE;NETFX_CORE;WINDOWS_UWP
120 | true
121 | ;2008
122 | pdbonly
123 | x64
124 | false
125 | prompt
126 | true
127 | true
128 |
129 |
130 | PackageReference
131 |
132 |
133 |
134 | App.xaml
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | ContributeDlg.xaml
153 |
154 |
155 | DonateDlg.xaml
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 | ReviewDlg.xaml
174 |
175 |
176 |
177 | SettingsView.xaml
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 | MainPage.xaml
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 | Designer
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 | Designer
267 |
268 |
269 |
270 |
271 | MSBuild:Compile
272 | Designer
273 |
274 |
275 | Designer
276 | MSBuild:Compile
277 |
278 |
279 | Designer
280 | MSBuild:Compile
281 |
282 |
283 | MSBuild:Compile
284 | Designer
285 |
286 |
287 | Designer
288 | MSBuild:Compile
289 |
290 |
291 | Designer
292 | MSBuild:Compile
293 |
294 |
295 |
296 |
297 | 6.2.13
298 |
299 |
300 | 2.7.1
301 |
302 |
303 | 13.0.1
304 |
305 |
306 | 1.26.0
307 |
308 |
309 |
310 |
311 | Designer
312 |
313 |
314 |
315 |
316 | {c8b76130-7de6-469c-9051-d8cb783329fc}
317 | TimelineWallpaperService
318 |
319 |
320 |
321 | 14.0
322 |
323 |
324 |
331 |
--------------------------------------------------------------------------------