public void OpenMediaFile(MediaFile mediaFile, bool preview = false) { string filePath = string.Empty; if (mediaFile is ImageFile || !preview) { filePath = Path.Combine(mediaFile.Source.RootedPath, mediaFile.RelativePathName); } else if (mediaFile is VideoFile) { FileSystemHandler.ClearWorkingDirectory(); using (GalleryDatabase database = GalleryDatabase.Open(Gallery.FilePath, Gallery.EncryptionAlgorithm, Gallery.Password, false)) { filePath = database.ExtractEntry(mediaFile.DatabasePreviewPathName, ObjectPool.CompleteWorkingDirectory); } } if (File.Exists(filePath)) { Process process = new Process() { StartInfo = { FileName = filePath, Verb = "Open" } }; process.Start(); } }
private void LoadThumbnailsThread(MediaFolder folder) { try { RaiseStatusUpdatedEvent("Loading thumbnails..."); using (GalleryDatabase database = GalleryDatabase.Open(Gallery.FilePath, Gallery.EncryptionAlgorithm, Gallery.Password, false)) { foreach (MediaFile mediaFile in folder.Files) { bool thumbnailLoaded = false; using (Stream stream = database.ExtractEntry(mediaFile.DatabaseThumbnailPathName)) { if (stream != null && stream.Length > 0) { mediaFile.ThumbnailImage = Image.FromStream(stream); thumbnailLoaded = true; } } if (thumbnailLoaded) { FileUpdated(mediaFile); } } } RaiseDatabaseOperationCompletedEvent(OperationType.LoadThumbnails); } catch (Exception ex) { CommonWorker.ShowError(ex); } }
private void LoadGalleryThread() { try { RaiseStatusUpdatedEvent("Loading gallery (" + Gallery.FilePath + ")..."); using (GalleryDatabase database = GalleryDatabase.Open(Gallery.FilePath, Gallery.EncryptionAlgorithm, Gallery.Password, false)) { using (Stream stream = database.ExtractEntry(GALLERY_FILE_NAME)) { XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings() { CheckCharacters = false }); DataContractSerializer serializer = new DataContractSerializer(typeof(Gallery), _serializableDataObjectTypes); Gallery = (Gallery)serializer.ReadObject(reader, true); Gallery.UpdateMediaCount(); reader.Close(); } } RaiseGalleryLoadedEvent(); Gallery.Sources.ForEach(source => FolderAdded(source.RootFolder)); RaiseDatabaseOperationCompletedEvent(OperationType.LoadGallery); } catch (Exception ex) { CommonWorker.ShowError(ex); } }
public async Task Run() { // gather package numbers from gallery database GalleryTotalsData totalsData; _logger.LogInformation("Gathering Gallery Totals from {GalleryDataSource}/{GalleryInitialCatalog}...", GalleryDatabase.DataSource, GalleryDatabase.InitialCatalog); using (var connection = await GalleryDatabase.ConnectTo()) using (var transaction = connection.BeginTransaction(IsolationLevel.Snapshot)) { totalsData = (await connection.QueryWithRetryAsync <GalleryTotalsData>( GalleryQuery, commandType: CommandType.Text, transaction: transaction)).First(); } _logger.LogInformation("Total packages: {TotalPackagesCount}", totalsData.TotalPackages); _logger.LogInformation("Unique packages: {UniquePackagesCount}", totalsData.UniquePackages); // gather download count data from statistics warehouse _logger.LogInformation("Gathering Gallery Totals from {StatisticsDataSource}/{StatisticsInitialCatalog}...", StatisticsDatabase.DataSource, StatisticsDatabase.InitialCatalog); using (var connection = await StatisticsDatabase.ConnectTo()) using (var transaction = connection.BeginTransaction(IsolationLevel.Snapshot)) { totalsData.Downloads = (await connection.ExecuteScalarWithRetryAsync <long>( WarehouseStoredProcedureName, commandType: CommandType.StoredProcedure, commandTimeout: TimeSpan.FromMinutes(5), transaction: transaction)); } _logger.LogInformation("Total downloads: {TotalDownloadsCount}", totalsData.Downloads); // write to blob totalsData.LastUpdateDateUtc = DateTime.UtcNow; var reportText = JsonConvert.SerializeObject(totalsData); foreach (var storageContainerTarget in Targets) { try { var targetBlobContainer = await GetBlobContainer(storageContainerTarget); var blob = targetBlobContainer.GetBlockBlobReference(ReportName); _logger.LogInformation("Writing report to {ReportUri}", blob.Uri.AbsoluteUri); blob.Properties.ContentType = "application/json"; await blob.UploadTextAsync(reportText); _logger.LogInformation("Wrote report to {ReportUri}", blob.Uri.AbsoluteUri); } catch (Exception ex) { _logger.LogError("Error writing report to storage account {StorageAccount}, container {ReportContainer}. {Exception}", storageContainerTarget.StorageAccount.Credentials.AccountName, storageContainerTarget.ContainerName, ex); } } }
private void ScanSourceThread(GallerySource source, bool reScan) { try { using (GalleryDatabase database = GalleryDatabase.Open(Gallery.FilePath, Gallery.EncryptionAlgorithm, Gallery.Password, true)) { database.RegisterStreamProvider <Gallery>(GalleryMetadataStreamProvider); database.RegisterStreamProvider <MediaFile>(MediaFileStreamProvider); FileSystemHandler.ScanFolders(database, source, reScan); source.ScanDate = DateTime.Now; source.UpdateMediaCount(); database.UpdateEntry(GALLERY_FILE_NAME, string.Empty, Gallery, true); database.Save(); } RaiseDatabaseOperationCompletedEvent(OperationType.ScanSource); } catch (Exception ex) { CommonWorker.ShowError(ex); } }
public void AddSource() { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog() { Description = "Please select a source root folder..." }; if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { GallerySource source = new GallerySource(folderBrowserDialog.SelectedPath, Gallery); if (Gallery.AddSource(source)) { using (GalleryDatabase database = GalleryDatabase.Open(Gallery.FilePath, Gallery.EncryptionAlgorithm, Gallery.Password, true)) { database.RegisterStreamProvider <Gallery>(GalleryMetadataStreamProvider); database.UpdateEntry(GALLERY_FILE_NAME, string.Empty, Gallery, true); database.Save(); } FolderAdded(source.RootFolder); } } }