Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 201 additions & 0 deletions ai/gradle.lockfile

Large diffs are not rendered by default.

308 changes: 308 additions & 0 deletions app/gradle.lockfile

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">

<application
android:name=".App"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
Expand All @@ -11,16 +12,16 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Notes">

<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.Notes">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
</manifest>
304 changes: 304 additions & 0 deletions data/gradle.lockfile

Large diffs are not rendered by default.

14 changes: 10 additions & 4 deletions data/src/main/java/com/itlab/data/dao/NoteDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import kotlinx.coroutines.flow.Flow

@Dao
interface NoteDao {
@Query("SELECT * FROM notes ORDER BY updatedAt DESC")
@Query("SELECT * FROM notes WHERE isDeleted = 0 ORDER BY updatedAt DESC")
fun getAllNotes(): Flow<List<NoteEntity>>

@Query("SELECT * FROM notes WHERE id = :noteId")
Expand All @@ -20,6 +20,15 @@ interface NoteDao {
@Query("SELECT * FROM notes WHERE folderId = :folderId ORDER BY updatedAt DESC")
fun getNotesByFolder(folderId: String): Flow<List<NoteEntity>>

@Query("SELECT * FROM notes WHERE isSynced = 0 AND isDeleted = 0")
suspend fun getUnsyncedNotes(): List<NoteEntity>

@Query("SELECT * FROM notes WHERE isDeleted = 1")
suspend fun getDeletedNotes(): List<NoteEntity>

@Query("DELETE FROM notes WHERE id = :id")
suspend fun hardDeleteById(id: String)

@Insert
suspend fun insert(note: NoteEntity)

Expand All @@ -31,7 +40,4 @@ interface NoteDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(notes: List<NoteEntity>)

@Query("SELECT * FROM notes WHERE isSynced = 0")
suspend fun getUnsyncedNotes(): List<NoteEntity>
}
2 changes: 2 additions & 0 deletions data/src/main/java/com/itlab/data/entity/FolderEntity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ data class FolderEntity(
val name: String,
val createdAt: Instant,
val updatedAt: Instant,
val isSynced: Boolean = false,
val isDeleted: Boolean = false,
val metadata: Map<String, String>,
)
1 change: 1 addition & 0 deletions data/src/main/java/com/itlab/data/entity/MediaEntity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@ data class MediaEntity(
val remoteUrl: String?,
val localPath: String?,
val mimeType: String,
val isSynced: Boolean = false,
val size: Long? = null,
)
1 change: 1 addition & 0 deletions data/src/main/java/com/itlab/data/entity/NoteEntity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ data class NoteEntity(
val tags: String? = null,
val isFavorite: Boolean = false,
val isSynced: Boolean = false,
val isDeleted: Boolean = false,
val summary: String? = null,
)
202 changes: 202 additions & 0 deletions domain/gradle.lockfile

Large diffs are not rendered by default.

34 changes: 34 additions & 0 deletions domain/src/main/java/com/itlab/domain/cloud/CloudDataSource.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.itlab.domain.cloud

import kotlinx.datetime.Instant
import java.io.File

interface CloudDataSource {
suspend fun listNoteMetadata(userId: String): Result<List<CloudNoteMetadata>>

suspend fun downloadNote(key: String): Result<String>

suspend fun uploadNote(
key: String,
json: String,
): Result<Unit>

suspend fun deleteNote(key: String): Result<Unit>

suspend fun uploadMedia(
key: String,
file: File,
): Result<Unit>

suspend fun downloadMedia(
key: String,
destination: File,
): Result<Unit>

suspend fun deleteMedia(key: String): Result<Unit>
}

data class CloudNoteMetadata(
val key: String,
val updatedAt: Instant,
)
25 changes: 25 additions & 0 deletions domain/src/main/java/com/itlab/domain/cloud/SyncManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.itlab.domain.cloud

import kotlinx.coroutines.flow.StateFlow

interface SyncManager {
val syncState: StateFlow<SyncState>

suspend fun sync(userId: String)

suspend fun pushChanges(userId: String)

suspend fun pullUpdates(userId: String)
}

sealed class SyncState {
object Idle : SyncState()

object Syncing : SyncState()

data class Error(
val message: String,
) : SyncState()

object Success : SyncState()
}
8 changes: 8 additions & 0 deletions domain/src/main/java/com/itlab/domain/model/Note.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ data class Note(
val tags: Set<String> = emptySet(),
val isFavorite: Boolean = false,
val summary: String? = null,
val syncStatus: SyncStatus = SyncStatus.PENDING,
)

@Serializable
Expand Down Expand Up @@ -62,3 +63,10 @@ enum class TextFormat {
MARKDOWN,
HTML,
}

enum class SyncStatus {
SYNCED,
PENDING,
SYNCING,
ERROR,
}
564 changes: 560 additions & 4 deletions gradle/verification-metadata.xml

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=60ea723356d81263e8002fec0fcf9e2b0eee0c0850c7a3d7ab0a63f2ccc601f3
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
Expand Down
Loading