From 7ca11c6534122abd45ff0505d057fd1f23b18645 Mon Sep 17 00:00:00 2001 From: adtpdn Date: Tue, 12 May 2026 17:55:53 +0800 Subject: [PATCH] feat: 2.3.1 --- CHANGELOG_DRAFT.md | 15 + assets/data/version.json | 22 +- assets/graphics/gui/mailbox/btn_back.png | Bin 0 -> 14501 bytes .../graphics/gui/mailbox/btn_back.png.import | 40 ++ assets/graphics/gui/mailbox/btn_delete.png | Bin 0 -> 18421 bytes .../gui/mailbox/btn_delete.png.import | 40 ++ assets/graphics/gui/mailbox/mailbox_icon.png | Bin 0 -> 1259 bytes .../gui/mailbox/mailbox_icon.png.import | 40 ++ .../graphics/gui/mailbox/mailbox_node_01.png | Bin 0 -> 81035 bytes .../gui/mailbox/mailbox_node_01.png.import | 40 ++ .../graphics/gui/mailbox/mailbox_node_02.png | Bin 0 -> 69151 bytes .../gui/mailbox/mailbox_node_02.png.import | 40 ++ assets/graphics/gui/mailbox/read_all.png | Bin 0 -> 6153 bytes .../graphics/gui/mailbox/read_all.png.import | 40 ++ assets/models/meshes/lobby.tscn | 286 -------------- export_presets.cfg | 8 +- project.godot | 2 +- scenes/lobby.gd | 44 ++- scenes/lobby.tscn | 118 +++--- scenes/ui/admin_panel.tscn | 66 +++- scenes/ui/mailbox_panel.tscn | 284 +++++++++----- scenes/ui/settings_menu.tscn | 81 +--- scenes/ui/social_panel.tscn | 5 +- scripts/managers/mail_manager.gd | 53 ++- scripts/ui/admin_panel.gd | 367 +++++++++++++++++- scripts/ui/mailbox_panel.gd | 80 ++-- scripts/ui/social_panel.gd | 5 + server/nakama/tekton_admin.js | 230 +++++++++++ 28 files changed, 1328 insertions(+), 578 deletions(-) create mode 100644 assets/graphics/gui/mailbox/btn_back.png create mode 100644 assets/graphics/gui/mailbox/btn_back.png.import create mode 100644 assets/graphics/gui/mailbox/btn_delete.png create mode 100644 assets/graphics/gui/mailbox/btn_delete.png.import create mode 100644 assets/graphics/gui/mailbox/mailbox_icon.png create mode 100644 assets/graphics/gui/mailbox/mailbox_icon.png.import create mode 100644 assets/graphics/gui/mailbox/mailbox_node_01.png create mode 100644 assets/graphics/gui/mailbox/mailbox_node_01.png.import create mode 100644 assets/graphics/gui/mailbox/mailbox_node_02.png create mode 100644 assets/graphics/gui/mailbox/mailbox_node_02.png.import create mode 100644 assets/graphics/gui/mailbox/read_all.png create mode 100644 assets/graphics/gui/mailbox/read_all.png.import delete mode 100644 assets/models/meshes/lobby.tscn diff --git a/CHANGELOG_DRAFT.md b/CHANGELOG_DRAFT.md index a7eb53b..e6ca632 100644 --- a/CHANGELOG_DRAFT.md +++ b/CHANGELOG_DRAFT.md @@ -1,3 +1,18 @@ +## [2.3.2] — 2026-05-12 +- Integrated Mailbox UI into lobby with CanvasLayer overlay (renders above 3D viewport). +- Redesigned `mailbox_panel.tscn` to 3-column layout: scrollable mail list | content area | reward slots. +- Auto read-all and auto claim-all triggered on mailbox open — no "NEW" tags remain after viewing. +- Fixed `MailboxBtn` text glitch — removed text override, replaced with `MailBadge` Label overlay in top-right corner of button. +- Fixed `mark_as_read()` in `MailManager` — now persists `read_ids` to server via new `save_mail_state` RPC. +- Admin Panel: Announcement tab `Target User` field now accepts username, display name, or user_id with **Find** button for resolution. +- Admin Panel: New **Mail Manager** tab listing all global and personal sent mails with Type, Title, Sender, Start, Expires, Status columns. +- Admin Panel: Edit dialog for mails uses `date_picker.tscn` for end date and supports reassigning recipient (username lookup + move). +- Admin Panel: **End Now** button sets `end_date` to current timestamp; **Delete** permanently removes mail from server storage. +- Server: Added `admin_list_mail` RPC — paginates all `inbox/personal` storage objects across all users via `storageList`. +- Server: Added `admin_update_mail` RPC — extract-then-reinsert pattern supports field edits and cross-user mail movement. +- Server: Added `admin_delete_mail_server` RPC — hard-removes mail from global config or personal inbox storage. +- Server: Added `save_mail_state` RPC — merges client `read_ids` into server `inbox/state` without clobbering claimed/deleted IDs. + ## [2.3.1] — 2026-05-11 - Integrated DM tab system directly into the lobby chatbox — DMs now open as closeable tabs inside ChatPanel instead of a fullscreen overlay. - Removed static DMTabBtn; DM tabs are dynamically created per friend using a scene-local DMTabTemplate with (X) close button. diff --git a/assets/data/version.json b/assets/data/version.json index f8828e2..817fd3a 100644 --- a/assets/data/version.json +++ b/assets/data/version.json @@ -1,7 +1,27 @@ { - "latest_version": "2.3.1", + "latest_version": "2.3.2", "minimum_app_version": "2.1.0", "releases": [ + { + "version": "2.3.2", + "date": "2026-05-12", + "pck_url": "https://raw.githubusercontent.com/adtpdn/tekton-updates/main/latest/patch.pck", + "pck_size": 0, + "changelog": [ + "Integrated Mailbox UI into lobby with CanvasLayer overlay", + "Redesigned mailbox_panel.tscn to 3-column layout (mail list, content, rewards)", + "Added auto read-all and auto claim-all on mailbox open", + "Fixed MailboxBtn text glitch — replaced text override with MailBadge Label overlay", + "Admin Panel: Target user field now accepts username or user_id with Find button", + "Admin Panel: New Mail Manager tab to view, edit, end, and delete sent announcements", + "Admin Panel: Edit dialog uses DatePicker for end date and supports recipient reassignment", + "Server: Added admin_list_mail, admin_update_mail, admin_delete_mail_server RPCs", + "Server: admin_list_mail scans all users personal inboxes via storageList", + "Server: admin_update_mail supports moving mail between users and global", + "Server: Added save_mail_state RPC to persist read_ids to server", + "Fixed mark_as_read — now persists to Nakama inbox state instead of local-only pass" + ] + }, { "version": "2.3.1", "date": "2026-05-11", diff --git a/assets/graphics/gui/mailbox/btn_back.png b/assets/graphics/gui/mailbox/btn_back.png new file mode 100644 index 0000000000000000000000000000000000000000..a282146475d00744265cc5e0e99868b0fdb33ace GIT binary patch literal 14501 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 ?Mh~efK+1!)pCiCj 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 DNbT@f literal 0 HcmV?d00001 diff --git a/assets/graphics/gui/mailbox/btn_back.png.import b/assets/graphics/gui/mailbox/btn_back.png.import new file mode 100644 index 0000000..f37b42b --- /dev/null +++ b/assets/graphics/gui/mailbox/btn_back.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mw0hjqg4u58a" +path="res://.godot/imported/btn_back.png-766f18f6c608c9d18d187505f5ac889b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/mailbox/btn_back.png" +dest_files=["res://.godot/imported/btn_back.png-766f18f6c608c9d18d187505f5ac889b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gui/mailbox/btn_delete.png b/assets/graphics/gui/mailbox/btn_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..d06fcc24c7cf17882f5fe49f7c8cf1bad01055aa GIT binary patch literal 18421 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 literal 0 HcmV?d00001 diff --git a/assets/graphics/gui/mailbox/btn_delete.png.import b/assets/graphics/gui/mailbox/btn_delete.png.import new file mode 100644 index 0000000..ebd05ac --- /dev/null +++ b/assets/graphics/gui/mailbox/btn_delete.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://byvqbe1m2dr41" +path="res://.godot/imported/btn_delete.png-cf3f17cefdd7f374d94d8379a1c9f478.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/mailbox/btn_delete.png" +dest_files=["res://.godot/imported/btn_delete.png-cf3f17cefdd7f374d94d8379a1c9f478.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gui/mailbox/mailbox_icon.png b/assets/graphics/gui/mailbox/mailbox_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3b547e0c2365e338362bc5ccf8242406f103b6 GIT binary patch literal 1259 zcmVUJM*`W1_Xtn-*((Q>tESYo*XgDow?^s)bf9SV4l)V8GwDY7?qhTmKTz z>GK}X35S{{N^@5qILSHR_kQp1^Sdwy2$8vjq<3^(~&1$ut&C1F;?(ulse3$_zycUb)hxYdNirU)RQy)4R zQ&3P~BEgA?2?w5!*VorymJa)TzFq#1ps4Ahdz;O6A3D?f`ugtBb4yFhMai&=e&T@b z?QJdH=jP^~gp8}Qvhu&g#Ka#R4#%yGjEq!LrUV#<37K+oSfx_2(79b!R`&Pe;^NBc z>Z$|!5^3M&MsVu;+1Xh;Y-@0y6K$~aLriRJtj=ICSmY^06h8Xj*w}bmTwMG|US8hs zYXGgm*?lFE))0)Zs;a6U22BeK3(sYHoFv=W*my~vfq+27EFD4=F{7iSw?UjrjYjj^ z;Nak6M5u%zNuj`UTAQApo#Ev(P4wU zp}f5OUnIyY?hB4IG&HngFSD+$u8p3zwzhoosO30N1|*OHWI;7PKJKWluD*`PXQid3 zClHkp9picfq^73+w9NOA2W_ zJ3CtsPToa%-hpt(Ks1hMgK77L)9JLPr>C2-Hv%WsioJ;!kORtKsfR))KR>?;)9at2 zqM~o9zo{KXg7Q!vL&hmt5fKqICRmdB8tCoqy@>f?#@t}26co^b9gqyw)YP1Z16ioO zg(9T>_Sa1|k#OtRLo(EMX0y2*=T4hUroTv+n7PmnKv0-sV7zsBc-Yz1)pdmqQ-q2G z0X+9=J&>_bpnLQVIo>8mS(S?PDb=}?F=P>(= zXgM4oBqBkn3_1+6JIKIU%!n6Q69`Qi;K2bNeLjWW&Mhe^IW;gaFd=7rI6$2N{V96A zKCZdB*@k%$hxf&rRNL6(%KQ}i=?Dyf~6h}CMi1)pT V)nQ`BLsb9(002ovPDHLkV1lUeSAqZl literal 0 HcmV?d00001 diff --git a/assets/graphics/gui/mailbox/mailbox_icon.png.import b/assets/graphics/gui/mailbox/mailbox_icon.png.import new file mode 100644 index 0000000..2379333 --- /dev/null +++ b/assets/graphics/gui/mailbox/mailbox_icon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cs5lke40qve7y" +path="res://.godot/imported/mailbox_icon.png-c85e0603097425f2befc209c5030293f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/mailbox/mailbox_icon.png" +dest_files=["res://.godot/imported/mailbox_icon.png-c85e0603097425f2befc209c5030293f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gui/mailbox/mailbox_node_01.png b/assets/graphics/gui/mailbox/mailbox_node_01.png new file mode 100644 index 0000000000000000000000000000000000000000..96d962a47aa8313774d714b8b827c2f3a642da18 GIT binary patch literal 81035 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ⅅA1jZU2su>@^6LO9ELs(ctCOr2uA@CYhT}*A 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 literal 0 HcmV?d00001 diff --git a/assets/graphics/gui/mailbox/mailbox_node_01.png.import b/assets/graphics/gui/mailbox/mailbox_node_01.png.import new file mode 100644 index 0000000..e4a2cdf --- /dev/null +++ b/assets/graphics/gui/mailbox/mailbox_node_01.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc14cddtp0gvq" +path="res://.godot/imported/mailbox_node_01.png-a4c2ade2737ef5ed9de0d64d83793bb5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/mailbox/mailbox_node_01.png" +dest_files=["res://.godot/imported/mailbox_node_01.png-a4c2ade2737ef5ed9de0d64d83793bb5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gui/mailbox/mailbox_node_02.png b/assets/graphics/gui/mailbox/mailbox_node_02.png new file mode 100644 index 0000000000000000000000000000000000000000..25d2066e92722249d9dd1f87b0291493ebeda32c GIT binary patch literal 69151 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 z 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%0D4LfNoJhiOuW2^A5SU#xa< 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 VOx~FJN4Nk0002ovPDHLkV1iV*1TFvo literal 0 HcmV?d00001 diff --git a/assets/graphics/gui/mailbox/mailbox_node_02.png.import b/assets/graphics/gui/mailbox/mailbox_node_02.png.import new file mode 100644 index 0000000..9097ce9 --- /dev/null +++ b/assets/graphics/gui/mailbox/mailbox_node_02.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cosjvp4msuv34" +path="res://.godot/imported/mailbox_node_02.png-c71d25c932b515f6569f65ba769a206c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/mailbox/mailbox_node_02.png" +dest_files=["res://.godot/imported/mailbox_node_02.png-c71d25c932b515f6569f65ba769a206c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gui/mailbox/read_all.png b/assets/graphics/gui/mailbox/read_all.png new file mode 100644 index 0000000000000000000000000000000000000000..1cda915b2542637b108e513a6fc663ffec1e8e77 GIT binary patch literal 6153 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 b*vj?S;6vWAP void: main_menu_panel.hide() profile_panel_instance.show_panel() -func _on_mailbox_pressed() -> void: - if mailbox_panel: - mailbox_panel.show_panel() - if main_menu_panel: - main_menu_panel.hide() - - # Connect the closed signal to reshow main menu if not connected - if not mailbox_panel.closed.is_connected(_on_mailbox_closed): - mailbox_panel.closed.connect(_on_mailbox_closed) +var _mailbox_panel_instance: Control -func _on_mailbox_closed() -> void: - if main_menu_panel: - main_menu_panel.show() +func _on_mailbox_pressed() -> void: + if not _mailbox_panel_instance: + var scene = load("res://scenes/ui/mailbox_panel.tscn") + if scene: + _mailbox_panel_instance = scene.instantiate() + _mailbox_panel_instance.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + + var cl := CanvasLayer.new() + cl.layer = 100 + cl.name = "MailboxCanvasLayer" + add_child(cl) + cl.add_child(_mailbox_panel_instance) + + if _mailbox_panel_instance.has_signal("closed"): + _mailbox_panel_instance.closed.connect(func(): + _mailbox_panel_instance.get_parent().queue_free() + _mailbox_panel_instance = null + ) + + if _mailbox_panel_instance: + _mailbox_panel_instance.show_panel() func _on_mail_unread_count_changed(count: int) -> void: - if mailbox_btn: + if mail_badge: if count > 0: - mailbox_btn.text = "MAIL (%d)" % count - mailbox_btn.add_theme_color_override("font_color", Color.YELLOW) + mail_badge.text = str(count) if count < 100 else "99+" + mail_badge.visible = true else: - mailbox_btn.text = "MAIL" - mailbox_btn.remove_theme_color_override("font_color") + mail_badge.visible = false func _on_logout_pressed() -> void: AuthManager.logout() diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn index 6d7c256..7e39c8a 100644 --- a/scenes/lobby.tscn +++ b/scenes/lobby.tscn @@ -31,6 +31,7 @@ [ext_resource type="Texture2D" uid="uid://dv782w5t0xlcc" path="res://assets/graphics/gui/lobby/friends.png" id="22_1x1aw"] [ext_resource type="Texture2D" uid="uid://cpy5lppf3ro02" path="res://assets/graphics/gui/play/selection_play1.png" id="22_kn4i6"] [ext_resource type="Texture2D" uid="uid://b0ovmvcm8rt2n" path="res://assets/graphics/gui/play/selection_room0.png" id="23_3jc85"] +[ext_resource type="Texture2D" uid="uid://cs5lke40qve7y" path="res://assets/graphics/gui/mailbox/mailbox_icon.png" id="23_835bk"] [ext_resource type="Texture2D" uid="uid://bqcxrfu2jlplr" path="res://assets/graphics/gui/lobby/settings.png" id="23_twy5w"] [ext_resource type="Texture2D" uid="uid://3p0sabd1og31" path="res://assets/graphics/gui/play/selection_room1.png" id="24_jhtcy"] [ext_resource type="Texture2D" uid="uid://bpco6lch7homj" path="res://assets/graphics/gui/play/bg.png" id="25_iwv4c"] @@ -113,6 +114,12 @@ bg_color = Color(0.6, 0.6, 0.6, 0) [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dfnwm"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_835bk"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ucbax"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1x1aw"] + [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_50md7"] texture = ExtResource("25_iwv4c") @@ -480,73 +487,6 @@ layout_mode = 2 custom_minimum_size = Vector2(0, 8) layout_mode = 2 -[node name="CurrencyRow" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=59384589] -visible = false -layout_mode = 2 -theme_override_constants/separation = 8 - -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow" unique_id=1807032398] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="StarPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer" unique_id=509438] -layout_mode = 2 -size_flags_horizontal = 3 -theme = ExtResource("2_theme") - -[node name="Margin" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer/StarPanel" unique_id=609485] -layout_mode = 2 -theme_override_constants/margin_left = 12 -theme_override_constants/margin_top = 4 -theme_override_constants/margin_right = 12 -theme_override_constants/margin_bottom = 4 - -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer/StarPanel/Margin" unique_id=69485094] -layout_mode = 2 -theme_override_constants/separation = 12 - -[node name="Icon" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer/StarPanel/Margin/HBoxContainer" unique_id=958438] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9, 0.7, 0.3, 1) -theme_override_font_sizes/font_size = 18 -text = "✦" - -[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer" unique_id=255421565] -custom_minimum_size = Vector2(180, 0) -layout_direction = 3 -layout_mode = 2 - -[node name="HBoxContainer2" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow" unique_id=1399423386] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="GoldPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2" unique_id=9458940] -layout_mode = 2 -size_flags_horizontal = 3 -theme = ExtResource("2_theme") - -[node name="Margin" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2/GoldPanel" unique_id=94589] -layout_mode = 2 -theme_override_constants/margin_left = 12 -theme_override_constants/margin_top = 4 -theme_override_constants/margin_right = 12 -theme_override_constants/margin_bottom = 4 - -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2/GoldPanel/Margin" unique_id=9458094] -layout_mode = 2 -theme_override_constants/separation = 12 - -[node name="Icon" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2/GoldPanel/Margin/HBoxContainer" unique_id=9485] -layout_mode = 2 -theme_override_colors/font_color = Color(0.8, 0.6, 0.2, 1) -theme_override_font_sizes/font_size = 18 -text = "▤" - -[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2" unique_id=320833893] -custom_minimum_size = Vector2(180, 0) -layout_direction = 3 -layout_mode = 2 - [node name="SpacerMiddle" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=984509] layout_mode = 2 size_flags_vertical = 3 @@ -764,6 +704,44 @@ grow_vertical = 2 texture = ExtResource("21_ucbax") expand_mode = 2 +[node name="MailboxBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=64042311] +unique_name_in_owner = true +custom_minimum_size = Vector2(61, 61) +layout_mode = 2 +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_styles/normal = SubResource("StyleBoxEmpty_835bk") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_ucbax") +theme_override_styles/hover = SubResource("StyleBoxEmpty_1x1aw") + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/MailboxBtn" unique_id=109558991] +custom_minimum_size = Vector2(32, 32) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("23_835bk") +expand_mode = 3 + +[node name="MailBadge" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/MailboxBtn"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -18.0 +offset_top = -2.0 +offset_right = 2.0 +offset_bottom = 16.0 +grow_horizontal = 0 +grow_vertical = 1 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_font_sizes/font_size = 10 +horizontal_alignment = 1 +vertical_alignment = 1 +text = "" + [node name="SocialBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=82719328] unique_name_in_owner = true custom_minimum_size = Vector2(61, 61) @@ -824,7 +802,7 @@ unique_name_in_owner = true custom_minimum_size = Vector2(0, 120) layout_mode = 2 size_flags_horizontal = 3 -theme = ExtResource("2_theme") +theme = ExtResource("14_2630d") theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 30 disabled = true @@ -845,7 +823,7 @@ unique_name_in_owner = true custom_minimum_size = Vector2(0, 120) layout_mode = 2 size_flags_horizontal = 3 -theme = ExtResource("2_theme") +theme = ExtResource("14_2630d") theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 30 disabled = true @@ -866,7 +844,7 @@ unique_name_in_owner = true custom_minimum_size = Vector2(0, 120) layout_mode = 2 size_flags_horizontal = 3 -theme = ExtResource("2_theme") +theme = ExtResource("14_2630d") theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 30 disabled = true diff --git a/scenes/ui/admin_panel.tscn b/scenes/ui/admin_panel.tscn index bf70925..e7e73b5 100644 --- a/scenes/ui/admin_panel.tscn +++ b/scenes/ui/admin_panel.tscn @@ -271,17 +271,29 @@ metadata/_tab_index = 3 [node name="TargetHBox" type="HBoxContainer" parent="Margin/VBox/Tabs/Announcements"] layout_mode = 2 -theme_override_constants/separation = 12 +theme_override_constants/separation = 8 [node name="Label" type="Label" parent="Margin/VBox/Tabs/Announcements/TargetHBox"] layout_mode = 2 -text = "Target User ID:" +text = "Target:" [node name="TargetUserEdit" type="LineEdit" parent="Margin/VBox/Tabs/Announcements/TargetHBox"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -placeholder_text = "Leave empty to send to ALL users (Global)" +placeholder_text = "Username or User ID (empty = ALL)" + +[node name="FindUserBtn" type="Button" parent="Margin/VBox/Tabs/Announcements/TargetHBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(80, 0) +layout_mode = 2 +text = "Find" + +[node name="ResolvedIdLabel" type="Label" parent="Margin/VBox/Tabs/Announcements/TargetHBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_colors/font_color = Color(0.4, 0.9, 0.4, 1) +text = "" [node name="TitleEdit" type="LineEdit" parent="Margin/VBox/Tabs/Announcements"] unique_name_in_owner = true @@ -376,6 +388,54 @@ custom_minimum_size = Vector2(0, 40) layout_mode = 2 text = "SEND ANNOUNCEMENT" +[node name="Mail Manager" type="VBoxContainer" parent="Margin/VBox/Tabs"] +visible = false +layout_mode = 2 +theme_override_constants/separation = 8 +metadata/_tab_index = 4 + +[node name="MailTree" type="Tree" parent="Margin/VBox/Tabs/Mail Manager"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +columns = 6 +column_titles_visible = true +allow_reselect = true +hide_root = true +select_mode = 1 + +[node name="MailActionBar" type="HBoxContainer" parent="Margin/VBox/Tabs/Mail Manager"] +layout_mode = 2 +theme_override_constants/separation = 8 + +[node name="RefreshMailBtn" type="Button" parent="Margin/VBox/Tabs/Mail Manager/MailActionBar"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 36) +layout_mode = 2 +text = "Refresh" + +[node name="Spacer" type="Control" parent="Margin/VBox/Tabs/Mail Manager/MailActionBar"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="EditMailBtn" type="Button" parent="Margin/VBox/Tabs/Mail Manager/MailActionBar"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 36) +layout_mode = 2 +text = "Edit" + +[node name="EndMailBtn" type="Button" parent="Margin/VBox/Tabs/Mail Manager/MailActionBar"] +unique_name_in_owner = true +custom_minimum_size = Vector2(120, 36) +layout_mode = 2 +text = "End Now" + +[node name="DeleteMailServerBtn" type="Button" parent="Margin/VBox/Tabs/Mail Manager/MailActionBar"] +unique_name_in_owner = true +custom_minimum_size = Vector2(120, 36) +layout_mode = 2 +text = "Delete" + [node name="StatusLabel" type="Label" parent="Margin/VBox"] unique_name_in_owner = true layout_mode = 2 diff --git a/scenes/ui/mailbox_panel.tscn b/scenes/ui/mailbox_panel.tscn index 32f856f..0fb0b75 100644 --- a/scenes/ui/mailbox_panel.tscn +++ b/scenes/ui/mailbox_panel.tscn @@ -1,6 +1,39 @@ -[gd_scene format=3 uid="uid://cb5cbbxyxx"] +[gd_scene format=3 uid="uid://5e1bfpagcpps"] -[ext_resource type="Script" uid="uid://df7xxyyzz" path="res://scripts/ui/mailbox_panel.gd" id="1_a"] +[ext_resource type="Script" uid="uid://b5fema68m6b2s" path="res://scripts/ui/mailbox_panel.gd" id="1_a"] +[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="1_wi8mn"] +[ext_resource type="Texture2D" uid="uid://dfmailbox" path="res://assets/graphics/gui/mainmenu/mailbox.png" id="tex_mailbox"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_middle"] +bg_color = Color(0.02, 0.04, 0.08, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0, 0, 0, 1) +corner_radius_top_left = 12 +corner_radius_top_right = 12 +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_slot"] +bg_color = Color(0.1, 0.3, 0.6, 0.6) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mailbtn"] +bg_color = Color(0.2, 0.4, 0.6, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0, 0, 0, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 [node name="MailboxPanel" type="Panel"] anchors_preset = 15 @@ -8,6 +41,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +theme = ExtResource("1_wi8mn") script = ExtResource("1_a") [node name="BG" type="ColorRect" parent="."] @@ -17,7 +51,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -color = Color(0.08, 0.15, 0.22, 1) +color = Color(0.12, 0.4, 0.9, 1) [node name="Margin" type="MarginContainer" parent="."] layout_mode = 1 @@ -26,45 +60,51 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -theme_override_constants/margin_left = 24 -theme_override_constants/margin_top = 24 -theme_override_constants/margin_right = 24 -theme_override_constants/margin_bottom = 24 +theme_override_constants/margin_left = 40 +theme_override_constants/margin_top = 40 +theme_override_constants/margin_right = 40 +theme_override_constants/margin_bottom = 40 -[node name="HBox" type="HBoxContainer" parent="Margin"] +[node name="VBox" type="VBoxContainer" parent="Margin"] layout_mode = 2 -theme_override_constants/separation = 24 +theme_override_constants/separation = 20 -[node name="LeftCol" type="VBoxContainer" parent="Margin/HBox"] -custom_minimum_size = Vector2(300, 0) -layout_mode = 2 -theme_override_constants/separation = 12 - -[node name="HeaderHBox" type="HBoxContainer" parent="Margin/HBox/LeftCol"] +[node name="HeaderHBox" type="HBoxContainer" parent="Margin/VBox"] layout_mode = 2 -[node name="Icon" type="TextureRect" parent="Margin/HBox/LeftCol/HeaderHBox"] -custom_minimum_size = Vector2(32, 32) +[node name="Icon" type="TextureRect" parent="Margin/VBox/HeaderHBox"] +custom_minimum_size = Vector2(48, 48) layout_mode = 2 +texture = ExtResource("tex_mailbox") expand_mode = 1 stretch_mode = 5 -[node name="Label" type="Label" parent="Margin/HBox/LeftCol/HeaderHBox"] +[node name="Label" type="Label" parent="Margin/VBox/HeaderHBox"] layout_mode = 2 +theme_override_font_sizes/font_size = 42 text = "MAILBOX" -theme_override_font_sizes/font_size = 24 -[node name="Scroll" type="ScrollContainer" parent="Margin/HBox/LeftCol"] +[node name="HBox" type="HBoxContainer" parent="Margin/VBox"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 20 + +[node name="LeftCol" type="VBoxContainer" parent="Margin/VBox/HBox"] +custom_minimum_size = Vector2(350, 0) +layout_mode = 2 +theme_override_constants/separation = 12 + +[node name="Scroll" type="ScrollContainer" parent="Margin/VBox/HBox/LeftCol"] layout_mode = 2 size_flags_vertical = 3 -[node name="MailListVBox" type="VBoxContainer" parent="Margin/HBox/LeftCol/Scroll"] +[node name="MailListVBox" type="VBoxContainer" parent="Margin/VBox/HBox/LeftCol/Scroll"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 8 +theme_override_constants/separation = 12 -[node name="EmptyStateLbl" type="Label" parent="Margin/HBox/LeftCol/Scroll"] +[node name="EmptyStateLbl" type="Label" parent="Margin/VBox/HBox/LeftCol/Scroll"] unique_name_in_owner = true visible = false layout_mode = 2 @@ -73,102 +113,170 @@ size_flags_vertical = 6 text = "No mails found." horizontal_alignment = 1 -[node name="CloseBtn" type="Button" parent="Margin/HBox/LeftCol"] -unique_name_in_owner = true -custom_minimum_size = Vector2(100, 40) -layout_mode = 2 -size_flags_horizontal = 0 -text = "BACK" - -[node name="MailBtnTemplate" type="Button" parent="Margin/HBox/LeftCol"] -unique_name_in_owner = true -visible = false -custom_minimum_size = Vector2(0, 80) -layout_mode = 2 -toggle_mode = true - -[node name="VBox" type="VBoxContainer" parent="Margin/HBox/LeftCol/MailBtnTemplate"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 8 -theme_override_constants/margin_right = 8 - -[node name="Title" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox"] -layout_mode = 2 -theme_override_font_sizes/font_size = 18 -text = "No Title" - -[node name="HBox" type="HBoxContainer" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox"] -layout_mode = 2 - -[node name="DateLbl" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"] -layout_mode = 2 -theme_override_colors/font_color = Color(0.745098, 0.745098, 0.745098, 1) -theme_override_font_sizes/font_size = 12 - -[node name="Spacer" type="Control" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"] +[node name="MiddleCol" type="PanelContainer" parent="Margin/VBox/HBox"] layout_mode = 2 size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_middle") -[node name="StatusLbl" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"] +[node name="Margin" type="MarginContainer" parent="Margin/VBox/HBox/MiddleCol"] layout_mode = 2 -theme_override_font_sizes/font_size = 12 +theme_override_constants/margin_left = 24 +theme_override_constants/margin_top = 24 +theme_override_constants/margin_right = 24 +theme_override_constants/margin_bottom = 24 -[node name="RightCol" type="VBoxContainer" parent="Margin/HBox"] +[node name="VBox" type="VBoxContainer" parent="Margin/VBox/HBox/MiddleCol/Margin"] layout_mode = 2 -size_flags_horizontal = 3 +theme_override_constants/separation = 16 -[node name="MailTitleLbl" type="Label" parent="Margin/HBox/RightCol"] +[node name="MailTitleLbl" type="Label" parent="Margin/VBox/HBox/MiddleCol/Margin/VBox"] unique_name_in_owner = true layout_mode = 2 -theme_override_font_sizes/font_size = 28 -text = "WELCOME TO TEKTONIA" +theme_override_font_sizes/font_size = 32 +text = "Message Title" -[node name="Sep" type="HSeparator" parent="Margin/HBox/RightCol"] +[node name="Sep" type="HSeparator" parent="Margin/VBox/HBox/MiddleCol/Margin/VBox"] layout_mode = 2 -[node name="MailContentText" type="RichTextLabel" parent="Margin/HBox/RightCol"] +[node name="MailContentText" type="RichTextLabel" parent="Margin/VBox/HBox/MiddleCol/Margin/VBox"] unique_name_in_owner = true layout_mode = 2 size_flags_vertical = 3 theme_override_font_sizes/normal_font_size = 18 text = "Lorem ipsum..." -[node name="FooterHBox" type="HBoxContainer" parent="Margin/HBox/RightCol"] +[node name="RightCol" type="VBoxContainer" parent="Margin/VBox/HBox"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="DynamicRewardsContainer" type="VBoxContainer" parent="Margin/VBox/HBox/RightCol"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="FooterHBox" type="HBoxContainer" parent="Margin/VBox"] layout_mode = 2 -[node name="SenderLbl" type="Label" parent="Margin/HBox/RightCol/FooterHBox"] +[node name="CloseBtn" type="Button" parent="Margin/VBox/FooterHBox"] unique_name_in_owner = true +custom_minimum_size = Vector2(120, 50) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +text = "< BACK" + +[node name="ReadAllBtn" type="Button" parent="Margin/VBox/FooterHBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(160, 50) +layout_mode = 2 +text = "READ ALL" + +[node name="Spacer" type="Control" parent="Margin/VBox/FooterHBox"] layout_mode = 2 size_flags_horizontal = 3 -text = "SENDER: -TEKTON DEV TEAM" -[node name="DynamicRewardsContainer" type="HBoxContainer" parent="Margin/HBox/RightCol/FooterHBox"] +[node name="ActionBtn" type="Button" parent="Margin/VBox/FooterHBox"] unique_name_in_owner = true +custom_minimum_size = Vector2(180, 50) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +text = "DELETE" + +[node name="Templates" type="Control" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 0 + +[node name="MailBtnTemplate" type="Button" parent="Templates"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 100) +layout_mode = 0 +toggle_mode = true +theme_override_styles/normal = SubResource("StyleBoxFlat_mailbtn") + +[node name="Margin" type="MarginContainer" parent="Templates/MailBtnTemplate"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 12 +theme_override_constants/margin_top = 12 +theme_override_constants/margin_right = 12 +theme_override_constants/margin_bottom = 12 + +[node name="VBox" type="VBoxContainer" parent="Templates/MailBtnTemplate/Margin"] +layout_mode = 2 + +[node name="Title" type="Label" parent="Templates/MailBtnTemplate/Margin/VBox"] +layout_mode = 2 +theme_override_font_sizes/font_size = 22 +text = "Message Title" +text_overrun_behavior = 3 + +[node name="Spacer" type="Control" parent="Templates/MailBtnTemplate/Margin/VBox"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="HBox" type="HBoxContainer" parent="Templates/MailBtnTemplate/Margin/VBox"] +layout_mode = 2 + +[node name="DateLbl" type="Label" parent="Templates/MailBtnTemplate/Margin/VBox/HBox"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.9, 0.9, 0.9, 1) +theme_override_font_sizes/font_size = 14 + +[node name="Spacer" type="Control" parent="Templates/MailBtnTemplate/Margin/VBox/HBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="StatusLbl" type="Label" parent="Templates/MailBtnTemplate/Margin/VBox/HBox"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 + +[node name="RewardHBoxTemplate" type="PanelContainer" parent="Templates"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 80) +layout_mode = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_slot") + +[node name="Margin" type="MarginContainer" parent="Templates/RewardHBoxTemplate"] +layout_mode = 2 +theme_override_constants/margin_left = 12 +theme_override_constants/margin_top = 12 +theme_override_constants/margin_right = 12 +theme_override_constants/margin_bottom = 12 + +[node name="HBox" type="HBoxContainer" parent="Templates/RewardHBoxTemplate/Margin"] layout_mode = 2 theme_override_constants/separation = 12 -[node name="RewardHBoxTemplate" type="HBoxContainer" parent="Margin/HBox/RightCol/FooterHBox"] -unique_name_in_owner = true -visible = false +[node name="IconBg" type="ColorRect" parent="Templates/RewardHBoxTemplate/Margin/HBox"] +custom_minimum_size = Vector2(56, 56) layout_mode = 2 +color = Color(0, 0, 0, 1) -[node name="Icon" type="TextureRect" parent="Margin/HBox/RightCol/FooterHBox/RewardHBoxTemplate"] -custom_minimum_size = Vector2(32, 32) -layout_mode = 2 +[node name="Icon" type="TextureRect" parent="Templates/RewardHBoxTemplate/Margin/HBox/IconBg"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 +stretch_mode = 5 -[node name="AmountLbl" type="Label" parent="Margin/HBox/RightCol/FooterHBox/RewardHBoxTemplate"] +[node name="VBox" type="VBoxContainer" parent="Templates/RewardHBoxTemplate/Margin/HBox"] layout_mode = 2 -text = "100" +alignment = 1 -[node name="ActionBtn" type="Button" parent="Margin/HBox/RightCol/FooterHBox"] -unique_name_in_owner = true -custom_minimum_size = Vector2(120, 48) +[node name="TypeLbl" type="Label" parent="Templates/RewardHBoxTemplate/Margin/HBox/VBox"] layout_mode = 2 -theme_override_colors/font_color = Color(1, 0.2, 0.2, 1) -text = "DELETE" +theme_override_font_sizes/font_size = 12 +text = "ITEM NAME" + +[node name="AmountLbl" type="Label" parent="Templates/RewardHBoxTemplate/Margin/HBox/VBox"] +layout_mode = 2 +theme_override_font_sizes/font_size = 16 +text = "x00000" diff --git a/scenes/ui/settings_menu.tscn b/scenes/ui/settings_menu.tscn index 280796c..59a7fc7 100644 --- a/scenes/ui/settings_menu.tscn +++ b/scenes/ui/settings_menu.tscn @@ -1,53 +1,16 @@ [gd_scene format=3 uid="uid://b1two2tvv5prx"] [ext_resource type="Script" uid="uid://cdege6m8u5cp" path="res://scripts/ui/settings_menu.gd" id="1_script"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bg"] -bg_color = Color(0.05, 0.05, 0.08, 0.85) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.2, 0.8, 1, 0.5) -corner_radius_top_left = 20 -corner_radius_top_right = 20 -corner_radius_bottom_right = 20 -corner_radius_bottom_left = 20 -shadow_color = Color(0, 0, 0, 0.5) -shadow_size = 20 +[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="2_theme"] [sub_resource type="LabelSettings" id="LabelSettings_title"] font_size = 32 font_color = Color(0.2, 0.9, 1, 1) -outline_size = 8 -outline_color = Color(0, 0, 0, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_bg"] -content_margin_left = 20.0 -content_margin_top = 20.0 -content_margin_right = 20.0 -content_margin_bottom = 20.0 -bg_color = Color(0.1, 0.1, 0.15, 0.6) -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 [sub_resource type="LabelSettings" id="LabelSettings_heading"] font_size = 24 font_color = Color(0.9, 0.9, 0.9, 1) -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_section_header"] -content_margin_left = 15.0 -content_margin_top = 5.0 -content_margin_right = 15.0 -content_margin_bottom = 5.0 -bg_color = Color(0.2, 0.5, 0.8, 0.3) -corner_radius_top_left = 5 -corner_radius_top_right = 5 -corner_radius_bottom_right = 5 -corner_radius_bottom_left = 5 - [sub_resource type="LabelSettings" id="LabelSettings_section"] font_size = 18 font_color = Color(0.4, 0.9, 1, 1) @@ -79,47 +42,41 @@ offset_right = 400.0 offset_bottom = 300.0 grow_horizontal = 2 grow_vertical = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_bg") +theme = ExtResource("2_theme") [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer" unique_id=1608766484] layout_mode = 2 -theme_override_constants/separation = 20 [node name="Header" type="HBoxContainer" parent="PanelContainer/VBoxContainer" unique_id=1476625293] custom_minimum_size = Vector2(0, 80) layout_mode = 2 -theme_override_constants/separation = 20 + +[node name="PanelContainer" type="Control" parent="PanelContainer/VBoxContainer/Header" unique_id=1523545144] +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 [node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/Header" unique_id=22122987] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/margin_left = 30 [node name="Title" type="Label" parent="PanelContainer/VBoxContainer/Header/MarginContainer" unique_id=1831070364] layout_mode = 2 -text = "SYSTEM SETTINGS" +text = "SETTINGS" label_settings = SubResource("LabelSettings_title") [node name="CloseButton" type="Button" parent="PanelContainer/VBoxContainer/Header" unique_id=1345773906] custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 -theme_override_font_sizes/font_size = 32 text = "X" flat = true [node name="ContentSection" type="MarginContainer" parent="PanelContainer/VBoxContainer" unique_id=1702280876] layout_mode = 2 size_flags_vertical = 3 -theme_override_constants/margin_left = 20 -theme_override_constants/margin_top = 0 -theme_override_constants/margin_right = 20 -theme_override_constants/margin_bottom = 30 [node name="TabContainer" type="TabContainer" parent="PanelContainer/VBoxContainer/ContentSection" unique_id=1795678842] layout_mode = 2 -theme_override_constants/side_margin = 20 -theme_override_styles/panel = SubResource("StyleBoxFlat_tab_bg") current_tab = 0 [node name="Video" type="ScrollContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer" unique_id=964480166] @@ -129,7 +86,6 @@ metadata/_tab_index = 0 [node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video" unique_id=1271648419] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 15 [node name="Fullscreen" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=683482011] layout_mode = 2 @@ -216,7 +172,6 @@ layout_mode = 2 [node name="Audio" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer" unique_id=1585166620] visible = false layout_mode = 2 -theme_override_constants/separation = 20 metadata/_tab_index = 1 [node name="Master" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio" unique_id=2083739941] @@ -272,7 +227,6 @@ metadata/_tab_index = 2 [node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls" unique_id=1592525164] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 15 [node name="ControllerToggleContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000001] layout_mode = 2 @@ -289,7 +243,6 @@ layout_mode = 2 [node name="MovementSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000004] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MovementSection" unique_id=100000005] layout_mode = 2 @@ -298,8 +251,6 @@ label_settings = SubResource("LabelSettings_section") [node name="MoveGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000006] layout_mode = 2 -theme_override_constants/h_separation = 20 -theme_override_constants/v_separation = 10 columns = 3 [node name="ColH1" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=393496035] @@ -391,7 +342,6 @@ text = "Right" [node name="PowerUpSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000015] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpSection" unique_id=100000016] layout_mode = 2 @@ -400,8 +350,6 @@ label_settings = SubResource("LabelSettings_section") [node name="PowerUpGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000017] layout_mode = 2 -theme_override_constants/h_separation = 20 -theme_override_constants/v_separation = 10 columns = 3 [node name="UsePowerupLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpGrid" unique_id=100000118] @@ -424,7 +372,6 @@ text = "N/A" [node name="PowerBarSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000026] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarSection" unique_id=100000027] layout_mode = 2 @@ -433,8 +380,6 @@ label_settings = SubResource("LabelSettings_section") [node name="PowerBarGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000028] layout_mode = 2 -theme_override_constants/h_separation = 20 -theme_override_constants/v_separation = 10 columns = 3 [node name="AttackLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000029] @@ -475,7 +420,6 @@ text = "N/A" [node name="OtherSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000033] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherSection" unique_id=100000034] layout_mode = 2 @@ -484,8 +428,6 @@ label_settings = SubResource("LabelSettings_section") [node name="OtherGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000035] layout_mode = 2 -theme_override_constants/h_separation = 20 -theme_override_constants/v_separation = 10 columns = 3 [node name="GrabLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000036] @@ -514,11 +456,9 @@ metadata/_tab_index = 3 [node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controller" unique_id=300000002] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 15 [node name="CtrlInfoSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controller/VBox" unique_id=300000003] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controller/VBox/CtrlInfoSection" unique_id=300000004] layout_mode = 2 @@ -527,8 +467,6 @@ label_settings = SubResource("LabelSettings_section") [node name="CtrlGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controller/VBox" unique_id=300000005] layout_mode = 2 -theme_override_constants/h_separation = 20 -theme_override_constants/v_separation = 10 columns = 2 [node name="ColH1" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controller/VBox/CtrlGrid" unique_id=300000006] @@ -606,11 +544,9 @@ metadata/_tab_index = 4 [node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput" unique_id=200000002] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 20 [node name="JoystickSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox" unique_id=200000003] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox/JoystickSection" unique_id=200000004] layout_mode = 2 @@ -619,7 +555,6 @@ label_settings = SubResource("LabelSettings_section") [node name="JoystickSizeContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox" unique_id=200000005] layout_mode = 2 -theme_override_constants/separation = 8 [node name="JoystickSizeHeader" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox/JoystickSizeContainer" unique_id=200000006] layout_mode = 2 @@ -662,7 +597,6 @@ button_pressed = true [node name="ButtonsSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox" unique_id=200000013] layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_section_header") [node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox/ButtonsSection" unique_id=200000014] layout_mode = 2 @@ -671,7 +605,6 @@ label_settings = SubResource("LabelSettings_section") [node name="ButtonOpacityContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox" unique_id=200000015] layout_mode = 2 -theme_override_constants/separation = 8 [node name="ButtonOpacityHeader" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/TouchInput/VBox/ButtonOpacityContainer" unique_id=200000016] layout_mode = 2 diff --git a/scenes/ui/social_panel.tscn b/scenes/ui/social_panel.tscn index efffea9..b746f50 100644 --- a/scenes/ui/social_panel.tscn +++ b/scenes/ui/social_panel.tscn @@ -104,6 +104,8 @@ size_flags_horizontal = 3 theme_override_styles/normal = SubResource("StyleBoxFlat_tab_inactive") theme_override_styles/hover = SubResource("StyleBoxFlat_tab_inactive") theme_override_styles/pressed = SubResource("StyleBoxFlat_tab_active") +toggle_mode = true +button_pressed = true text = "FIND FRIEND" [node name="FriendsTabBtn" type="Button" parent="Panel/Margin/VBox/TabBar" unique_id=1723617099] @@ -111,9 +113,10 @@ unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 -theme_override_styles/normal = SubResource("StyleBoxFlat_tab_active") +theme_override_styles/normal = SubResource("StyleBoxFlat_tab_inactive") theme_override_styles/hover = SubResource("StyleBoxFlat_tab_inactive") theme_override_styles/pressed = SubResource("StyleBoxFlat_tab_active") +toggle_mode = true text = "FRIENDS" [node name="HSep1" type="HSeparator" parent="Panel/Margin/VBox" unique_id=549111536] diff --git a/scripts/managers/mail_manager.gd b/scripts/managers/mail_manager.gd index 6dc1739..7d3a1bc 100644 --- a/scripts/managers/mail_manager.gd +++ b/scripts/managers/mail_manager.gd @@ -90,7 +90,52 @@ func delete_mail(mail_id: String) -> bool: func mark_as_read(mail_id: String) -> void: if mail_id in read_ids: return - # Since there's no specific RPC for just marking as read, we can just do a claim with 0 rewards if needed, - # or add an RPC for it. For now we just let claim or delete handle the server-side state. - # Let's add an empty claim or just handle it purely local until claimed/deleted if it has no rewards. - pass + read_ids.append(mail_id) + _update_unread_count() + # Persist read state to server via delete_mail RPC pattern (just saves state) + _save_inbox_state() + +func _save_inbox_state() -> void: + if not NakamaManager.session: return + var state_payload = { + "claimed_ids": claimed_ids, + "deleted_ids": [], + "read_ids": read_ids + } + # We use storage write via a lightweight RPC or direct storage + var r = await NakamaManager.client.rpc_async( + NakamaManager.session, "save_mail_state", + JSON.stringify(state_payload) + ) + if r.is_exception(): + push_warning("[MailManager] Could not save mail state: " + r.get_exception().message) + +func read_all_and_claim_all() -> void: + """Mark all mails as read and claim all unclaimed rewards.""" + if mails.is_empty(): return + + # Mark all as read + for mail in mails: + var mid = mail.get("id", "") + if mid not in read_ids: + read_ids.append(mid) + + # Claim all unclaimed rewards + var to_claim: Array = [] + for mail in mails: + var mid = mail.get("id", "") + if mid in claimed_ids: continue + var rewards = mail.get("rewards", []) + var has_rewards = false + if typeof(rewards) == TYPE_DICTIONARY: + has_rewards = rewards.get("star", 0) > 0 or rewards.get("gold", 0) > 0 + elif typeof(rewards) == TYPE_ARRAY: + has_rewards = rewards.size() > 0 + if has_rewards: + to_claim.append(mid) + + for mid in to_claim: + await claim_reward(mid) + + _update_unread_count() + mail_updated.emit() diff --git a/scripts/ui/admin_panel.gd b/scripts/ui/admin_panel.gd index ebd2ce0..a21668c 100644 --- a/scripts/ui/admin_panel.gd +++ b/scripts/ui/admin_panel.gd @@ -38,6 +38,8 @@ var _current_dr_month: String = "" # Tab: Announcements @onready var target_user_edit := %TargetUserEdit as LineEdit +@onready var find_user_btn := %FindUserBtn as Button +@onready var resolved_id_label := %ResolvedIdLabel as Label @onready var title_edit := %TitleEdit as LineEdit @onready var content_edit := %ContentEdit as TextEdit @onready var start_date_edit := %StartDatePicker as Button @@ -47,6 +49,18 @@ var _current_dr_month: String = "" @onready var reward_row_template := %RewardRowTemplate as HBoxContainer @onready var send_mail_btn := %SendMailBtn as Button +var _resolved_user_id: String = "" + +# Tab: Mail Manager +@onready var mail_tree := %MailTree as Tree +@onready var refresh_mail_btn := %RefreshMailBtn as Button +@onready var edit_mail_btn := %EditMailBtn as Button +@onready var end_mail_btn := %EndMailBtn as Button +@onready var delete_mail_server_btn := %DeleteMailServerBtn as Button + +var _mail_root: TreeItem +var _all_server_mails: Array = [] + const MONTH_NAMES = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] # -- Data -- @@ -140,6 +154,19 @@ func _setup_columns() -> void: lb_tree.set_column_custom_minimum_width(5, 60) _lb_root = lb_tree.create_item() + # Mail Manager + mail_tree.set_column_title(0, "Type") + mail_tree.set_column_title(1, "Title") + mail_tree.set_column_title(2, "Sender") + mail_tree.set_column_title(3, "Start") + mail_tree.set_column_title(4, "Expires") + mail_tree.set_column_title(5, "Status") + mail_tree.set_column_custom_minimum_width(0, 100) + mail_tree.set_column_expand(0, false) + mail_tree.set_column_custom_minimum_width(5, 80) + mail_tree.set_column_expand(5, false) + _mail_root = mail_tree.create_item() + func _connect_signals() -> void: close_btn.pressed.connect(_on_close) refresh_btn.pressed.connect(_on_refresh) @@ -166,6 +193,16 @@ func _connect_signals() -> void: # Announcement actions send_mail_btn.pressed.connect(_on_send_mail) add_reward_btn.pressed.connect(_on_add_reward_pressed) + find_user_btn.pressed.connect(_on_find_user) + target_user_edit.text_changed.connect(func(_t): _resolved_user_id = ""; resolved_id_label.text = "") + + # Mail Manager actions + refresh_mail_btn.pressed.connect(func(): await _load_mail()) + mail_tree.item_selected.connect(_on_mail_item_selected) + edit_mail_btn.pressed.connect(_on_edit_mail_pressed) + end_mail_btn.pressed.connect(_on_end_mail_pressed) + delete_mail_server_btn.pressed.connect(_on_delete_mail_server_pressed) + _update_mail_action_btns(null) # ============================================================================= # Core Panel Logic @@ -189,6 +226,8 @@ func _on_tab_changed(tab_index: int) -> void: await _load_leaderboard() elif tab_index == 2: await _load_daily_rewards_config() + elif tab_index == 4: + await _load_mail() # ============================================================================= # RPC Helper @@ -649,8 +688,60 @@ func _on_add_reward_pressed() -> void: var remove_btn = row.get_node("RemoveBtn") as Button remove_btn.pressed.connect(func(): row.queue_free()) +func _on_find_user() -> void: + var input = target_user_edit.text.strip_edges() + if input.is_empty(): + _resolved_user_id = "" + resolved_id_label.text = "(Global — all users)" + return + + _set_status("Looking up user...") + var uid = await _resolve_target_user_id(input) + if uid.is_empty(): + resolved_id_label.text = "NOT FOUND" + resolved_id_label.add_theme_color_override("font_color", CLR_STATUS_ERR) + _set_status("User not found: " + input, CLR_STATUS_ERR) + else: + _resolved_user_id = uid + resolved_id_label.text = "ID: " + uid.substr(0, 12) + "..." + resolved_id_label.add_theme_color_override("font_color", CLR_STATUS_OK) + _set_status("Found user: " + uid, CLR_STATUS_OK) + +func _resolve_target_user_id(input: String) -> String: + """Resolve a username, display_name, or user_id to a user_id. + Returns empty string if not found.""" + if input.is_empty(): + return "" + + # If it looks like a UUID already, return as-is + if input.length() >= 32 and "-" in input: + return input + + # Search in cached all_users first + for u in all_users: + var uname: String = u.get("username", "") + var dname: String = u.get("display_name", "") + var uid: String = u.get("user_id", "") + if uname.to_lower() == input.to_lower() or dname.to_lower() == input.to_lower(): + return uid + + # Cache miss — fetch from server + var res := await _rpc("admin_list_users", {}) + if res.has("error"): + return "" + all_users = res.get("users", []) + + for u in all_users: + var uname: String = u.get("username", "") + var dname: String = u.get("display_name", "") + var uid: String = u.get("user_id", "") + if uname.to_lower() == input.to_lower() or dname.to_lower() == input.to_lower(): + return uid + + return "" + func _on_send_mail() -> void: - var target = target_user_edit.text.strip_edges() + var input = target_user_edit.text.strip_edges() var title = title_edit.text.strip_edges() var content = content_edit.text.strip_edges() var start_date = start_date_edit.get_date_iso() @@ -659,6 +750,21 @@ func _on_send_mail() -> void: if title.is_empty() or content.is_empty(): _set_status("Title and content cannot be empty", CLR_STATUS_ERR) return + + # Resolve target + var target_uid := "" + if not input.is_empty(): + if not _resolved_user_id.is_empty(): + target_uid = _resolved_user_id + else: + _set_status("Resolving user...") + target_uid = await _resolve_target_user_id(input) + if target_uid.is_empty(): + _set_status("User not found: " + input + ". Use Find button.", CLR_STATUS_ERR) + return + _resolved_user_id = target_uid + resolved_id_label.text = "ID: " + target_uid.substr(0, 12) + "..." + resolved_id_label.add_theme_color_override("font_color", CLR_STATUS_OK) var rewards_arr = [] for child in rewards_list.get_children(): @@ -679,7 +785,7 @@ func _on_send_mail() -> void: _set_status("Sending mail...") var payload = { - "target_user_id": target, + "target_user_id": target_uid, "title": title, "content": content, "start_date": start_date, @@ -694,6 +800,9 @@ func _on_send_mail() -> void: _set_status("Failed to send mail: " + res.get("error", "Unknown"), CLR_STATUS_ERR) else: _set_status("Mail sent successfully!", CLR_STATUS_OK) + target_user_edit.text = "" + _resolved_user_id = "" + resolved_id_label.text = "" title_edit.text = "" content_edit.text = "" if start_date_edit.has_method("clear_date"): @@ -702,3 +811,257 @@ func _on_send_mail() -> void: end_date_edit.clear_date() for child in rewards_list.get_children(): if child.visible: child.queue_free() + +# ============================================================================= +# TAB 5: MAIL MANAGER +# ============================================================================= +func _load_mail() -> void: + _clear_tree(mail_tree, _mail_root) + _set_status("Loading mails...") + + var res := await _rpc("admin_list_mail", {}) + if res.has("error"): + _set_status("Failed: " + str(res.error), CLR_STATUS_ERR) + return + + _all_server_mails = res.get("mails", []) + count_label.text = "%d mails" % _all_server_mails.size() + + var now_str = Time.get_datetime_string_from_system(true) + + for mail in _all_server_mails: + var item := _mail_root.create_child() + var mail_type: String = mail.get("type", "global") + var mail_title: String = mail.get("title", "No Title") + var sender: String = mail.get("sender", "SYSTEM") + var start_date: String = mail.get("start_date", "") + var expiry: String = mail.get("expiry_date", "") + + # Type column + item.set_text(0, mail_type.to_upper()) + if mail_type == "personal": + item.set_custom_color(0, CLR_ADMIN) + else: + item.set_custom_color(0, CLR_MOD) + + # Title + item.set_text(1, mail_title) + + # Sender + item.set_text(2, sender) + + # Start date + item.set_text(3, start_date.substr(0, 10) if start_date.length() >= 10 else start_date) + + # Expiry + var expiry_short = expiry.substr(0, 10) if expiry.length() >= 10 else expiry + item.set_text(4, expiry_short) + + # Status + var end_date: String = mail.get("end_date", "") + var status := "ACTIVE" + if not end_date.is_empty() and now_str > end_date: + status = "ENDED" + item.set_custom_color(5, CLR_BTN_DEL) + elif not expiry.is_empty() and now_str > expiry: + status = "EXPIRED" + item.set_custom_color(5, CLR_BTN_DEL) + else: + item.set_custom_color(5, CLR_STATUS_OK) + item.set_text(5, status) + + item.set_metadata(0, mail) + + _update_mail_action_btns(null) + _set_status("") + +func _on_mail_item_selected() -> void: + var item = mail_tree.get_selected() + _update_mail_action_btns(item) + +func _update_mail_action_btns(item) -> void: + var has_sel = item != null + edit_mail_btn.disabled = not has_sel + end_mail_btn.disabled = not has_sel + delete_mail_server_btn.disabled = not has_sel + +func _get_selected_mail() -> Dictionary: + var item = mail_tree.get_selected() + if item: + return item.get_metadata(0) + return {} + +func _on_edit_mail_pressed() -> void: + var mail = _get_selected_mail() + if mail.is_empty(): return + _show_edit_mail_dialog(mail) + +func _show_edit_mail_dialog(mail: Dictionary) -> void: + var mail_id: String = mail.get("id", "") + var mail_type: String = mail.get("type", "global") + var target_uid: String = mail.get("target_user_id", "") + + var dialog := AcceptDialog.new() + dialog.title = "Edit Mail: " + mail.get("title", "") + dialog.min_size = Vector2i(480, 360) + var vbox := VBoxContainer.new() + vbox.add_theme_constant_override("separation", 10) + + var id_lbl := Label.new() + id_lbl.text = "ID: " + mail_id + " | Type: " + mail_type + id_lbl.add_theme_color_override("font_color", CLR_DIM) + vbox.add_child(id_lbl) + + var grid := GridContainer.new() + grid.columns = 2 + grid.add_theme_constant_override("h_separation", 8) + grid.add_theme_constant_override("v_separation", 8) + + var title_lbl := Label.new(); title_lbl.text = "Title:"; grid.add_child(title_lbl) + var title_input := LineEdit.new(); title_input.text = mail.get("title", ""); title_input.custom_minimum_size.x = 300; grid.add_child(title_input) + + var content_lbl := Label.new(); content_lbl.text = "Content:"; grid.add_child(content_lbl) + var content_input := TextEdit.new(); content_input.text = mail.get("content", ""); content_input.custom_minimum_size = Vector2(300, 100); grid.add_child(content_input) + + var end_lbl := Label.new(); end_lbl.text = "End Date:"; grid.add_child(end_lbl) + var end_picker: Button = load("res://scenes/ui/date_picker.tscn").instantiate() + end_picker.custom_minimum_size.x = 200 + grid.add_child(end_picker) + # Pre-populate if existing end_date + var existing_end: String = mail.get("end_date", "") + if not existing_end.is_empty(): + var parts = existing_end.substr(0, 10).split("-") + if parts.size() == 3: + end_picker.current_date = {"year": int(parts[0]), "month": int(parts[1]), "day": int(parts[2])} + end_picker.view_date = end_picker.current_date.duplicate() + end_picker.text = existing_end.substr(0, 10) + + # Recipient row + var recip_lbl := Label.new(); recip_lbl.text = "Recipient:"; grid.add_child(recip_lbl) + var recip_hbox := HBoxContainer.new() + recip_hbox.add_theme_constant_override("separation", 6) + var recip_input := LineEdit.new() + recip_input.custom_minimum_size.x = 180 + recip_input.placeholder_text = "Username or ID (empty = global)" + if mail_type == "personal" and not target_uid.is_empty(): + recip_input.text = target_uid.substr(0, 12) + "..." + recip_input.tooltip_text = target_uid + recip_hbox.add_child(recip_input) + var recip_find_btn := Button.new() + recip_find_btn.text = "Find" + recip_find_btn.custom_minimum_size.x = 60 + recip_hbox.add_child(recip_find_btn) + var recip_resolved_lbl := Label.new() + recip_resolved_lbl.add_theme_color_override("font_color", CLR_STATUS_OK) + recip_hbox.add_child(recip_resolved_lbl) + grid.add_child(recip_hbox) + + var _edit_resolved_uid := target_uid + recip_find_btn.pressed.connect(func(): + var inp = recip_input.text.strip_edges() + if inp.is_empty(): + _edit_resolved_uid = "" + recip_resolved_lbl.text = "(Global)" + recip_resolved_lbl.add_theme_color_override("font_color", CLR_STATUS_OK) + return + var uid = await _resolve_target_user_id(inp) + if uid.is_empty(): + recip_resolved_lbl.text = "NOT FOUND" + recip_resolved_lbl.add_theme_color_override("font_color", CLR_STATUS_ERR) + else: + _edit_resolved_uid = uid + recip_resolved_lbl.text = uid.substr(0, 12) + "..." + recip_resolved_lbl.add_theme_color_override("font_color", CLR_STATUS_OK) + ) + + vbox.add_child(grid) + + var save_btn := Button.new() + save_btn.text = "Save Changes" + save_btn.custom_minimum_size.y = 40 + vbox.add_child(save_btn) + + dialog.add_child(vbox) + add_child(dialog) + dialog.popup_centered() + + save_btn.pressed.connect(func(): + # If user typed something but didn't click Find, auto-resolve + var recip_text = recip_input.text.strip_edges() + var final_target = _edit_resolved_uid + if not recip_text.is_empty() and _edit_resolved_uid == target_uid: + # Text changed but not resolved yet + var resolved = await _resolve_target_user_id(recip_text) + if not resolved.is_empty(): + final_target = resolved + elif recip_text.is_empty(): + final_target = "" + + _set_status("Updating mail...") + var payload = { + "mail_id": mail_id, + "type": mail_type, + "target_user_id": target_uid, + "new_target_user_id": final_target, + "title": title_input.text, + "content": content_input.text, + "end_date": end_picker.get_date_iso() + } + var res = await _rpc("admin_update_mail", payload) + if res.has("success"): + _set_status("Mail updated!", CLR_STATUS_OK) + await _load_mail() + dialog.queue_free() + ) + +func _on_end_mail_pressed() -> void: + var mail = _get_selected_mail() + if mail.is_empty(): return + + var mail_id: String = mail.get("id", "") + var mail_type: String = mail.get("type", "global") + var target_uid: String = mail.get("target_user_id", "") + + var confirm := ConfirmationDialog.new() + confirm.title = "End Mail Now?" + confirm.dialog_text = "Set end_date to NOW for:\n" + mail.get("title", "Unknown") + add_child(confirm) + confirm.popup_centered() + confirm.confirmed.connect(func(): + var now_iso = Time.get_datetime_string_from_system(true) + var res = await _rpc("admin_update_mail", { + "mail_id": mail_id, + "type": mail_type, + "target_user_id": target_uid, + "end_date": now_iso + }) + if res.has("success"): + _set_status("Mail ended", CLR_STATUS_OK) + await _load_mail() + confirm.queue_free() + ) + +func _on_delete_mail_server_pressed() -> void: + var mail = _get_selected_mail() + if mail.is_empty(): return + + var mail_id: String = mail.get("id", "") + var mail_type: String = mail.get("type", "global") + var target_uid: String = mail.get("target_user_id", "") + + var confirm := ConfirmationDialog.new() + confirm.title = "PERMANENTLY Delete Mail?" + confirm.dialog_text = "Remove from server storage:\n" + mail.get("title", "Unknown") + "\n\nThis cannot be undone!" + add_child(confirm) + confirm.popup_centered() + confirm.confirmed.connect(func(): + var res = await _rpc("admin_delete_mail_server", { + "mail_id": mail_id, + "type": mail_type, + "target_user_id": target_uid + }) + if res.has("success"): + _set_status("Mail deleted from server", CLR_STATUS_OK) + await _load_mail() + confirm.queue_free() + ) diff --git a/scripts/ui/mailbox_panel.gd b/scripts/ui/mailbox_panel.gd index 60369a5..a0f920b 100644 --- a/scripts/ui/mailbox_panel.gd +++ b/scripts/ui/mailbox_panel.gd @@ -6,11 +6,13 @@ signal closed @onready var mail_list_vbox := %MailListVBox as VBoxContainer @onready var mail_title_lbl := %MailTitleLbl as Label @onready var mail_content_text := %MailContentText as RichTextLabel -@onready var sender_lbl := %SenderLbl as Label -@onready var dynamic_rewards_container := %DynamicRewardsContainer as HBoxContainer -@onready var reward_hbox_template := %RewardHBoxTemplate as HBoxContainer +@onready var sender_lbl = get_node_or_null("%SenderLbl") +@onready var dynamic_rewards_container := %DynamicRewardsContainer as VBoxContainer +@onready var reward_hbox_template = %RewardHBoxTemplate @onready var action_btn := %ActionBtn as Button +@onready var read_all_btn := %ReadAllBtn as Button @onready var empty_state_lbl := %EmptyStateLbl as Label +@onready var mail_btn_template := %MailBtnTemplate as Button var _current_mail: Dictionary = {} @@ -18,6 +20,7 @@ func _ready() -> void: visible = false close_btn.pressed.connect(hide_panel) action_btn.pressed.connect(_on_action_pressed) + read_all_btn.pressed.connect(_on_read_all_pressed) if MailManager: MailManager.mail_updated.connect(_refresh_ui) @@ -25,6 +28,7 @@ func show_panel() -> void: visible = true _clear_details() if MailManager: + await MailManager.read_all_and_claim_all() MailManager.fetch_mails() _refresh_ui() @@ -57,16 +61,15 @@ func _refresh_ui() -> void: if _current_mail.is_empty() and mails.size() > 0: _on_mail_selected(mails[0]) -@onready var mail_btn_template := %MailBtnTemplate as Button - func _create_mail_button(mail: Dictionary) -> Button: var btn = mail_btn_template.duplicate() btn.visible = true - var title = btn.get_node("VBox/Title") as Label - title.text = mail.get("title", "No Title") + var title_lbl = btn.get_node("Margin/VBox/Title") as Label + if title_lbl: + title_lbl.text = mail.get("title", "No Title") - var date_lbl = btn.get_node("VBox/HBox/DateLbl") as Label + var date_lbl = btn.get_node("Margin/VBox/HBox/DateLbl") as Label var date_str = mail.get("date", "") var expiry_str = mail.get("expiry_date", "") @@ -85,19 +88,21 @@ func _create_mail_button(mail: Dictionary) -> Button: else: label_text += " (Expired)" - date_lbl.text = label_text + if date_lbl: + date_lbl.text = label_text - var status_lbl = btn.get_node("VBox/HBox/StatusLbl") as Label + var status_lbl = btn.get_node("Margin/VBox/HBox/StatusLbl") as Label var mail_id = mail.get("id", "") - if mail_id in MailManager.claimed_ids: - status_lbl.text = "CLAIMED" - status_lbl.add_theme_color_override("font_color", Color.GREEN) - elif mail_id in MailManager.read_ids: - status_lbl.text = "READ" - status_lbl.add_theme_color_override("font_color", Color.GRAY) - else: - status_lbl.text = "NEW" - status_lbl.add_theme_color_override("font_color", Color.YELLOW) + if status_lbl: + if mail_id in MailManager.claimed_ids: + status_lbl.text = "CLAIMED" + status_lbl.add_theme_color_override("font_color", Color.GREEN) + elif mail_id in MailManager.read_ids: + status_lbl.text = "READ" + status_lbl.add_theme_color_override("font_color", Color.GRAY) + else: + status_lbl.text = "NEW" + status_lbl.add_theme_color_override("font_color", Color.YELLOW) return btn @@ -113,7 +118,7 @@ func _on_mail_selected(mail: Dictionary) -> void: func _clear_details() -> void: mail_title_lbl.text = "" mail_content_text.text = "" - sender_lbl.text = "" + if sender_lbl: sender_lbl.text = "" for child in dynamic_rewards_container.get_children(): if child.visible: child.queue_free() action_btn.hide() @@ -121,7 +126,7 @@ func _clear_details() -> void: func _update_details(mail: Dictionary) -> void: mail_title_lbl.text = mail.get("title", "No Title") mail_content_text.text = mail.get("content", "") - sender_lbl.text = "SENDER:\n" + mail.get("sender", "SYSTEM") + if sender_lbl: sender_lbl.text = "SENDER:\n" + mail.get("sender", "SYSTEM") for child in dynamic_rewards_container.get_children(): if child.visible: child.queue_free() @@ -141,16 +146,29 @@ func _update_details(mail: Dictionary) -> void: var row = reward_hbox_template.duplicate() row.visible = true dynamic_rewards_container.add_child(row) - var amt_lbl = row.get_node("AmountLbl") as Label + var amt_lbl = row.get_node("Margin/HBox/VBox/AmountLbl") as Label + var type_lbl = row.get_node("Margin/HBox/VBox/TypeLbl") as Label var t = r.get("type", "star") var amt = r.get("amount", 0) - var id = r.get("id", "") + var rid = r.get("id", "") - if t == "star" or t == "gold": - amt_lbl.text = str(amt) + " " + t.to_upper() - else: - amt_lbl.text = str(amt) + " " + id + if amt_lbl: amt_lbl.text = "x" + str(amt) + if type_lbl: type_lbl.text = t.to_upper() if (t == "star" or t == "gold") else rid.to_upper() + + # Fill empty slots up to 4 + var added = rewards.size() + while added < 4: + added += 1 + var empty_row = reward_hbox_template.duplicate() + empty_row.visible = true + dynamic_rewards_container.add_child(empty_row) + var icon_bg = empty_row.get_node_or_null("Margin/HBox/IconBg") + if icon_bg: icon_bg.color = Color(0, 0, 0, 0) + var t_lbl = empty_row.get_node_or_null("Margin/HBox/VBox/TypeLbl") + if t_lbl: t_lbl.text = "" + var a_lbl = empty_row.get_node_or_null("Margin/HBox/VBox/AmountLbl") + if a_lbl: a_lbl.text = "" action_btn.show() var mail_id = mail.get("id", "") @@ -178,3 +196,11 @@ func _on_action_pressed() -> void: if ok: _current_mail = {} _clear_details() + +func _on_read_all_pressed() -> void: + if not MailManager: return + for mail in MailManager.mails: + var mid = mail.get("id", "") + if mid not in MailManager.read_ids: + MailManager.mark_as_read(mid) + _refresh_ui() diff --git a/scripts/ui/social_panel.gd b/scripts/ui/social_panel.gd index 19c789a..fbbee3c 100644 --- a/scripts/ui/social_panel.gd +++ b/scripts/ui/social_panel.gd @@ -83,6 +83,11 @@ func _show_tab(tab: String) -> void: _friends_view.visible = tab == "friends" _dm_view.visible = tab == "dm" + _search_tab_btn.set_pressed_no_signal(tab == "search") + _friends_tab_btn.set_pressed_no_signal(tab == "friends") + if _dm_tab_btn: + _dm_tab_btn.set_pressed_no_signal(tab == "dm") + # Auto-load search results on first open if tab == "search" and _search_results_list.get_child_count() == 0: _on_search_pressed() diff --git a/server/nakama/tekton_admin.js b/server/nakama/tekton_admin.js index cc67b2a..27ce563 100644 --- a/server/nakama/tekton_admin.js +++ b/server/nakama/tekton_admin.js @@ -52,9 +52,13 @@ function InitModule(ctx, logger, nk, initializer) { // Inbox System RPCs initializer.registerRpc("admin_send_mail", rpcAdminSendMail); + initializer.registerRpc("admin_list_mail", rpcAdminListMail); + initializer.registerRpc("admin_update_mail", rpcAdminUpdateMail); + initializer.registerRpc("admin_delete_mail_server", rpcAdminDeleteMailServer); initializer.registerRpc("get_mail", rpcGetMail); initializer.registerRpc("claim_mail_reward", rpcClaimMailReward); initializer.registerRpc("delete_mail", rpcDeleteMail); + initializer.registerRpc("save_mail_state", rpcSaveMailState); // Steam auth hooks initializer.registerAfterAuthenticateSteam(afterAuthenticateSteam); @@ -1712,3 +1716,229 @@ function rpcDeleteMail(ctx, logger, nk, payload) { return JSON.stringify({ success: true, deleted_ids: state.deleted_ids }); } + +function rpcSaveMailState(ctx, logger, nk, payload) { + if (!ctx.userId) throw new Error("Not authenticated"); + var request = JSON.parse(payload || "{}"); + + // Load existing state to merge (don't clobber claimed_ids from client) + var stateObjs = nk.storageRead([{ collection: "inbox", key: "state", userId: ctx.userId }]); + var state = { claimed_ids: [], deleted_ids: [], read_ids: [] }; + if (stateObjs && stateObjs.length > 0) { + var val = stateObjs[0].value; + state.claimed_ids = val.claimed_ids || []; + state.deleted_ids = val.deleted_ids || []; + state.read_ids = val.read_ids || []; + } + + // Merge read_ids from client (add any new ones) + var newReadIds = request.read_ids || []; + for (var i = 0; i < newReadIds.length; i++) { + if (state.read_ids.indexOf(newReadIds[i]) === -1) { + state.read_ids.push(newReadIds[i]); + } + } + + nk.storageWrite([{ + collection: "inbox", + key: "state", + userId: ctx.userId, + value: state, + permissionRead: 1, + permissionWrite: 0 + }]); + + return JSON.stringify({ success: true }); +} + +// ============================================================================= +// Admin Mail Management RPCs +// ============================================================================= + +function rpcAdminListMail(ctx, logger, nk, payload) { + requireAdmin(ctx, nk); + + // --- Global mails --- + var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]); + var globalMails = (globalObjs && globalObjs.length > 0) ? (globalObjs[0].value.mails || []) : []; + for (var i = 0; i < globalMails.length; i++) { + globalMails[i].type = "global"; + } + + // --- Personal mails: scan ALL users' inbox/personal objects --- + var personalMails = []; + var cursor = null; + try { + do { + // storageList(userId, collection, limit, cursor) + // Using empty string userId means list across all users for this collection + var listResult = nk.storageList("", "inbox", 100, cursor); + var objects = listResult.objects || []; + for (var j = 0; j < objects.length; j++) { + var obj = objects[j]; + if (obj.key !== "personal") continue; + var ownerUserId = obj.userId; + var mails = obj.value.mails || []; + for (var k = 0; k < mails.length; k++) { + var m = mails[k]; + m.type = "personal"; + m.target_user_id = ownerUserId; + personalMails.push(m); + } + } + cursor = listResult.cursor || null; + } while (cursor); + } catch (e) { + logger.warn("admin_list_mail: could not list personal inboxes: " + e); + } + + var allMails = globalMails.concat(personalMails); + // Sort newest first + allMails.sort(function(a, b) { + return (b.date || "").localeCompare(a.date || ""); + }); + + return JSON.stringify({ mails: allMails }); +} + +function rpcAdminUpdateMail(ctx, logger, nk, payload) { + requireAdmin(ctx, nk); + var request = JSON.parse(payload || "{}"); + var mailId = request.mail_id; + if (!mailId) throw new Error("mail_id required"); + + var isGlobal = request.type !== "personal"; + var targetUserId = request.target_user_id || ""; + var newTargetUserId = request.new_target_user_id; + var hasNewTarget = (newTargetUserId !== undefined && newTargetUserId !== null); + + // Step 1: Find and extract the mail object from its current location + var mailObj = null; + + if (isGlobal) { + var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]); + var globalMails = (globalObjs && globalObjs.length > 0) ? (globalObjs[0].value.mails || []) : []; + for (var i = 0; i < globalMails.length; i++) { + if (globalMails[i].id === mailId) { + mailObj = globalMails.splice(i, 1)[0]; + break; + } + } + if (!mailObj) throw new Error("Mail not found in global"); + // Write back without this mail (it may move) + nk.storageWrite([{ + collection: "config", + key: "global_mail", + userId: "00000000-0000-0000-0000-000000000000", + value: { mails: globalMails }, + permissionRead: 2, + permissionWrite: 0 + }]); + } else { + if (!targetUserId) throw new Error("target_user_id required for personal mail"); + var pObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: targetUserId }]); + var personalMails = (pObjs && pObjs.length > 0) ? (pObjs[0].value.mails || []) : []; + for (var j = 0; j < personalMails.length; j++) { + if (personalMails[j].id === mailId) { + mailObj = personalMails.splice(j, 1)[0]; + break; + } + } + if (!mailObj) throw new Error("Mail not found in personal inbox"); + // Write back without this mail + nk.storageWrite([{ + collection: "inbox", + key: "personal", + userId: targetUserId, + value: { mails: personalMails }, + permissionRead: 1, + permissionWrite: 0 + }]); + } + + // Step 2: Apply field updates to the mail object + if (request.title !== undefined) mailObj.title = request.title; + if (request.content !== undefined) mailObj.content = request.content; + if (request.end_date !== undefined) mailObj.end_date = request.end_date; + if (request.expiry_date !== undefined) mailObj.expiry_date = request.expiry_date; + + // Step 3: Determine destination + var destUserId = hasNewTarget ? newTargetUserId : (isGlobal ? "" : targetUserId); + + if (destUserId === "") { + // Write to global + mailObj.type = "global"; + var gObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]); + var gMails = (gObjs && gObjs.length > 0) ? (gObjs[0].value.mails || []) : []; + gMails.push(mailObj); + nk.storageWrite([{ + collection: "config", + key: "global_mail", + userId: "00000000-0000-0000-0000-000000000000", + value: { mails: gMails }, + permissionRead: 2, + permissionWrite: 0 + }]); + } else { + // Write to personal inbox of destUserId + mailObj.type = "personal"; + var dObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: destUserId }]); + var dMails = (dObjs && dObjs.length > 0) ? (dObjs[0].value.mails || []) : []; + dMails.push(mailObj); + nk.storageWrite([{ + collection: "inbox", + key: "personal", + userId: destUserId, + value: { mails: dMails }, + permissionRead: 1, + permissionWrite: 0 + }]); + } + + logger.info("Admin updated mail " + mailId + " by " + ctx.userId + (hasNewTarget ? " (moved to " + destUserId + ")" : "")); + return JSON.stringify({ success: true }); +} + +function rpcAdminDeleteMailServer(ctx, logger, nk, payload) { + requireAdmin(ctx, nk); + var request = JSON.parse(payload || "{}"); + var mailId = request.mail_id; + if (!mailId) throw new Error("mail_id required"); + + var isGlobal = request.type !== "personal"; + var targetUserId = request.target_user_id || ""; + + if (isGlobal) { + var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]); + var globalMails = (globalObjs && globalObjs.length > 0) ? (globalObjs[0].value.mails || []) : []; + var before = globalMails.length; + globalMails = globalMails.filter(function(m) { return m.id !== mailId; }); + if (globalMails.length === before) throw new Error("Mail not found"); + nk.storageWrite([{ + collection: "config", + key: "global_mail", + userId: "00000000-0000-0000-0000-000000000000", + value: { mails: globalMails }, + permissionRead: 2, + permissionWrite: 0 + }]); + } else { + if (!targetUserId) throw new Error("target_user_id required for personal mail"); + var pObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: targetUserId }]); + var personalMails = (pObjs && pObjs.length > 0) ? (pObjs[0].value.mails || []) : []; + var pBefore = personalMails.length; + personalMails = personalMails.filter(function(m) { return m.id !== mailId; }); + if (personalMails.length === pBefore) throw new Error("Mail not found"); + nk.storageWrite([{ + collection: "inbox", + key: "personal", + userId: targetUserId, + value: { mails: personalMails }, + permissionRead: 1, + permissionWrite: 0 + }]); + } + + logger.info("Admin deleted mail " + mailId + " from server by " + ctx.userId); + return JSON.stringify({ success: true }); +}