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
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: ClassiPyR
Title: A Shiny App for Manual Image Classification and Validation of IFCB Data
Version: 0.2.0.9000
Version: 0.2.1
Authors@R: c(
person("Anders", "Torstensson", email = "anders.torstensson@smhi.se", role = c("aut", "cre"),
comment = c("Swedish Meteorological and Hydrological Institute", ORCID = "0000-0002-8283-656X")),
Expand Down
2 changes: 1 addition & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ClassiPyR (development version)
# ClassiPyR 0.2.1

## New features

Expand Down
4 changes: 2 additions & 2 deletions inst/CITATION
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ bibentry(
comment = c(ORCID = "0000-0002-8283-656X"))
),
year = "2026",
note = "R package version 0.2.0",
note = "R package version 0.2.1",
url = "https://doi.org/10.5281/zenodo.18414999",
textVersion = paste(
"Torstensson, A. (2026).",
"ClassiPyR: A Shiny Application for Manual Image Classification and Validation of IFCB Data.",
"R package version 0.2.0.",
"R package version 0.2.1.",
"https://doi.org/10.5281/zenodo.18414999"
)
)
8 changes: 8 additions & 0 deletions inst/app/modules/class_list_loading_server.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ setup_class_list_loading_server <- function(input, output, session, rv, config,
if (!"unclassified" %in% db_classes) {
db_classes <- c("unclassified", db_classes)
}
last_saved_class2use(db_classes)
rv$class2use <- db_classes

sorted_classes <- sort(rv$class2use)
Expand Down Expand Up @@ -65,14 +66,21 @@ setup_class_list_loading_server <- function(input, output, session, rv, config,
})

# Auto-save class list to SQLite whenever it changes
# Track last-saved value to avoid redundant writes (e.g., on startup restore)
last_saved_class2use <- reactiveVal(NULL)

observeEvent(rv$class2use, {
if (!grepl("sqlite", config$save_format, fixed = TRUE)) return()
classes <- rv$class2use
if (is.null(classes) || length(classes) == 0) return()
if (length(classes) == 1 && classes == "unclassified") return()

# Skip write if identical to what was last saved/loaded
if (identical(classes, last_saved_class2use())) return()

db_path <- get_db_path(config$db_folder)
save_global_class_list_db(db_path, classes)
last_saved_class2use(classes)
})

# Load uploaded class2use file (from settings modal)
Expand Down