persist settings #2

pull/1/head
Thomas Ballmann 4 years ago
parent 798ad2b446
commit 64747c032b

@ -5,20 +5,19 @@
// eslint-disable-next-line // eslint-disable-next-line
const _settings = { const _settings = {
device: { device: {
orientation: 0, angle: 0,
theme: "black", theme: "black",
}, },
playlist: { playlist: {
interval: 60 timer: 60
}, },
credentials: { api: {
owm: ""
}, },
cloud: { cloud: {
mode: "active", mode: "active",
url: "http://", url: "http://",
token: "###", token: "###"
user: ""
} }
} }
@ -34,7 +33,7 @@ export default {
* @returns {PromiseLike<any> | Promise<any>} * @returns {PromiseLike<any> | Promise<any>}
*/ */
getSettings(cb) { getSettings(cb) {
return cb(_settings); //return cb(_settings);
// eslint-disable-next-line // eslint-disable-next-line
return axios return axios

@ -23,6 +23,7 @@
</v-tabs> </v-tabs>
<v-card <v-card
v-if="settings"
class="mx-auto" class="mx-auto"
width="400" width="400"
> >
@ -31,7 +32,7 @@
<v-card-text> <v-card-text>
<v-select <v-select
:items="deviceOrientation" :items="deviceOrientation"
v-model="settings.device.orientation" v-model="settings.device.angle"
label="i8n:Orientation" label="i8n:Orientation"
placeholder="" placeholder=""
></v-select> ></v-select>
@ -53,7 +54,7 @@
</v-col> </v-col>
<v-col cols="6" class="text-center pb-0"> <v-col cols="6" class="text-center pb-0">
<v-text-field <v-text-field
v-model="settings.playlist.interval" v-model="settings.playlist.timer"
label="Switch every" label="Switch every"
type="number" type="number"
dense dense
@ -80,13 +81,13 @@
<v-card-text> <v-card-text>
<v-text-field <v-text-field
label="i8n:OpenWeatherMap" label="i8n:OpenWeatherMap"
v-model="settings.credentials.open_weather_map" v-model="settings.api.owm"
placeholder="###" placeholder="###"
></v-text-field> ></v-text-field>
<v-text-field <v-text-field
label="i8n:Calendar" label="i8n:Calendar"
v-model="settings.credentials._" v-model="settings.api.abc"
placeholder="###" placeholder="###"
></v-text-field> ></v-text-field>
</v-card-text> </v-card-text>
@ -111,15 +112,21 @@
v-model="settings.cloud.token" v-model="settings.cloud.token"
placeholder="########-####-####-####-############" placeholder="########-####-####-####-############"
></v-text-field> ></v-text-field>
<v-text-field
label="i8n:Cloud User"
v-model="settings.cloud_user"
placeholder="user@domain.io"
></v-text-field>
</v-card-text> </v-card-text>
</v-tab-item> </v-tab-item>
</v-tabs-items> </v-tabs-items>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn
text
color="primary"
@click="onSave()"
>
i8n:Save
</v-btn>
</v-card-actions>
</v-card> </v-card>
</v-container> </v-container>
</v-layout> </v-layout>

@ -81,11 +81,16 @@ void setupSettingsGet()
AsyncResponseStream *response = request->beginResponseStream("application/json"); AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024); DynamicJsonDocument root(1024);
root["device_mode"] = NVS.getString("device_mode"); root["device"]["angle"] = NVS.getInt("device.angle");
root["device_rotation"] = 0; root["device"]["theme"] = NVS.getString("device.theme");
root["cloud_server"] = NVS.getString("cloud_server");
root["cloud_uuid"] = NVS.getString("cloud_uuid"); root["playlist"]["timer"] = NVS.getInt("playlist.timer");
root["cloud_user"] = NVS.getString("cloud_user");
root["api"]["owm"] = NVS.getString("api.owm");
root["cloud"]["mode"] = NVS.getString("cloud.mode");
root["cloud"]["url"] = NVS.getString("cloud.url");
root["cloud"]["token"] = NVS.getString("cloud.token");
serializeJson(root, *response); serializeJson(root, *response);
request->send(response); request->send(response);
@ -95,7 +100,7 @@ void setupSettingsGet()
void setupSettingsPost() void setupSettingsPost()
{ {
server.on("/api/settings", HTTP_PUT, [](AsyncWebServerRequest *request) { /* nothing and dont remove it */ }, NULL, [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { server.on("/api/settings", HTTP_PUT, [](AsyncWebServerRequest *request) { /* nothing and dont remove it */ }, NULL, [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
DynamicJsonDocument doc(1024); DynamicJsonDocument doc(2048);
DeserializationError error = deserializeJson(doc, data); DeserializationError error = deserializeJson(doc, data);
if (error) { if (error) {
@ -106,19 +111,18 @@ void setupSettingsPost()
} }
else else
{ {
if (doc.containsKey("device_mode")) { NVS.setInt("device.angle", doc["device"]["angle"].as<unsigned int>());
NVS.setString("device_mode", doc["device_mode"]); NVS.setString("device.theme", doc["device"]["theme"]);
}
if (doc.containsKey("cloud_server")) { NVS.setInt("playlist.timer", doc["playlist"]["timer"].as<unsigned int>());
NVS.setString("cloud_server", doc["cloud_server"]);
//Serial.println(doc["cloud_server"].as<char*>()); NVS.setString("api.owm", doc["api"]["owm"]);
}
if (doc.containsKey("cloud_uuid")) { NVS.setString("cloud.mode", doc["cloud"]["mode"]);
NVS.setString("cloud_uuid", doc["cloud_uuid"]); NVS.setString("cloud.url", doc["cloud"]["url"]);
} NVS.setString("cloud.token", doc["cloud"]["token"]);
if (doc.containsKey("cloud_user")) {
NVS.setString("cloud_user", doc["cloud_user"]); NVS.commit();
}
request->send(200, "application/ld+json; charset=utf-8", "{}"); request->send(200, "application/ld+json; charset=utf-8", "{}");
} }); } });

@ -76,7 +76,7 @@ void loopCloud()
bool isCloudSetupComplete() bool isCloudSetupComplete()
{ {
return NVS.getString("cloud_server") != "" && NVS.getString("cloud_uuid") != ""; return NVS.getString("cloud.url") != ""; // && NVS.getString("cloud_uuid") != "";
} }
/** /**
@ -106,7 +106,7 @@ void updateInterval(unsigned long interval)
*/ */
void requestCloud() void requestCloud()
{ {
String config_Url = NVS.getString("cloud_server"); String config_Url = NVS.getString("cloud.url");
Serial.println(config_Url); Serial.println(config_Url);
http.begin(config_Url); http.begin(config_Url);

Loading…
Cancel
Save