ReadingProgress.fromSessions constructor

ReadingProgress.fromSessions(
  1. String itemId,
  2. List<NupaleSession> sessions
)

Implementation

factory ReadingProgress.fromSessions(String itemId, List<NupaleSession> sessions) {
  if (sessions.isEmpty) {
    return ReadingProgress(itemId: itemId, itemName: '');
  }

  String itemName = '';
  int maxPage = 0;
  int totalPages = 0;
  int totalTime = 0;
  int totalPagesRead = 0;
  int lastRead = 0;
  Set<int> allPagesViewed = {};

  for (final session in sessions) {
    if (session.itemName.isNotEmpty) itemName = session.itemName;
    if (session.totalPages > totalPages) totalPages = session.totalPages;
    if (session.createdTime > lastRead) lastRead = session.createdTime;

    totalPagesRead += session.nupale;

    for (final entry in session.pagesDuration.entries) {
      totalTime += entry.value;
      allPagesViewed.add(entry.key);
      if (entry.key > maxPage) maxPage = entry.key;
    }

    for (final pageKey in session.pageViews.keys) {
      allPagesViewed.add(pageKey);
      if (pageKey > maxPage) maxPage = pageKey;
    }
  }

  return ReadingProgress(
    itemId: itemId,
    itemName: itemName,
    maxPageReached: maxPage,
    totalPages: totalPages,
    sessionCount: sessions.length,
    totalReadingTime: totalTime,
    totalPagesRead: totalPagesRead,
    pagesViewed: allPagesViewed,
    lastReadTime: lastRead,
  );
}