private static async Task SaveDataRoamingAsync(BookInfo[] items) { if (!(bool)SettingStorage.GetValue("SyncBookmarks")) { return; } await fileRoamingSemaphore.WaitAsync(); try { var f = await DataFolderRoaming.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.ReplaceExisting); using (var s = (await f.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)).AsStream()) { var serializer = new System.Xml.Serialization.XmlSerializer(typeof(BookInfo[])); serializer.Serialize(s, items); } } catch { // ignored } finally { fileRoamingSemaphore.Release(); } }
internal static async Task <BookInfo[]> LoadAsync() { var infoRoaming = (bool)SettingStorage.GetValue("SyncBookmarks") ? (await LoadAsyncOne(await GetDataFileRoamingAsync(), fileRoamingSemaphore) ?? new BookInfo[0]).ToList() : new List <BookInfo>(); var infoLocal = (await LoadAsyncOne(await GetDataFileLocalAsync(), fileLocalSemaphore) ?? new BookInfo[0]).ToList(); foreach (var item in infoLocal) { var rindex = infoRoaming.FindIndex((s) => s.ID == item.ID); if (rindex == -1) { infoRoaming.Add(item); } else if (infoRoaming[rindex].ReadTimeLast < item.ReadTimeLast) { infoRoaming.RemoveAt(rindex); infoRoaming.Add(item); } } return(infoRoaming.ToArray()); }