Swipe Issues (#1745)
* Updated theme support to be able to customize the tile color dynamically from a theme via --tile-color. In addition, --theme-color will update apple-mobile-web-app-status-bar-style as well as the non-apple variants * Removed --manga-reader-bg-color as it wasn't used anywhere. Fixed double pagination on swipe. * Cleaned up some dead threshold code for swipe. * Started refactoring tests to use an abstract test class. Stopping because I should do on the .net 7 branch to avoid large merge conflicts. Tests need to be re-designed so they can run in parallel. * Fixed a bug in reading lists where when deleting an item, order could be miscalculated. * Started adding new information for stat service. Refactored time spent reading to be more accurate by taking average time against how much of the chapter the user has read. * Hooked up total time reading at server stat level. Don't show fancy graphs on mobile. * Added new stats for v0.7 * Added a test for Clearing want to read * Fixed a few tests that weren't resetting state between runs * Fixed some broken unit tests * Ensure all Series queries sort by a case invariant string. * Added more aggressive caching of images. This will result in a min delay on pages after a cover is changed. * Fixed a bug where if during new word count calculation, new word count is zero, restoring the old count wasn't working. * Cleaned up some of the code for getting time estimates * Fixed a bug where triggering swipe right wasn't working when there was no scroll * Delete the temp folder for creating a download after a full zip is created.
This commit is contained in:
parent
3d6de68089
commit
549e52b458
26 changed files with 488 additions and 339 deletions
|
@ -32,6 +32,7 @@ public interface IStatisticService
|
|||
IEnumerable<StatCount<int>> GetPagesReadCountByYear(int userId = 0);
|
||||
IEnumerable<StatCount<int>> GetWordsReadCountByYear(int userId = 0);
|
||||
Task UpdateServerStatistics();
|
||||
Task<long> TimeSpentReadingForUsersAsync(IList<int> userIds, IList<int> libraryIds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -62,18 +63,20 @@ public class StatisticService : IStatisticService
|
|||
.Where(p => libraryIds.Contains(p.LibraryId))
|
||||
.SumAsync(p => p.PagesRead);
|
||||
|
||||
var ids = await _context.AppUserProgresses
|
||||
.Where(p => p.AppUserId == userId)
|
||||
.Where(p => libraryIds.Contains(p.LibraryId))
|
||||
.Where(p => p.PagesRead > 0)
|
||||
.Select(p => new {p.ChapterId, p.SeriesId})
|
||||
.ToListAsync();
|
||||
// var ids = await _context.AppUserProgresses
|
||||
// .Where(p => p.AppUserId == userId)
|
||||
// .Where(p => libraryIds.Contains(p.LibraryId))
|
||||
// .Where(p => p.PagesRead > 0)
|
||||
// .Select(p => new {p.ChapterId, p.SeriesId})
|
||||
// .ToListAsync();
|
||||
|
||||
var chapterIds = ids.Select(id => id.ChapterId);
|
||||
//var chapterIds = ids.Select(id => id.ChapterId);
|
||||
|
||||
var timeSpentReading = await _context.Chapter
|
||||
.Where(c => chapterIds.Contains(c.Id))
|
||||
.SumAsync(c => c.AvgHoursToRead);
|
||||
// var timeSpentReading = await _context.Chapter
|
||||
// .Where(c => chapterIds.Contains(c.Id))
|
||||
// .SumAsync(c => c.AvgHoursToRead);
|
||||
|
||||
var timeSpentReading = await TimeSpentReadingForUsersAsync(new List<int>() {userId}, libraryIds);
|
||||
|
||||
var totalWordsRead = (long) Math.Round(await _context.AppUserProgresses
|
||||
.Where(p => p.AppUserId == userId)
|
||||
|
@ -275,6 +278,8 @@ public class StatisticService : IStatisticService
|
|||
.Distinct()
|
||||
.Count();
|
||||
|
||||
|
||||
|
||||
return new ServerStatisticsDto()
|
||||
{
|
||||
ChapterCount = await _context.Chapter.CountAsync(),
|
||||
|
@ -289,7 +294,8 @@ public class StatisticService : IStatisticService
|
|||
MostActiveLibraries = mostActiveLibrary,
|
||||
MostPopularSeries = mostPopularSeries,
|
||||
MostReadSeries = mostReadSeries,
|
||||
RecentlyRead = recentlyRead
|
||||
RecentlyRead = recentlyRead,
|
||||
TotalReadingTime = await TimeSpentReadingForUsersAsync(ArraySegment<int>.Empty, ArraySegment<int>.Empty)
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -483,6 +489,30 @@ public class StatisticService : IStatisticService
|
|||
await _unitOfWork.CommitAsync();
|
||||
}
|
||||
|
||||
public async Task<long> TimeSpentReadingForUsersAsync(IList<int> userIds, IList<int> libraryIds)
|
||||
{
|
||||
var query = _context.AppUserProgresses
|
||||
.AsSplitQuery();
|
||||
|
||||
if (userIds.Any())
|
||||
{
|
||||
query = query.Where(p => userIds.Contains(p.AppUserId));
|
||||
}
|
||||
if (libraryIds.Any())
|
||||
{
|
||||
query = query.Where(p => libraryIds.Contains(p.LibraryId));
|
||||
}
|
||||
|
||||
return (long) Math.Round(await query
|
||||
.Join(_context.Chapter,
|
||||
p => p.ChapterId,
|
||||
c => c.Id,
|
||||
(progress, chapter) => new {chapter, progress})
|
||||
.Where(p => p.chapter.AvgHoursToRead > 0)
|
||||
.SumAsync(p =>
|
||||
p.chapter.AvgHoursToRead * (p.progress.PagesRead / (1.0f * p.chapter.Pages))));
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<TopReadDto>> GetTopUsers(int days)
|
||||
{
|
||||
var libraries = (await _unitOfWork.LibraryRepository.GetLibrariesAsync()).ToList();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue