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);
                        }
                    }
                }
            }
        }