Ejemplo n.º 1
0
        public async Task SyncAllVaults(
            params VaultIndex[] exclude)
        {
            List <VaultIndex>        excludeVaults = new List <VaultIndex>(exclude);
            IEnumerable <VaultIndex> matches       = VaultIndexes.Where(vi => vi.SyncMode == Common.SyncMode.CloudProvider && !excludeVaults.Contains(vi));

            VaultIndex[] allCloudSyncVaults = matches.Any() ? matches.ToArray() : null;
            if (allCloudSyncVaults != null)
            {
                DLoggerManager.Instance.Logger.Log(LoggerMessageType.VerboseLow | LoggerMessageType.Information, "CloudStorageSyncManager Synchronising all cloud sync vaults.");

                foreach (VaultIndex curIndex in allCloudSyncVaults)
                {
                    if (curIndex.SyncStatus.Status != CloudProviderSyncStatus.SyncStatus.UpToDate)
                    {
                        await SyncVault(curIndex);

                        SyncComplete?.Invoke(this, EventArgs.Empty);
                    }
                }
            }
            else
            {
                DLoggerManager.Instance.Logger.Log(LoggerMessageType.VerboseLow | LoggerMessageType.Information, "CloudStorageSyncManager No vaults configured for cloud synchronising, so skipping SyncAllVaults.");
            }
        }
Ejemplo n.º 2
0
        public void SyncFiles()
        {
            var filesNeedAddToDB    = new List <File>();
            var filesNeedAddToLocal = new List <File>();

            foreach (var localFile in Files)
            {
                if (!_dataProvider.FileExists(localFile.Path))
                {
                    filesNeedAddToDB.Add(localFile);
                }
            }

            foreach (var dbFilePath in _dataProvider.GetFilesPaths())
            {
                var localFile = Files.FirstOrDefault(f => f.Path == dbFilePath);

                if (localFile == null)
                {
                    filesNeedAddToLocal.Add(_dataProvider.GetFile(dbFilePath));
                }
            }

            Files.AddRange(filesNeedAddToLocal);
            _dataProvider.AddFiles(filesNeedAddToDB.ToArray());

            SyncComplete?.Invoke(this);
        }
