mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
Photos now know where they were taken. proton-drive-rs 0.7.0 reads the Location from a photo's extended attributes, and the timeline refresh stores it with the photo (schema v33). The migration marks every photo unresolved once, so the next refresh backfills locations from node metadata without downloading anything. Towns are looked up offline: pdfs-core bundles GeoNames' cities15000 table, trimmed by scripts/geonames-cities.py, and files each photo under the nearest town within 50 km. The new PhotoPlaces and PlacePhotos requests list the towns and page one town's photos. The Photos page gets a third view, Places, with a card per town (newest photo, town, country, count). A place opens in the gallery like an album. Country names come translated from the iso-codes catalogs, now an optional dependency. The About dialog credits GeoNames (CC BY 4.0).
63 lines
2.5 KiB
TOML
63 lines
2.5 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
|
|
|
|
[workspace.package]
|
|
version = "2.2.2"
|
|
edition = "2024"
|
|
license = "MIT"
|
|
authors = ["Nils Pukropp <contact@narl.io>"]
|
|
rust-version = "1.96"
|
|
repository = "https://github.com/narrrl/proton-drive-linux"
|
|
homepage = "https://github.com/narrrl/proton-drive-linux"
|
|
readme = "README.md"
|
|
keywords = ["proton", "drive", "fuse", "sync", "linux"]
|
|
categories = ["filesystem", "command-line-utilities"]
|
|
|
|
[workspace.dependencies]
|
|
proton-sdk = { version = "0.7.0" }
|
|
proton-drive-rs = { version = "0.7.0" }
|
|
|
|
# Internal crates.
|
|
pdfs-core = { path = "crates/pdfs-core" }
|
|
pdfs-fuse = { path = "crates/pdfs-fuse" }
|
|
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "fs", "io-util", "time", "signal"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
base64 = "0.23"
|
|
thiserror = "2"
|
|
anyhow = "1"
|
|
# Non-poisoning mutexes. A handler that panics while holding a lock must not
|
|
# wedge every later acquisition of it: `Workers` catches the unwind to keep the
|
|
# pool alive, and `std::sync::Mutex` would defeat that by poisoning the state
|
|
# the recovered worker needs.
|
|
parking_lot = "0.12"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
directories = "6"
|
|
ignore = "0.4"
|
|
sha2 = "0.11"
|
|
# Google Takeout exports are zip sets; the importer reads their central
|
|
# directories and streams entries out without extracting to disk first.
|
|
zip = { version = "8", default-features = false, features = ["deflate"] }
|
|
# Proton's photo duplicate detection is keyed on the plaintext SHA-1, so an
|
|
# import has to speak SHA-1 whatever its age.
|
|
sha1 = "0.11"
|
|
# Thumbnail generation for photos the server has none for. Decoders only for the
|
|
# formats a camera or phone actually produces — the rest of the crate's codecs
|
|
# would be dead weight in the daemon.
|
|
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp", "gif", "tiff", "bmp", "rayon"] }
|
|
rusqlite = { version = "0.40", features = ["bundled"] }
|
|
# keyring 4 split into `keyring-core` plus per-platform stores. The libdbus
|
|
# Secret Service store is the one keyring 3's `sync-secret-service` wrapped, and
|
|
# with no `target` it matches items v3 wrote, so existing logins survive.
|
|
keyring-core = "1"
|
|
dbus-secret-service-keyring-store = { version = "1", features = ["crypto-rust"] }
|
|
clap = { version = "4", features = ["derive"] }
|
|
rpassword = "7"
|
|
async-trait = "0.1"
|
|
futures = "0.3"
|
|
fuser = "0.18"
|
|
libc = "0.2"
|