Skip to content

Commit ff7b1fc

Browse files
authored
rework settings & simplify support for custom web content (#347)
1 parent a228c34 commit ff7b1fc

17 files changed

Lines changed: 470 additions & 316 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ on:
77
- master
88
paths-ignore:
99
- README.md
10+
- ChangeLog.md
1011
- docs/**
1112

1213
pull_request:
1314
branches:
1415
- master
1516
paths-ignore:
1617
- README.md
18+
- ChangeLog.md
1719
- docs/**
1820

1921
jobs:

ChangeLog.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
- Add macOS support
33
- Rework mobile layout: make elements larger and better positioned, support swiping between views
44
- Rework column editor: add support for subrows and basic formatting, each layout is now configured separately
5-
- Allow non-absolute paths in config (resolved relative to {player profile directory}/beefweb/)
5+
- Allow non-absolute paths in config (resolved relative to `{player_profile_dir}/beefweb/`)
6+
- Serve custom web content from `{player_profile_dir}/beefweb/webroot/`
7+
- Replace `BEEFWEB_CONFIG_FILE` environment variable with `BEEFWEB_PROFILE_DIR` (fully overrides `{player_profile_dir}/beefweb/`)
68
- Allow setting arbitrary UI scale
79
- Preserve scroll position in file browser
810
- Increase icon sizes in all layouts

cpp/server/deadbeef/plugin.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void Plugin::handlePluginsLoaded()
4949
pluginsLoaded_ = true;
5050

5151
#ifndef MSRV_OS_MAC
52-
SettingsData::migrate(MSRV_PLAYER_DEADBEEF, getProfileDir());
52+
migrateSettings(MSRV_PLAYER_DEADBEEF, getProfileDir());
5353
#endif
5454

5555
refreshSettings();
@@ -59,18 +59,19 @@ void Plugin::handlePluginsLoaded()
5959
void Plugin::reconfigure()
6060
{
6161
tryCatchLog([&] {
62-
auto settings = std::make_shared<SettingsData>();
63-
64-
settings->port = port_;
65-
settings->allowRemote = allowRemote_;
66-
settings->musicDirsOrig = parseValueList<std::string>(musicDirs_, ';');
67-
settings->authRequired = authRequired_;
68-
settings->authUser = authUser_;
69-
settings->authPassword = authPassword_;
70-
settings->permissions = permissions_;
71-
72-
settings->initialize(getThisModuleDir(), getProfileDir());
73-
62+
SettingsBuilder builder;
63+
64+
builder.resourceDir = getThisModuleDir();
65+
builder.profileDir = getProfileDir();
66+
builder.port = port_;
67+
builder.allowRemote = allowRemote_;
68+
builder.musicDirs = parseValueList<std::string>(musicDirs_, ';');
69+
builder.authRequired = authRequired_;
70+
builder.authUser = authUser_;
71+
builder.authPassword = authPassword_;
72+
builder.permissions = permissions_;
73+
74+
auto settings = builder.build();
7475
host_.reconfigure(std::move(settings));
7576
});
7677
}

cpp/server/file_system.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <stddef.h>
77
#include <string>
88
#include <vector>
9+
#include <memory>
910

1011
#include <boost/filesystem.hpp>
1112
#include <boost/optional.hpp>
@@ -16,6 +17,8 @@ namespace fs = boost::filesystem;
1617

1718
using Path = fs::path;
1819

20+
using PathVectorPtr = std::shared_ptr<const std::vector<Path>>;
21+
1922
#ifdef MSRV_OS_POSIX
2023
#define MSRV_PATH_LITERAL(str) Path(str)
2124
#endif

cpp/server/foobar2000/plugin.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,24 @@ Path Plugin::getProfileDir()
3535
void Plugin::reconfigure()
3636
{
3737
tryCatchLog([&] {
38-
auto settings = std::make_shared<SettingsData>();
39-
40-
settings->port = settings_store::port;
41-
settings->allowRemote = settings_store::allowRemote;
42-
settings->musicDirsOrig = settings_store::getMusicDirs();
43-
settings->authRequired = settings_store::authRequired;
44-
settings->authUser = settings_store::authUser.get();
45-
settings->authPassword = settings_store::authPassword.get();
46-
settings->permissions = settings_store::getPermissions();
38+
SettingsBuilder builder;
4739

4840
#ifdef MSRV_OS_MAC
49-
auto resourceDir = getThisModuleDir().parent_path() / Path("Resources");
41+
builder.resourceDir = getThisModuleDir().parent_path() / Path("Resources");
5042
#else
51-
const auto& resourceDir = getThisModuleDir();
43+
builder.resourceDir = getThisModuleDir();
5244
#endif
5345

54-
settings->initialize(resourceDir, getProfileDir());
46+
builder.profileDir = getProfileDir();
47+
builder.port = settings_store::port;
48+
builder.allowRemote = settings_store::allowRemote;
49+
builder.musicDirs = settings_store::getMusicDirs();
50+
builder.authRequired = settings_store::authRequired;
51+
builder.authUser = settings_store::authUser.get();
52+
builder.authPassword = settings_store::authPassword.get();
53+
builder.permissions = settings_store::getPermissions();
54+
55+
auto settings = builder.build();
5556

5657
host_.reconfigure(std::move(settings));
5758
});
@@ -68,7 +69,7 @@ class InitQuit : public initquit
6869
{
6970
Logger::setCurrent(&logger_);
7071
#ifndef MSRV_OS_MAC
71-
SettingsData::migrate(MSRV_PLAYER_FOOBAR2000, Plugin::getProfileDir());
72+
migrateSettings(MSRV_PLAYER_FOOBAR2000, Plugin::getProfileDir());
7273
#endif
7374
tryCatchLog([this] { plugin_ = std::make_unique<Plugin>(); });
7475
}

cpp/server/project_info.hpp.in

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616
#define MSRV_PROJECT_DESC "Provides web UI and HTTP API for controlling player remotely"
1717
#define MSRV_DEFAULT_PORT 8880
1818
#define MSRV_DEFAULT_TEST_PORT 8882
19-
#define MSRV_CONFIG_FILE "config.json"
2019
#define MSRV_CONFIG_FILE_OLD "beefweb.config.json"
21-
#define MSRV_CONFIG_FILE_ENV "BEEFWEB_CONFIG_FILE"
22-
#define MSRV_CLIENT_CONFIG_DIR "clientconfig"
20+
#define MSRV_PROFILE_DIR_ENV "BEEFWEB_PROFILE_DIR"
2321
#define MSRV_DONATE_URL "https://hyperblast.org/donate/"
2422
#define MSRV_API_DOCS_URL "https://hyperblast.org/beefweb/api/"
2523
#define MSRV_PLAYER_DEADBEEF "deadbeef"

0 commit comments

Comments
 (0)