commit
58b96a89b0
9 changed files with 133 additions and 0 deletions
@ -0,0 +1,14 @@
|
||||
# This file is automatically @generated by Cargo. |
||||
# It is not intended for manual editing. |
||||
[[package]] |
||||
name = "my-tasks" |
||||
version = "0.1.0" |
||||
dependencies = [ |
||||
"uuid", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "uuid" |
||||
version = "0.8.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" |
||||
@ -0,0 +1,10 @@
|
||||
[package] |
||||
name = "my-tasks" |
||||
version = "0.1.0" |
||||
authors = ["Jérôme"] |
||||
edition = "2018" |
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||
|
||||
[dependencies] |
||||
uuid = "0.8" |
||||
@ -0,0 +1,24 @@
|
||||
use crate::data::TaskView; |
||||
|
||||
/// A Caldav Calendar
|
||||
pub struct Calendar { |
||||
name: String, |
||||
|
||||
tasks: Vec<TaskView>, |
||||
} |
||||
|
||||
impl Calendar { |
||||
pub fn name() -> String { |
||||
self.name |
||||
} |
||||
|
||||
pub fn tasks() -> Vec<TaskView> { |
||||
self.tasks |
||||
} |
||||
} |
||||
|
||||
impl Drop for Calendar { |
||||
fn drop(&mut self) { |
||||
// TODO: display a warning in case some TaskViews still have a refcount > 0
|
||||
} |
||||
} |
||||
@ -0,0 +1,7 @@
|
||||
pub struct Client {} |
||||
|
||||
impl Client { |
||||
pub fn new(&mut self, url: String, username: String, password: String) -> Self { |
||||
Self{} |
||||
} |
||||
} |
||||
@ -0,0 +1,55 @@
|
||||
//! This module is the data source of the Caldav items
|
||||
//!
|
||||
//! This gives access to data from both the server and a local database for quick retrieval when the app starts
|
||||
|
||||
use std::sync::Arc; |
||||
|
||||
mod calendar; |
||||
mod tasks; |
||||
mod client; |
||||
|
||||
pub use calendar::Calendar; |
||||
pub use tasks::Task; |
||||
use client::Client; |
||||
|
||||
// TODO: consider using references here
|
||||
// (there will be no issue with still-borrowed-data when the DataSource is destroyed, but will it play well with sync stuff?)
|
||||
type CalendarView = Arc<Calendar>; |
||||
type TaskView = Arc<Task>; |
||||
|
||||
/// A Caldav data source
|
||||
pub struct DataSource { |
||||
client: Option<Client>, |
||||
|
||||
calendars: Vec<CalendarView> |
||||
} |
||||
|
||||
impl DataSource { |
||||
/// Create a new data source
|
||||
pub fn new() -> Self { |
||||
Self{ |
||||
client: None, |
||||
calendars: Vec::new(), |
||||
} |
||||
} |
||||
|
||||
/// Tell this data source what the source server is
|
||||
pub fn set_server(&mut self, url: String, username: String, password: String) { |
||||
self.client = Client::new(url, username, password); |
||||
} |
||||
|
||||
/// Update the local database with info from the Client
|
||||
pub fn fetch_from_server(&self) { |
||||
// TODO: how to handle conflicts?
|
||||
} |
||||
|
||||
pub fn calendars(&self) -> Vec<CalendarView> { |
||||
self.calendars |
||||
} |
||||
} |
||||
|
||||
impl Drop for DataSource { |
||||
fn drop(&mut self) { |
||||
// TODO: display a warning in case some CalendarViews still have a refcount > 0
|
||||
} |
||||
} |
||||
@ -0,0 +1,18 @@
|
||||
use uuid::Uuid; |
||||
|
||||
/// A to-do task
|
||||
pub struct Task { |
||||
id: Uuid, |
||||
name: String, |
||||
} |
||||
|
||||
impl Task { |
||||
pub fn id(&self) -> Uuid { self.id } |
||||
pub fn name(&self) -> String { self.name } |
||||
pub fn completed(&self) -> bool { self.completed } |
||||
|
||||
pub fn set_completed(&mut self) { |
||||
// TODO: either require a reference to the DataSource, so that it is aware
|
||||
// or change a flag here, and the DataSource will be able to check the flags of all its content (but then the Calendar should only give a reference/Arc, not a clone)
|
||||
} |
||||
} |
||||
Loading…
Reference in new issue