added animation toggle
Some checks failed
BlockStorage/repertory_mac/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit

This commit is contained in:
2025-09-08 07:47:04 -05:00
parent f0bd032cb9
commit d772a713a2
6 changed files with 80 additions and 22 deletions

View File

@@ -395,6 +395,7 @@ using meta_provider_callback = std::function<void(directory_item &)>;
inline constexpr auto JSON_ACCESS_KEY{"AccessKey"}; inline constexpr auto JSON_ACCESS_KEY{"AccessKey"};
inline constexpr auto JSON_AGENT_STRING{"AgentString"}; inline constexpr auto JSON_AGENT_STRING{"AgentString"};
inline constexpr auto JSON_ANIMATIONS{"Animations"};
inline constexpr auto JSON_API_PARENT{"ApiParent"}; inline constexpr auto JSON_API_PARENT{"ApiParent"};
inline constexpr auto JSON_API_PASSWORD{"ApiPassword"}; inline constexpr auto JSON_API_PASSWORD{"ApiPassword"};
inline constexpr auto JSON_API_PATH{"ApiPath"}; inline constexpr auto JSON_API_PATH{"ApiPath"};

View File

@@ -24,7 +24,6 @@
#include "types/repertory.hpp" #include "types/repertory.hpp"
#include "utils/atomic.hpp" #include "utils/atomic.hpp"
#include <unordered_map>
namespace repertory::ui { namespace repertory::ui {
class mgmt_app_config final { class mgmt_app_config final {
@@ -36,6 +35,7 @@ private:
std::atomic<bool> launch_only_{false}; std::atomic<bool> launch_only_{false};
private: private:
std::atomic<bool> animations_{true};
utils::atomic<std::string> api_password_{"repertory"}; utils::atomic<std::string> api_password_{"repertory"};
std::atomic<std::uint16_t> api_port_{default_ui_mgmt_port}; std::atomic<std::uint16_t> api_port_{default_ui_mgmt_port};
utils::atomic<std::string> api_user_{"repertory"}; utils::atomic<std::string> api_user_{"repertory"};
@@ -53,6 +53,8 @@ private:
public: public:
[[nodiscard]] auto to_json() const -> nlohmann::json; [[nodiscard]] auto to_json() const -> nlohmann::json;
[[nodiscard]] auto get_animations() const -> bool { return animations_; }
[[nodiscard]] auto get_api_password() const -> std::string { [[nodiscard]] auto get_api_password() const -> std::string {
return api_password_; return api_password_;
} }
@@ -77,6 +79,8 @@ public:
std::string_view name) const std::string_view name) const
-> std::string; -> std::string;
void set_animations(bool animations);
void set_api_password(std::string_view api_password); void set_api_password(std::string_view api_password);
void set_api_port(std::uint16_t api_port); void set_api_port(std::uint16_t api_port);

View File

@@ -720,7 +720,9 @@ void handlers::handle_put_setting(const httplib::Request &req,
auto name = req.get_param_value("name"); auto name = req.get_param_value("name");
auto value = req.get_param_value("value"); auto value = req.get_param_value("value");
if (name == JSON_AUTO_START) { if (name == JSON_ANIMATIONS) {
config_->set_animations(utils::string::to_bool(value));
} else if (name == JSON_AUTO_START) {
config_->set_auto_start(utils::string::to_bool(value)); config_->set_auto_start(utils::string::to_bool(value));
} }

View File

@@ -97,7 +97,14 @@ mgmt_app_config::mgmt_app_config(bool hidden, bool launch_only)
api_user_ = data.at(JSON_API_USER).get<std::string>(); api_user_ = data.at(JSON_API_USER).get<std::string>();
auto should_save{not data.contains(JSON_AUTO_START)}; auto should_save{not data.contains(JSON_AUTO_START)};
auto_start_ = should_save ? false : data.at(JSON_AUTO_START).get<bool>(); auto_start_ =
should_save ? auto_start_ : data.at(JSON_AUTO_START).get<bool>();
if (data.contains(JSON_ANIMATIONS)) {
animations_ = data.at(JSON_ANIMATIONS).get<bool>();
} else {
should_save = true;
}
if (data.contains(JSON_MOUNT_AUTO_START)) { if (data.contains(JSON_MOUNT_AUTO_START)) {
mount_auto_start_ = from_json<bool>(data.at(JSON_MOUNT_AUTO_START)); mount_auto_start_ = from_json<bool>(data.at(JSON_MOUNT_AUTO_START));
@@ -378,6 +385,7 @@ void mgmt_app_config::set_mount_location(provider_type prov,
auto mgmt_app_config::to_json() const -> nlohmann::json { auto mgmt_app_config::to_json() const -> nlohmann::json {
nlohmann::json data; nlohmann::json data;
data[JSON_ANIMATIONS] = animations_;
data[JSON_API_PASSWORD] = api_password_; data[JSON_API_PASSWORD] = api_password_;
data[JSON_API_PORT] = api_port_; data[JSON_API_PORT] = api_port_;
data[JSON_API_USER] = api_user_; data[JSON_API_USER] = api_user_;

View File

@@ -20,15 +20,41 @@ class Settings with ChangeNotifier {
bool get autoStart => _autoStart; bool get autoStart => _autoStart;
bool get enableAnimations => _enableAnimations; bool get enableAnimations => _enableAnimations;
set enableAnimations(bool enable) {
_enableAnimations = enable;
notifyListeners();
}
void _reset() { void _reset() {
_autoStart = false; _autoStart = false;
} }
Future<void> setEnableAnimations(bool value) async {
try {
final auth = await _auth.createAuth();
final response = await http.put(
Uri.parse(
Uri.encodeFull(
'${getBaseUri()}/api/v1/setting?auth=$auth&name=Animations&value=$value',
),
),
);
if (response.statusCode == 401) {
_auth.logoff();
_reset();
return;
}
if (response.statusCode != 200) {
_reset();
return;
}
_enableAnimations = value;
notifyListeners();
} catch (e) {
debugPrint('$e');
_reset();
}
}
Future<void> setAutoStart(bool value) async { Future<void> setAutoStart(bool value) async {
try { try {
final auth = await _auth.createAuth(); final auth = await _auth.createAuth();
@@ -77,7 +103,10 @@ class Settings with ChangeNotifier {
return; return;
} }
_autoStart = jsonDecode(response.body)["AutoStart"] as bool; final jsonData = jsonDecode(response.body);
_enableAnimations = jsonData["Animations"] as bool;
_autoStart = jsonData["AutoStart"] as bool;
notifyListeners(); notifyListeners();
} catch (e) { } catch (e) {
debugPrint('$e'); debugPrint('$e');

View File

@@ -134,22 +134,36 @@ class AppScaffold extends StatelessWidget {
), ),
const SizedBox(width: constants.padding), const SizedBox(width: constants.padding),
if (!showBack) ...[ if (!showBack) ...[
const Text("Animations"),
Consumer<Settings>(
builder: (context, settings, _) => IconButton(
icon: Icon(
settings.enableAnimations
? Icons.toggle_on
: Icons.toggle_off,
),
color: settings.enableAnimations
? scheme.primary
: scheme.onSurface,
onPressed: () => settings.setEnableAnimations(
!settings.enableAnimations,
),
),
),
const Text("Auto-start"), const Text("Auto-start"),
Consumer<Settings>( Consumer<Settings>(
builder: (context, settings, _) { builder: (context, settings, _) => IconButton(
return IconButton( icon: Icon(
icon: Icon( settings.autoStart
settings.autoStart ? Icons.toggle_on
? Icons.toggle_on : Icons.toggle_off,
: Icons.toggle_off, ),
), color: settings.autoStart
color: settings.autoStart ? scheme.primary
? scheme.primary : scheme.onSurface,
: scheme.onSurface, onPressed: () =>
onPressed: () => settings.setAutoStart(!settings.autoStart),
settings.setAutoStart(!settings.autoStart), ),
);
},
), ),
IconButton( IconButton(
tooltip: 'Settings', tooltip: 'Settings',