Beispiel #1
0
 private void AddRepository(SparkleRepoBase repo)
 {
     lock (this.repo_lock) {
         this.repositories.Add(repo);
         this.repositories.Sort((x, y) => string.Compare(x.Name, y.Name));
     }
 }
Beispiel #2
0
        private void AddRepository(string folder_path)
        {
            SparkleRepoBase repo        = null;
            string          folder_name = Path.GetFileName(folder_path);
            string          backend     = this.config.GetBackendForFolder(folder_name);

            try {
                repo = (SparkleRepoBase)Activator.CreateInstance(
                    Type.GetType("SparkleLib." + backend + ".SparkleRepo, SparkleLib." + backend),
                    new object [] { folder_path, this.config }
                    );
            } catch (Exception e) {
                SparkleLogger.LogInfo("Controller",
                                      "Failed to load '" + backend + "' backend for '" + folder_name + "': " + e.Message);

                return;
            }

            repo.ChangesDetected += delegate {
                UpdateState();
            };

            repo.SyncStatusChanged += delegate(SyncStatus status) {
                if (status == SyncStatus.Idle)
                {
                    ProgressPercentage = 0.0;
                    ProgressSpeed      = "";
                }

                UpdateState();
            };

            repo.ProgressChanged += delegate(double percentage, string speed) {
                ProgressPercentage = percentage;
                ProgressSpeed      = speed;

                UpdateState();
            };

            repo.NewChangeSet += delegate(SparkleChangeSet change_set) {
                if (NotificationsEnabled)
                {
                    NotificationRaised(change_set);
                }
            };

            repo.ConflictResolved += delegate {
                if (NotificationsEnabled)
                {
                    AlertNotificationRaised("Conflict detected",
                                            "Don't worry, SparkleShare made a copy of each conflicting file.");
                }
            };

            this.repositories.Add(repo);
            repo.Initialize();
        }
Beispiel #3
0
        private void RemoveRepository(string folder_path)
        {
            for (int i = 0; i < this.repositories.Count; i++)
            {
                SparkleRepoBase repo = this.repositories [i];

                if (repo.LocalPath.Equals(folder_path))
                {
                    repo.Dispose();
                    this.repositories.Remove(repo);
                    repo = null;

                    return;
                }
            }
        }
        // Removes a repository from the list of repositories and
        // updates the statusicon menu
        private void RemoveRepository(string folder_path)
        {
            string folder_name = Path.GetFileName(folder_path);

            for (int i = 0; i < Repositories.Count; i++)
            {
                SparkleRepoBase repo = Repositories [i];

                if (repo.Name.Equals(folder_name))
                {
                    repo.Dispose();
                    Repositories.Remove(repo);
                    repo = null;
                    break;
                }
            }
        }
Beispiel #5
0
        private void OnFilesChanged(List <string> changed_files_in_basedir)
        {
            List <string> triggered_repos = new List <string> ();

            foreach (string file in changed_files_in_basedir)
            {
                string repo_name;
                int    path_sep_index = file.IndexOf(Path.DirectorySeparatorChar);

                if (path_sep_index >= 0)
                {
                    repo_name = file.Substring(0, path_sep_index);
                }
                else
                {
                    repo_name = file;
                }

                repo_name = Path.GetFileNameWithoutExtension(repo_name);
                SparkleRepoBase repo = GetRepoByName(repo_name);

                if (repo == null)
                {
                    continue;
                }

                if (!triggered_repos.Contains(repo_name))
                {
                    triggered_repos.Add(repo_name);

                    FileActivityTask task = MacActivityTask(repo,
                                                            new FileSystemEventArgs(WatcherChangeTypes.Changed, file, "Unknown"));

                    task();
                }
            }
        }
 private FileActivityTask MacActivityTask(SparkleRepoBase repo, FileSystemEventArgs fse_args)
 {
     return(delegate { new Thread(() => { repo.OnFileActivity(fse_args); }).Start(); });
 }
Beispiel #7
0
        private void AddRepository(string folder_path)
        {
            SparkleRepoBase repo        = null;
            string          folder_name = Path.GetFileName(folder_path);
            string          backend     = Config.GetBackendForFolder(folder_name);

            try {
                repo = (SparkleRepoBase)Activator.CreateInstance(
                    Type.GetType("SparkleLib." + backend + ".SparkleRepo, SparkleLib." + backend),
                    new object [] { folder_path, Config });
            } catch (Exception e) {
                SparkleLogger.LogInfo("Controller", "Failed to load backend '" + backend + "' for '" + folder_name + "': ", e);
                return;
            }

            repo.ChangesDetected += delegate {
                UpdateState();
            };

            repo.SyncStatusChanged += delegate(SyncStatus status) {
                if (status == SyncStatus.Idle)
                {
                    ProgressPercentage = 0.0;
                    ProgressSpeedUp    = 0.0;
                    ProgressSpeedDown  = 0.0;
                }

                UpdateState();
            };

            repo.ProgressChanged += delegate {
                ProgressPercentage = 0.0;
                ProgressSpeedUp    = 0.0;
                ProgressSpeedDown  = 0.0;

                double percentage = 0.0;
                int    repo_count = 0;

                foreach (SparkleRepoBase rep in Repositories)
                {
                    if (rep.ProgressPercentage > 0)
                    {
                        percentage += rep.ProgressPercentage;
                        repo_count++;
                    }

                    if (rep.Status == SyncStatus.SyncUp)
                    {
                        ProgressSpeedUp += rep.ProgressSpeed;
                    }

                    if (rep.Status == SyncStatus.SyncDown)
                    {
                        ProgressSpeedDown += rep.ProgressSpeed;
                    }
                }

                if (repo_count > 0)
                {
                    ProgressPercentage = percentage / repo_count;
                }

                UpdateState();
            };

            repo.NewChangeSet += delegate(SparkleChangeSet change_set) {
                if (AvatarsEnabled)
                {
                    change_set.User.AvatarFilePath = SparkleAvatars.GetAvatar(change_set.User.Email, 48, Config.FullPath);
                }

                NotificationRaised(change_set);
            };

            repo.ConflictResolved += delegate {
                AlertNotificationRaised("Resolved a file collision",
                                        "Local and server versions were kept.");
            };

            AddRepository(repo);
            repo.Initialize();
        }
