mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 15:45:42 +00:00
SettingsInterface: Add Error to Save()
This commit is contained in:
parent
eb504143c1
commit
693982d755
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#include "layered_settings_interface.h"
|
||||
|
@ -9,7 +9,7 @@ LayeredSettingsInterface::LayeredSettingsInterface() = default;
|
|||
|
||||
LayeredSettingsInterface::~LayeredSettingsInterface() = default;
|
||||
|
||||
bool LayeredSettingsInterface::Save()
|
||||
bool LayeredSettingsInterface::Save(Error* error /* = nullptr */)
|
||||
{
|
||||
Panic("Attempting to save layered settings interface");
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#pragma once
|
||||
|
@ -23,7 +23,7 @@ public:
|
|||
SettingsInterface* GetLayer(Layer layer) const { return m_layers[layer]; }
|
||||
void SetLayer(Layer layer, SettingsInterface* sif) { m_layers[layer] = sif; }
|
||||
|
||||
bool Save() override;
|
||||
bool Save(Error* error = nullptr) override;
|
||||
|
||||
void Clear() override;
|
||||
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#include "memory_settings_interface.h"
|
||||
|
||||
#include "common/assert.h"
|
||||
#include "common/error.h"
|
||||
#include "common/string_util.h"
|
||||
|
||||
MemorySettingsInterface::MemorySettingsInterface() = default;
|
||||
|
||||
MemorySettingsInterface::~MemorySettingsInterface() = default;
|
||||
|
||||
bool MemorySettingsInterface::Save()
|
||||
bool MemorySettingsInterface::Save(Error* error /* = nullptr */)
|
||||
{
|
||||
Error::SetStringView(error, "Memory settings cannot be saved.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#pragma once
|
||||
|
@ -12,7 +12,7 @@ public:
|
|||
MemorySettingsInterface();
|
||||
~MemorySettingsInterface();
|
||||
|
||||
bool Save() override;
|
||||
bool Save(Error* error = nullptr) override;
|
||||
|
||||
void Clear() override;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#pragma once
|
||||
|
@ -8,12 +8,14 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class Error;
|
||||
|
||||
class SettingsInterface
|
||||
{
|
||||
public:
|
||||
virtual ~SettingsInterface() = default;
|
||||
|
||||
virtual bool Save() = 0;
|
||||
virtual bool Save(Error* error = nullptr) = 0;
|
||||
virtual void Clear() = 0;
|
||||
|
||||
virtual bool GetIntValue(const char* section, const char* key, s32* value) const = 0;
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#include "ini_settings_interface.h"
|
||||
|
||||
#include "common/file_system.h"
|
||||
#include "common/log.h"
|
||||
#include "common/path.h"
|
||||
#include "common/string_util.h"
|
||||
#include "common/error.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <mutex>
|
||||
|
||||
Log_SetChannel(INISettingsInterface);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -64,15 +68,18 @@ bool INISettingsInterface::Load()
|
|||
return (err == SI_OK);
|
||||
}
|
||||
|
||||
bool INISettingsInterface::Save()
|
||||
bool INISettingsInterface::Save(Error* error /* = nullptr */)
|
||||
{
|
||||
if (m_filename.empty())
|
||||
{
|
||||
Error::SetStringView(error, "Filename is not set.");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::unique_lock lock(s_ini_load_save_mutex);
|
||||
std::string temp_filename(GetTemporaryFileName(m_filename));
|
||||
SI_Error err = SI_FAIL;
|
||||
std::FILE* fp = FileSystem::OpenCFile(temp_filename.c_str(), "wb");
|
||||
std::FILE* fp = FileSystem::OpenCFile(temp_filename.c_str(), "wb", error);
|
||||
if (fp)
|
||||
{
|
||||
err = m_ini.SaveFile(fp, false);
|
||||
|
@ -80,10 +87,12 @@ bool INISettingsInterface::Save()
|
|||
|
||||
if (err != SI_OK)
|
||||
{
|
||||
Error::SetStringFmt(error, "INI SaveFile() failed: {}", static_cast<int>(err));
|
||||
|
||||
// remove temporary file
|
||||
FileSystem::DeleteFile(temp_filename.c_str());
|
||||
}
|
||||
else if (!FileSystem::RenamePath(temp_filename.c_str(), m_filename.c_str()))
|
||||
else if (!FileSystem::RenamePath(temp_filename.c_str(), m_filename.c_str(), error))
|
||||
{
|
||||
Log_ErrorPrintf("Failed to rename '%s' to '%s'", temp_filename.c_str(), m_filename.c_str());
|
||||
FileSystem::DeleteFile(temp_filename.c_str());
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#pragma once
|
||||
|
@ -19,7 +19,7 @@ public:
|
|||
const std::string& GetFileName() const { return m_filename; }
|
||||
|
||||
bool Load();
|
||||
bool Save() override;
|
||||
bool Save(Error* error = nullptr) override;
|
||||
|
||||
void Clear() override;
|
||||
|
||||
|
|
Loading…
Reference in a new issue