Skip to content

Commit bf095df

Browse files
feat: expose Manager::resources_table (#8276)
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
1 parent 32bf201 commit bf095df

File tree

10 files changed

+146
-58
lines changed

10 files changed

+146
-58
lines changed

.changes/tauri-resources-table.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'tauri': 'patch:feat'
3+
---
4+
5+
Exposed `Manager::resources_table` to access the resources table used by tauri, which could be used by plugins or app authors to store their resources and retrieve it later using an id.

core/tauri-macros/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,14 @@ pub fn default_runtime(attributes: TokenStream, input: TokenStream) -> TokenStre
114114
/// ```ignore
115115
/// let rid = 23;
116116
/// let kind = ItemKind::Check;
117-
/// let resources_table = app.manager.resources_table();
117+
/// let resources_table = app.resources_table();
118118
/// do_menu_item!(|i| i.set_text(text))
119119
/// ```
120120
/// which will expand into:
121121
/// ```ignore
122122
/// let rid = 23;
123123
/// let kind = ItemKind::Check;
124-
/// let resources_table = app.manager.resources_table();
124+
/// let resources_table = app.resources_table();
125125
/// match kind {
126126
/// ItemKind::Submenu => {
127127
/// let i = resources_table.get::<Submenu<R>>(rid)?;

core/tauri/src/app.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ macro_rules! shared_app_impl {
773773
pub fn cleanup_before_exit(&self) {
774774
#[cfg(all(desktop, feature = "tray-icon"))]
775775
self.manager.tray.icons.lock().unwrap().clear();
776-
self.manager.resources_table().clear();
776+
self.resources_table().clear();
777777
}
778778
}
779779
};

core/tauri/src/lib.rs

+7
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ pub use cocoa;
6565
#[doc(hidden)]
6666
pub use embed_plist;
6767
pub use error::{Error, Result};
68+
pub use resources::{Resource, ResourceId, ResourceTable};
6869
#[cfg(target_os = "ios")]
6970
#[doc(hidden)]
7071
pub use swift_rs;
@@ -165,6 +166,7 @@ use serde::{Deserialize, Serialize};
165166
use std::{
166167
collections::HashMap,
167168
fmt::{self, Debug},
169+
sync::MutexGuard,
168170
};
169171

170172
#[cfg(feature = "wry")]
@@ -809,6 +811,11 @@ pub trait Manager<R: Runtime>: sealed::ManagerBase<R> {
809811
self.manager().state.try_get()
810812
}
811813

