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); } } } }
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; } }