blob: 831a900f819f78f71b6b66dbd6e807e0527cbf88 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "modemloggerd/logging_prefs.h"
#include <string>
#include <base/logging.h>
namespace {
constexpr std::string_view kPrefPath = "/var/lib/modemloggerd/prefs";
} // namespace
namespace modemloggerd {
LoggingPrefs* LoggingPrefs::logging_prefs_ = nullptr;
LoggingPrefs::LoggingPrefs() {
const base::FilePath pref_file_path(kPrefPath);
if (!base::PathExists(pref_file_path)) {
base::File prefs_file(pref_file_path, base::File::FLAG_CREATE_ALWAYS |
base::File::FLAG_WRITE);
if (!prefs_file.IsValid()) {
LOG(ERROR) << "Could not open prefs file";
return;
}
if (!brillo::WriteTextProtobuf(prefs_file.GetPlatformFile(), prefs_)) {
LOG(ERROR) << "Could not write prefs file";
return;
}
return;
}
base::File prefs_file(pref_file_path,
base::File::FLAG_OPEN | base::File::FLAG_READ);
if (!prefs_file.IsValid()) {
LOG(ERROR) << "Could not open prefs file";
return;
}
if (!brillo::ReadTextProtobuf(prefs_file.GetPlatformFile(), &prefs_)) {
LOG(ERROR) << "Could not read prefs file";
return;
}
}
bool LoggingPrefs::Write() {
base::File prefs_file(
base::FilePath(kPrefPath),
base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
if (!prefs_file.IsValid()) {
LOG(ERROR) << "Could not open prefs file";
return false;
}
prefs_file.Seek(base::File::FROM_BEGIN, 0);
VLOG(2) << prefs_.DebugString();
return brillo::WriteTextProtobuf(prefs_file.GetPlatformFile(), prefs_);
}
bool LoggingPrefs::GetAutoStart(const std::string& modem_name) {
for (const auto& modem_log_pref : prefs_.modem_log_pref()) {
if (modem_log_pref.modem_name() == modem_name) {
return modem_log_pref.auto_start();
}
}
return false;
}
bool LoggingPrefs::SetAutoStart(const std::string& modem_name,
bool auto_start) {
for (int i = 0; i < prefs_.modem_log_pref_size(); ++i) {
auto modem_log_pref = prefs_.mutable_modem_log_pref(i);
if (modem_log_pref->modem_name() == modem_name) {
modem_log_pref->set_auto_start(auto_start);
return Write();
}
}
auto modem_log_pref = prefs_.add_modem_log_pref();
modem_log_pref->set_modem_name(modem_name);
modem_log_pref->set_auto_start(auto_start);
return Write();
}
LoggingPrefs* LoggingPrefs::Get() {
if (!logging_prefs_) {
logging_prefs_ = new LoggingPrefs();
}
return logging_prefs_;
}
} // namespace modemloggerd