示例#1
0
 public IEnumerable<IScannedImage> RecoverScannedImages()
 {
     StartRecovery();
     if (folderToRecoverFrom == null)
     {
         yield break;
     }
     try
     {
         recoveryIndexManager = new RecoveryIndexManager(folderToRecoverFrom);
         imageCount = recoveryIndexManager.Index.Images.Count;
         scannedDateTime = folderToRecoverFrom.LastWriteTime;
         if (imageCount > 0)
         {
             // If there are no images, do nothing. Don't delete the folder in case the index was corrupted somehow.
             switch (PromptToRecover())
             {
                 case DialogResult.Yes:
                     foreach (var scannedImage in DoRecover())
                     {
                         yield return scannedImage;
                     }
                     DeleteRecoveryFolder();
                     break;
                 case DialogResult.No:
                     DeleteRecoveryFolder();
                     break;
             }
         }
     }
     finally
     {
         FinishRecovery();
     }
 }
示例#2
0
            public bool Start(Action<IScannedImage> imageCallback)
            {
                Status = new OperationStatus
                {
                    StatusText = MiscResources.Recovering
                };
                cancel = false;

                folderToRecoverFrom = FindAndLockFolderToRecoverFrom();
                if (folderToRecoverFrom == null)
                {
                    return false;
                }
                try
                {
                    recoveryIndexManager = new RecoveryIndexManager(folderToRecoverFrom);
                    imageCount = recoveryIndexManager.Index.Images.Count;
                    scannedDateTime = folderToRecoverFrom.LastWriteTime;
                    if (imageCount == 0)
                    {
                        // If there are no images, do nothing. Don't delete the folder in case the index was corrupted somehow.
                        ReleaseFolderLock();
                        return false;
                    }
                    switch (PromptToRecover())
                    {
                        case DialogResult.Yes: // Recover
                            threadFactory.StartThread(() =>
                            {
                                try
                                {
                                    if (DoRecover(imageCallback))
                                    {
                                        ReleaseFolderLock();
                                        DeleteFolder();
                                        Status.Success = true;
                                    }
                                }
                                finally
                                {
                                    ReleaseFolderLock();
                                    InvokeFinished();
                                }
                            });
                            return true;
                        case DialogResult.No: // Delete
                            ReleaseFolderLock();
                            DeleteFolder();
                            break;
                        default: // Not Now
                            ReleaseFolderLock();
                            break;
                    }
                }
                catch (Exception)
                {
                    ReleaseFolderLock();
                    throw;
                }
                return false;
            }