diff options
| author | ayumi <ayumi@noreply.codeberg.org> | 2025-02-15 02:25:27 +0100 |
|---|---|---|
| committer | ayumi <ayumi@noreply.codeberg.org> | 2025-03-05 08:57:46 +0100 |
| commit | 9fdf94e9cee5a5180ffefc2b8314f7a9879ebbc6 (patch) | |
| tree | 80c2ca8003fe32e59eccf2e208a53e1e87c66790 /lua | |
| parent | 42c2a4f2445ff56a2a0a78c4ef265e5be346d40d (diff) | |
| download | tangara-fw-9fdf94e9cee5a5180ffefc2b8314f7a9879ebbc6.tar.gz | |
Allow manually unmounting the SD card
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/images.lua | 1 | ||||
| -rw-r--r-- | lua/img/unmount.png | bin | 0 -> 107 bytes | |||
| -rw-r--r-- | lua/main_menu.lua | 21 | ||||
| -rw-r--r-- | lua/settings.lua | 77 |
4 files changed, 97 insertions, 2 deletions
diff --git a/lua/images.lua b/lua/images.lua index 21a1aa9a..a492b9a2 100644 --- a/lua/images.lua +++ b/lua/images.lua @@ -29,6 +29,7 @@ local img = { unlistened = lvgl.ImgData("//lua/img/unlistened.png"), info = lvgl.ImgData("//lua/img/info.png"), menu = lvgl.ImgData("//lua/img/menu.png"), + unmount = lvgl.ImgData("//lua/img/unmount.png"), file_directory = lvgl.ImgData("//lua/img/file_icons/directory.png"), file_playlist = lvgl.ImgData("//lua/img/file_icons/playlist.png"), file_music = lvgl.ImgData("//lua/img/file_icons/music.png"), diff --git a/lua/img/unmount.png b/lua/img/unmount.png Binary files differnew file mode 100644 index 00000000..9bd8a674 --- /dev/null +++ b/lua/img/unmount.png diff --git a/lua/main_menu.lua b/lua/main_menu.lua index 8754df85..3f7f63e7 100644 --- a/lua/main_menu.lua +++ b/lua/main_menu.lua @@ -15,6 +15,7 @@ local font = require("font") local theme = require("theme") local img = require("images") local playback = require("playback") +local usb = require("usb") return widgets.MenuScreen:new { create_ui = function(self) @@ -238,6 +239,26 @@ return widgets.MenuScreen:new { end) } + local unmount_btn = bottom_bar:Button {} + unmount_btn:onClicked(function() + sd_card.unmount() + end) + unmount_btn:Image { src = img.unmount } + widgets.Description(unmount_btn, "Unmount the SD Card") + theme.set_subject(unmount_btn, "menu_icon") + local unmount_btn_bind = function() + if sd_card.mounted:get() and not database.updating:get() and not usb.msc_enabled:get() then + unmount_btn:clear_flag(lvgl.FLAG.HIDDEN) + else + unmount_btn:add_flag(lvgl.FLAG.HIDDEN) + end + end + self.bindings = self.bindings + { + sd_card.mounted:bind(unmount_btn_bind), + database.updating:bind(unmount_btn_bind), + usb.msc_enabled:bind(unmount_btn_bind) + } + local files_btn = bottom_bar:Button {} files_btn:onClicked(function() backstack.push(require("file_browser"):new { diff --git a/lua/settings.lua b/lua/settings.lua index 0238a876..5ed93521 100644 --- a/lua/settings.lua +++ b/lua/settings.lua @@ -18,6 +18,7 @@ local font = require("font") local main_menu = require("main_menu") local img = require("images") local nvs = require("nvs") +local sd_card = require("sd_card") local settings = {} @@ -512,6 +513,77 @@ settings.InputSettings = SettingsScreen:new { end } +settings.SDSettings = SettingsScreen:new { + title = "SD Card", + create_ui = function(self) + SettingsScreen.create_ui(self) + + local actions_container = self.content:Object { + w = lvgl.PCT(100), + h = lvgl.SIZE_CONTENT, + flex = { + flex_direction = "row", + justify_content = "center", + align_items = "space-evenly", + align_content = "center", + }, + pad_top = 4, + pad_column = 4, + } + actions_container:add_style(styles.list_item) + + local busy_text = self.content:Label { + w = lvgl.PCT(100), + text = "", + long_mode = lvgl.LABEL.LONG_WRAP, + } + local busy_text_bind = function() + if database.updating:get() then + busy_text:clear_flag(lvgl.FLAG.HIDDEN) + busy_text:set { + text = "Your database is currently updating. Please wait." + } + elseif usb.msc_enabled:get() then + busy_text:clear_flag(lvgl.FLAG.HIDDEN) + busy_text:set { + text = "USB Mass Storage is currently enabled. Please disable it before unmounting." + } + elseif not sd_card.mounted:get() then + busy_text:clear_flag(lvgl.FLAG.HIDDEN) + busy_text:set { + text = "No SD card is currently mounted." + } + else + busy_text:add_flag(lvgl.FLAG.HIDDEN) + end + end + self.bindings = self.bindings + { + sd_card.mounted:bind(busy_text_bind), + database.updating:bind(busy_text_bind), + usb.msc_enabled:bind(busy_text_bind) + } + + local unmount_btn = actions_container:Button {} + unmount_btn:Label { text = "Unmount" } + unmount_btn:onClicked(function() + sd_card.unmount() + end) + local unmount_btn_bind = function() + if sd_card.mounted:get() and not database.updating:get() and not usb.msc_enabled:get() then + unmount_btn:clear_flag(lvgl.FLAG.HIDDEN) + else + unmount_btn:add_flag(lvgl.FLAG.HIDDEN) + end + end + self.bindings = self.bindings + { + sd_card.mounted:bind(unmount_btn_bind), + database.updating:bind(unmount_btn_bind), + usb.msc_enabled:bind(unmount_btn_bind) + } + unmount_btn:focus() + end +} + settings.MassStorageSettings = SettingsScreen:new { title = "USB Storage", create_ui = function(self) @@ -944,8 +1016,9 @@ settings.Root = widgets.MenuScreen:new { submenu("Theme", settings.ThemeSettings) submenu("Input Method", settings.InputSettings) - section("USB") - submenu("Storage", settings.MassStorageSettings) + section("Storage") + submenu("SD Card", settings.SDSettings) + submenu("USB", settings.MassStorageSettings) section("System") submenu("Database", settings.DatabaseSettings) |
