List <Note> ReadNotesFromTable() { List <Note> answer = new List <Note>(); if (spreadSheetsService == null) { spreadSheetsService = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = applicationName, }); } try { SpreadsheetsResource.ValuesResource.GetRequest request = spreadSheetsService.Spreadsheets.Values.Get(gSyncSettings.spreadshetrID, "Notesieve!A1:B"); ValueRange response = request.Execute(); IList <IList <Object> > values = response.Values; if (values != null && values.Count > 0) { foreach (var row in values) { try { string json = row[0].ToString(); Note note = JsonConvert.DeserializeObject <Note>(json, jsonSettings); answer.Add(note); if (note.GetType() == typeof(Screenshot) && note.IsDelete == false) { Screenshot screenshot = note as Screenshot; string screenshotName = Path.GetFileName(screenshot.ImgPath); var requestFiles = driveService.Files.List(); requestFiles.Spaces = "appDataFolder"; requestFiles.Fields = "nextPageToken, files(id, name)"; requestFiles.Q = "name = '" + screenshotName + "'"; var result = requestFiles.Execute(); foreach (var file in result.Files) { if (file.Name.Equals(screenshotName)) { try { string screenShotPath = SQLiteLoader.screenShotFolderPath + @"\" + screenshotName; if (!File.Exists(screenShotPath)) { using (var stream = new System.IO.FileStream(screenShotPath, System.IO.FileMode.Create)) { driveService.Files.Get(file.Id).DownloadWithStatus(stream); } } screenshot.ChangeImageByPath(screenShotPath); } catch { } break; } } } } catch (JsonReaderException je) { OnSyncStateChanged?.Invoke(gSyncState.eFailed); OnError?.Invoke("Ваши данные на Google Drive были кем-то затронуты и повреждены."); } } } else { return(new List <Note>());//Данные не найдены, возвращаем пустой список } } catch (Google.GoogleApiException gExc) { if (gExc.Error != null) { if (gExc.Error.Code == 404) { OnSyncStateChanged?.Invoke(gSyncState.eFailed); OnError?.Invoke("Таблица с записями не найдена на вашем Google Drive"); CreateTable(tableName); } else { OnError?.Invoke(gExc.Message); } } } return(answer); }