summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Murphy <hello@itsjamie.dev>2023-02-11 19:12:59 -0800
committerJamie Murphy <hello@itsjamie.dev>2023-02-12 07:14:41 +0000
commit13b998766edbfce94fe6166e07294ac56d91127e (patch)
treef5db033af6f39ad315b99116092f63067d9629dd
parenta6219af540f65602783a2b80407991b4cfbf3de5 (diff)
downloadgnome-todo-13b998766edbfce94fe6166e07294ac56d91127e.tar.gz
providers: Create LocalProvider scaffold
While this provider does nothing, it provides a Scaffold for what a provider should do to create itself
-rw-r--r--src/engine/lib.rs1
-rw-r--r--src/engine/providers/local.rs46
-rw-r--r--src/engine/providers/mod.rs8
3 files changed, 55 insertions, 0 deletions
diff --git a/src/engine/lib.rs b/src/engine/lib.rs
index ab9c9f88..55023333 100644
--- a/src/engine/lib.rs
+++ b/src/engine/lib.rs
@@ -1,4 +1,5 @@
pub mod engine;
pub mod provider;
+pub mod providers;
pub mod task;
pub mod utils;
diff --git a/src/engine/providers/local.rs b/src/engine/providers/local.rs
new file mode 100644
index 00000000..6ffc5677
--- /dev/null
+++ b/src/engine/providers/local.rs
@@ -0,0 +1,46 @@
+use gtk::{
+ glib::{self, Object},
+ prelude::*,
+ subclass::prelude::*,
+};
+
+use crate::provider::prelude::*;
+
+mod imp {
+ use gtk::gio::ThemedIcon;
+
+ use super::*;
+
+ #[derive(Default)]
+ pub struct LocalProvider {}
+
+ #[glib::object_subclass]
+ impl ObjectSubclass for LocalProvider {
+ const NAME: &'static str = "GtdLocalProvider";
+ type Type = super::LocalProvider;
+ type ParentType = Provider;
+ }
+
+ impl ObjectImpl for LocalProvider {
+ fn constructed(&self) {
+ let _self: Provider = self.obj().clone().upcast();
+
+ _self.set_id("local");
+ _self.set_name("On This Computer");
+ _self.set_description("Local");
+ _self.set_icon(ThemedIcon::new("computer-symbolic"));
+ }
+ }
+ impl ProviderImpl for LocalProvider {}
+}
+
+glib::wrapper! {
+ pub struct LocalProvider(ObjectSubclass<imp::LocalProvider>)
+ @extends Provider;
+}
+
+impl Default for LocalProvider {
+ fn default() -> Self {
+ Object::new::<Self>()
+ }
+}
diff --git a/src/engine/providers/mod.rs b/src/engine/providers/mod.rs
new file mode 100644
index 00000000..41867751
--- /dev/null
+++ b/src/engine/providers/mod.rs
@@ -0,0 +1,8 @@
+pub mod local;
+
+use self::local::LocalProvider;
+use crate::provider::prelude::*;
+
+pub fn providers() -> Vec<Provider> {
+ vec![LocalProvider::default().into()]
+}