Example #1
0
        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();
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
 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);
                }
            }
        }
Example #5
0
 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);
     }
 }
Example #6
0
        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);
                }
            }
        }