#74 feed is now sorted on taskdates
This commit is contained in:
		
							parent
							
								
									260171a972
								
							
						
					
					
						commit
						3f6d416f39
					
				
					 1 changed files with 12 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -7,6 +7,7 @@ import be.ugent.sel.studeez.data.local.models.task.Task
 | 
			
		|||
import be.ugent.sel.studeez.domain.FeedDAO
 | 
			
		||||
import be.ugent.sel.studeez.domain.SessionDAO
 | 
			
		||||
import be.ugent.sel.studeez.domain.TaskDAO
 | 
			
		||||
import com.google.firebase.Timestamp
 | 
			
		||||
import kotlinx.coroutines.flow.*
 | 
			
		||||
import javax.inject.Inject
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,15 +23,22 @@ class FirebaseFeedDAO @Inject constructor(
 | 
			
		|||
                .map { sessionReport ->  sessionToFeedEntry(sessionReport) }
 | 
			
		||||
                .groupBy { it.taskId }
 | 
			
		||||
                .map { fuseFeedEntries(it.component2()) }
 | 
			
		||||
                .sortedByDescending { it.endTime }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun fuseFeedEntries(entries: List<FeedEntry>): FeedEntry =
 | 
			
		||||
        entries.fold(entries[0]) { accEntry, newEntry ->
 | 
			
		||||
            val newStudyTime = accEntry.totalStudyTime + newEntry.totalStudyTime
 | 
			
		||||
            accEntry.copy(totalStudyTime = newStudyTime)
 | 
			
		||||
            accEntry.copy(
 | 
			
		||||
                totalStudyTime = accEntry.totalStudyTime + newEntry.totalStudyTime,
 | 
			
		||||
                endTime = getMostRecent(accEntry.endTime, newEntry.endTime)
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private fun getMostRecent(t1: Timestamp, t2: Timestamp): Timestamp {
 | 
			
		||||
        return if (t1 < t2) t2 else t1
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private suspend fun sessionToFeedEntry(sessionReport: SessionReport): FeedEntry {
 | 
			
		||||
        val subjectId: String = sessionReport.subjectId
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +53,8 @@ class FirebaseFeedDAO @Inject constructor(
 | 
			
		|||
            taskName = task.name,
 | 
			
		||||
            taskId = task.id,
 | 
			
		||||
            subjectId = subject.id,
 | 
			
		||||
            totalStudyTime = sessionReport.studyTime
 | 
			
		||||
            totalStudyTime = sessionReport.studyTime,
 | 
			
		||||
            endTime = sessionReport.endTime
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue