private static async Task sync_updateAccount(Config config, string config_path) { try { await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "Comienza actualizando informacion del usuario...", "Scanda.ClassLibrary.ScandaConector.syncUpdateAccount"), "T"); // Obtenemos los datos de dropbox var x = await ScandaConector.getUsedSpace(config.id_customer); string url = ConfigurationManager.AppSettings["api_url"]; using (var client = new HttpClient()) { client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync(string.Format("CustomerStorage_SET?UsedStorage={2}&User={0}&Password={1}", config.user, config.password, x)); if (response.IsSuccessStatusCode) { } } await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "informacion del usuario actualizada", "Scanda.ClassLibrary.ScandaConector.syncUpdateAccount"), "T"); } catch (Exception ex) { await Logger.sendLog(string.Format("{0} | {1} | {2}", ex.Message, ex.StackTrace, "Scadna.AppTray.ClassLibrary.sync_updateAccount"), "E"); } }
//si cantidad -1 no hay limite public static async Task <long> obtenerEspacioUsado(string userID, int cant, Config config) { if (cant == -1) { return(0); } long tamanoALiberar = 0; // Este es el tamaño que dejara disponible un archivo cuando sea eliminado en la nube en la etapa final //obtengo todos los archivos ListFolderResult res = await listFiles(userID, true); List <Metadata> todo = res.Entries as List <Metadata>; List <FileMetadata> archivos = todo.Where(x => x.IsFile).Select(y => y.AsFile).ToList(); archivos.Sort((a, b) => a.ServerModified.CompareTo(b.ServerModified)); //Ordenamos , mas viejos primero int dif = archivos.Count - cant; //Cuantos debo de eliminar if (dif < 0) { return(0); //quiere decir que no hay archivos por borrar } dif += 1; //se suma uno porque se tiene que considerar el archivo que se pretende subir foreach (FileMetadata fm in archivos.Take(dif)) { //Necesitamos crear un cliente try { var espacio_archivo_borrar = (long)fm.Size; tamanoALiberar += espacio_archivo_borrar; } catch (BadInputException ex) { await Logger.sendLog(string.Format("{0} | {1} | {2}", ex.Message, ex.StackTrace, "Scanda.ClassLibrary.obtenerEspacioUsado "), "E"); Console.WriteLine("Error de Token"); Console.WriteLine(ex.Message); } catch (Exception ex) { await Logger.sendLog(string.Format("{0} | {1} | {2}", ex.Message, ex.StackTrace, "Scanda.ClassLibrary.obtenerEspacioUsado "), "E"); Console.WriteLine(ex.Message); } } var espacio_usado = await ScandaConector.getUsedSpace(config.id_customer); long espacioFuturoFinal = Math.Abs(tamanoALiberar / B_TO_MB - espacio_usado); return(espacioFuturoFinal); }
public static async Task <int> uploadFile(string archivo, string usrId, Status status, List <string> extensions = null, Config config = null, string config_path = null) { status.upload.file = archivo; status.upload.status = 1; string ruta = string.Empty; try { await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "Servicio de windows ejecutandose ", "Scanda.Service.DBProtector.StartUpload"), "T"); FileInfo info = new FileInfo(archivo); //validamos q el archivo no se este usando por otro proceso if (!IsLocked(info)) { //validamos extensiones if (!isValidExt(info.Extension, extensions)) { return(0); //Fracaso// No es una extension valida } double size = info.Length / B_TO_MB; //Validamos el tamanio bool esvalido = await isValidSize(Math.Ceiling(size), config); if (!esvalido) { return(0);//Fracaso } string name = info.Name; status.upload.file = info.Name; //NOmbre del archivo if (!isValidFileName(name)) { return(0); //Fracaso } //Generamos la ruta DateTime date = DateTime.Today; string year; string month; year = date.Year + ""; if (date.Month < 10) { month = "0" + date.Month; } else { month = "" + date.Month; } //Zipeamos l archivo await Logger.sendLog(string.Format("{0} | {1} | {2}", archivo, "Cifrando archivo...", "Scanda.ClassLibrary.ScandaConector.uploadFile"), "T"); string zip = cifrar(archivo, usrId); await Logger.sendLog(string.Format("{0} | {1} | {2}", archivo, "Cifrando completo...", "Scanda.ClassLibrary.ScandaConector.uploadFile"), "T"); ruta = usrId + "/" + year + "/" + month; status.upload.status = 1; await Logger.sendLog(string.Format("{0} | {1} | {2}", archivo, "Comenzando subida...", "Scanda.ClassLibrary.ScandaConector.uploadFile"), "T"); var res = await uploadZipFile(zip, ruta, status); if (res) { await Logger.sendLog(string.Format("{0} | {1} | {2}", archivo, "subida terminada...", "Scanda.ClassLibrary.ScandaConector.uploadFile"), "T"); await sync_accountinfo(config, config_path); // Realizamos la limpieza en Cloud await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "Comienza limpieza en la nube", "Scanda.AppTray.FormTray.syncNowToolStripMenuItem_Click"), "T"); await ScandaConector.deleteHistory(config.id_customer, int.Parse(config.cloud_historical), config); await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "Termina limpieza en la nube", "Scanda.AppTray.Scanda.AppTray.ScandaConector.uploadFile"), "T"); await Logger.sendLog(string.Format("{0} | {1} | {2}", "Eliminando archivos temporales", "Comienza limpieza de archivos temporales local", "Scanda.AppTray.Scanda.AppTray.ScandaConector.uploadFile"), "T"); #region Realizamos el movimiento de los archivos que se suben a la carpeta historicos if (!string.IsNullOrEmpty(config.type_storage) && config.type_storage != "3") { // Comenzamos a mover los archivos // List<FileInfo> fileEntries2 = new DirectoryInfo(config.path).GetFiles().Where(ent => isValidFileName(ent.Name) && isValidExt(ent.Name, config.extensions)).OrderBy(f => f.LastWriteTime).ToList(); // foreach (FileInfo file in fileEntries2) //{ if (isValidFileName(info.Name)) { string desde = (config.path + "\\" + info.Name).Replace("\u0027\\", ""); string hacia = (config.hist_path + "\\" + info.Name).Replace("\u0027", ""); //cuando vale 1 y 2 se mueve a una carpeta el respaldo, cuanfdo vale 3 se borra localmente if (config.type_storage == "1" || config.type_storage == "2") { // Se copia a Historicos if (File.Exists(config.hist_path + "\\" + info.Name)) { File.Delete(config.hist_path + "\\" + info.Name); } await Logger.sendLog(string.Format("{0} | {1} | {2}", info.Name, "Moviendo archivo de " + desde + " hacia " + hacia, "Scanda.AppTray.Scanda.AppTray.ScandaConector.uploadFile"), "T"); File.Copy(desde, hacia); await Logger.sendLog(string.Format("{0} | {1} | {2}", info.Name, "Movido a " + config.hist_path + "\\" + info.Name, "Scanda.AppTray.Scanda.AppTray.ScandaConector.uploadFile"), "T"); } File.Delete(desde); } //} List <FileInfo> histFileEntries = new DirectoryInfo(config.hist_path).GetFiles().OrderBy(f => f.LastWriteTime).ToList(); // verificamos el limite //Borramos en la nube //ScandaConector.deleteHistory(config.id_customer, config.file_historical); //Borramos local bool canTransfer = false; while (!canTransfer) { if (histFileEntries.Count() <= int.Parse(config.file_historical)) { canTransfer = true; } else { FileInfo item = histFileEntries.FirstOrDefault(); if (item != null) { File.Delete(config.hist_path + "\\" + item.Name); } histFileEntries.Remove(item); await Logger.sendLog(string.Format("{0} | {1} | {2}", item.Name, "limpiado de historico local", "Scanda.AppTray.Scanda.AppTray.ScandaConector.uploadFile"), "T"); } } } else if (config.type_storage == "3") { // Comenzamos a mover los archivos // List<FileInfo> fileEntries2 = new DirectoryInfo(config.path).GetFiles().OrderBy(f => f.LastWriteTime).ToList(); // foreach (FileInfo file in fileEntries2) // { if (isValidFileName(info.Name)) { // Se borra el archivo localmente porque la configurcion es 3 File.Delete(config.path + "\\" + info.Name); } //} } #endregion await Logger.sendLog(string.Format("{0} | {1} | {2}", "", "Termina limpieza de archivos temporales local", "Scanda.AppTray.ScandaConector.syncNowToolStripMenuItem_Click"), "T"); await sync_accountinfo(config, config_path); await sync_updateAccount(config, config_path); } } else { await Logger.sendLog(string.Format("{0} | {1} | {2}", info.Name, "carga en progreso servicio de windows ", "Scanda.classlibrary.ScandaConector.uploadfile"), "T"); return(3);//Archivo cargandose } List <string> eliminables = Directory.GetFiles("C:\\DBProtector\\").Where(ent => { return(ent.EndsWith(".zip")); }).ToList(); if (eliminables != null) { foreach (string file in eliminables) { if (!IsLocked(new FileInfo(file))) { File.Delete(file); //Se borra el zip creado } } } return(1); // Exito } catch (Exception ex) { await Logger.sendLog(string.Format("{0} |Error al sincronizar {1} | {2}", ex.Message, ex.StackTrace, "ClassLibrary.UploadFile"), "E"); Console.WriteLine(ex); List <string> eliminables = Directory.GetFiles("C:\\DBProtector\\").Where(ent => { return(ent.EndsWith(".zip")); }).ToList(); if (eliminables != null) { foreach (string file in eliminables) { if (!IsLocked(new FileInfo(file))) { File.Delete(file); //Se borra el zip creado } } } return(0);// fracaso } }
//si cantidad -1 no hay limite public static async Task deleteHistory(string userID, int cant, Config config) { if (cant == -1) { return; } else { //obtengo todos los archivos ListFolderResult res = await listFiles(userID, true); List <Metadata> todo = res.Entries as List <Metadata>; List <FileMetadata> archivos = todo.Where(x => x.IsFile).Select(y => y.AsFile).ToList(); archivos.Sort((a, b) => a.ServerModified.CompareTo(b.ServerModified)); //Ordenamos , mas viejos primero if (archivos.Count < cant) //Aun tiene lugar en el historico { return; } else { int dif = archivos.Count - cant; //Cuantos debo de eliminar foreach (FileMetadata fm in archivos.Take(dif)) { //Necesitamos crear un cliente try { await client.Files.DeleteAsync(fm.PathDisplay); var espacio_usado = await ScandaConector.getUsedSpace(config.id_customer) * B_TO_MB; double espacio = (double)espacio_usado / (double)1024 / (double)1024; string url = ConfigurationManager.AppSettings["api_url"]; using (var client = new HttpClient()) { client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync(string.Format("CustomerStorage_SET?UsedStorage={2}&User={0}&Password={1}", config.user, config.password, espacio)); if (response.IsSuccessStatusCode) { } } } catch (BadInputException ex) { await Logger.sendLog(string.Format("{0} | {1} | {2}", ex.Message, ex.StackTrace, "Scanda.ClassLibrary.ScandaConector.deleteHistory "), "E"); Console.WriteLine("Error de Token"); Console.WriteLine(ex.Message); } catch (Exception ex) { await Logger.sendLog(string.Format("{0} | {1} | {2}", ex.Message, ex.StackTrace, "Scanda.ClassLibrary.ScandaConector.deleteHistory "), "E"); Console.WriteLine(ex.Message); } } } } }