Rebrand: Renamr -> Aurora Curator (new logo/app icon, renamed crate aurora-curator-core, package/identifier/window-title updates, README + in-app text)

This commit is contained in:
Renamr Scaffold
2026-08-29 10:07:09 +00:00
parent 7dd9ad2078
commit 7097b1ede7
42 changed files with 132 additions and 153 deletions
@@ -1,9 +1,9 @@
[package]
name = "renamr-core"
name = "aurora-curator-core"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "Renamr core: naming-expression engine, media matching, and rename engine (UI-agnostic)."
description = "Aurora Curator core: naming-expression engine, media matching, and rename engine (UI-agnostic)."
[dependencies]
# Embeddable scripting engine powering the {expression} naming-scheme language.
@@ -1,4 +1,4 @@
//! Renamr's naming-scheme expression language.
//! Aurora Curator's naming-scheme expression language.
//!
//! A format string is literal text with `{ ... }` scriptlets spliced in, e.g.
//! `"{n} - {s00e00} - {t}"`
@@ -1,5 +1,5 @@
//! Rename history: a persisted log of past rename batches (what changed, from what to
//! what) and the ability to revert one - Renamr's only safety net beyond the
//! what) and the ability to revert one - Aurora Curator's only safety net beyond the
//! confirmation-before-execute step, since a plain filesystem rename has no OS-level
//! undo. Loosely inspired by `net.filebot.HistoryDialog`/the original's rename-history
//! log, but as a flat JSON-backed undo stack (see [`push_batch`]) rather than a full
@@ -93,7 +93,7 @@ fn revert_one(entry: &HistoryEntry, action: RenameAction) -> RevertOutcome {
};
}
// The original's parent directory should still exist (nothing in Renamr
// The original's parent directory should still exist (nothing in Aurora Curator
// deletes directories), but recreate it defensively in case it was removed
// by hand since - cheap, and `create_dir_all` is a no-op when it's already
// there.
@@ -175,7 +175,7 @@ mod tests {
fn temp_dir() -> std::path::PathBuf {
let n = COUNTER.fetch_add(1, Ordering::SeqCst);
let dir = std::env::temp_dir().join(format!("renamr_history_test_{}_{}", std::process::id(), n));
let dir = std::env::temp_dir().join(format!("aurora_curator_history_test_{}_{}", std::process::id(), n));
fs::create_dir_all(&dir).unwrap();
dir
}
@@ -1,4 +1,4 @@
//! Renamr core: the UI-agnostic engine behind the Renamr media renamer.
//! Aurora Curator core: the UI-agnostic engine behind the Aurora Curator media renamer.
//!
//! This crate has no Tauri/UI dependency so it can be built and unit-tested standalone.
//! It's the piece being ported first from the original FileBot (Java) codebase; see
@@ -175,7 +175,7 @@ pub fn guess_movie(filename: &str) -> Option<MovieGuess> {
/// (capture/rip type), video codec, audio codec, and release group. Ports the
/// filename-parsing half of the original FileBot's `ReleaseInfo` class - the same
/// regex-based tag recognition `MediaBindingBean` falls back to when no real media
/// probe (ffprobe/MediaInfo) is available, which Renamr never has, so this is the
/// probe (ffprobe/MediaInfo) is available, which Aurora Curator never has, so this is the
/// only source for these fields here. Deliberately independent of `guess_episode`/
/// `guess_movie`: a release name carries these tags (or doesn't) regardless of
/// whether it's a TV episode or a movie, so callers run this alongside whichever of
@@ -17,7 +17,7 @@
//! the caller a confirmation of the full plan (and let them choose both a
//! [`RenameAction`] and a [`ConflictPolicy`]) before calling [`execute_renames`]; every
//! batch that action actually touches a file for is also recorded to the rename-history
//! log one layer up (`renamr_core::history`), so it can be undone from there. Undoing
//! log one layer up (`aurora_curator_core::history`), so it can be undone from there. Undoing
//! always uses skip-on-conflict regardless of what policy the original rename used
//! (see `history::revert_one`) - overwriting an unrelated file as a side effect of an
//! *undo* would be a much worse surprise than leaving it for the user to sort out by
@@ -47,7 +47,7 @@ pub struct RenamePlanItem {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum RenameAction {
/// Renames/moves the file in place - the only action Renamr had before this. The
/// Renames/moves the file in place - the only action Aurora Curator had before this. The
/// source file no longer exists afterward; the item now lives at the target path.
Move,
/// Copies the file's contents to the target path, leaving the source untouched.
@@ -118,7 +118,7 @@ pub struct RenameResult {
/// no empty components (a leading, trailing, or doubled `/` - which also catches an
/// absolute-looking `/etc/passwd`-style path, since splitting it on `/` yields a
/// leading empty component), and no `.`/`..` components. Backslashes are rejected
/// outright rather than treated as an alternate separator - Renamr always uses `/` for
/// outright rather than treated as an alternate separator - Aurora Curator always uses `/` for
/// the naming scheme's folder separator regardless of OS, so a literal `\` in a
/// computed name is almost certainly a mistake, not an intentional Windows path.
fn validate_relative_target(name: &str) -> Result<(), &'static str> {
@@ -322,7 +322,7 @@ mod tests {
/// the real filesystem. Returns (dir, file_path).
fn temp_file_setup(file_name: &str, contents: &str) -> (std::path::PathBuf, std::path::PathBuf) {
let n = COUNTER.fetch_add(1, Ordering::SeqCst);
let dir = std::env::temp_dir().join(format!("renamr_rename_test_{}_{}", std::process::id(), n));
let dir = std::env::temp_dir().join(format!("aurora_curator_rename_test_{}_{}", std::process::id(), n));
fs::create_dir_all(&dir).unwrap();
let file = dir.join(file_name);
fs::write(&file, contents).unwrap();
@@ -7,7 +7,7 @@
//! rank first - TMDB ranks by relevance/popularity, not by exact name match, so a
//! more popular but differently-named show can otherwise beat an exact-but-less-popular
//! one straight to the top of the list. `DateMatcher` (the other half of the original
//! `EpisodeMetrics`) is not ported - Renamr doesn't do date-based episode identification.
//! `EpisodeMetrics`) is not ported - Aurora Curator doesn't do date-based episode identification.
use std::collections::HashMap;
@@ -37,7 +37,7 @@ struct SearchTvResponse {
results: Vec<TvResult>,
}
/// One TMDB search hit. Only the fields Renamr actually uses are kept.
/// One TMDB search hit. Only the fields Aurora Curator actually uses are kept.
#[derive(Debug, Clone, Deserialize)]
pub struct TvResult {
pub id: u64,
@@ -75,7 +75,7 @@ struct SearchMovieResponse {
results: Vec<MovieResult>,
}
/// One TMDB movie search hit. Only the fields Renamr actually uses are kept.
/// One TMDB movie search hit. Only the fields Aurora Curator actually uses are kept.
#[derive(Debug, Clone, Deserialize)]
pub struct MovieResult {
pub id: u64,
@@ -1,5 +1,5 @@
use renamr_core::format::ExpressionFormat;
use renamr_core::string_bindings;
use aurora_curator_core::format::ExpressionFormat;
use aurora_curator_core::string_bindings;
#[test]
fn simple_variable_substitution() {