mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-15 17:41:59 +01:00
A song in a listing showed a generic icon, and the player a music note. Both now show the song's cover: the picture in its tags, read with lofty, or else a cover, folder, front or album image in its folder. Only the tags are downloaded. A song up to 4 MiB comes whole. A larger one brings the ID3v2 tag or the FLAC metadata blocks at its start, an M4A's moov box, the first 4 MiB of an Ogg file, and the last 4 MiB for formats that keep their tags at the end. The parts are laid out in a sparse staging file at their own offsets, as video samples are. A folder cover comes from that image's cached thumbnail, the thumbnail its uploader attached, or the image itself. It is stored under the song. Uploads of songs carry their embedded cover as the Drive thumbnail.
84 lines
3.4 KiB
TOML
84 lines
3.4 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
|
|
|
|
[workspace.package]
|
|
version = "3.8.0"
|
|
edition = "2024"
|
|
license = "MIT"
|
|
authors = ["Nils Pukropp <contact@narl.io>"]
|
|
rust-version = "1.96"
|
|
repository = "https://github.com/narrrl/proton-drive-linux"
|
|
homepage = "https://proton-drive.narl.io"
|
|
readme = "README.md"
|
|
keywords = ["proton", "drive", "fuse", "sync", "linux"]
|
|
categories = ["filesystem", "command-line-utilities"]
|
|
|
|
[workspace.dependencies]
|
|
proton-sdk = { version = "0.11.0" }
|
|
proton-drive-rs = { version = "0.11.0" }
|
|
chrono = { version = "0.4", default-features = false, features = ["std"] }
|
|
|
|
# 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"
|
|
zeroize = "1"
|
|
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.13"
|
|
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 = "9", 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"] }
|
|
# Cover pictures of songs, read from their tags (ID3, FLAC, Ogg, MP4, APE) for
|
|
# the song's thumbnail. Its default feature is required: 0.25 does not build
|
|
# without it.
|
|
lofty = "0.25"
|
|
rusqlite = { version = "0.41", 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"] }
|
|
# `unstable-dynamic`: Tab calls `pdfs` back, so arguments complete from the
|
|
# running service. Only `pdfs-cli/src/complete.rs` uses it.
|
|
clap_complete = { version = "4.6", features = ["unstable-dynamic"] }
|
|
rpassword = "7"
|
|
async-trait = "0.1"
|
|
futures = "0.3"
|
|
fuser = "0.18"
|
|
libc = "0.2"
|
|
|
|
[profile.release]
|
|
# No package ships a separate debug package (the PKGBUILD sets `!debug`, the
|
|
# RPM spec sets `debug_package` to nil), and the unstripped binaries weighed
|
|
# 43 MB (`pdfs`), 24 MB (`pdfs-app`) and 12 MB (`pdfs-tray`).
|
|
strip = "symbols"
|
|
# Off on purpose: LTO has broken GTK links for this workspace, which is why
|
|
# the packages turn it off as well.
|
|
lto = false
|
|
# `Workers` and the thumbnail build catch panics to keep the daemon alive, so
|
|
# unwinding must stay on.
|
|
panic = "unwind"
|