فهرست منبع

app: feature guard enable-plugins split into enable-plugins-(drk|fud|darkirc)

jkds 2 هفته پیش
والد
کامیت
70479fe7ce
7فایلهای تغییر یافته به همراه61 افزوده شده و 24 حذف شده
  1. 8 4
      bin/app/Cargo.toml
  2. 1 1
      bin/app/src/app/mod.rs
  3. 3 2
      bin/app/src/app/schema/chat.rs
  4. 25 10
      bin/app/src/main.rs
  5. 17 0
      bin/app/src/plugin/mod.rs
  6. 4 5
      bin/app/src/scene.rs
  7. 3 2
      bin/app/src/ui/chatview/mod.rs

+ 8 - 4
bin/app/Cargo.toml

@@ -19,13 +19,13 @@ glam = "0.30.9"
 #zmq = "0.10.0"
 #async_zmq = "0.4.0"
 zeromq = { version = "0.4.1", default-features = false, features = ["async-std-runtime", "all-transport"] }
-darkirc = { path = "../darkirc" }
+darkirc = { path = "../darkirc", optional = true }
 darkfi = {path = "../../", features = ["async-daemonize", "event-graph", "net", "util", "system", "zk"]}
 darkfi-sdk = {path = "../../src/sdk", features = ["async"]}
 darkfi-serial = {path = "../../src/serial", features = ["async"]}
 darkfi_money_contract = { path = "../../src/contract/money/" }
-fud = { path = "../fud/fud/" }
-drk = { path = "../drk/" }
+fud = { path = "../fud/fud/", optional = true }
+drk = { path = "../drk/", optional = true }
 bs58 = "0.5.1"
 thiserror = "2.0.18"
 smol = "2.0.2"
@@ -70,11 +70,15 @@ opt-level = 3
 [features]
 default = ["enable-plugins", "schema-app"]
 emulate-android = []
-enable-plugins = []
 enable-filelog = []
 # Network debugging. Should be disabled in release.
 enable-netdebug = []
 
+enable-plugin-darkirc = ["dep:darkirc"]
+enable-plugin-fud = ["dep:fud"]
+enable-plugin-drk = ["dep:drk"]
+enable-plugins = ["enable-plugin-darkirc", "enable-plugin-fud", "enable-plugin-drk"]
+
 # Main app schema layout
 schema-app = []
 # Dev schema for testing

+ 1 - 1
bin/app/src/app/mod.rs

@@ -23,7 +23,7 @@ use std::sync::{Arc, Mutex as SyncMutex};
 #[cfg(target_os = "android")]
 use crate::android;
 
