Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7d5ab59
random cleanup
kcjerrell Feb 12, 2026
5ff0b95
handle errors when a watchfolder is missing or forbidden
kcjerrell Feb 12, 2026
1cc9565
update bookmark functions
kcjerrell Feb 12, 2026
bc7c368
database changes
kcjerrell Feb 12, 2026
95a7043
back end changes for folders and projects
kcjerrell Feb 13, 2026
bc3fde6
handling projects differently
kcjerrell Feb 14, 2026
9576f7c
review of project path handling
kcjerrell Feb 14, 2026
d8b711a
linux folder handling
kcjerrell Feb 15, 2026
7e5b241
aria labels
kcjerrell Feb 15, 2026
15af5f1
testinc changes
kcjerrell Feb 15, 2026
1c8ad52
more labels
kcjerrell Feb 15, 2026
f90763f
drag and drop fix, file rename, formatting
kcjerrell Feb 15, 2026
28afcf0
dtpservice partial implementation
kcjerrell Feb 16, 2026
3324164
feat: Introduce DTP service with job scheduler and refactor watch fol…
kcjerrell Feb 18, 2026
5a54399
file watcher working
kcjerrell Feb 19, 2026
29af57e
rust integration tests
kcjerrell Feb 20, 2026
51b9419
allow picking folders in testing
kcjerrell Feb 20, 2026
7b6ffce
fix app handle for linux
kcjerrell Feb 20, 2026
86f930a
feat: Implement DTPService auto-watching, job scheduling, and new tes…
kcjerrell Feb 21, 2026
baed8f1
check in
kcjerrell Feb 21, 2026
98a47f9
db access rewrite
kcjerrell Feb 21, 2026
23509ce
refactor: Replace direct project commands with a new DTP service.
kcjerrell Feb 22, 2026
907ed1a
remove duplicate test
kcjerrell Feb 22, 2026
ef67d21
test set up script
kcjerrell Feb 22, 2026
aca49c6
some ui changes for project folders
kcjerrell Feb 24, 2026
911340c
update data model, added is_missing and is_locked to watchfolders
kcjerrell Feb 25, 2026
2c81239
checkfolder job
kcjerrell Feb 25, 2026
43421cc
feat: Implement folder locking functionality, improve project cache m…
kcjerrell Feb 26, 2026
830bc9e
refactor: Reimplement file system watching with dedicated FolderWatch…
kcjerrell Feb 27, 2026
953b1b0
setup test
kcjerrell Feb 27, 2026
9c96fb1
selection broken
kcjerrell Feb 27, 2026
9988db7
feat: introduce generic `PanelList2` component with selection and com…
kcjerrell Feb 27, 2026
e61be23
version bump
kcjerrell Feb 27, 2026
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
25 changes: 25 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,37 @@ jobs:
- name: Generate icons
run: npm run gen-icons

- name: Import Apple Developer Certificate
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security set-keychain-settings -t 3600 -u build.keychain
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
security find-identity -v -p codesigning build.keychain

- name: Verify Certificate
run: |
CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Apple Development")
CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
echo "Certificate imported."

- name: Build & publish (Tauri)
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }}
with:
tagName: v__VERSION__
releaseName: DTM v__VERSION__
Expand Down
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,19 @@
# DTM
# DTM

## Building

