Skip to content

Commit

Permalink
Use LocalDateTime instead of Date in history entries
Browse files Browse the repository at this point in the history
  • Loading branch information
CrisBarreiro committed Apr 11, 2024
1 parent d9a3dd8 commit cff4043
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 22 deletions.
10 changes: 6 additions & 4 deletions app/src/test/java/com/duckduckgo/store/HistoryDaoTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import androidx.test.platform.app.InstrumentationRegistry
import com.duckduckgo.history.impl.store.HistoryDao
import com.duckduckgo.history.impl.store.HistoryDatabase
import com.duckduckgo.history.impl.store.HistoryEntryEntity
import java.time.LocalDateTime
import java.time.Month.JANUARY
import org.junit.After
import org.junit.Assert
import org.junit.Before
Expand Down Expand Up @@ -58,8 +60,8 @@ class HistoryDaoTest {

@Test
fun whenInsertSameUrlWithSameDateTwiceThenOnlyOneEntryAndOneVisitAreStored() {
historyDao.updateOrInsertVisit("url", "title", "query", false, 1L)
historyDao.updateOrInsertVisit("url", "title", "query", false, 1L)
historyDao.updateOrInsertVisit("url", "title", "query", false, LocalDateTime.of(2000, JANUARY, 1, 0, 0))
historyDao.updateOrInsertVisit("url", "title", "query", false, LocalDateTime.of(2000, JANUARY, 1, 0, 0))

val historyEntriesWithVisits = historyDao.getHistoryEntriesWithVisits()
Assert.assertEquals(1, historyEntriesWithVisits.count())
Expand All @@ -68,8 +70,8 @@ class HistoryDaoTest {

@Test
fun whenInsertSameUrlWithDifferentDateTwiceThenOneEntryAndTwoVisitsAreStored() {
historyDao.updateOrInsertVisit("url", "title", "query", false, 1L)
historyDao.updateOrInsertVisit("url", "title", "query", false, 2L)
historyDao.updateOrInsertVisit("url", "title", "query", false, LocalDateTime.of(2000, JANUARY, 1, 0, 0))
historyDao.updateOrInsertVisit("url", "title", "query", false, LocalDateTime.of(2000, JANUARY, 2, 0, 0))

val historyEntriesWithVisits = historyDao.getHistoryEntriesWithVisits()
Assert.assertEquals(1, historyEntriesWithVisits.count())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
package com.duckduckgo.history.api

import android.net.Uri
import java.util.Date
import java.time.LocalDateTime

/**
* A sealed class representing a history entry.
Expand All @@ -28,7 +28,7 @@ import java.util.Date
sealed class HistoryEntry {
abstract val url: Uri
abstract val title: String
abstract val visits: List<Date>
abstract val visits: List<LocalDateTime>

/**
* Data class representing a visited page history entry.
Expand All @@ -39,7 +39,7 @@ sealed class HistoryEntry {
data class VisitedPage(
override val url: Uri,
override val title: String,
override val visits: List<Date>,
override val visits: List<LocalDateTime>,
) : HistoryEntry()

/**
Expand All @@ -55,6 +55,6 @@ sealed class HistoryEntry {
override val title: String,
val query: String,
val queryTokens: List<String>? = null,
override val visits: List<Date>,
override val visits: List<LocalDateTime>,
) : HistoryEntry()
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ import com.duckduckgo.history.api.HistoryEntry
import com.duckduckgo.history.api.HistoryEntry.VisitedPage
import com.duckduckgo.history.api.HistoryEntry.VisitedSERP
import com.duckduckgo.history.impl.store.HistoryEntryWithVisits
import java.util.Date
import java.time.LocalDateTime

fun HistoryEntryWithVisits.toHistoryEntry(): HistoryEntry? {
if (historyEntry.url.isBlank()) return null
return if (historyEntry.isSerp && !historyEntry.query.isNullOrBlank()) {
VisitedSERP(historyEntry.url.toUri(), historyEntry.title, historyEntry.query, visits = visits.map { Date(it.date) })
VisitedSERP(historyEntry.url.toUri(), historyEntry.title, historyEntry.query, visits = visits.map { LocalDateTime.parse(it.timestamp) })
} else {
VisitedPage(historyEntry.url.toUri(), historyEntry.title, visits.map { Date(it.date) })
VisitedPage(historyEntry.url.toUri(), historyEntry.title, visits.map { LocalDateTime.parse(it.timestamp) })
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ package com.duckduckgo.history.impl/*

import android.content.Context
import androidx.room.Room
import com.duckduckgo.common.utils.CurrentTimeProvider
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.history.impl.store.ALL_MIGRATIONS
import com.duckduckgo.history.impl.store.HistoryDatabase
Expand All @@ -47,8 +46,8 @@ class HistoryModule {

@Provides
@SingleInstanceIn(AppScope::class)
fun provideHistoryRepository(historyDatabase: HistoryDatabase, currentTimeProvider: CurrentTimeProvider): HistoryRepository {
return RealHistoryRepository(historyDatabase.historyDao(), currentTimeProvider)
fun provideHistoryRepository(historyDatabase: HistoryDatabase): HistoryRepository {
return RealHistoryRepository(historyDatabase.historyDao())
}

@SingleInstanceIn(AppScope::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@

package com.duckduckgo.history.impl

import com.duckduckgo.common.utils.CurrentTimeProvider
import com.duckduckgo.history.api.HistoryEntry
import com.duckduckgo.history.impl.store.HistoryDao
import io.reactivex.Single
import java.time.LocalDateTime

interface HistoryRepository {
fun getHistoryObservable(): Single<List<HistoryEntry>>
Expand All @@ -34,7 +34,6 @@ interface HistoryRepository {

class RealHistoryRepository(
private val historyDao: HistoryDao,
private val currentTimeProvider: CurrentTimeProvider,
) : HistoryRepository {

private var cachedHistoryEntries: List<HistoryEntry>? = null
Expand All @@ -54,7 +53,7 @@ class RealHistoryRepository(
title ?: "",
query,
isSerp,
currentTimeProvider.currentTimeMillis(),
LocalDateTime.now(),
)
fetchAndCacheHistoryEntries()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import com.duckduckgo.common.utils.formatters.time.DatabaseDateFormatter
import java.time.LocalDateTime

@Dao
interface HistoryDao {
Expand All @@ -29,17 +31,17 @@ interface HistoryDao {
fun getHistoryEntriesWithVisits(): List<HistoryEntryWithVisits>

@Transaction
fun updateOrInsertVisit(url: String, title: String, query: String?, isSerp: Boolean, date: Long) {
fun updateOrInsertVisit(url: String, title: String, query: String?, isSerp: Boolean, date: LocalDateTime) {
val existingHistoryEntry = getHistoryEntryByUrl(url)

if (existingHistoryEntry != null) {
val newVisit = VisitEntity(date = date, historyEntryId = existingHistoryEntry.id)
val newVisit = VisitEntity(timestamp = DatabaseDateFormatter.timestamp(date), historyEntryId = existingHistoryEntry.id)
insertVisit(newVisit)
} else {
val newHistoryEntry = HistoryEntryEntity(url = url, title = title, query = query, isSerp = isSerp)
val historyEntryId = insertHistoryEntry(newHistoryEntry)

val newVisit = VisitEntity(date = date, historyEntryId = historyEntryId)
val newVisit = VisitEntity(timestamp = DatabaseDateFormatter.timestamp(date), historyEntryId = historyEntryId)
insertVisit(newVisit)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ data class HistoryEntryEntity(
}
}

@Entity(tableName = "visits_list", primaryKeys = ["date", "historyEntryId"])
@Entity(tableName = "visits_list", primaryKeys = ["timestamp", "historyEntryId"])
data class VisitEntity(
val historyEntryId: Long,
val date: Long,
val timestamp: String,
)

data class HistoryEntryWithVisits(
Expand Down

0 comments on commit cff4043

Please sign in to comment.