-#[cfg(feature = "enable-plugins")]
+#[cfg(any(feature = "enable-plugin-darkirc", feature = "enable-plugin-fud"))]
 use crate::plugin::PluginSettings;
 use crate::{
     error::Error,

+ 3 - 2
bin/app/src/app/schema/chat.rs

@@ -17,11 +17,12 @@
  */
 
 use darkfi_serial::Encodable;
+#[cfg(feature = "enable-plugin-darkirc")]
 use irc2::Privmsg;
 use sled_overlay::sled;
 use std::{sync::Arc, time::UNIX_EPOCH};
 
-#[cfg(feature = "enable-plugins")]
+#[cfg(feature = "enable-plugin-darkirc")]
 use crate::plugin::darkirc;
 use crate::{
     app::{
@@ -957,7 +958,7 @@ pub async fn make(
 
             let timest = UNIX_EPOCH.elapsed().unwrap().as_millis() as u64;
             let nick = darkirc.get_property_str("nick").unwrap();
-            #[cfg(feature = "enable-plugins")]
+            #[cfg(feature = "enable-plugin-darkirc")]
             {
                 let msg = Privmsg { version: 0, msg_type: 0, channel, nick, msg: text };
                 let mut data = vec![];

+ 25 - 10
bin/app/src/main.rs

@@ -27,6 +27,7 @@ use darkfi::util::parse::encode_base10;
 use darkfi_money_contract::model::DARK_TOKEN_ID;
 use darkfi_serial::{Decodable, Encodable, deserialize};
 use std::sync::{Arc, OnceLock};
+use smol::Task;
 
 #[macro_use]
 extern crate tracing;
@@ -43,7 +44,6 @@ mod logger;
 mod mesh;
 #[cfg(feature = "enable-netdebug")]
 mod net;
-#[cfg(feature = "enable-plugins")]
 mod plugin;
 mod prop;
 mod pubsub;
@@ -64,7 +64,6 @@ use crate::{
 };
 #[cfg(feature = "enable-netdebug")]
 use net::ZeroMQAdapter;
-#[cfg(feature = "enable-plugins")]
 use {
     // Local imports
     gfx::Renderer,
@@ -80,9 +79,7 @@ use {
 pub use util::ExecutorPtr;
 
 macro_rules! t { ($($arg:tt)*) => { trace!(target: "main", $($arg)*); } }
-#[cfg(feature = "enable-plugins")]
 macro_rules! d { ($($arg:tt)*) => { trace!(target: "main", $($arg)*); } }
-#[cfg(any(feature = "enable-plugins", feature = "enable-netdebug"))]
 macro_rules! i { ($($arg:tt)*) => { trace!(target: "main", $($arg)*); } }
 
 fn panic_hook(panic_info: &std::panic::PanicHookInfo) {
@@ -181,7 +178,6 @@ impl God {
             bg_runtime.push_task(zmq_task);
         }
 
-        #[cfg(feature = "enable-plugins")]
         {
             let ex = bg_ex.clone();
             let cv = cv_app_is_setup.clone();
@@ -192,9 +188,6 @@ impl God {
             bg_runtime.push_task(plug_task);
         }
 
-        #[cfg(not(feature = "enable-plugins"))]
-        warn!(target: "main", "Plugins are disabled in this build");
-
         Self {
             _bg_runtime: bg_runtime,
             _bg_ex: bg_ex,
@@ -262,7 +255,6 @@ impl std::fmt::Debug for God {
 
 static GOD: OnceLock<God> = OnceLock::new();
 
-#[cfg(feature = "enable-plugins")]
 async fn load_plugins(
     ex: ExecutorPtr,
     sg_root: SceneNodePtr,
@@ -275,6 +267,11 @@ async fn load_plugins(
 
     // DarkIrc needs /window to start
     cv.wait().await;
+
+    let mut listeners: Vec<Task<()>> = vec![];
+
+    #[cfg(feature = "enable-plugin-darkirc")]
+    {
     let darkirc = create_darkirc("darkirc");
     let darkirc = darkirc
         .setup(|me| async {
@@ -401,6 +398,12 @@ async fn load_plugins(
 
     plugin.link(darkirc);
 
+    listeners.push(listen_recv);
+    listeners.push(listen_connect);
+    }
+
+    #[cfg(feature = "enable-plugin-fud")]
+    {
     let fud = create_fud("fud");
     let sg_root2 = sg_root.clone();
     let fud = fud
@@ -431,6 +434,11 @@ async fn load_plugins(
 
     plugin.link(fud);
 
+    listeners.push(listen_file_status);
+    }
+
+    #[cfg(feature = "enable-plugin-drk")]
+    {
     let drk = create_drk("drk");
     let drk = drk
         .setup(|me| async {
@@ -664,8 +672,15 @@ async fn load_plugins(
 
     plugin.link(drk);
 
+    listeners.push(listen_connect);
+    listeners.push(listen_balances);
+    listeners.push(listen_tx);
+    listeners.push(listen_tx_built);
+    listeners.push(listen_tx_built_error);
+    }
+
     i!("Plugins loaded");
-    futures::join!(listen_recv, listen_connect, listen_file_status, listen_balances, listen_tx, listen_tx_built, listen_tx_built_error);
+    futures::future::join_all(listeners).await;
 }
 
 pub fn create_darkirc(name: &str) -> SceneNode {

+ 17 - 0
bin/app/src/plugin/mod.rs

@@ -19,34 +19,51 @@
 use sled_overlay::sled;
 use std::{array::TryFromSliceError, string::FromUtf8Error, sync::Arc};
 
+#[cfg(feature = "enable-plugin-darkirc")]
 pub mod darkirc;
+#[cfg(feature = "enable-plugin-darkirc")]
 pub use darkirc::DarkIrcPtr;
 
+#[cfg(feature = "enable-plugin-darkirc")]
 pub mod darkirc2;
+#[cfg(feature = "enable-plugin-darkirc")]
 pub use darkirc2::DarkIrc2Ptr;
 
+#[cfg(feature = "enable-plugin-fud")]
 pub mod fud;
+#[cfg(feature = "enable-plugin-fud")]
 pub use fud::FudPluginPtr as FudPtr;
 
+#[cfg(feature = "enable-plugin-drk")]
 pub mod drk;
+#[cfg(feature = "enable-plugin-drk")]
 pub use drk::DrkPluginPtr as DrkPtr;
 
+#[cfg(feature = "enable-plugin-darkirc")]
 pub use darkirc::DarkIrc;
+#[cfg(feature = "enable-plugin-darkirc")]
 pub use darkirc2::DarkIrc2;
+#[cfg(feature = "enable-plugin-fud")]
 pub use fud::FudPlugin;
+#[cfg(feature = "enable-plugin-drk")]
 pub use drk::DrkPlugin;
 
+#[cfg(any(feature = "enable-plugin-darkirc", feature = "enable-plugin-fud"))]
 use darkfi::net::Settings as NetSettings;
 
+#[cfg(any(feature = "enable-plugin-darkirc", feature = "enable-plugin-fud"))]
 use crate::{
     prop::{Property, PropertyAtomicGuard, PropertySubType, PropertyType, PropertyValue, Role},
     scene::{SceneNode, SceneNodePtr, SceneNodeType},
 };
 
+#[cfg(any(feature = "enable-plugin-darkirc", feature = "enable-plugin-fud"))]
 pub struct PluginSettings {
     pub setting_root: SceneNodePtr,
     pub sled_tree: sled::Tree,
 }
+
+#[cfg(any(feature = "enable-plugin-darkirc", feature = "enable-plugin-fud"))]
 impl PluginSettings {
     pub fn add_setting(&self, name: &str, default: PropertyValue) -> Option<SceneNodePtr> {
         let atom = &mut PropertyAtomicGuard::none();

+ 4 - 5
bin/app/src/scene.rs

@@ -29,7 +29,6 @@ use std::{
     sync::{Arc, OnceLock, RwLock as SyncRwLock, Weak},
 };
 
-#[cfg(feature = "enable-plugins")]
 use crate::plugin;
 use crate::{
     error::{Error, Result},
@@ -592,13 +591,13 @@ pub enum Pimpl {
     EmojiPicker(ui::EmojiPickerPtr),
     Menu(ui::MenuPtr),
     TokenTable(ui::TokenTablePtr),
-    #[cfg(feature = "enable-plugins")]
+    #[cfg(feature = "enable-plugin-darkirc")]
     DarkIrc(plugin::DarkIrcPtr),
-    #[cfg(feature = "enable-plugins")]
+    #[cfg(feature = "enable-plugin-darkirc")]
     DarkIrc2(plugin::DarkIrc2Ptr),
-    #[cfg(feature = "enable-plugins")]
+    #[cfg(feature = "enable-plugin-fud")]
     Fud(plugin::FudPtr),
-    #[cfg(feature = "enable-plugins")]
+    #[cfg(feature = "enable-plugin-drk")]
     Drk(plugin::DrkPtr),
 }
 

+ 3 - 2
bin/app/src/ui/chatview/mod.rs

@@ -76,6 +76,7 @@ fn max(a: f32, b: f32) -> f32 {
     }
 }
 
+#[cfg(feature = "enable-plugin-fud")]
 fn get_file_url(text: &String) -> Option<Url> {
     let url_regex = Regex::new(r"fud://[^\s]+").unwrap();
     url_regex.find(text).and_then(|match_| Url::parse(match_.as_str()).ok())
@@ -509,7 +510,7 @@ impl ChatView {
                 return
             }
 
-            #[cfg(feature = "enable-plugins")]
+            #[cfg(feature = "enable-plugin-fud")]
             {
                 if let Some(url) = get_file_url(&text) {
                     let _ =
@@ -655,7 +656,7 @@ impl ChatView {
                 )
                 .await;
 
-            #[cfg(feature = "enable-plugins")]
+            #[cfg(feature = "enable-plugin-fud")]
             {
                 if let Some(url) = get_file_url(&chatmsg.text) {
                     let _ = msgbuf.insert_filemsg(