Ejemplo n.º 1
0
        public static void ToJson(string saveFilePath)
        {
            var dtos = DbContexts.GetLibrary_Flat_NoTracking().ToDtos();
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(dtos, Newtonsoft.Json.Formatting.Indented);

            System.IO.File.WriteAllText(saveFilePath, json);
        }
Ejemplo n.º 2
0
        public static LibraryStats GetCounts()
        {
            var libraryBooks = DbContexts.GetLibrary_Flat_NoTracking();

            var results = libraryBooks
                          .AsParallel()
                          .Select(lb => Liberated_Status(lb.Book))
                          .ToList();
            var booksFullyBackedUp  = results.Count(r => r == LiberatedStatus.Liberated);
            var booksDownloadedOnly = results.Count(r => r == LiberatedStatus.PartialDownload);
            var booksNoProgress     = results.Count(r => r == LiberatedStatus.NotLiberated);
            var booksError          = results.Count(r => r == LiberatedStatus.Error);

            Log.Logger.Information("Book counts. {@DebugInfo}", new { total = results.Count, booksFullyBackedUp, booksDownloadedOnly, booksNoProgress, booksError });

            var boolResults = libraryBooks
                              .AsParallel()
                              .Where(lb => lb.Book.HasPdf)
                              .Select(lb => Pdf_Status(lb.Book))
                              .ToList();
            var pdfsDownloaded    = boolResults.Count(r => r == LiberatedStatus.Liberated);
            var pdfsNotDownloaded = boolResults.Count(r => r == LiberatedStatus.NotLiberated);

            Log.Logger.Information("PDF counts. {@DebugInfo}", new { total = boolResults.Count, pdfsDownloaded, pdfsNotDownloaded });

            return(new(booksFullyBackedUp, booksDownloadedOnly, booksNoProgress, booksError, pdfsDownloaded, pdfsNotDownloaded));
        }
Ejemplo n.º 3
0
        public static void FullReIndex(SearchEngine engine = null)
        {
            engine ??= new SearchEngine();
            var library = DbContexts.GetLibrary_Flat_NoTracking();

            engine.CreateNewIndex(library);
        }
Ejemplo n.º 4
0
        private static async Task <int> importIntoDbAsync(List <ImportItem> importItems)
        {
            using var context = DbContexts.GetContext();
            var libraryImporter = new LibraryImporter(context);
            var newCount        = await Task.Run(() => libraryImporter.Import(importItems));

            context.SaveChanges();

            return(newCount);
        }
Ejemplo n.º 5
0
        public static void UpdateBookTags(Book book)
        {
            var engine = new SearchEngine(DbContexts.GetContext());

            try
            {
                engine.UpdateTags(book.AudibleProductId, book.UserDefinedItem.Tags);
            }
            catch (FileNotFoundException)
            {
                FullReIndex();
                engine.UpdateTags(book.AudibleProductId, book.UserDefinedItem.Tags);
            }
        }
Ejemplo n.º 6
0
        public static SearchResultSet Search(string searchString)
        {
            var engine = new SearchEngine(DbContexts.GetContext());

            try
            {
                return(engine.Search(searchString));
            }
            catch (FileNotFoundException)
            {
                FullReIndex();
                return(engine.Search(searchString));
            }
        }
Ejemplo n.º 7
0
        private static T performSearchEngineFunc_safe <T>(Func <SearchEngine, T> action)
        {
            var engine = new SearchEngine(DbContexts.GetContext());

            try
            {
                return(action(engine));
            }
            catch (FileNotFoundException)
            {
                FullReIndex();
                return(action(engine));
            }
        }
Ejemplo n.º 8
0
        private static void performSearchEngineAction_safe(Action <SearchEngine> action)
        {
            var engine = new SearchEngine(DbContexts.GetContext());

            try
            {
                action(engine);
            }
            catch (FileNotFoundException)
            {
                FullReIndex();
                action(engine);
            }
        }
Ejemplo n.º 9
0
        public static void ToCsv(string saveFilePath)
        {
            var dtos = DbContexts.GetLibrary_Flat_NoTracking().ToDtos();

            if (!dtos.Any())
            {
                return;
            }

            using var writer = new System.IO.StreamWriter(saveFilePath);
            using var csv    = new CsvWriter(writer, System.Globalization.CultureInfo.CurrentCulture);

            csv.WriteHeader(typeof(ExportDto));
            csv.NextRecord();
            csv.WriteRecords(dtos);
        }
Ejemplo n.º 10
0
        private static List <LibraryBook> removeBooks(List <string> idsToRemove)
        {
            using var context = DbContexts.GetContext();
            var libBooks = context.GetLibrary_Flat_NoTracking();

            var removeLibraryBooks = libBooks.Where(lb => idsToRemove.Contains(lb.Book.AudibleProductId)).ToList();

            context.LibraryBooks.RemoveRange(removeLibraryBooks);
            context.Books.RemoveRange(removeLibraryBooks.Select(lb => lb.Book));

            var qtyChanges = context.SaveChanges();

            if (qtyChanges > 0)
            {
                finalizeLibrarySizeChange();
            }

            return(removeLibraryBooks);
        }
Ejemplo n.º 11
0
        private static async Task <int> importIntoDbAsync(List <ImportItem> importItems)
        {
            logTime("importIntoDbAsync -- pre db");
            using var context = DbContexts.GetContext();
            var libraryBookImporter = new LibraryBookImporter(context);
            var newCount            = await Task.Run(() => libraryBookImporter.Import(importItems));

            logTime("importIntoDbAsync -- post Import()");
            var qtyChanges = context.SaveChanges();

            logTime("importIntoDbAsync -- post SaveChanges");

            if (qtyChanges > 0)
            {
                await Task.Run(() => finalizeLibrarySizeChange());
            }
            logTime("importIntoDbAsync -- post finalizeLibrarySizeChange");

            return(newCount);
        }
