Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }