Trying very hard not to miss calendar events
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Rework project structure

Co-authored-by: Claude <noreply@anthropic.com>

+49 -39
+5 -18
Cargo.toml
··· 1 - [package] 2 - name = "eds-cal-rs" 3 - version = "0.1.0" 4 - edition = "2021" 5 - 6 - [[bin]] 7 - name = "eds-cal-cli" 8 - path = "src/main.rs" 9 - 10 - [dependencies] 11 - glib-sys = "0.20" 12 - gio-sys = "0.20" 13 - libc = "0.2" 14 - chrono = "0.4" 15 - clap = { version = "4.5.54", features = ["derive"] } 16 - 17 - [build-dependencies] 18 - pkg-config = "0.3" 1 + [workspace] 2 + resolver = "2" 3 + members = [ 4 + "crates/*", 5 + ]
build.rs crates/eds-cal-rs/build.rs
+8
crates/eds-cal-cli/Cargo.toml
··· 1 + [package] 2 + name = "eds-cal-cli" 3 + version = "0.1.0" 4 + edition = "2021" 5 + 6 + [dependencies] 7 + eds-cal-rs = { path = "../eds-cal-rs" } 8 + clap = { version = "4.5.54", features = ["derive"] }
+13
crates/eds-cal-rs/Cargo.toml
··· 1 + [package] 2 + name = "eds-cal-rs" 3 + version = "0.1.0" 4 + edition = "2021" 5 + 6 + [dependencies] 7 + glib-sys = "0.20" 8 + gio-sys = "0.20" 9 + libc = "0.2" 10 + chrono = "0.4" 11 + 12 + [build-dependencies] 13 + pkg-config = "0.3"
+13
crates/eds-cal-rs/src/lib.rs
··· 1 + //! EDS (Evolution Data Server) Rust bindings and utilities 2 + //! 3 + //! This library provides safe Rust wrappers around Evolution Data Server 4 + //! C APIs for calendar and event management. 5 + 6 + pub mod constants; 7 + mod ffi; 8 + mod event; 9 + mod core; 10 + 11 + // Re-export commonly used types for convenience 12 + pub use core::{CalendarClient, EdsError, GLibVersion, Result, Source, SourceRegistry}; 13 + pub use event::{Event, EventTime};
src/constants.rs crates/eds-cal-rs/src/constants.rs
+2 -2
src/eds/core.rs crates/eds-cal-rs/src/core.rs
··· 1 1 // Safe Rust abstractions over Evolution Data Server C APIs 2 2 3 - use super::event::Event; 4 - use super::ffi; 3 + use crate::event::Event; 4 + use crate::ffi; 5 5 use std::ffi::{CStr, CString}; 6 6 use std::fmt; 7 7 use std::os::raw::c_char;
+1 -1
src/eds/event.rs crates/eds-cal-rs/src/event.rs
··· 1 1 // Event types and implementations 2 2 3 - use super::ffi; 3 + use crate::ffi; 4 4 use chrono::{DateTime, Local, NaiveDate, TimeZone}; 5 5 use std::ffi::CStr; 6 6
src/eds/ffi.rs crates/eds-cal-rs/src/ffi.rs
-9
src/eds/mod.rs
··· 1 - // Evolution Data Server module 2 - 3 - mod core; 4 - mod event; 5 - mod ffi; 6 - 7 - // Re-export public API 8 - pub use core::{CalendarClient, EdsError, GLibVersion, Result, Source, SourceRegistry}; 9 - pub use event::{Event, EventTime};
+7 -9
src/main.rs crates/eds-cal-cli/src/main.rs
··· 1 - mod constants; 2 - mod eds; 3 - 4 1 use clap::{Parser, Subcommand}; 2 + use eds_cal_rs::{CalendarClient, EventTime, GLibVersion, SourceRegistry}; 5 3 6 4 #[derive(Parser)] 7 5 #[command(name = "eds-cli")] ··· 41 39 } 42 40 43 41 fn print_version() { 44 - let version = eds::GLibVersion::get(); 42 + let version = GLibVersion::get(); 45 43 println!("Evolution Data Server Calendar"); 46 44 println!("Library version info:"); 47 45 println!( ··· 51 49 } 52 50 53 51 fn list_sources() -> i32 { 54 - let registry = match eds::SourceRegistry::new() { 52 + let registry = match SourceRegistry::new() { 55 53 Ok(reg) => reg, 56 54 Err(e) => { 57 55 eprintln!("Failed to create source registry: {}", e); ··· 79 77 } 80 78 81 79 fn list_events() -> i32 { 82 - let registry = match eds::SourceRegistry::new() { 80 + let registry = match SourceRegistry::new() { 83 81 Ok(reg) => reg, 84 82 Err(e) => { 85 83 eprintln!("Failed to create source registry: {}", e); ··· 106 104 for source in sources { 107 105 let display_name = source.display_name(); 108 106 109 - let client = match eds::CalendarClient::connect(&source) { 107 + let client = match CalendarClient::connect(&source) { 110 108 Ok(client) => client, 111 109 Err(e) => { 112 110 eprintln!("Failed to connect to calendar '{}': {}", display_name, e); ··· 124 122 125 123 for event in events { 126 124 let (start_str, end_str) = match (&event.start, &event.end) { 127 - (eds::EventTime::Date(start_date), eds::EventTime::Date(end_date)) => { 125 + (EventTime::Date(start_date), EventTime::Date(end_date)) => { 128 126 // All-day event 129 127 let start = start_date.format("%Y-%m-%d").to_string(); 130 128 let end = if start_date == end_date { ··· 134 132 }; 135 133 (start, end) 136 134 } 137 - (eds::EventTime::DateTime(start_dt), eds::EventTime::DateTime(end_dt)) => { 135 + (EventTime::DateTime(start_dt), EventTime::DateTime(end_dt)) => { 138 136 // Timed event 139 137 let start = start_dt.format("%Y-%m-%d %H:%M").to_string(); 140 138 let end = end_dt.format("%H:%M").to_string();