sync() after write to avoid losing file data on power off.

This commit is contained in:
Robin Davies
2024-09-01 09:53:32 -04:00
parent abb8a1a53c
commit b8c4fafd3a
21 changed files with 102 additions and 34 deletions
+2 -2
View File
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.16.0) cmake_minimum_required(VERSION 3.16.0)
project(pipedal project(pipedal
VERSION 1.2.45 VERSION 1.2.46
DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi" DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi"
HOMEPAGE_URL "https://rerdavies.github.io/pipedal" HOMEPAGE_URL "https://rerdavies.github.io/pipedal"
) )
set (DISPLAY_VERSION "PiPedal v1.2.45-Release") set (DISPLAY_VERSION "PiPedal v1.2.46-Development")
set (PACKAGE_ARCHITECTURE "arm64") set (PACKAGE_ARCHITECTURE "arm64")
set (CMAKE_INSTALL_PREFIX "/usr/") set (CMAKE_INSTALL_PREFIX "/usr/")
+2 -1
View File
@@ -6,6 +6,7 @@
#include <stdexcept> #include <stdexcept>
#include "ss.hpp" #include "ss.hpp"
#include <chrono> #include <chrono>
#include "ofstream_synced.hpp"
namespace impl { namespace impl {
@@ -72,7 +73,7 @@ public:
f << "trace: " << message << std::endl; f << "trace: " << message << std::endl;
} }
private: private:
std::ofstream f; pipedal::ofstream_synced f;
}; };
class SystemdDBusLogger : public IDBusLogger { class SystemdDBusLogger : public IDBusLogger {
+3 -2
View File
@@ -10,6 +10,7 @@
#include "ChannelInfo.hpp" #include "ChannelInfo.hpp"
#include "DBusLog.hpp" #include "DBusLog.hpp"
#include <sys/stat.h> #include <sys/stat.h>
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
P2pSettings::P2pSettings(const std::filesystem::path&configDirectoryPath, const std::filesystem::path&varDirectoryPath) P2pSettings::P2pSettings(const std::filesystem::path&configDirectoryPath, const std::filesystem::path&varDirectoryPath)
@@ -193,7 +194,7 @@ void P2pSettings::Load()
} }
static void openWithPerms( static void openWithPerms(
std::ofstream &f, pipedal::ofstream_synced &f,
const std::filesystem::path &path, const std::filesystem::path &path,
std::filesystem::perms perms = std::filesystem::perms perms =
std::filesystem::perms::owner_read | std::filesystem::perms::owner_write | std::filesystem::perms::owner_read | std::filesystem::perms::owner_write |
@@ -221,7 +222,7 @@ void P2pSettings::Save()
{ {
auto filename = config_filename(); auto filename = config_filename();
try { try {
std::ofstream f; pipedal::ofstream_synced f;
openWithPerms(f,filename); openWithPerms(f,filename);
if (!f.is_open()) if (!f.is_open())
+1
View File
@@ -41,6 +41,7 @@ message(STATUS "NMPIPEDAL CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
# Use the sdbus-c++ target in SDBusCpp namespace # Use the sdbus-c++ target in SDBusCpp namespace
add_library(PiPedalCommon STATIC add_library(PiPedalCommon STATIC
ofstream_synced.cpp include/ofstream_synced.hpp
ConfigSerializer.cpp include/ConfigSerializer.hpp ConfigSerializer.cpp include/ConfigSerializer.hpp
WifiRegs.cpp include/WifiRegs.hpp WifiRegs.cpp include/WifiRegs.hpp
WifiRegulations.cpp include/WifiRegulations.hpp WifiRegulations.cpp include/WifiRegulations.hpp
+2 -1
View File
@@ -30,6 +30,7 @@
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <tuple> #include <tuple>
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
@@ -65,7 +66,7 @@ void ServiceConfiguration::Save()
std::filesystem::create_directories(directory); std::filesystem::create_directories(directory);
// make sure the file has correct permissions. // make sure the file has correct permissions.
std::ofstream t; pipedal::ofstream_synced t;
t.open(filename); t.open(filename);
t.close(); t.close();
+2 -1
View File
@@ -21,6 +21,7 @@
#include "WriteTemplateFile.hpp" #include "WriteTemplateFile.hpp"
#include <fstream> #include <fstream>
#include <stdexcept> #include <stdexcept>
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
@@ -37,7 +38,7 @@ void pipedal::WriteTemplateFile(
const std::filesystem::path &inputFile, const std::filesystem::path &inputFile,
const std::filesystem::path &outputFile) const std::filesystem::path &outputFile)
{ {
std::ofstream out(outputFile); pipedal::ofstream_synced out(outputFile);
std::ifstream in(inputFile); std::ifstream in(inputFile);
if (!in.is_open()) if (!in.is_open())
@@ -30,6 +30,7 @@
#include "autoptr_vector.h" #include "autoptr_vector.h"
#include <unordered_map> #include <unordered_map>
#include <fstream> #include <fstream>
#include "ofstream_synced.hpp"
namespace config_serializer namespace config_serializer
{ {
@@ -256,7 +257,7 @@ namespace config_serializer
} }
void Save(const std::string &path) void Save(const std::string &path)
{ {
std::ofstream f; pipedal::ofstream_synced f;
f.open(path); f.open(path);
if (!f.is_open()) if (!f.is_open())
{ {
@@ -0,0 +1,26 @@
#pragma once
#include <fstream>
namespace pipedal
{
void FileSystemSync();
class ofstream_synced : public std::ofstream
{
public:
ofstream_synced() {}
explicit ofstream_synced(const std::string &filename, ios_base::openmode mode = ios_base::out)
: std::ofstream(filename, mode)
{
}
explicit ofstream_synced(const char *filename, ios_base::openmode mode = ios_base::out)
: std::ofstream(filename, mode)
{
}
~ofstream_synced();
};
}
+19
View File
@@ -0,0 +1,19 @@
#include "ofstream_synced.hpp"
#include "unistd.h"
using namespace pipedal;
void pipedal::FileSystemSync()
{
::sync();
}
ofstream_synced::~ofstream_synced()
{
if (is_open())
{
close();
::sync();
}
}
+2 -2
View File
@@ -6,13 +6,13 @@
<a href="https://rerdavies.github.io/pipedal/LicensePiPedal.html"><img src="https://img.shields.io/badge/MIT-MIT?label=license&color=%23808080"/></a> <a href="https://rerdavies.github.io/pipedal/LicensePiPedal.html"><img src="https://img.shields.io/badge/MIT-MIT?label=license&color=%23808080"/></a>
<a href="https://github.com/rerdavies/pipedal/actions"><img src="https://img.shields.io/github/actions/workflow/status/rerdavies/pipedal/cmake.yml?branch=main"/></a> <a href="https://github.com/rerdavies/pipedal/actions"><img src="https://img.shields.io/github/actions/workflow/status/rerdavies/pipedal/cmake.yml?branch=main"/></a>
Download:&nbsp;<a href='https://rerdavies.github.io/pipedal/download.html'>v1.2.45</a> Download:&nbsp;<a href='https://rerdavies.github.io/pipedal/download.html'>v1.2.46</a>
Website:&nbsp;[https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal). Website:&nbsp;[https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal).
Documentation:&nbsp;[https://rerdavies.github.io/pipedal/Documentation.html](https://rerdavies.github.io/pipedal/Documentation.html). Documentation:&nbsp;[https://rerdavies.github.io/pipedal/Documentation.html](https://rerdavies.github.io/pipedal/Documentation.html).
&nbsp; &nbsp;
#### NEW version 1.2.45 Release, providing support for Raspberry Pi OS Bookworm. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. #### NEW version 1.2.46 Release, providing support for Raspberry Pi OS Bookworm. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
&nbsp; &nbsp;
+3 -3
View File
@@ -13,17 +13,17 @@ page_icon: img/Install4.jpg
Download the most recent Debian (.deb) package for your platform: Download the most recent Debian (.deb) package for your platform:
- [Raspberry Pi OS bookworm (64-bit) v1.2.45](https://github.com/rerdavies/pipedal/releases/download/) - [Raspberry Pi OS bookworm (64-bit) v1.2.46](https://github.com/rerdavies/pipedal/releases/download/)
- [Ubuntu/Raspberry Pi OS bullseyeye (64-bit) v1.2.31](https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb) - [Ubuntu/Raspberry Pi OS bullseyeye (64-bit) v1.2.31](https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb)
Version 1.2.45 has not yet been tested on Ubuntu or Raspberry Pi OS bullseye. On these platforms, we recommend that you use version 1.1.31. Version 1.2.46 has not yet been tested on Ubuntu or Raspberry Pi OS bullseye. On these platforms, we recommend that you use version 1.1.31.
Install the package by running Install the package by running
``` ```
sudo apt update sudo apt update
cd ~/Downloads cd ~/Downloads
sudo apt-get install pipedal_1.2.45_arm64.deb sudo apt-get install pipedal_1.2.46_arm64.deb
``` ```
Adjust accordingly if you have downloaded v1.1.31. Adjust accordingly if you have downloaded v1.1.31.
+3 -3
View File
@@ -4,17 +4,17 @@
Download the most recent Debian (.deb) package for your platform: Download the most recent Debian (.deb) package for your platform:
- <a href="https://github.com/rerdavies/pipedal/releases/download/v1.2.45/pipedal_1.2.45_arm64.deb">Raspberry Pi OS Bookworm (64-bit) v1.2.45</a> - <a href="https://github.com/rerdavies/pipedal/releases/download/v1.2.46/pipedal_1.2.46_arm64.deb">Raspberry Pi OS Bookworm (64-bit) v1.2.46</a>
- <a href="https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb">Ubuntu 21.04 or Raspberry Pi OS bullseyeyeye (64-bit) v1.1.31</a> - <a href="https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb">Ubuntu 21.04 or Raspberry Pi OS bullseyeyeye (64-bit) v1.1.31</a>
v1.2.45 is does not currently support Ubuntu 21.04, or older versions of Raspberry Pi OS. v1.2.46 is does not currently support Ubuntu 21.04, or older versions of Raspberry Pi OS.
Install the package by running Install the package by running
``` ```
sudo apt update sudo apt update
cd ~/Downloads cd ~/Downloads
sudo apt-get install ./pipedal_1.2.45_arm64.deb sudo apt-get install ./pipedal_1.2.46_arm64.deb
``` ```
Follow the instructions in [_Configuring PiPedal After Installation_](https://rerdavies.github.io/pipedal/Configuring.html) to complete the installation. Follow the instructions in [_Configuring PiPedal After Installation_](https://rerdavies.github.io/pipedal/Configuring.html) to complete the installation.
+2 -2
View File
@@ -1,7 +1,7 @@
<img src="GithubBanner.png" width="100%"/> <img src="GithubBanner.png" width="100%"/>
<a href="Installing.html"><i>v1.2.45</i></a> <a href="Installing.html"><i>v1.2.46</i></a>
&nbsp; &nbsp;
@@ -9,7 +9,7 @@ To download PiPedal, click [here](download.md).
To view PiPedal documentation, click [here](Documentation.md). To view PiPedal documentation, click [here](Documentation.md).
#### NEW version 1.2.45 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. #### NEW version 1.2.46 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
&nbsp; &nbsp;
+4
View File
@@ -40,6 +40,8 @@
#include "WifiChannelSelectors.hpp" #include "WifiChannelSelectors.hpp"
#include "PiPedalConfiguration.hpp" #include "PiPedalConfiguration.hpp"
#include <grp.h> #include <grp.h>
#include "ofstream_synced.hpp"
#if JACK_HOST #if JACK_HOST
#define INSTALL_JACK_SERVICE 1 #define INSTALL_JACK_SERVICE 1
@@ -1346,10 +1348,12 @@ int main(int argc, char **argv)
portOption = "0.0.0.0:" + portOption; portOption = "0.0.0.0:" + portOption;
} }
Install(prefix, portOption); Install(prefix, portOption);
FileSystemSync();
} }
else if (uninstall) else if (uninstall)
{ {
Uninstall(); Uninstall();
FileSystemSync();
} }
else if (stop) else if (stop)
{ {
+2 -1
View File
@@ -29,6 +29,7 @@
#include <string.h> #include <string.h>
#include <stdexcept> #include <stdexcept>
#include "util.hpp" #include "util.hpp"
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
using namespace pipedal::implementation; using namespace pipedal::implementation;
@@ -101,7 +102,7 @@ FileBrowserFilesFeature::FileBrowserFilesFeature()
} }
void BrowserFilesVersionInfo::Save(std::filesystem::path &path) void BrowserFilesVersionInfo::Save(std::filesystem::path &path)
{ {
std::ofstream f{path}; pipedal::ofstream_synced f{path};
if (!f.is_open()) if (!f.is_open())
return; return;
f << version << std::endl; f << version << std::endl;
+6
View File
@@ -26,6 +26,7 @@
#include "SystemConfigFile.hpp" #include "SystemConfigFile.hpp"
#include "SysExec.hpp" #include "SysExec.hpp"
#include "WriteTemplateFile.hpp" #include "WriteTemplateFile.hpp"
#include <unistd.h>
using namespace pipedal; using namespace pipedal;
using namespace std; using namespace std;
@@ -473,6 +474,7 @@ void pipedal::SetWifiConfig(const WifiConfigSettings &settings)
sysExec(SYSTEMCTL_BIN " restart dnsmasq"); sysExec(SYSTEMCTL_BIN " restart dnsmasq");
sysExec(SYSTEMCTL_BIN " enable dnsmasq"); sysExec(SYSTEMCTL_BIN " enable dnsmasq");
} }
::sync();
} }
/********************************************************************************* /*********************************************************************************
@@ -563,6 +565,7 @@ void UninstallP2p()
SetWifiDirectConfig(wifiDirectConfigSettings); SetWifiDirectConfig(wifiDirectConfigSettings);
} }
::sync();
} }
static void RemoveDhcpcdConfig() static void RemoveDhcpcdConfig()
@@ -679,6 +682,7 @@ void pipedal::SetWifiDirectConfig(const WifiDirectConfigSettings &settings)
{ {
cout << e.what() << endl; cout << e.what() << endl;
} }
::sync();
} }
void pipedal::OnWifiReinstall() { void pipedal::OnWifiReinstall() {
WifiDirectConfigSettings settings; WifiDirectConfigSettings settings;
@@ -686,6 +690,7 @@ void pipedal::OnWifiReinstall() {
if (settings.enable_) if (settings.enable_)
{ {
SetWifiDirectConfig(settings); SetWifiDirectConfig(settings);
::sync();
} }
} }
void pipedal::OnWifiUninstall(bool preserveState) void pipedal::OnWifiUninstall(bool preserveState)
@@ -707,6 +712,7 @@ void pipedal::OnWifiUninstall(bool preserveState)
settings.Save(); settings.Save();
} }
} }
::sync();
} }
void pipedal::OnWifiInstallComplete() void pipedal::OnWifiInstallComplete()
{ {
+14 -13
View File
@@ -31,6 +31,7 @@
#include "PiPedalUI.hpp" #include "PiPedalUI.hpp"
#include "PluginHost.hpp" #include "PluginHost.hpp"
#include "ss.hpp" #include "ss.hpp"
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
@@ -344,7 +345,7 @@ void Storage::SavePluginPresetIndex()
if (pluginPresetIndexChanged) if (pluginPresetIndexChanged)
{ {
pluginPresetIndexChanged = false; pluginPresetIndexChanged = false;
std::ofstream os; pipedal::ofstream_synced os;
auto path = GetPluginPresetsDirectory() / "index.json"; auto path = GetPluginPresetsDirectory() / "index.json";
os.open(path, std::ios_base::trunc); os.open(path, std::ios_base::trunc);
if (os.fail()) if (os.fail())
@@ -359,7 +360,7 @@ void Storage::SavePluginPresetIndex()
void Storage::SaveBankIndex() void Storage::SaveBankIndex()
{ {
std::ofstream os; pipedal::ofstream_synced os;
os.open(GetIndexFileName(), std::ios_base::trunc); os.open(GetIndexFileName(), std::ios_base::trunc);
json_writer writer(os, false); json_writer writer(os, false);
writer.write(this->bankIndex); writer.write(this->bankIndex);
@@ -434,7 +435,7 @@ void Storage::SaveBankFile(const std::string &name, const BankFile &bankFile)
} }
try try
{ {
std::ofstream s; pipedal::ofstream_synced s;
s.open(fileName, std::ios_base::trunc); s.open(fileName, std::ios_base::trunc);
json_writer writer(s, false); json_writer writer(s, false);
writer.write(bankFile); writer.write(bankFile);
@@ -721,7 +722,7 @@ void Storage::SaveChannelSelection()
auto fileName = this->GetChannelSelectionFileName(); auto fileName = this->GetChannelSelectionFileName();
try try
{ {
std::ofstream s(fileName); pipedal::ofstream_synced s(fileName);
json_writer writer(s, false); json_writer writer(s, false);
writer.write(this->jackChannelSelection); writer.write(this->jackChannelSelection);
} }
@@ -906,7 +907,7 @@ int64_t Storage::UploadBank(BankFile &bankFile, int64_t uploadAfter)
bankFile.name(s.str()); bankFile.name(s.str());
} }
std::filesystem::path path = this->GetBankFileName(bankFile.name()); std::filesystem::path path = this->GetBankFileName(bankFile.name());
std::ofstream f(path); pipedal::ofstream_synced f(path);
if (!f.is_open()) if (!f.is_open())
{ {
throw PiPedalException("Can't write to bank file."); throw PiPedalException("Can't write to bank file.");
@@ -928,7 +929,7 @@ void Storage::SaveUserSettings()
{ {
std::filesystem::path path = this->dataRoot / USER_SETTINGS_FILENAME; std::filesystem::path path = this->dataRoot / USER_SETTINGS_FILENAME;
{ {
std::ofstream f(path); pipedal::ofstream_synced f(path);
if (!f.is_open()) if (!f.is_open())
{ {
throw PiPedalException("Unable to write to " + ((std::string)path)); throw PiPedalException("Unable to write to " + ((std::string)path));
@@ -964,7 +965,7 @@ void Storage::SetWifiConfigSettings(const WifiConfigSettings &wifiConfigSettings
std::filesystem::path path = this->dataRoot / WIFI_CONFIG_SETTINGS_FILENAME; std::filesystem::path path = this->dataRoot / WIFI_CONFIG_SETTINGS_FILENAME;
{ {
std::ofstream f(path); pipedal::ofstream_synced f(path);
if (!f.is_open()) if (!f.is_open())
{ {
throw PiPedalException("Unable to write to " + ((std::string)path)); throw PiPedalException("Unable to write to " + ((std::string)path));
@@ -1077,7 +1078,7 @@ void Storage::SaveCurrentPreset(const CurrentPreset &currentPreset)
{ {
std::filesystem::path path = GetCurrentPresetPath(); std::filesystem::path path = GetCurrentPresetPath();
std::ofstream f(path); pipedal::ofstream_synced f(path);
json_writer writer(f, false); json_writer writer(f, false);
writer.write(currentPreset); writer.write(currentPreset);
} }
@@ -1152,7 +1153,7 @@ void Storage::SavePluginPresets(const std::string &pluginUri, const PluginPreset
} }
auto tempPath = path.string() + ".$$$"; auto tempPath = path.string() + ".$$$";
{ {
std::ofstream os; pipedal::ofstream_synced os;
os.open(tempPath, std::ios_base::trunc); os.open(tempPath, std::ios_base::trunc);
if (os.fail()) if (os.fail())
{ {
@@ -1396,7 +1397,7 @@ std::map<std::string, bool> Storage::GetFavorites() const
void Storage::SetFavorites(const std::map<std::string, bool> &favorites) void Storage::SetFavorites(const std::map<std::string, bool> &favorites)
{ {
std::filesystem::path fileName = this->dataRoot / "favorites.json"; std::filesystem::path fileName = this->dataRoot / "favorites.json";
std::ofstream f; pipedal::ofstream_synced f;
f.open(fileName); f.open(fileName);
if (f.is_open()) if (f.is_open())
{ {
@@ -1425,7 +1426,7 @@ pipedal::JackServerSettings Storage::GetJackServerSettings()
void Storage::SetJackServerSettings(const pipedal::JackServerSettings &jackConfiguration) void Storage::SetJackServerSettings(const pipedal::JackServerSettings &jackConfiguration)
{ {
std::filesystem::path fileName = this->dataRoot / "AudioConfig.json"; std::filesystem::path fileName = this->dataRoot / "AudioConfig.json";
std::ofstream f; pipedal::ofstream_synced f;
f.open(fileName); f.open(fileName);
if (f.is_open()) if (f.is_open())
{ {
@@ -1440,7 +1441,7 @@ void Storage::SetJackServerSettings(const pipedal::JackServerSettings &jackConfi
void Storage::SetSystemMidiBindings(const std::vector<MidiBinding> &bindings) void Storage::SetSystemMidiBindings(const std::vector<MidiBinding> &bindings)
{ {
std::filesystem::path fileName = this->dataRoot / "SystemMidiBindings.json"; std::filesystem::path fileName = this->dataRoot / "SystemMidiBindings.json";
std::ofstream f; pipedal::ofstream_synced f;
f.open(fileName); f.open(fileName);
if (f.is_open()) if (f.is_open())
{ {
@@ -1714,7 +1715,7 @@ std::string Storage::UploadUserFile(const std::string &directory, const std::str
try { try {
std::filesystem::create_directories(path.parent_path()); std::filesystem::create_directories(path.parent_path());
std::ofstream f(path, std::ios_base::trunc | std::ios_base::binary); pipedal::ofstream_synced f(path, std::ios_base::trunc | std::ios_base::binary);
if (!f.is_open()) if (!f.is_open())
{ {
throw std::logic_error(SS("Can't create file " << path << ".")); throw std::logic_error(SS("Can't create file " << path << "."));
+2 -1
View File
@@ -22,6 +22,7 @@
#include <fstream> #include <fstream>
#include "Lv2Log.hpp" #include "Lv2Log.hpp"
#include "ss.hpp" #include "ss.hpp"
#include "ofstream_synced.hpp"
@@ -40,7 +41,7 @@ void UpdateResults::Load()
} }
void UpdateResults::Save() void UpdateResults::Save()
{ {
std::ofstream f {UPDATE_RESULT_PATH}; pipedal::ofstream_synced f {UPDATE_RESULT_PATH};
if (f.is_open()) if (f.is_open())
{ {
json_writer writer(f); json_writer writer(f);
+2 -1
View File
@@ -34,6 +34,7 @@
#include <algorithm> #include <algorithm>
#include "UpdaterSecurity.hpp" #include "UpdaterSecurity.hpp"
#include "SysExec.hpp" #include "SysExec.hpp"
#include "ofstream_synced.hpp"
using namespace pipedal; using namespace pipedal;
namespace fs = std::filesystem; namespace fs = std::filesystem;
@@ -88,7 +89,7 @@ static void SetCachedUpdateStatus(UpdateStatus &updateStatus)
updateStatus.LastUpdateTime(std::chrono::system_clock::now()); updateStatus.LastUpdateTime(std::chrono::system_clock::now());
try try
{ {
std::ofstream f{UPDATE_STATUS_CACHE_FILE}; pipedal::ofstream_synced f{UPDATE_STATUS_CACHE_FILE};
json_writer writer{f}; json_writer writer{f};
writer.write(updateStatus); writer.write(updateStatus);
} }
+1
View File
@@ -36,6 +36,7 @@
#include <strings.h> #include <strings.h>
#include "Ipv6Helpers.hpp" #include "Ipv6Helpers.hpp"
#include "util.hpp" #include "util.hpp"
#include "ofstream_synced.hpp"
#include "WebServer.hpp" #include "WebServer.hpp"
+2
View File
@@ -28,6 +28,7 @@
#include <memory> #include <memory>
#include "ZipFile.hpp" #include "ZipFile.hpp"
#include "PiPedalUI.hpp" #include "PiPedalUI.hpp"
#include "ofstream_synced.hpp"
#define PRESET_EXTENSION ".piPreset" #define PRESET_EXTENSION ".piPreset"
@@ -439,6 +440,7 @@ public:
Lv2Log::error(SS("Unzip failed. " << e.what())); Lv2Log::error(SS("Unzip failed. " << e.what()));
throw; throw;
} }
FileSystemSync();
} else { } else {
outputFileName = this->model->UploadUserFile(directory,patchProperty,filename,req.get_body_input_stream(), req.content_length()); outputFileName = this->model->UploadUserFile(directory,patchProperty,filename,req.get_body_input_stream(), req.content_length());