Skip to content
Merged
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
4 changes: 4 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ tasks.register("generateSeforimDb") {
dependsOn(":sefariasqlite:generateSefariaSqlite")
dependsOn(":otzariasqlite:appendOtzaria")
dependsOn(":otzariasqlite:generateHavroutaLinks")
dependsOn(":sefariasqlite:renameCategories")
dependsOn(":catalog:buildCatalog")
dependsOn(":searchindex:buildLuceneIndexDefault")
dependsOn(":packaging:writeReleaseInfo")
Expand All @@ -31,6 +32,9 @@ project(":otzariasqlite").tasks.matching {
"appendOtzaria"
)
}.configureEach {
mustRunAfter(":sefariasqlite:renameCategories")
}
project(":sefariasqlite").tasks.matching { it.name == "renameCategories" }.configureEach {
mustRunAfter(":sefariasqlite:generateSefariaSqlite")
}
project(":otzariasqlite").tasks.matching { it.name == "generateHavroutaLinks" }.configureEach {
Expand Down
25 changes: 25 additions & 0 deletions generator/sefariasqlite/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,28 @@ tasks.register<JavaExec>("generateSefariaSqlite") {
"-XX:MaxGCPauseMillis=200"
)
}

// Post-processing step to rename categories after all generation is complete
// Usage:
// ./gradlew :sefariasqlite:renameCategories
// ./gradlew :sefariasqlite:renameCategories -PseforimDb=/path/to/seforim.db
tasks.register<JavaExec>("renameCategories") {
group = "application"
description = "Rename 'פירושים מודרניים' categories to 'מחברי זמננו' after generation."

dependsOn("jvmJar")
mainClass.set("io.github.kdroidfilter.seforimlibrary.sefariasqlite.RenameCategoriesPostProcessKt")
classpath = files(tasks.named("jvmJar")) + configurations.getByName("jvmRuntimeClasspath")

// Pass DB path if provided
if (project.hasProperty("seforimDb")) {
systemProperty("seforimDb", project.property("seforimDb") as String)
} else if (System.getenv("SEFORIM_DB") != null) {
systemProperty("seforimDb", System.getenv("SEFORIM_DB"))
} else {
val defaultDbPath = rootProject.layout.buildDirectory.file("seforim.db").get().asFile.absolutePath
systemProperty("seforimDb", defaultDbPath)
}

jvmArgs = listOf("-Xmx256m")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package io.github.kdroidfilter.seforimlibrary.sefariasqlite

import co.touchlab.kermit.Logger
import co.touchlab.kermit.Severity
import java.nio.file.Paths
import java.sql.DriverManager
import kotlin.io.path.exists
import kotlin.system.exitProcess

/**
* Post-processing step to rename categories in the database.
* This runs after all books and links are generated, so it doesn't affect
* any path-based matching logic.
*
* Usage:
* ./gradlew -p SeforimLibrary :sefariasqlite:renameCategories -PseforimDb=/path/to/seforim.db
*
* Env alternatives:
* SEFORIM_DB
*/
fun main(args: Array<String>) {
Logger.setMinSeverity(Severity.Info)
val logger = Logger.withTag("RenameCategories")

val dbPathStr = args.getOrNull(0)
?: System.getProperty("seforimDb")
?: System.getenv("SEFORIM_DB")
?: Paths.get("build", "seforim.db").toString()
val dbPath = Paths.get(dbPathStr)

if (!dbPath.exists()) {
logger.e { "DB not found at $dbPath" }
exitProcess(1)
}

logger.i { "Renaming categories in $dbPath" }

// Category renames: old name -> new name
val categoryRenames = mapOf(
"פירושים מודרניים על התנ״ך" to "מחברי זמננו",
"פירושים מודרניים על התלמוד" to "מחברי זמננו",
"פירושים מודרניים על המשנה" to "מחברי זמננו"
)

try {
DriverManager.getConnection("jdbc:sqlite:$dbPath").use { conn ->
conn.autoCommit = false

val updateStmt = conn.prepareStatement(
"UPDATE category SET title = ? WHERE title = ?"
)

var totalUpdated = 0
for ((oldName, newName) in categoryRenames) {
updateStmt.setString(1, newName)
updateStmt.setString(2, oldName)
val updated = updateStmt.executeUpdate()
if (updated > 0) {
logger.i { "Renamed '$oldName' -> '$newName' ($updated rows)" }
totalUpdated += updated
}
}

conn.commit()
logger.i { "Category rename complete. Total categories updated: $totalUpdated" }
}
} catch (e: Exception) {
logger.e(e) { "Failed to rename categories" }
exitProcess(1)
}
}