Ejemplo n.º 12
0
        public static int UpdateUserDefinedItem(Book book)
        {
            try
            {
                using var context = DbContexts.GetContext();

                // Attach() NoTracking entities before SaveChanges()
                context.Attach(book.UserDefinedItem).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                var qtyChanges = context.SaveChanges();
                if (qtyChanges > 0)
                {
                    SearchEngineCommands.UpdateLiberatedStatus(book);
                    SearchEngineCommands.UpdateBookTags(book);
                    BookUserDefinedItemCommitted?.Invoke(null, book.AudibleProductId);
                }

                return(qtyChanges);
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex, $"Error updating {nameof(book.UserDefinedItem)}");
                throw;
            }
        }
Ejemplo n.º 13
0
        public static void FullReIndex()
        {
            var engine = new SearchEngine(DbContexts.GetContext());

            engine.CreateNewIndex();
        }
Ejemplo n.º 14
0
        public static void ToXlsx(string saveFilePath)
        {
            using var context = DbContexts.GetContext();
            var dtos = context.GetLibrary_Flat_NoTracking().ToDtos();

            var workbook = new XSSFWorkbook();
            var sheet    = workbook.CreateSheet("Library");

            var detailSubtotalFont = workbook.CreateFont();

            detailSubtotalFont.IsBold = true;

            var detailSubtotalCellStyle = workbook.CreateCellStyle();

            detailSubtotalCellStyle.SetFont(detailSubtotalFont);

            // headers
            var rowIndex = 0;
            var row      = sheet.CreateRow(rowIndex);

            var columns = new[] {
                nameof(ExportDto.Account),
                nameof(ExportDto.DateAdded),
                nameof(ExportDto.AudibleProductId),
                nameof(ExportDto.Locale),
                nameof(ExportDto.Title),
                nameof(ExportDto.AuthorNames),
                nameof(ExportDto.NarratorNames),
                nameof(ExportDto.LengthInMinutes),
                nameof(ExportDto.Publisher),
                nameof(ExportDto.PdfUrl),
                nameof(ExportDto.SeriesNames),
                nameof(ExportDto.SeriesOrder),
                nameof(ExportDto.CommunityRatingOverall),
                nameof(ExportDto.CommunityRatingPerformance),
                nameof(ExportDto.CommunityRatingStory),
                nameof(ExportDto.PictureId),
                nameof(ExportDto.IsAbridged),
                nameof(ExportDto.DatePublished),
                nameof(ExportDto.CategoriesNames),
                nameof(ExportDto.MyRatingOverall),
                nameof(ExportDto.MyRatingPerformance),
                nameof(ExportDto.MyRatingStory),
                nameof(ExportDto.MyLibationTags)
            };
            var col = 0;

            foreach (var c in columns)
            {
                var cell = row.CreateCell(col++);
                var name = ExportDto.GetName(c);
                cell.SetCellValue(name);
                cell.CellStyle = detailSubtotalCellStyle;
            }

            var dateFormat = workbook.CreateDataFormat();
            var dateStyle  = workbook.CreateCellStyle();

            dateStyle.DataFormat = dateFormat.GetFormat("MM/dd/yyyy HH:mm:ss");

            rowIndex++;

            // Add data rows
            foreach (var dto in dtos)
            {
                col = 0;

                row = sheet.CreateRow(rowIndex);

                row.CreateCell(col++).SetCellValue(dto.Account);

                var dateAddedCell = row.CreateCell(col++);
                dateAddedCell.CellStyle = dateStyle;
                dateAddedCell.SetCellValue(dto.DateAdded);

                row.CreateCell(col++).SetCellValue(dto.AudibleProductId);
                row.CreateCell(col++).SetCellValue(dto.Locale);
                row.CreateCell(col++).SetCellValue(dto.Title);
                row.CreateCell(col++).SetCellValue(dto.AuthorNames);
                row.CreateCell(col++).SetCellValue(dto.NarratorNames);
                row.CreateCell(col++).SetCellValue(dto.LengthInMinutes);
                row.CreateCell(col++).SetCellValue(dto.Publisher);
                row.CreateCell(col++).SetCellValue(dto.PdfUrl);
                row.CreateCell(col++).SetCellValue(dto.SeriesNames);
                row.CreateCell(col++).SetCellValue(dto.SeriesOrder);

                col = createCell(row, col, dto.CommunityRatingOverall);
                col = createCell(row, col, dto.CommunityRatingPerformance);
                col = createCell(row, col, dto.CommunityRatingStory);

                row.CreateCell(col++).SetCellValue(dto.PictureId);
                row.CreateCell(col++).SetCellValue(dto.IsAbridged);

                var datePubCell = row.CreateCell(col++);
                datePubCell.CellStyle = dateStyle;
                if (dto.DatePublished.HasValue)
                {
                    datePubCell.SetCellValue(dto.DatePublished.Value);
                }
                else
                {
                    datePubCell.SetCellValue("");
                }

                row.CreateCell(col++).SetCellValue(dto.CategoriesNames);

                col = createCell(row, col, dto.MyRatingOverall);
                col = createCell(row, col, dto.MyRatingPerformance);
                col = createCell(row, col, dto.MyRatingStory);

                row.CreateCell(col++).SetCellValue(dto.MyLibationTags);

                rowIndex++;
            }

            using var fileData = new System.IO.FileStream(saveFilePath, System.IO.FileMode.Create);
            workbook.Write(fileData);
        }