Esempio n. 1
0
        public static async Task AddNewItem(this StorageLibraryChange change)
        {
            if (change.IsOfType(StorageItemTypes.File))
            {
                if (await change.GetStorageItemAsync() == null)
                {
                    return;
                }
                if (IsItemPotentialMediafile(await change.GetStorageItemAsync()))
                {
                    var newFile = await SharedLogic.CreateMediafile((StorageFile)await change.GetStorageItemAsync());

                    newFile.FolderPath = Path.GetDirectoryName(newFile.Path);
                    if (SharedLogic.AddMediafile(newFile))
                    {
                        await SharedLogic.NotificationManager.ShowMessageAsync(string.Format("Mediafile Added. File Path: {0}", newFile.Path), 5);
                    }
                }
            }
        }
Esempio n. 2
0
        public static async Task UpdateChangedItem(this StorageLibraryChange change, IEnumerable <Mediafile> Library, LibraryService LibraryService)
        {
            if (change.IsOfType(StorageItemTypes.File))
            {
                if (IsItemInLibrary(change, Library, out Mediafile createdItem))
                {
                    var id = createdItem.Id;
                    createdItem = await SharedLogic.CreateMediafile((StorageFile)await change.GetStorageItemAsync());

                    createdItem.Id = id;
                    if (await LibraryService.UpdateMediafile(createdItem))
                    {
                        await SharedLogic.NotificationManager.ShowMessageAsync(string.Format("Mediafile Updated. File Path: {0}", createdItem.Path), 5);
                    }
                }
                else
                {
                    await AddNewItem(change);
                }
            }
        }
        private async Task ProcessFileChange(StorageLibraryChange change)
        {
            // Temp variable used for instantiating StorageFiles for sorting if needed later
            //StorageFile newFile = null;
            var extension = Path.GetExtension(change.Path);

            switch (change.ChangeType)
            {
            // New File in the Library
            case StorageLibraryChangeType.Created:
            case StorageLibraryChangeType.MovedIntoLibrary:
                if (FileTypes.Extensions.Contains(extension, StringComparer.InvariantCultureIgnoreCase))
                {
                    try
                    {
                        // Don't add file to gallery if it already exists.
                        if (MediaDatas.Any(data => data.MediaFile.Path == change.Path))
                        {
                            return;
                        }

                        var mediaFile = (StorageFile)(await change.GetStorageItemAsync());

                        if (mediaFile == null)
                        {
                            return;
                        }

                        await AddFileAsync(ImageSize, mediaFile);
                    }
                    catch (Exception e)
                    {
                        // Log Exception.
                        LifecycleLog.Exception(e);
                    }
                }
                break;

            // Renamed file
            case StorageLibraryChangeType.MovedOrRenamed:
                if (FileTypes.Extensions.Contains(extension, StringComparer.InvariantCultureIgnoreCase))
                {
                    try
                    {
                        var mediaData = GetMediaDataFromPath(change.PreviousPath, MediaDatas);
                        var newName   = Path.GetFileName(change.Path);

                        // If no MediaData could be found in Gallery for this renamed item AND there is an entry for it in App.MediaDatas (lostMediaData)
                        // that probably means it has been renamed while the application was off, so update its path and add it to the gallery.
                        var lostMediaFile = GetMediaFileFromPath(change.Path, _lostMediaFiles);
                        if (mediaData == null && lostMediaFile != null)
                        {
                            var lostMetaData = GetMediaMetaDataFromPath(change.PreviousPath, App.DatabaseMetaDatas);
                            // Update path on metadata.
                            lostMetaData.MediaFilePath = change.Path;
                            // Get current MediaData associated with metadata.
                            var lostMediaData = await MediaData.CreateFromMediaMetadataAsync(lostMetaData);

                            // If file can still not be found then return.
                            if (lostMediaData == null)
                            {
                                return;
                            }
                            // Add file to gallery, including the lost media data.
                            await AddFileAsync(ImageSize, lostMediaFile, false, lostMediaData);
                        }
                        else if (mediaData == null)
                        {
                            return;
                        }

                        // Don't rename file in gallery if it is already renamed
                        if (MediaDatas.Any(data => data.Title == newName))
                        {
                            return;
                        }

                        var mediaFile = (StorageFile)(await change.GetStorageItemAsync());
                        // Run on UI thread.
                        await App.Current.NavigationService.Frame.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                        {
                            // Update MediaFile of mediaData.
                            mediaData.MediaFile = mediaFile;
                        });

                        await mediaData.UpdateFileNameValuesAsync(newName);
                    }
                    catch (Exception e)
                    {
                        // Log Exception.
                        LifecycleLog.Exception(e);
                    }
                }
                break;

            // File Removed From Library
            case StorageLibraryChangeType.Deleted:
            case StorageLibraryChangeType.MovedOutOfLibrary:
                if (FileTypes.Extensions.Contains(extension, StringComparer.InvariantCultureIgnoreCase))
                {
                    try
                    {
                        // Only remove file from gallery if it exists in gallery.
                        if (MediaDatas.Any(data => data.MediaFile.Path == change.Path))
                        {
                            RemoveFile(change.Path);
                        }
                    }
                    catch (Exception e)
                    {
                        // Log Exception.
                        LifecycleLog.Exception(e);
                    }
                }
                break;

            // Modified Contents
            case StorageLibraryChangeType.ContentsChanged:
                if (FileTypes.Extensions.Contains(extension, StringComparer.InvariantCultureIgnoreCase))
                {
                    /*newFile = (StorageFile)(await change.GetStorageItemAsync());
                     * var imageProps = await newFile.Properties.GetImagePropertiesAsync();
                     * var dateTaken = imageProps.DateTaken;
                     * var dateModified = newFile.DateCreated;
                     * if (DateTimeOffset.Compare(dateTaken.AddSeconds(70), dateModified) > 0)
                     * {
                     *  // File was modified by the user
                     * }*/
                }
                break;

            // Ignored Cases
            case StorageLibraryChangeType.EncryptionChanged:
            case StorageLibraryChangeType.ContentsReplaced:
            case StorageLibraryChangeType.IndexingStatusChanged:
            default:
                // These are safe to ignore in this application
                break;
            }
        }