To build the app on Mac, you will need to have [Node/NPM](https://nodejs.org/en/download), and [Rust](https://www.rust-lang.org/tools/install) installed, as well as the Xcode command line tools (`xcode-select --install`)

```bash
npm install
npm run gen:icons

# Build the app for current architecture
npm run build:mac

# Build for Mac Universal
npm run build:universal

# Run in dev mode
npm run dev
```
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "dtm",
"author": "kcjerrell",
"private": true,
"version": "0.3.2",
"version": "0.3.3",
"type": "module",
"scripts": {
"dev": "tauri dev",
Expand Down
6 changes: 6 additions & 0 deletions public/img_not_available.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions src-tauri/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[env]
RUST_TEST_THREADS = "1"
54 changes: 19 additions & 35 deletions src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 8 additions & 2 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["migration", "entity", ".", "fpzip-sys", "macros"]

[package]
name = "dtm"
version = "0.3.2"
version = "0.3.3"
description = "A little app for reading Draw Things Metadata"
authors = ["kcjerrell"]
edition = "2021"
Expand Down Expand Up @@ -58,7 +58,6 @@ futures = "0.3.28"
tokio = { version = "1.48.0", features = ["full"] }
mime = "0.3.17"
once_cell = "1.21.3"
moka = { version = "0.12.11", features = ["future"] }
bytes = "1.10.1"
byteorder = "1.5.0"
half = "2"
Expand All @@ -79,6 +78,10 @@ sevenz-rust = "0.6.1"
sha2 = "0.10.9"
futures-util = "0.3.31"
regex = "1.12.2"
walkdir = "2.5.0"
async-trait = "0.1.89"
notify-debouncer-mini = { version = "0.7.0", features = ["macos_fsevent"] }
dashmap = "6.1.0"

# macOS-only
[target."cfg(target_os = \"macos\")".dependencies]
Expand All @@ -91,3 +94,6 @@ tauri-plugin-nspopover = { git = "https://github.com/freethinkel/tauri-nspopover
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }

[dev-dependencies]
tempfile = "3.25.0"
26 changes: 22 additions & 4 deletions src-tauri/capabilities/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,28 +31,46 @@
"fs:allow-home-read-recursive",
"fs:allow-watch",
"fs:allow-unwatch",
{
"identifier": "fs:allow-watch",
"allow": [
"$HOME/**",
"/Volumes/**"
]
},
{
"identifier": "fs:allow-exists",
"allow": [
"$HOME/Library/Containers/com.liuliu.draw-things/Data/*"
"$HOME/**",
"/Volumes/**"
]
},
{
"identifier": "fs:allow-read-dir",
"allow": [
"$HOME/Library/Containers/com.liuliu.draw-things/Data/Documents/*"
"$HOME/**",
"/Volumes/**"
]
},
{
"identifier": "fs:allow-read-file",
"allow": [
"$HOME/Library/Containers/com.liuliu.draw-things/Data/Documents/*"
"$HOME/**",
"/Volumes/**"
]
},
{
"identifier": "fs:allow-read",
"allow": [
"$HOME/Library/Containers/com.liuliu.draw-things/Data/Documents/*"
"$HOME/**",
"/Volumes/**"
]
},
{
"identifier": "fs:allow-stat",
"allow": [
"$HOME/**",
"/Volumes/**"
]
},
"http:default",
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/entity/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ path = "src/mod.rs"

[dependencies]
sea-orm = { version = "2.0.0-rc" }
serde = "1.0.228"
serde = { version = "1.0", features = ["derive"] }
chrono = { version = "0.4", features = ["serde"] }
num_enum = "0.7.5"
13 changes: 10 additions & 3 deletions src-tauri/entity/src/projects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,25 @@ use sea_orm::entity::prelude::*;
use serde::Serialize;

#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize)]
#[sea_orm(table_name = "projects")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i64,
pub fingerprint: String,
#[sea_orm(unique)]
pub path: String,
pub watchfolder_id: i64,
pub filesize: Option<i64>,
pub modified: Option<i64>,
pub missing_on: Option<i64>,
pub excluded: bool,
#[sea_orm(
belongs_to,
from = "watchfolder_id",
to = "id",
on_update = "NoAction",
on_delete = "Cascade"
)]
pub watchfolder: HasOne<super::watch_folders::Entity>,
#[sea_orm(has_many)]
pub images: HasMany<super::images::Entity>,
}
Expand Down
8 changes: 6 additions & 2 deletions src-tauri/entity/src/watch_folders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ use sea_orm::entity::prelude::*;
use serde::Serialize;

#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize)]
#[sea_orm(table_name = "watch_folders")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i64,
pub path: String,
pub bookmark: String,
pub recursive: Option<bool>,
pub last_updated: Option<i64>,
pub is_missing: bool,
pub is_locked: bool,
#[sea_orm(has_many)]
pub projects: HasMany<super::projects::Entity>,
}

impl ActiveModelBehavior for ActiveModel {}
Loading