//метод записи файла private void WriteFile(DriveId folderBackUpId, string filename, IDriveApiDriveContentsResult content) { try { byte[] bytes = System.IO.File.ReadAllBytes(pathToDb); string file = Convert.ToBase64String(bytes); using (var writer = new OutputStreamWriter(content.DriveContents.OutputStream)) { writer.Write(file); writer.Close(); } MetadataChangeSet changeSet = new MetadataChangeSet.Builder() .SetTitle(filename) .SetMimeType("application/octet-stream") .Build(); IDriveFolder driveFolder = null; //получаем папку по ID driveFolder = driveFolder ?? folderBackUpId.AsDriveFolder(); //если папка не ноль то создаем файл if (driveFolder != null) { var s = driveFolder.CreateFile(_googleApiClient, changeSet, content.DriveContents); CreateAlertDialog("", successMessage); } } catch (Exception er) { CreateAlertDialog("", errorMessage + er.Message); } }
//поиск папки для backup private async Task <DriveId> FindItems(string folderName) { DriveId folderId = null; try { //установим запрос поиска IDriveFolder appFolder = DriveClass.DriveApi.GetRootFolder(_googleApiClient); var query = new QueryClass .Builder().AddFilter(Filters.And( Filters.Eq(SearchableField.Title, folderName), Filters.Eq(SearchableField.Trashed, false))).Build(); var queryResult = await appFolder.QueryChildrenAsync(_googleApiClient, query); foreach (var driveItem in queryResult.MetadataBuffer) { if (driveItem.IsFolder && driveItem.Title == folderName) { folderId = driveItem.DriveId; } } return(folderId); } catch (Exception er) { Log.Logger.Error(er.Message, er.StackTrace); return(folderId); } }
public void Download(DriveId driveId) { /* * Download snippet from: * http://stackoverflow.com/questions/37407368/android-drive-api-download-file */ Task.Run(delegate { if (DownloadStarted != null) { DownloadStarted(null, null); } /* * All "Result" variables are under Android.Gms.Drive, search for "result". * Be sure to await, else it'll return cast failure */ IDriveFile file = DriveClass.DriveApi.GetFile(client, driveId); IDriveApiDriveContentsResult result = file.Open(client, Android.Gms.Drive.DriveFile.ModeReadOnly, null).Await().JavaCast <IDriveApiDriveContentsResult>(); IDriveResourceMetadataResult metadataResult = file.GetMetadata(client).Await().JavaCast <IDriveResourceMetadataResult>(); Stream stream = result.DriveContents.InputStream; if (DownloadComplete != null) { string name = metadataResult.Metadata.Title; DownloadComplete(null, new DownloadEventArgs { Stream = stream, Name = name }); } }); }
public DriveInfoContract(string id, long? freeSpace, long? usedSpace) { if (string.IsNullOrEmpty(id)) throw new ArgumentNullException(nameof(id)); Id = new DriveId(id); FreeSpace = freeSpace; UsedSpace = usedSpace; }
//создаем backup private void CreateBackUpFolderAndFile(IDriveApiDriveContentsResult contentResults) { try { // string filenameCreate = filename + DateTime.Now.ToString("ddMMyyyy") + ".dat"; //поиск папки с файлом резервной копии DriveId folderBackUpId = FindItems(folderName).Result; //если папка не найдена создаем папку в Google диске if (folderBackUpId == null) { CreateFolder(folderName); //получаем ID folderBackUpId = FindItems(folderName).Result; } //записываем файл в папку WriteFile(folderBackUpId, filename, contentResults); } catch (Exception er) { Log.Logger.Error(er.Message, er.StackTrace); } }
void CheckIDriveFolderDriveFolderResult(Java.Lang.Object result) { try { var res = result.JavaCast <IDriveFolderDriveFolderResult>(); if (res != null) { if (!res.Status.IsSuccess) { Debug.WriteLine("U AR A MORON! Error while trying to create the folder"); } else { Debug.WriteLine("Created a folder"); DriveId driveId = res.DriveFolder.DriveId; CreateFileInFolder(driveId); } } } catch (Exception e) { Debug.WriteLine("miscast 3", e); } }
private void CreateFileInFolder(DriveId driveId) { _driveId = driveId; DriveClass.DriveApi.NewDriveContents(_googleApiClient).SetResultCallback(this); }
//получаем файл backup private async Task GetBackUpFile(IDriveApiDriveContentsResult contentResults) { try { var contentFile = new StringBuilder(); //получаем папку backup DriveId folderBackUpId = FindItems(folderName).Result; if (folderBackUpId == null) { CreateAlertDialog("", errorMessage); //папка с backup не обнаружена } else { IDriveFolder driveFolder = null; IDriveFile driveFile = null; //получаем папку по ID driveFolder = driveFolder ?? folderBackUpId.AsDriveFolder(); //если папка не ноль то получаем файлы if (driveFolder != null) { var filesResult = await driveFolder.ListChildrenAsync(_googleApiClient); Java.Util.Date temp = null; foreach (var item in filesResult.MetadataBuffer) { if (item.Title.Contains(filename)) { if (temp == null || !temp.After(item.ModifiedDate)) { temp = item.ModifiedDate; driveFile = item.DriveId.AsDriveFile(); } } } //чтение файла из Google drive и получение строки в BAse64 var readFile = await driveFile.OpenAsync(_googleApiClient, DriveFile.ModeReadOnly, null); using (var inpstr = readFile.DriveContents.InputStream) using (var streamReade = new StreamReader(inpstr)) { while (streamReade.Peek() >= 0) { contentFile.Append(await streamReade.ReadLineAsync()); } } //конвертируем строку из base64 и записываем в файл БД(переписываем) byte[] bytes = Convert.FromBase64String(contentFile.ToString()); System.IO.File.WriteAllBytes(pathToDb, bytes); CreateAlertDialog("", successMessage); } } } catch (Exception er) { Log.Logger.Error(er.Message, er.StackTrace); CreateAlertDialog("", errorMessage); } }