annotate foosdk/sdk/foobar2000/SDK/advconfig.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "advconfig.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "advconfig_impl.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 bool advconfig_entry::is_branch() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 advconfig_branch::ptr branch;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 return branch &= this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 bool advconfig_entry::g_find(service_ptr_t<advconfig_entry>& out, const GUID & id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 for (auto ptr : advconfig_entry::enumerate()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 if (ptr->get_guid() == id) { out = ptr; return true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 t_uint32 advconfig_entry::get_preferences_flags_() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 advconfig_entry_string_v2::ptr ex;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 if (service_query_t(ex)) return ex->get_preferences_flags();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 advconfig_entry_checkbox_v2::ptr ex;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if (service_query_t(ex)) return ex->get_preferences_flags();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 bool advconfig_entry_checkbox::get_default_state_() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 advconfig_entry_checkbox_v2::ptr ex;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 if (service_query_t(ex)) return ex->get_default_state();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 bool backup = get_state();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 bool rv = get_state();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 set_state(backup);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 return rv;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 void advconfig_entry_string::get_default_state_(pfc::string_base & out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 advconfig_entry_string_v2::ptr ex;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 if (service_query_t(ex)) {ex->get_default_state(out); return;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 pfc::string8 backup;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 get_state(backup);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 get_state(out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 set_state(backup);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #if FOOBAR2000_TARGET_VERSION >= 81
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 // advconfig_impl.h functionality
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 void advconfig_entry_checkbox_impl::reset() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 fb2k::configStore::get()->deleteConfigBool(m_varName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 void advconfig_entry_checkbox_impl::set_state(bool p_state) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 fb2k::configStore::get()->setConfigBool(m_varName, p_state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 bool advconfig_entry_checkbox_impl::get_state_() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 return fb2k::configStore::get()->getConfigBool(m_varName, m_initialstate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 #ifdef FOOBAR2000_HAVE_CFG_VAR_LEGACY
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 void advconfig_entry_checkbox_impl::set_data_raw(stream_reader* p_stream, t_size p_sizehint, abort_callback& p_abort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 (void)p_sizehint;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 uint8_t v;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 if (p_stream->read(&v, 1, p_abort) == 1) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 set_state(v != 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 void advconfig_entry_string_impl::reset() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 fb2k::configStore::get()->deleteConfigString(m_varName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 void advconfig_entry_string_impl::get_state(pfc::string_base& p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 p_out = fb2k::configStore::get()->getConfigString(m_varName, m_initialstate)->c_str();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 void advconfig_entry_string_impl::set_state(const char* p_string, t_size p_length) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 pfc::string8 asdf;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 if (p_length != SIZE_MAX) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 asdf.set_string(p_string, p_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 p_string = asdf;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 fb2k::configStore::get()->setConfigString(m_varName, p_string);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 #ifdef FOOBAR2000_HAVE_CFG_VAR_LEGACY
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 void advconfig_entry_string_impl::set_data_raw(stream_reader* p_stream, t_size p_sizehint, abort_callback& p_abort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 (void)p_sizehint;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 pfc::string8_fastalloc temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 p_stream->read_string_raw(temp, p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 this->set_state(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 #endif // FOOBAR2000_TARGET_VERSION >= 81