/// <summary> /// Runs the backup job. /// </summary> /// <param name="source">Album retreived from backup()</param> public void backupMove(Album source) { string srcPath, trgPath; #region Backing up from Source to Target // Back up folders. foreach (Album temp in source.getSubAlbum()) { srcPath = temp.getPath(); trgPath = srcPath.Replace(job.getSource().getPath(), job.getTarget().getPath()); mover.move(srcPath, trgPath, Mover.MOVE_BACK_UP); } // Back up files. foreach (Files temp in source.getMetadata()) { srcPath = temp.getFullpath(); trgPath = srcPath.Replace(job.getSource().getPath(), job.getTarget().getPath()); mover.move(srcPath, trgPath, Mover.MOVE_BACK_UP); } #endregion if (mover.getMoverError()) MessageBox.Show("Some file are unable to move. Check the log file for details.", "Error on Moving"); // Resets the mover and logs the completion. mover.resetMover(); mover.getLogger().logJobEnded(job.getJobName()); // Saves the meta data and job name list saveJobList(); saveJobNameList(); }
/// <summary> /// Folders Comparison of Comparator /// </summary> /// <param name="result"></param> /// <param name="resultAlbum"></param> /// <param name="recursive"></param> /// <param name="sourceAlbum"></param> /// <param name="targetAlbum"></param> private void compareFolders(SyncResult result, Album[] resultAlbum, Stack<CompareStackContent> recursive, Album sourceAlbum, Album targetAlbum) { try { /* Get the Necessary Metadata and Folder Info */ List<string> sourceSubFolders = getSubFoldersFromPath(sourceAlbum.getPath()); List<string> targetSubFolders = getSubFoldersFromPath(targetAlbum.getPath()); List<Album> sourceSubAlbums = sourceAlbum.getSubAlbum(); List<Album> targetSubAlbums = targetAlbum.getSubAlbum(); /* Merge into a Single List */ List<string> allSubFolders = mergeLists(sourceAlbum.getPath(), targetAlbum.getPath(), sourceSubFolders, targetSubFolders, sourceSubAlbums, targetSubAlbums); Album newSource, newTarget; foreach (string subName in allSubFolders) { bool SF = isFileExist(subName, sourceSubFolders); bool TF = isFileExist(subName, targetSubFolders); bool SA = isFileExist(subName, sourceSubAlbums); bool TA = isFileExist(subName, targetSubAlbums); if (SF && SA && TF && TA) // 1111 = 15 { // ALL EXIST: Recursion // Get the New Source and Target Album newSource = getSubAlbum(subName, sourceAlbum); newTarget = getSubAlbum(subName, targetAlbum); // Recursion = Push into Stack CompareStackContent tempStackContent = new CompareStackContent(); tempStackContent.source = newSource; tempStackContent.target = newTarget; recursive.Push(tempStackContent); continue; } else if (SF && SA && !TF && TA) // 1101 = 13 { // TARGET DELETED: Delete Source newSource = getSubAlbum(subName, sourceAlbum); targetAlbum.trim(Album.combinePath(targetAlbum.getPath(), subName), Album.TRIM_ALBUM); resultAlbum[SOURCE_DELETE].add(newSource); continue; } else if (SF && !SA && TF && !TA) // 1010 = 10 { // CREATE ALBUM METADATA: Recursion newSource = new Album(Album.combinePath(sourceAlbum.getPath(), subName)); newTarget = new Album(Album.combinePath(targetAlbum.getPath(), subName)); // ADD TO ALBUM sourceAlbum.add(newSource); targetAlbum.add(newTarget); // Recursion = Push into Stack CompareStackContent tempStackContent = new CompareStackContent(); tempStackContent.source = newSource; tempStackContent.target = newTarget; recursive.Push(tempStackContent); continue; } else if (SF && !SA && !TF && !TA) // 1000 = 8 { try { // NEW JOB: Move Source // POPULATE SA populate(sourceAlbum, Album.combinePath(sourceAlbum.getPath(), subName)); // COPY ALBUM SA -> TA populate(targetAlbum, Album.combinePath(targetAlbum.getPath(), subName), sourceAlbum); newSource = getSubAlbum(subName, sourceAlbum); resultAlbum[SOURCE_LATEST].add(newSource); } catch (UnauthorizedAccessException uae) { // IGNORE: } continue; } else if (!SF && SA && TF && TA) // 0111 = 7 { // DELETE TF newTarget = getSubAlbum(subName, targetAlbum); sourceAlbum.trim(Album.combinePath(sourceAlbum.getPath(), subName), Album.TRIM_ALBUM); resultAlbum[TARGET_DELETE].add(newTarget); continue; } else if (!SF && SA && !TF && TA) // 0101 = 5 { // ERASE ALBUM DATA sourceAlbum.trim(Album.combinePath(sourceAlbum.getPath(), subName), Album.TRIM_ALBUM); targetAlbum.trim(Album.combinePath(targetAlbum.getPath(), subName), Album.TRIM_ALBUM); continue; } else if (!SF && !SA && TF && !TA) // 0010 = 2 { try { // NEW JOB: Move Target // POPULATE TA populate(targetAlbum, Album.combinePath(targetAlbum.getPath(), subName)); // COPY ALBUM TA -> SA populate(sourceAlbum, Album.combinePath(sourceAlbum.getPath(), subName), targetAlbum); newTarget = getSubAlbum(subName, targetAlbum); resultAlbum[TARGET_LATEST].add(newTarget); } catch (UnauthorizedAccessException uae) { // IGNORE: } continue; } else // 0000 = 0 { throw new Exception(INVALID_ALBUM); } } } catch (UnauthorizedAccessException uae) { result.uaeThrown(); } }
/// <summary> /// Private function to get the sub-album from the album with the album name given: /// Return the album if the album exist, otherwise, return null. /// </summary> /// <param name="albumName">Album name to search.</param> /// <param name="parentAlbum">Parent Album containing the album name to be searched.</param> /// <returns> /// Album with the specified album name if it is exist. /// NULL otherwise. /// </returns> private Album getSubAlbum(string albumName, Album parentAlbum) { List<Album> parentSubAlbums = parentAlbum.getSubAlbum(); if (parentSubAlbums.Exists(delegate(Album tempAlbum) { return getNameFromPath(tempAlbum.getPath()).ToUpper() == albumName.ToUpper(); })) { return parentSubAlbums.Find(delegate(Album tempAlbum) { return getNameFromPath(tempAlbum.getPath()).ToUpper() == albumName.ToUpper(); }); } return null; }
private Album append(Album original, Album appendix) { Album appended = new Album(DIFF_ALBUM_NAME, ""); /* Get Files: */ foreach (Files metadata in original.getMetadata()) { appended.add(metadata); } foreach (Files metadata in appendix.getMetadata()) { appended.add(metadata); } /* Get Sub Folders: */ foreach (Album subAlbum in original.getSubAlbum()) { appended.add(subAlbum); } foreach (Album subAlbum in appendix.getSubAlbum()) { appended.add(subAlbum); } return appended; }