814+
/// Get a reference to the resources table.
815+
fn resources_table(&self) -> MutexGuard<'_, ResourceTable> {
816+
self.manager().resources_table()
817+
}
818+
812819
/// Gets the managed [`Env`].
813820
fn env(&self) -> Env {
814821
self.state::<Env>().inner().clone()

core/tauri/src/menu/plugin.rs

+22-22
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ fn new<R: Runtime>(
334334
handler: Channel,
335335
) -> crate::Result<(ResourceId, MenuId)> {
336336
let options = options.unwrap_or_default();
337-
let mut resources_table = app.manager.resources_table();
337+
let mut resources_table = app.resources_table();
338338

339339
let (rid, id) = match kind {
340340
ItemKind::Menu => {
@@ -439,7 +439,7 @@ fn append<R: Runtime>(
439439
kind: ItemKind,
440440
items: Vec<MenuItemPayloadKind>,
441441
) -> crate::Result<()> {
442-
let resources_table = window.manager.resources_table();
442+
let resources_table = window.resources_table();
443443
match kind {
444444
ItemKind::Menu => {
445445
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -466,7 +466,7 @@ fn prepend<R: Runtime>(
466466
kind: ItemKind,
467467
items: Vec<MenuItemPayloadKind>,
468468
) -> crate::Result<()> {
469-
let resources_table = window.manager.resources_table();
469+
let resources_table = window.resources_table();
470470
match kind {
471471
ItemKind::Menu => {
472472
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -494,7 +494,7 @@ fn insert<R: Runtime>(
494494
items: Vec<MenuItemPayloadKind>,
495495
mut position: usize,
496496
) -> crate::Result<()> {
497-
let resources_table = window.manager.resources_table();
497+
let resources_table = window.resources_table();
498498
match kind {
499499
ItemKind::Menu => {
500500
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -523,7 +523,7 @@ fn remove<R: Runtime>(
523523
menu_kind: ItemKind,
524524
item: (ResourceId, ItemKind),
525525
) -> crate::Result<()> {
526-
let resources_table = app.manager.resources_table();
526+
let resources_table = app.resources_table();
527527
let (rid, kind) = item;
528528
match menu_kind {
529529
ItemKind::Menu => {
@@ -561,7 +561,7 @@ fn remove_at<R: Runtime>(
561561
kind: ItemKind,
562562
position: usize,
563563
) -> crate::Result<Option<(ResourceId, MenuId, ItemKind)>> {
564-
let mut resources_table = app.manager.resources_table();
564+
let mut resources_table = app.resources_table();
565565
match kind {
566566
ItemKind::Menu => {
567567
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -587,7 +587,7 @@ fn items<R: Runtime>(
587587
rid: ResourceId,
588588
kind: ItemKind,
589589
) -> crate::Result<Vec<(ResourceId, MenuId, ItemKind)>> {
590-
let mut resources_table = app.manager.resources_table();
590+
let mut resources_table = app.resources_table();
591591
let items = match kind {
592592
ItemKind::Menu => resources_table.get::<Menu<R>>(rid)?.items()?,
593593
ItemKind::Submenu => resources_table.get::<Submenu<R>>(rid)?.items()?,
@@ -609,7 +609,7 @@ fn get<R: Runtime>(
609609
kind: ItemKind,
610610
id: MenuId,
611611
) -> crate::Result<Option<(ResourceId, MenuId, ItemKind)>> {
612-
let mut resources_table = app.manager.resources_table();
612+
let mut resources_table = app.resources_table();
613613
match kind {
614614
ItemKind::Menu => {
615615
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -643,7 +643,7 @@ async fn popup<R: Runtime>(
643643
.unwrap_or(Some(current_window));
644644

645645
if let Some(window) = window {
646-
let resources_table = app.manager.resources_table();
646+
let resources_table = app.resources_table();
647647
match kind {
648648
ItemKind::Menu => {
649649
let menu = resources_table.get::<Menu<R>>(rid)?;
@@ -662,7 +662,7 @@ async fn popup<R: Runtime>(
662662

663663
#[command(root = "crate")]
664664
fn default<R: Runtime>(app: AppHandle<R>) -> crate::Result<(ResourceId, MenuId)> {
665-
let mut resources_table = app.manager.resources_table();
665+
let mut resources_table = app.resources_table();
666666
let menu = Menu::default(&app)?;
667667
let id = menu.id().clone();
668668
let rid = resources_table.add(menu);
@@ -674,7 +674,7 @@ async fn set_as_app_menu<R: Runtime>(
674674
app: AppHandle<R>,
675675
rid: ResourceId,
676676
) -> crate::Result<Option<(ResourceId, MenuId)>> {
677-
let mut resources_table = app.manager.resources_table();
677+
let mut resources_table = app.resources_table();
678678
let menu = resources_table.get::<Menu<R>>(rid)?;
679679
if let Some(menu) = menu.set_as_app_menu()? {
680680
let id = menu.id().clone();
@@ -696,7 +696,7 @@ async fn set_as_window_menu<R: Runtime>(
696696
.unwrap_or(Some(current_window));
697697

698698
if let Some(window) = window {
699-
let mut resources_table = app.manager.resources_table();
699+
let mut resources_table = app.resources_table();
700700
let menu = resources_table.get::<Menu<R>>(rid)?;
701701
if let Some(menu) = menu.set_as_window_menu(&window)? {
702702
let id = menu.id().clone();
@@ -709,7 +709,7 @@ async fn set_as_window_menu<R: Runtime>(
709709

710710
#[command(root = "crate")]
711711
fn text<R: Runtime>(app: AppHandle<R>, rid: ResourceId, kind: ItemKind) -> crate::Result<String> {
712-
let resources_table = app.manager.resources_table();
712+
let resources_table = app.resources_table();
713713
do_menu_item!(resources_table, rid, kind, |i| i.text())
714714
}
715715

@@ -720,7 +720,7 @@ fn set_text<R: Runtime>(
720720
kind: ItemKind,
721721
text: String,
722722
) -> crate::Result<()> {
723-
let resources_table = app.manager.resources_table();
723+
let resources_table = app.resources_table();
724724
do_menu_item!(resources_table, rid, kind, |i| i.set_text(text))
725725
}
726726

@@ -730,7 +730,7 @@ fn is_enabled<R: Runtime>(
730730
rid: ResourceId,
731731
kind: ItemKind,
732732
) -> crate::Result<bool> {
733-
let resources_table = app.manager.resources_table();
733+
let resources_table = app.resources_table();
734734
do_menu_item!(resources_table, rid, kind, |i| i.is_enabled(), !Predefined)
735735
}
736736

@@ -741,7 +741,7 @@ fn set_enabled<R: Runtime>(
741741
kind: ItemKind,
742742
enabled: bool,
743743
) -> crate::Result<()> {
744-
let resources_table = app.manager.resources_table();
744+
let resources_table = app.resources_table();
745745
do_menu_item!(
746746
resources_table,
747747
rid,
@@ -758,7 +758,7 @@ fn set_accelerator<R: Runtime>(
758758
kind: ItemKind,
759759
accelerator: Option<String>,
760760
) -> crate::Result<()> {
761-
let resources_table = app.manager.resources_table();
761+
let resources_table = app.resources_table();
762762
do_menu_item!(
763763
resources_table,
764764
rid,
@@ -775,7 +775,7 @@ fn set_as_windows_menu_for_nsapp<R: Runtime>(
775775
) -> crate::Result<()> {
776776
#[cfg(target_os = "macos")]
777777
{
778-
let resources_table = app.manager.resources_table();
778+
let resources_table = app.resources_table();
779779
let submenu = resources_table.get::<Submenu<R>>(rid)?;
780780
submenu.set_as_help_menu_for_nsapp()?;
781781
}
@@ -789,7 +789,7 @@ fn set_as_windows_menu_for_nsapp<R: Runtime>(
789789
fn set_as_help_menu_for_nsapp<R: Runtime>(app: AppHandle<R>, rid: ResourceId) -> crate::Result<()> {
790790
#[cfg(target_os = "macos")]
791791
{
792-
let resources_table = app.manager.resources_table();
792+
let resources_table = app.resources_table();
793793
let submenu = resources_table.get::<Submenu<R>>(rid)?;
794794
submenu.set_as_help_menu_for_nsapp()?;
795795
}
@@ -802,14 +802,14 @@ fn set_as_help_menu_for_nsapp<R: Runtime>(app: AppHandle<R>, rid: ResourceId) ->
802802

803803
#[command(root = "crate")]
804804
fn is_checked<R: Runtime>(app: AppHandle<R>, rid: ResourceId) -> crate::Result<bool> {
805-
let resources_table = app.manager.resources_table();
805+
let resources_table = app.resources_table();
806806
let check_item = resources_table.get::<CheckMenuItem<R>>(rid)?;
807807
check_item.is_checked()
808808
}
809809

810810
#[command(root = "crate")]
811811
fn set_checked<R: Runtime>(app: AppHandle<R>, rid: ResourceId, checked: bool) -> crate::Result<()> {
812-
let resources_table = app.manager.resources_table();
812+
let resources_table = app.resources_table();
813813
let check_item = resources_table.get::<CheckMenuItem<R>>(rid)?;
814814
check_item.set_checked(checked)
815815
}
@@ -820,7 +820,7 @@ fn set_icon<R: Runtime>(
820820
rid: ResourceId,
821821
icon: Option<Icon>,
822822
) -> crate::Result<()> {
823-
let resources_table = app.manager.resources_table();
823+
let resources_table = app.resources_table();
824824
let icon_item = resources_table.get::<IconMenuItem<R>>(rid)?;
825825
match icon {
826826
Some(Icon::Native(icon)) => icon_item.set_native_icon(Some(icon)),

0 commit comments

Comments
 (0)