Ejemplo n.º 3
0
        private async void AllContactsFinished()
        {
            IsSyncing = false;
            await BookSyncContactsHelper.SaveBookSyncContacts();

            //wait a second and then reset
            await Task.Delay(500);

            LoadContacts();

            SyncComplete?.Invoke(this, new EventArgs());
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Target syncing done as a coroutine, breaking between each sourceObject with field targets,
 /// to prevent attempting to set too many fields at once.
 /// </summary>
 public IEnumerator SyncFieldsCR()
 {
     if (flattenedTargets == null)
     {
         Debug.LogWarning($"No sync targets found for {name}");
         yield break;
     }
     foreach (var kv in flattenedTargets)
     {
         var sourceObject = kv.Key;
         var targets      = kv.Value;
         foreach (var target in targets)
         {
             var value = FirebaseRemoteConfig.GetValue(target.FullKeyString);
             if (value.Source == ValueSource.RemoteValue)
             {
                 if (target.Field.GetValue(sourceObject)?.ToString() == value.StringValue)
                 {
                     continue;
                 }
                 object typedValue = value.StringValue;
                 if (typeof(bool).IsAssignableFrom(target.Field.FieldType))
                 {
                     typedValue = value.BooleanValue;
                 }
                 else if (typeof(double).IsAssignableFrom(target.Field.FieldType))
                 {
                     typedValue = value.DoubleValue;
                 }
                 else if (typeof(int).IsAssignableFrom(target.Field.FieldType))
                 {
                     typedValue = (int)value.LongValue;
                 }
                 target.Field.SetValue(sourceObject, typedValue);
             }
             else
             {
                 Debug.Log($"No RemoteConfig value found for key {target.FullKeyString}");
             }
             yield return(0);
         }
     }
     SyncComplete?.Invoke(this, null);
 }
Ejemplo n.º 5
0
        private async System.Threading.Tasks.Task DoSync()
        {
            try
            {
                // Load config
                Config config = Config.LoadConfiguration();
                if (string.IsNullOrEmpty(config.ModsDirectory) || string.IsNullOrEmpty(config.ResourcePackDirectory) || string.IsNullOrEmpty(config.ConfigFilesDirectory))
                {
                    Task.Errors.Add("Configuration file not setup");
                    SyncComplete?.Invoke(this, new EventArgs());
                    return;
                }

                HashSet <string> clientSideWhiteListMods = new HashSet <string>();
                if (File.Exists("mods_white_list.txt"))
                {
                    foreach (string line in File.ReadAllLines("mods_white_list.txt"))
                    {
                        clientSideWhiteListMods.Add(line);
                    }
                }

                HashSet <string> clientSideWhiteListResourcePacks = new HashSet <string>();
                if (File.Exists("resourcepacks_white_list.txt"))
                {
                    foreach (string line in File.ReadAllLines("resourcepacks_white_list.txt"))
                    {
                        clientSideWhiteListResourcePacks.Add(line);
                    }
                }

                List <Task> tasks = new List <Task>();

                // Load database stuff
                List <MCSyncFile> syncFiles = await MCSyncFile.GetMCSyncFiles();

                // Drive off of files
                List <string> handledFiles = new List <string>();

                // Mod Files
                IEnumerable <MCSyncFile> modSyncFiles = syncFiles.Where(f => f.FileType == MCSyncFile.FileTypes.mods && IsDownloadTypeValid(config.Mode, f.DownloadType));
                foreach (string file in Directory.EnumerateFiles(config.ModsDirectory, "*", SearchOption.AllDirectories))
                {
                    string     strippedFile = StripDirectory(file, MCSyncFile.FileTypes.mods);
                    byte[]     fileHash     = CalculateHash(file);
                    MCSyncFile syncFile     = modSyncFiles.FirstOrDefault(f => f.Filename == strippedFile);
                    if (syncFile == null)
                    {
                        if (!clientSideWhiteListMods.Contains(strippedFile))
                        {
                            // Extrinsic, delete
                            Task deleteTask = new Task($"Delete mod file {strippedFile}", () =>
                            {
                                File.Delete(file);
                                return(true);
                            });
                            tasks.Add(deleteTask);
                            TaskAdded?.Invoke(this, deleteTask);
                        }
                    }
                    else if (!syncFile.Checksum.SequenceEqual(fileHash))
                    {
                        Task updateTask = new Task($"Update mod file {strippedFile}", () => DownloadFile(syncFile.FileType, config.ModsDirectory, strippedFile, syncFile.DownloadType));
                        tasks.Add(updateTask);
                        TaskAdded?.Invoke(this, updateTask);
                    }

                    handledFiles.Add(strippedFile);
                }

                // Resource Pack Files
                IEnumerable <MCSyncFile> resourcePackSyncFiles = syncFiles.Where(f => f.FileType == MCSyncFile.FileTypes.resourcepacks && IsDownloadTypeValid(config.Mode, f.DownloadType));
                foreach (string file in Directory.EnumerateFiles(config.ResourcePackDirectory, "*", SearchOption.AllDirectories))
                {
                    string     strippedFile = StripDirectory(file, MCSyncFile.FileTypes.resourcepacks);
                    byte[]     fileHash     = CalculateHash(file);
                    MCSyncFile syncFile     = resourcePackSyncFiles.FirstOrDefault(f => f.Filename == strippedFile);
                    if (syncFile == null)
                    {
                        if (!clientSideWhiteListResourcePacks.Contains(strippedFile))
                        {
                            // Extrinsic, delete
                            Task deleteTask = new Task($"Delete resource pack file {strippedFile}", () =>
                            {
                                File.Delete(file);
                                return(true);
                            });
                            tasks.Add(deleteTask);
                            TaskAdded?.Invoke(this, deleteTask);
                        }
                    }
                    else if (!syncFile.Checksum.SequenceEqual(fileHash))
                    {
                        Task updateTask = new Task($"Update resource pack file {strippedFile}", () => DownloadFile(syncFile.FileType, config.ResourcePackDirectory, strippedFile, syncFile.DownloadType));
                        tasks.Add(updateTask);
                        TaskAdded?.Invoke(this, updateTask);
                    }

                    handledFiles.Add(strippedFile);
                }

                // Config
                IEnumerable <MCSyncFile> configSyncFiles = syncFiles.Where(f => f.FileType == MCSyncFile.FileTypes.config && IsDownloadTypeValid(config.Mode, f.DownloadType));
                foreach (MCSyncFile configFile in configSyncFiles)
                {
                    if (File.Exists(config.ConfigFilesDirectory + "\\" + configFile.Filename))
                    {
                        byte[] fileHash = CalculateHash(config.ConfigFilesDirectory + "\\" + configFile.Filename);
                        if (!fileHash.SequenceEqual(configFile.Checksum))
                        {
                            Task updateTask = new Task($"Update config file {configFile.Filename}", () => DownloadFile(configFile.FileType, config.ConfigFilesDirectory, configFile.Filename, configFile.DownloadType));
                            tasks.Add(updateTask);
                            TaskAdded?.Invoke(this, updateTask);
                        }

                        handledFiles.Add(configFile.Filename);
                    }
                }

                // Missing Files
                IEnumerable <MCSyncFile> missingFiles = syncFiles.Where(f => IsDownloadTypeValid(config.Mode, f.DownloadType) && !handledFiles.Contains(f.Filename));
                foreach (MCSyncFile missingFile in missingFiles)
                {
                    if (missingFile.FileType == MCSyncFile.FileTypes.resourcepacks)
                    {
                        Task.Informations.Add($"The resource pack {missingFile.Filename} has been added.  Make sure to select it under the 'Available Resource Packs' column in the 'Options...'->'Resource Packs...' menu in Minecraft before attempting to join the server!");
                    }

                    string directory = "";
                    switch (missingFile.FileType)
                    {
                    case MCSyncFile.FileTypes.mods:
                        directory = config.ModsDirectory;
                        break;

                    case MCSyncFile.FileTypes.resourcepacks:
                        directory = config.ResourcePackDirectory;
                        break;

                    case MCSyncFile.FileTypes.config:
                        directory = config.ConfigFilesDirectory;
                        break;
                    }

                    Task downloadTask = new Task($"Download {missingFile.FileType.ToString()} file {missingFile.Filename}", () => DownloadFile(missingFile.FileType, directory, missingFile.Filename, missingFile.DownloadType));
                    tasks.Add(downloadTask);
                    TaskAdded?.Invoke(this, downloadTask);
                }

                // Perform Tasks
                foreach (Task task in tasks)
                {
                    task.Execute();
                }
            }
            catch (Exception ex)
            {
                Task.Errors.Add($"An unexpected error occurred during Sync: {ex.Message}");
            }

            SyncComplete?.Invoke(this, new EventArgs());
        }