Beispiel #8
0
 private void RemoveRepository(SparkleRepoBase repo)
 {
     lock (this.repo_lock)
         this.repositories.Remove(repo);
 }
Beispiel #9
0
        private void AddRepository(string folder_path)
        {
            SparkleRepoBase repo        = null;
            string          folder_name = Path.GetFileName(folder_path);
            string          backend     = this.config.GetBackendForFolder(folder_name);

            try {
                repo = (SparkleRepoBase)Activator.CreateInstance(
                    Type.GetType("SparkleLib." + backend + ".SparkleRepo, SparkleLib." + backend),
                    new object [] { folder_path, this.config });
            } catch (Exception e) {
                SparkleLogger.LogInfo("Controller", "Failed to load backend '" + backend + "' for '" + folder_name + "': ", e);
                return;
            }

            repo.ChangesDetected += delegate {
                UpdateState();
            };

            repo.SyncStatusChanged += delegate(SyncStatus status) {
                if (status == SyncStatus.Idle)
                {
                    ProgressPercentage = 0.0;
                    ProgressSpeedUp    = 0.0;
                    ProgressSpeedDown  = 0.0;
                }

                UpdateState();
            };

            repo.ProgressChanged += delegate {
                ProgressPercentage = 0.0;
                ProgressSpeedUp    = 0.0;
                ProgressSpeedDown  = 0.0;

                double percentage = 0.0;
                int    repo_count = 0;

                foreach (SparkleRepoBase rep in Repositories)
                {
                    if (rep.ProgressPercentage > 0)
                    {
                        percentage += rep.ProgressPercentage;
                        repo_count++;
                    }

                    if (rep.Status == SyncStatus.SyncUp)
                    {
                        ProgressSpeedUp += rep.ProgressSpeed;
                    }

                    if (rep.Status == SyncStatus.SyncDown)
                    {
                        ProgressSpeedDown += rep.ProgressSpeed;
                    }
                }

                if (repo_count > 0)
                {
                    ProgressPercentage = percentage / repo_count;
                }

                UpdateState();
            };

            repo.NewChangeSet += delegate(SparkleChangeSet change_set) {
                NotificationRaised(change_set);
            };

            repo.ConflictResolved += delegate {
                AlertNotificationRaised("Conflict happened", "Don't worry, we've made a copy of each conflicting file.");
            };

            this.repositories.Add(repo);
            repo.Initialize();
        }
Beispiel #10
0
 public ProjectInfo(SparkleRepoBase repo)
 {
     this.repo = repo;
 }
Beispiel #11
0
        // Adds a repository to the list of repositories
        private void AddRepository(string folder_path)
        {
            SparkleRepoBase repo        = null;
            string          folder_name = Path.GetFileName(folder_path);
            string          backend     = SparkleConfig.DefaultConfig.GetBackendForFolder(folder_name);

            try {
                repo = (SparkleRepoBase)Activator.CreateInstance(
                    Type.GetType("SparkleLib." + backend + ".SparkleRepo, SparkleLib." + backend),
                    folder_path
                    );
            } catch {
                SparkleHelpers.DebugInfo("Controller",
                                         "Failed to load \"" + backend + "\" backend for \"" + folder_name + "\"");

                return;
            }


            repo.NewChangeSet += delegate(SparkleChangeSet change_set) {
                if (NotificationRaised != null)
                {
                    NotificationRaised(change_set);
                }
            };

            repo.ConflictResolved += delegate {
                if (AlertNotificationRaised != null)
                {
                    AlertNotificationRaised("Conflict detected",
                                            "Don't worry, SparkleShare made a copy of each conflicting file.");
                }
            };

            repo.SyncStatusChanged += delegate(SyncStatus status) {
                if (status == SyncStatus.Idle)
                {
                    ProgressPercentage = 0.0;
                    ProgressSpeed      = "";
                }

                if (status == SyncStatus.Idle ||
                    status == SyncStatus.SyncUp ||
                    status == SyncStatus.SyncDown ||
                    status == SyncStatus.Error)
                {
                    UpdateState();
                }
            };

            repo.ProgressChanged += delegate(double percentage, string speed) {
                ProgressPercentage = percentage;
                ProgressSpeed      = speed;

                UpdateState();
            };

            repo.ChangesDetected += delegate {
                UpdateState();
            };

            this.repositories.Add(repo);
            repo.Initialize();
        }