public async Task <bool> IsDuplicate(StagedItem stagedItem) { var duplicateCandidates = await _database.GetNameClashes(CreateBaseName(stagedItem)); // duplicate --> same date --> name clash foreach (var duplicateCandidateName in duplicateCandidates) { var item = await _database.GetItemByName(duplicateCandidateName); var newFile = new FileInfo(stagedItem.FilePath); var existingFile = File.Exists(GetOriginalMediaPath(item)) ? new FileInfo(GetOriginalMediaPath(item)) : new FileInfo(GetMediaPath(item)); if (newFile.Length == existingFile.Length) { var newBytes = await IOHelper.OpenBytes(newFile.FullName); var existingBytes = await IOHelper.OpenBytes(existingFile.FullName); if (newBytes.SequenceEqual(existingBytes)) { return(true); } } } return(false); }
public async Task SaveNewItem(StagedItem newItem) { if (string.IsNullOrEmpty(newItem.FilePath)) { newItem.Status = MediaItemStatus.Error; newItem.StatusMessage = "File path is missing"; return; } var originalName = newItem.Name; newItem.Name = await CreateUniqueName(newItem); newItem.ContentFileName = newItem.Name + Path.GetExtension(newItem.FilePath); var mediaItemFilePath = GetMediaPath(newItem); var thumbnailFilePath = GetThumbnailPath(newItem); try { await IOHelper.CopyFile(newItem.FilePath, mediaItemFilePath); await IOHelper.SaveBytes(newItem.Thumbnail, GetThumbnailPath(newItem)); await _database.AddMediaItem(newItem); newItem.Status = MediaItemStatus.Saved; foreach (var newTag in newItem.Tags.Where(x => !Tags.Contains(x))) { Tags.Add(newTag); } if (newItem.MediaType == MediaType.Image) { ImageCount++; } else { VideoCount++; } CollectionChanged?.Invoke(this, EventArgs.Empty); } catch (Exception e) { newItem.Name = originalName; newItem.ContentFileName = ""; newItem.Status = MediaItemStatus.Error; newItem.StatusMessage = e.Message; await IOHelper.DeleteFile(mediaItemFilePath); await IOHelper.DeleteFile(thumbnailFilePath); } }