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