예제 #1
0
        void DoImport()
        {
            while (photo_scan_running)
            {
                Thread.Sleep(1000);  // FIXME: we can do this with a better primitive!
            }

            FireEvent(ImportEvent.ImportStarted);
            App.Instance.Database.Sync = false;
            created_directories        = new Stack <SafeUri> ();
            imported_photos            = new List <uint> ();
            copied_files      = new List <SafeUri> ();
            original_files    = new List <SafeUri> ();
            metadata_importer = new MetadataImporter();
            CreatedRoll       = rolls.Create();

            EnsureDirectory(Global.PhotoUri);

            try {
                int i     = 0;
                int total = Photos.Count;
                foreach (var info in Photos.Items)
                {
                    if (import_cancelled)
                    {
                        RollbackImport();
                        return;
                    }

                    ThreadAssist.ProxyToMain(() => ReportProgress(i++, total));
                    try {
                        ImportPhoto(info, CreatedRoll);
                    } catch (Exception e) {
                        Log.DebugFormat("Failed to import {0}", info.DefaultVersion.Uri);
                        Log.DebugException(e);
                        FailedImports.Add(info.DefaultVersion.Uri);
                    }
                }

                PhotosImported = imported_photos.Count;
                FinishImport();
            } catch (Exception e) {
                RollbackImport();
                throw e;
            } finally {
                Cleanup();
            }
        }
예제 #2
0
        void DoImport(CancellationToken token)
        {
            scanThread?.Join();

            FireEvent(ImportEvent.ImportStarted);

            var importer = App.Instance.Container.Resolve <IImportController> ();

            importer.DoImport(App.Instance.Database, Photos, attachTags, DuplicateDetect, CopyFiles,
                              RemoveOriginals, (current, total) => ThreadAssist.ProxyToMain(() => ReportProgress(current, total)),
                              token);

            PhotosImported = importer.PhotosImported;
            FailedImports.Clear();
            FailedImports.AddRange(importer.FailedImports);

            if (!token.IsCancellationRequested)
            {
                importThread = null;
            }

            FireEvent(ImportEvent.ImportFinished);
        }