read calendar files from <home>/.local/share/calendars

This commit is contained in:
Fabrizio Iannetti 2024-05-15 07:43:11 +02:00
parent e68e9ab434
commit 61c02ceea6
4 changed files with 206 additions and 85 deletions

238
Cargo.lock generated
View File

@ -37,14 +37,15 @@ dependencies = [
[[package]]
name = "ahash"
version = "0.8.3"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"getrandom",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
@ -58,9 +59,9 @@ dependencies = [
[[package]]
name = "android-activity"
version = "0.5.2"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289"
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
dependencies = [
"android-properties",
"bitflags 2.4.2",
@ -72,7 +73,7 @@ dependencies = [
"log",
"ndk",
"ndk-context",
"ndk-sys",
"ndk-sys 0.6.0+11769913",
"num_enum",
"thiserror",
]
@ -382,22 +383,12 @@ dependencies = [
"generic-array",
]
[[package]]
name = "block-sys"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7"
dependencies = [
"objc-sys",
]
[[package]]
name = "block2"
version = "0.3.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68"
checksum = "43ff7d91d3c1d568065b06c899777d1e48dcf76103a672a0adbc238a7f247f1e"
dependencies = [
"block-sys",
"objc2",
]
@ -451,9 +442,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
version = "1.5.0"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
[[package]]
name = "calendar"
@ -462,6 +453,7 @@ dependencies = [
"chrono",
"clap",
"directories",
"dirs 5.0.1",
"icalendar",
"iced",
"iced_aw",
@ -469,6 +461,7 @@ dependencies = [
"lttng-ust",
"lttng-ust-generate",
"simplelog",
"walkdir",
]
[[package]]
@ -879,7 +872,7 @@ checksum = "a62007a65515b3cd88c733dd3464431f05d2ad066999a824259d8edc3cf6f645"
dependencies = [
"dconf_rs",
"detect-desktop-environment",
"dirs",
"dirs 4.0.0",
"objc",
"rust-ini",
"web-sys",
@ -948,6 +941,15 @@ dependencies = [
"dirs-sys 0.3.7",
]
[[package]]
name = "dirs"
version = "5.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
dependencies = [
"dirs-sys 0.4.1",
]
[[package]]
name = "dirs-sys"
version = "0.3.7"
@ -998,6 +1000,11 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "dpi"
version = "0.1.1"
source = "git+https://github.com/iced-rs/winit.git?rev=8affa522bc6dcc497d332a28c03491d22a22f5a7#8affa522bc6dcc497d332a28c03491d22a22f5a7"
[[package]]
name = "drm"
version = "0.11.1"
@ -1399,7 +1406,7 @@ dependencies = [
[[package]]
name = "glyphon"
version = "0.5.0"
source = "git+https://github.com/hecrj/glyphon.git?rev=ceed55403ce53e120ce9d1fae17dcfe388726118#ceed55403ce53e120ce9d1fae17dcfe388726118"
source = "git+https://github.com/hecrj/glyphon.git?rev=f07e7bab705e69d39a5e6e52c73039a93c4552f8#f07e7bab705e69d39a5e6e52c73039a93c4552f8"
dependencies = [
"cosmic-text",
"etagere",
@ -1612,6 +1619,7 @@ name = "iced_core"
version = "0.13.0-dev"
dependencies = [
"bitflags 2.4.2",
"bytes",
"dark-light",
"glam",
"log",
@ -1670,6 +1678,7 @@ dependencies = [
name = "iced_runtime"
version = "0.13.0-dev"
dependencies = [
"bytes",
"iced_core",
"iced_futures",
"raw-window-handle",
@ -1724,29 +1733,20 @@ dependencies = [
name = "iced_winit"
version = "0.13.0-dev"
dependencies = [
"iced_futures",
"iced_graphics",
"iced_runtime",
"log",
"rustc-hash",
"thiserror",
"tracing",
"wasm-bindgen-futures",
"web-sys",
"winapi",
"window_clipboard",
"winit",
]
[[package]]
name = "icrate"
version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319"
dependencies = [
"block2",
"dispatch",
"objc2",
]
[[package]]
name = "indexmap"
version = "1.9.3"
@ -1924,6 +1924,17 @@ version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
[[package]]
name = "libredox"
version = "0.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
dependencies = [
"bitflags 2.4.2",
"libc",
"redox_syscall 0.4.1",
]
[[package]]
name = "linux-raw-sys"
version = "0.3.8"
@ -2085,14 +2096,14 @@ dependencies = [
[[package]]
name = "ndk"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
"bitflags 2.4.2",
"jni-sys",
"log",
"ndk-sys",
"ndk-sys 0.6.0+11769913",
"num_enum",
"raw-window-handle",
"thiserror",
@ -2113,6 +2124,15 @@ dependencies = [
"jni-sys",
]
[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
dependencies = [
"jni-sys",
]
[[package]]
name = "nix"
version = "0.26.4"
@ -2198,25 +2218,59 @@ dependencies = [
[[package]]
name = "objc-sys"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459"
checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60"
[[package]]
name = "objc2"
version = "0.4.1"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d"
checksum = "b4b25e1034d0e636cd84707ccdaa9f81243d399196b8a773946dcffec0401659"
dependencies = [
"objc-sys",
"objc2-encode",
]
[[package]]
name = "objc2-encode"
version = "3.0.0"
name = "objc2-app-kit"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666"
checksum = "fb79768a710a9a1798848179edb186d1af7e8a8679f369e4b8d201dd2a034047"
dependencies = [
"block2",
"objc2",
"objc2-core-data",
"objc2-foundation",
]
[[package]]
name = "objc2-core-data"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e092bc42eaf30a08844e6a076938c60751225ec81431ab89f5d1ccd9f958d6c"
dependencies = [
"block2",
"objc2",
"objc2-foundation",
]
[[package]]
name = "objc2-encode"
version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88658da63e4cc2c8adb1262902cd6af51094df0488b760d6fd27194269c0950a"
[[package]]
name = "objc2-foundation"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfaefe14254871ea16c7d88968c0ff14ba554712a20d76421eec52f0a7fb8904"
dependencies = [
"block2",
"dispatch",
"objc2",
]
[[package]]
name = "objc_exception"
@ -2250,11 +2304,11 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "orbclient"
version = "0.3.45"
version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1"
checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
dependencies = [
"redox_syscall 0.3.5",
"libredox",
]
[[package]]
@ -2423,6 +2477,26 @@ dependencies = [
"siphasher",
]
[[package]]
name = "pin-project"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.48",
]
[[package]]
name = "pin-project-lite"
version = "0.2.9"
@ -2629,15 +2703,6 @@ dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "redox_syscall"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "redox_syscall"
version = "0.4.1"
@ -2770,9 +2835,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "sctk-adwaita"
version = "0.8.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550"
checksum = "7de61fa7334ee8ee1f5c3c58dcc414fb9361e7e8f5bff9d45f4d69eeb89a7169"
dependencies = [
"ab_glyph",
"log",
@ -3202,11 +3267,10 @@ dependencies = [
[[package]]
name = "tracing"
version = "0.1.37"
version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
"cfg-if",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@ -3214,9 +3278,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
version = "0.1.26"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
@ -3225,9 +3289,9 @@ dependencies = [
[[package]]
name = "tracing-core"
version = "0.1.31"
version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
]
@ -3566,9 +3630,9 @@ dependencies = [
[[package]]
name = "web-time"
version = "0.2.4"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
"js-sys",
"wasm-bindgen",
@ -3653,7 +3717,7 @@ dependencies = [
"log",
"metal",
"naga",
"ndk-sys",
"ndk-sys 0.5.0+25.2.9519653",
"objc",
"once_cell",
"parking_lot 0.12.1",
@ -3972,36 +4036,38 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]]
name = "winit"
version = "0.29.15"
source = "git+https://github.com/iced-rs/winit.git?rev=592bd152f6d5786fae7d918532d7db752c0d164f#592bd152f6d5786fae7d918532d7db752c0d164f"
version = "0.30.0"
source = "git+https://github.com/iced-rs/winit.git?rev=8affa522bc6dcc497d332a28c03491d22a22f5a7#8affa522bc6dcc497d332a28c03491d22a22f5a7"
dependencies = [
"ahash 0.8.3",
"ahash 0.8.11",
"android-activity",
"atomic-waker",
"bitflags 2.4.2",
"bytemuck",
"calloop",
"cfg_aliases 0.1.1",
"cfg_aliases 0.2.0",
"concurrent-queue",
"core-foundation",
"core-graphics",
"cursor-icon",
"icrate",
"dpi",
"js-sys",
"libc",
"log",
"memmap2 0.9.4",
"ndk",
"ndk-sys",
"objc2",
"once_cell",
"objc2-app-kit",
"objc2-foundation",
"orbclient",
"percent-encoding",
"pin-project",
"raw-window-handle",
"redox_syscall 0.3.5",
"redox_syscall 0.4.1",
"rustix 0.38.31",
"sctk-adwaita",
"smithay-client-toolkit",
"smol_str",
"tracing",
"unicode-segmentation",
"wasm-bindgen",
"wasm-bindgen-futures",
@ -4011,7 +4077,7 @@ dependencies = [
"wayland-protocols-plasma",
"web-sys",
"web-time",
"windows-sys 0.48.0",
"windows-sys 0.52.0",
"x11-dl",
"x11rb",
"xkbcommon-dl",
@ -4189,6 +4255,26 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c110ba09c9b3a43edd4803d570df0da2414fed6e822e22b976a4e3ef50860701"
[[package]]
name = "zerocopy"
version = "0.7.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.48",
]
[[package]]
name = "zvariant"
version = "3.15.2"

View File

@ -14,10 +14,12 @@ iced_aw = { path = "../iced_aw", default-features = false, features = ["segmente
chrono = { version = "0.4", features = ["unstable-locales"] }
lttng-ust = { version = "0.1.0", optional = true }
icalendar = "0.15.4"
directories = "5.0.1"
directories = "5.0"
dirs = "5.0"
clap = { version = "4.3.11", features = ["derive"] }
log = { version = "0.4", features = ["std", "serde"] }
simplelog = { version = "^0.12.0", default-features = false }
walkdir = "2.0"
[build-dependencies]
#lttng-ust-generate = "0.1.0"
@ -25,5 +27,5 @@ lttng-ust-generate = { path = "../lttng-ust-rs/lttng-ust-generate" }
[profile.release]
opt-level = 3
lto = true
strip = "symbols"
#lto = true
#strip = "symbols"

View File

@ -6,13 +6,19 @@ it is currently in an early development phase.
As a dependency, it requires the iced GUI repository to be cloned alongside (see `Cargo.toml`)
## supported views:
## supported views
* month view
* year view
## input calendars
Clandars are read only from ical files, which are taken:
* from command line if given as arguments
* from `<home>/.local/share/calendars/` if no argument is given
## planned features
* read ical events from a list of calendar files given as arguments
* reload the events from a calendar file if the file changes
* there is currently no plan to connect to a system calendar (e.g. evolution) or remote.

View File

@ -8,6 +8,8 @@ use std::path;
use clap::Parser;
use log::info;
use simplelog::{SimpleLogger, Config};
use dirs;
use walkdir::WalkDir;
#[cfg(feature = "tracing")]
extern crate lttng_ust;
@ -27,14 +29,39 @@ struct CliArgs {
files: Vec<String>,
}
fn is_calendar_file(entry: &path::PathBuf) -> bool {
let file_name = entry.to_str().unwrap_or("");
file_name.ends_with(".ics")
}
fn calendar_files() -> Vec<path::PathBuf> {
let mut files: Vec<path::PathBuf> = Vec::new();
if let Some(data_dir) = dirs::data_dir() {
let calendar_dir = data_dir.join("calendars");
info!("calendar dir: {}", calendar_dir.to_str().unwrap_or("<none>"));
WalkDir::new(calendar_dir)
.into_iter()
.filter_map(|e| e.ok())
.map(|e| e.into_path())
.filter(is_calendar_file)
.collect()
} else {
Vec::new()
}
}
pub fn main() -> iced::Result {
set_up_logger();
let args = CliArgs::parse();
let calendar_files: Vec<_> = args.files.iter().map(|arg| {
info!("CalFile: {}", arg);
path::PathBuf::from(arg)
}).collect();
let calendar_files: Vec<_> = if args.files.is_empty() {
calendar_files()
} else {
args.files.iter().map(|arg| {
info!("CalFile: {}", arg);
path::PathBuf::from(arg)
}).collect()
};
let app_factory = move || { CalendarApp::with_files(calendar_files.clone())};
iced::program("Calendar", CalendarApp::update, CalendarApp::view).run_with(app_factory)