From 7bb8c0edecb6e0affab739b4a1f8680f7152d320 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:26:53 +0000 Subject: [PATCH 1/3] Initial plan From cea0e82554ffc8e86a6e7e96157bb40e8ad84df0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:36:16 +0000 Subject: [PATCH 2/3] Add tags support to CSV export and import Co-authored-by: yogeshpaliyal <9381846+yogeshpaliyal@users.noreply.github.com> --- .../com/yogeshpaliyal/deepr/backup/CsvWriter.kt | 6 ++++-- .../deepr/backup/ExportRepositoryImpl.kt | 2 +- .../deepr/backup/ImportRepositoryImpl.kt | 16 ++++++++++++++++ .../com/yogeshpaliyal/deepr/util/Constants.kt | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/backup/CsvWriter.kt b/app/src/main/java/com/yogeshpaliyal/deepr/backup/CsvWriter.kt index 71b4515..2949b21 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/backup/CsvWriter.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/backup/CsvWriter.kt @@ -1,14 +1,14 @@ package com.yogeshpaliyal.deepr.backup import com.opencsv.CSVWriter -import com.yogeshpaliyal.deepr.Deepr +import com.yogeshpaliyal.deepr.ListDeeprWithTagsAsc import com.yogeshpaliyal.deepr.util.Constants import java.io.OutputStream class CsvWriter { fun writeToCsv( outputStream: OutputStream, - data: List, + data: List, ) { outputStream.bufferedWriter().use { writer -> // Write Header @@ -21,6 +21,7 @@ class CsvWriter { Constants.Header.OPENED_COUNT, Constants.Header.NAME, Constants.Header.NOTES, + Constants.Header.TAGS, ), ) // Write Data @@ -32,6 +33,7 @@ class CsvWriter { item.openedCount.toString(), item.name, item.notes, + item.tagsNames ?: "", ), ) } diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ExportRepositoryImpl.kt b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ExportRepositoryImpl.kt index 54c9e69..c2695e4 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ExportRepositoryImpl.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ExportRepositoryImpl.kt @@ -30,7 +30,7 @@ class ExportRepositoryImpl( if (count == 0L) { return RequestResult.Error(context.getString(R.string.no_data_to_export)) } - val dataToExportInCsvFormat = deeprQueries.listDeeprAsc().executeAsList() + val dataToExportInCsvFormat = deeprQueries.listDeeprWithTagsAsc().executeAsList() if (dataToExportInCsvFormat.isEmpty()) { return RequestResult.Error(context.getString(R.string.no_data_available_export)) } diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt index f81fe34..0539a11 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt @@ -46,6 +46,7 @@ class ImportRepositoryImpl( val openedCount = row[2].toLongOrNull() ?: 0L val name = row.getOrNull(3)?.toString() ?: "" val notes = row.getOrNull(4)?.toString() ?: "" + val tagsString = row.getOrNull(5)?.toString() ?: "" val existing = deeprQueries.getDeeprByLink(link).executeAsOneOrNull() if (link.isNotBlank() && existing == null) { updatedCount++ @@ -56,6 +57,21 @@ class ImportRepositoryImpl( name = name, notes = notes, ) + val linkId = deeprQueries.lastInsertRowId().executeAsOne() + + // Import tags if present + if (tagsString.isNotBlank()) { + val tagNames = tagsString.split(", ").map { it.trim() }.filter { it.isNotEmpty() } + tagNames.forEach { tagName -> + // Insert tag if it doesn't exist + deeprQueries.insertTag(tagName) + // Get tag ID and link it + val tag = deeprQueries.getTagByName(tagName).executeAsOneOrNull() + if (tag != null) { + deeprQueries.addTagToLink(linkId, tag.id) + } + } + } } } else { skippedCount++ diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/util/Constants.kt b/app/src/main/java/com/yogeshpaliyal/deepr/util/Constants.kt index 89358ff..875b09f 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/util/Constants.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/util/Constants.kt @@ -7,5 +7,6 @@ object Constants { const val NAME = "Name" const val CREATED_AT = "CreatedAt" const val NOTES = "Notes" + const val TAGS = "Tags" } } From cc47d1cd29d2c4df08d73886c54c7ca09b8e71dd Mon Sep 17 00:00:00 2001 From: Yogesh Choudhary Paliyal Date: Sat, 18 Oct 2025 14:15:00 +0530 Subject: [PATCH 3/3] [Fix] Update CSV export to include tags in ascending order --- .../java/com/yogeshpaliyal/deepr/backup/AutoBackupWorker.kt | 6 +++--- .../com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/backup/AutoBackupWorker.kt b/app/src/main/java/com/yogeshpaliyal/deepr/backup/AutoBackupWorker.kt index 75cd611..acd0699 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/backup/AutoBackupWorker.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/backup/AutoBackupWorker.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.core.net.toUri import androidx.documentfile.provider.DocumentFile import com.yogeshpaliyal.deepr.DeeprQueries +import com.yogeshpaliyal.deepr.ListDeeprWithTagsAsc import com.yogeshpaliyal.deepr.preference.AppPreferenceDataStore import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first @@ -36,7 +37,7 @@ class AutoBackupWorker( return@withContext } - val dataToExport = deeprQueries.listDeeprAsc().executeAsList() + val dataToExport = deeprQueries.listDeeprWithTagsAsc().executeAsList() if (dataToExport.isEmpty()) { return@withContext } @@ -59,12 +60,11 @@ class AutoBackupWorker( private fun saveToSelectedLocation( location: String, fileName: String = "deepr_backup.csv", - data: List, + data: List, ): Boolean = try { // For content:// URIs from document picker, create a new document in that folder val locationUri = location.toUri() - val documentFile = DocumentFile.fromTreeUri(context, locationUri) val directory = DocumentFile.fromTreeUri(context, locationUri) var docFile = directory?.findFile(fileName) if (docFile == null) { diff --git a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt index 0539a11..525ac37 100644 --- a/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt +++ b/app/src/main/java/com/yogeshpaliyal/deepr/backup/ImportRepositoryImpl.kt @@ -58,10 +58,10 @@ class ImportRepositoryImpl( notes = notes, ) val linkId = deeprQueries.lastInsertRowId().executeAsOne() - + // Import tags if present if (tagsString.isNotBlank()) { - val tagNames = tagsString.split(", ").map { it.trim() }.filter { it.isNotEmpty() } + val tagNames = tagsString.split(",").map { it.trim() }.filter { it.isNotEmpty() } tagNames.forEach { tagName -> // Insert tag if it doesn't exist deeprQueries.insertTag(tagName)