예제 #1
0
        public void FinishFetcher(StorageType selected_storage_type)
        {
            this.watcher.EnableRaisingEvents = false;
            string identifier = this.fetcher.Complete(selected_storage_type);

            string target_folder_path = DetermineFolderPath();
            string target_folder_name = Path.GetFileName(target_folder_path);

            try {
                Directory.Move(this.fetcher.TargetFolder, target_folder_path);
            } catch (Exception e) {
                Logger.LogInfo("Controller", "Error moving directory, trying again...", e);

                try {
                    ClearDirectoryAttributes(this.fetcher.TargetFolder);
                    Directory.Move(this.fetcher.TargetFolder, target_folder_path);
                } catch (Exception x) {
                    Logger.LogInfo("Controller", "Error moving directory", x);

                    this.fetcher.Dispose();
                    this.fetcher = null;
                    this.watcher.EnableRaisingEvents = true;
                    return;
                }
            }

            string backend = BaseFetcher.GetBackend(this.fetcher.RemoteUrl.ToString());

            Config.AddFolder(target_folder_name, identifier, this.fetcher.RemoteUrl.ToString(), backend);

            if (this.fetcher.FetchedRepoStorageType != StorageType.Plain)
            {
                Config.SetFolderOptionalAttribute(target_folder_name,
                                                  "storage_type", this.fetcher.FetchedRepoStorageType.ToString());
            }

            if (this.fetcher.OriginalFetcherInfo.AnnouncementsUrl != null)
            {
                Config.SetFolderOptionalAttribute(target_folder_name, "announcements_url",
                                                  this.fetcher.OriginalFetcherInfo.AnnouncementsUrl);
            }

            AddRepository(target_folder_path);
            RepositoriesLoaded = true;

            FolderListChanged();
            FolderFetched(this.fetcher.RemoteUrl.ToString(), this.fetcher.Warnings.ToArray());

            this.fetcher.Dispose();
            this.fetcher = null;

            this.watcher.EnableRaisingEvents = true;
        }
예제 #2
0
        public void StartFetcher(SparkleFetcherInfo info)
        {
            string canonical_name = Path.GetFileName(info.RemotePath);
            string backend        = info.Backend;

            if (string.IsNullOrEmpty(backend))
            {
                backend = BaseFetcher.GetBackend(info.Address);
            }

            info.TargetDirectory = Path.Combine(Config.TmpPath, canonical_name);

            if (Directory.Exists(info.TargetDirectory))
            {
                Directory.Delete(info.TargetDirectory, recursive: true);
            }

            try {
                this.fetcher = (BaseFetcher)Activator.CreateInstance(
                    Type.GetType("Sparkles." + backend + "." + backend + "Fetcher, Sparkles." + backend),
                    new object [] { info, UserAuthenticationInfo });
            } catch (Exception e) {
                Logger.LogInfo("Controller",
                               "Failed to load '" + backend + "' backend for '" + canonical_name + "' " + e.Message);

                FolderFetchError(Path.Combine(info.Address, info.RemotePath).Replace(@"\", "/"),
                                 new string [] { "Failed to load \"" + backend + "\" backend for \"" + canonical_name + "\"" });

                return;
            }

            this.fetcher.Finished        += FetcherFinishedDelegate;
            this.fetcher.Failed          += FetcherFailedDelegate;
            this.fetcher.ProgressChanged += FetcherProgressChangedDelgate;

            this.fetcher.Start();
        }