List of MOD file types (from MOD source)

This commit is contained in:
Robin Davies
2024-10-10 04:38:32 -04:00
parent 6116778188
commit 45d0f7ac8e
4 changed files with 141 additions and 116 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ static int ToOsSignalType(SignalHandler::SignalType signalType)
case SignalHandler::Hangup: result = SIGHUP; break; case SignalHandler::Hangup: result = SIGHUP; break;
default: default:
throw std::runtime_error("INvalid signal type"); throw std::runtime_error("Invalid signal type");
} }
return result; return result;
} }
+65 -54
View File
@@ -36,7 +36,9 @@ import FullscreenIcon from '@mui/icons-material/Fullscreen';
import FullscreenExitIcon from '@mui/icons-material/FullscreenExit'; import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
import List from '@mui/material/List'; import List from '@mui/material/List';
import Divider from '@mui/material/Divider'; import Divider from '@mui/material/Divider';
import ListItem from '@mui/material/ListItem'; // import ListItem from '@mui/material/ListItem';
import ListItemButton from '@mui/material/ListItemButton';
import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText'; import ListItemText from '@mui/material/ListItemText';
import CircularProgress from '@mui/material/CircularProgress'; import CircularProgress from '@mui/material/CircularProgress';
@@ -403,7 +405,8 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
return false; return false;
} }
onOpenBank(bankId: number) { handleSpecificBank(bankId: number) {
this.model_.openBank(bankId) this.model_.openBank(bankId)
.catch((error) => this.model_.showAlert(error.toString())); .catch((error) => this.model_.showAlert(error.toString()));
@@ -491,17 +494,15 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
} }
handleDrawerSelectBank() { handleDrawerSelectBank() {
this.setState({ this.setState({
isDrawerOpen: false,
bankDialogOpen: true, bankDialogOpen: true,
editBankDialogOpen: false editBankDialogOpen: false
}); });
} }
handleDrawerDonationClick() { handleDrawerDonationClick() {
this.setState({ this.hideDrawer(false);
isDrawerOpen: false,
});
if (this.model_.isAndroidHosted()) { if (this.model_.isAndroidHosted()) {
this.model_.showAndroidDonationActivity(); this.model_.showAndroidDonationActivity();
} else { } else {
@@ -514,14 +515,12 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
handleDrawerAboutClick() { handleDrawerAboutClick() {
this.setState({ this.setState({
isDrawerOpen: false,
aboutDialogOpen: true aboutDialogOpen: true
}); });
} }
handleDrawerRenameBank() { handleDrawerRenameBank() {
this.setState({ this.setState({
isDrawerOpen: false,
renameBankDialogOpen: true, renameBankDialogOpen: true,
saveBankAsDialogOpen: false saveBankAsDialogOpen: false
}); });
@@ -529,7 +528,6 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
} }
handleDrawerSaveBankAs() { handleDrawerSaveBankAs() {
this.setState({ this.setState({
isDrawerOpen: false,
renameBankDialogOpen: false, renameBankDialogOpen: false,
saveBankAsDialogOpen: true saveBankAsDialogOpen: true
}); });
@@ -657,6 +655,8 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT); let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT);
if (bankEntries < 1) bankEntries = 1; if (bankEntries < 1) bankEntries = 1;
if (bankEntries > 7) bankEntries = 7; if (bankEntries > 7) bankEntries = 7;
if (bankEntries === 2) bankEntries = 1;
this.setState({ bankDisplayItems: bankEntries }); this.setState({ bankDisplayItems: bankEntries });
} }
@@ -686,27 +686,35 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
} }
shortBankList(banks: BankIndex): BankIndexEntry[] { shortBankList(banks: BankIndex): BankIndexEntry[] {
let n = this.state.bankDisplayItems; let nDisplayEntries = this.state.bankDisplayItems;
let entries = banks.entries; let entries = banks.entries;
if (entries.length < n + 1) { // +1 for the .... entry. let nListEntries = entries.length;
return entries;
}
let result: BankIndexEntry[] = []; let result: BankIndexEntry[] = [];
let selectedIndex = -1;
for (let i = 0; i < entries.length; ++i) { if (nListEntries <= nDisplayEntries)
if (entries[i].instanceId === banks.selectedBank) { {
selectedIndex = i; for (let i = 0; i < nListEntries; ++i) {
break;
}
}
if (n > entries.length) n = entries.length;
if (selectedIndex > n) {
for (let i = 0; i < n - 1; ++i) {
result.push(entries[i]); result.push(entries[i]);
} }
result.push(entries[selectedIndex]);
} else { } else {
for (let i = 0; i < n; ++i) { // a subset of the list CENTERED on the currently selected entry.
let selectedIndex = 0;
for (let i = 0; i < nListEntries; ++i) {
if (entries[i].instanceId === banks.selectedBank) {
selectedIndex = i;
break;
}
}
let minN = selectedIndex-Math.floor(nDisplayEntries/2);
if (minN < 0) minN = 0;
let maxN = minN + nDisplayEntries;
if (maxN > entries.length) {
maxN = entries.length;
}
for (let i = minN; i < maxN; ++i)
{
result.push(entries[i]); result.push(entries[i]);
} }
} }
@@ -831,11 +839,11 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
</div> </div>
)} )}
<TemporaryDrawer position='left' title="PiPedal" <TemporaryDrawer position='left' title="PiPedal"
is_open={this.state.isDrawerOpen} onClose={() => { this.hideDrawer(); }} > is_open={this.state.isDrawerOpen} onClose={() => { this.hideDrawer(false); }} >
<List> <List>
<ListItem button key='PerformanceView' <ListItemButton key='PerformanceView'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.setState({ performanceView: true }); this.setState({ performanceView: true });
@@ -844,7 +852,7 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<FxAmplifierIcon color='inherit' className={classes.menuIcon} style={{ width: 24, height: 24 }} /> <FxAmplifierIcon color='inherit' className={classes.menuIcon} style={{ width: 24, height: 24 }} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Performance View' /> <ListItemText primary='Performance View' />
</ListItem> </ListItemButton>
</List> </List>
<Divider /> <Divider />
<ListSubheader className="listSubheader" component="div" id="xnested-list-subheader" style={{ lineHeight: "24px", height: 24, background: "rgba(12,12,12,0.0)" }} <ListSubheader className="listSubheader" component="div" id="xnested-list-subheader" style={{ lineHeight: "24px", height: 24, background: "rgba(12,12,12,0.0)" }}
@@ -856,20 +864,24 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
{ {
shortBankList.map((bank) => { shortBankList.map((bank) => {
return ( return (
<ListItem button key={'bank' + bank.instanceId} selected={bank.instanceId === this.state.banks.selectedBank} <ListItemButton key={'bank' + bank.instanceId} selected={bank.instanceId === this.state.banks.selectedBank}
onClick={() => this.onOpenBank(bank.instanceId)} onClick={(ev: any) => {
ev.stopPropagation();
this.hideDrawer(false);
this.handleSpecificBank(bank.instanceId);
}}
> >
<ListItemText primary={bank.name} /> <ListItemText primary={bank.name} />
</ListItem> </ListItemButton>
); );
}) })
} }
{ {
showBankSelectDialog && ( showBankSelectDialog && (
<ListItem button key={'bankDOTDOTDOT'} selected={false} <ListItemButton key={'bankDOTDOTDOT'} selected={false}
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerSelectBank(); this.handleDrawerSelectBank();
@@ -877,7 +889,7 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
> >
<ListItemText primary={"..."} /> <ListItemText primary={"..."} />
</ListItem> </ListItemButton>
) )
@@ -885,8 +897,8 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
</List> </List>
<Divider /> <Divider />
<List> <List>
<ListItem button key='RenameBank' <ListItemButton key='RenameBank'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerRenameBank() this.handleDrawerRenameBank()
@@ -895,9 +907,9 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<RenameOutlineIcon color='inherit' className={classes.menuIcon} /> <RenameOutlineIcon color='inherit' className={classes.menuIcon} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Rename bank' /> <ListItemText primary='Rename bank' />
</ListItem> </ListItemButton>
<ListItem button key='SaveBank' <ListItemButton key='SaveBank'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerSaveBankAs(); this.handleDrawerSaveBankAs();
@@ -906,9 +918,9 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<SaveBankAsIcon color="inherit" className={classes.menuIcon} /> <SaveBankAsIcon color="inherit" className={classes.menuIcon} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Save as new bank' /> <ListItemText primary='Save as new bank' />
</ListItem> </ListItemButton>
<ListItem button key='EditBanks' <ListItemButton key='EditBanks'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerManageBanks(); this.handleDrawerManageBanks();
@@ -917,12 +929,12 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<EditBanksIcon color="inherit" className={classes.menuIcon} /> <EditBanksIcon color="inherit" className={classes.menuIcon} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Manage banks...' /> <ListItemText primary='Manage banks...' />
</ListItem> </ListItemButton>
</List> </List>
<Divider /> <Divider />
<List> <List>
<ListItem button key='Settings' <ListItemButton key='Settings'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerSettingsClick() this.handleDrawerSettingsClick()
@@ -931,9 +943,9 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<SettingsIcon color="inherit" className={classes.menuIcon} /> <SettingsIcon color="inherit" className={classes.menuIcon} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Settings' /> <ListItemText primary='Settings' />
</ListItem> </ListItemButton>
<ListItem button key='About' <ListItemButton key='About'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true); this.hideDrawer(true);
this.handleDrawerAboutClick(); this.handleDrawerAboutClick();
@@ -942,18 +954,17 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
<HelpOutlineIcon color="inherit" className={classes.menuIcon} /> <HelpOutlineIcon color="inherit" className={classes.menuIcon} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='About' /> <ListItemText primary='About' />
</ListItem> </ListItemButton>
<ListItem button key='Donations' <ListItemButton key='Donations'
onClick={(ev) => { onClick={(ev: any) => {
ev.stopPropagation(); ev.stopPropagation();
this.hideDrawer(true);
this.handleDrawerDonationClick(); this.handleDrawerDonationClick();
}}> }}>
<ListItemIcon > <ListItemIcon >
<VolunteerActivismIcon className={classes.menuIcon} color="inherit" /> <VolunteerActivismIcon className={classes.menuIcon} color="inherit" />
</ListItemIcon> </ListItemIcon>
<ListItemText primary='Donations' /> <ListItemText primary='Donations' />
</ListItem> </ListItemButton>
</List> </List>
</TemporaryDrawer> </TemporaryDrawer>
+4 -2
View File
@@ -482,8 +482,8 @@ void AvahiService::Wait()
{ {
default: default:
case ServiceState::Unitialized: case ServiceState::Unitialized:
throw std::runtime_error("Invalid state"); done = true;
break;
case ServiceState::Initializing: case ServiceState::Initializing:
case ServiceState::Settling: case ServiceState::Settling:
case ServiceState::Requested: case ServiceState::Requested:
@@ -503,6 +503,8 @@ void AvahiService::Wait()
if (clock::now() > waitTime) if (clock::now() > waitTime)
{ {
Lv2Log::error("DNS/SD announcement timed out."); Lv2Log::error("DNS/SD announcement timed out.");
done = true;
break;
} }
std::this_thread::sleep_for(std::chrono::milliseconds(20)); std::this_thread::sleep_for(std::chrono::milliseconds(20));
+71 -59
View File
@@ -155,6 +155,49 @@ void DisableService()
#endif #endif
} }
bool disableAvahiConfigLine(SystemConfigFile &avahi, const std::string &section, const std::string &lineStart)
{
bool changed = false;
// use-ipv6=no
int line = avahi.GetLineThatStartsWith(lineStart + "yes");
if (line != -1)
{
avahi.UndoableReplaceLine(line, lineStart + "no");
changed = true;
}
else
{
if (avahi.GetLineThatStartsWith(lineStart + "no") == -1)
{
line = avahi.GetLineThatStartsWith(section);
if (line == -1)
{
throw std::runtime_error("Unable to find [server] section.");
}
{
++line;
// increment to end of section.
while (line < avahi.GetLineCount())
{
const auto &txt = avahi.Get(line);
if (txt.empty())
{
break;
}
if (txt.starts_with("[")) // start of next section.
{
break;
}
++line;
}
}
avahi.UndoableAddLine(line,lineStart+"no");
changed = true;
}
}
return changed;
}
static void RestartAvahiService() static void RestartAvahiService()
{ {
silentSysExec(SS(SYSTEMCTL_BIN << " restart avahi-daemon.service").c_str()); silentSysExec(SS(SYSTEMCTL_BIN << " restart avahi-daemon.service").c_str());
@@ -169,41 +212,10 @@ static void AvahiInstall()
SystemConfigFile avahi(avahiConfig); SystemConfigFile avahi(avahiConfig);
bool changed = avahi.RemoveUndoableActions(); bool changed = avahi.RemoveUndoableActions();
int line = avahi.GetLineThatStartsWith("use-ipv6=yes");
if (line != -1) changed |= disableAvahiConfigLine(avahi, "[server]", "use-ipv6=");
{ changed |= disableAvahiConfigLine(avahi, "[publish]", "publish-aaaa-on-ipv4=");
avahi.UndoableReplaceLine(line, "use-ipv6=no");
changed = true;
}
else
{
if (avahi.GetLineThatStartsWith("use-ipv6=no") == -1)
{
line = avahi.GetLineThatStartsWith("[server]");
if (line == 1)
{
throw std::runtime_error("Unable to find [server] section.");
}
{
// increment to end of section.
while (line < avahi.GetLineCount())
{
const auto &txt = avahi.Get(line);
if (txt.empty())
{
break;
}
if (txt.starts_with("[")) // start of next section.
{
break;
}
++line;
}
}
avahi.UndoableAddLine(avahi.GetLineCount(), "use-ipv6=no");
changed = true;
}
}
if (changed) if (changed)
{ {
avahi.Save(); avahi.Save();
@@ -914,7 +926,7 @@ void Install(const fs::path &programPrefix, const std::string endpointAddress)
try try
{ {
// apply policy changes we dropped into the polkit configuration files (allows pipedal_d to use NetworkManager dbus apis). // apply policy changes we dropped into the polkit configuration files (allows pipedal_d to use NetworkManager dbus apis).
silentSysExec(SYSTEMCTL_BIN " restart polkit"); silentSysExec(SYSTEMCTL_BIN " restart polkit");
DeployVarConfig(); DeployVarConfig();
@@ -995,7 +1007,6 @@ void Install(const fs::path &programPrefix, const std::string endpointAddress)
// add to netdev group // add to netdev group
sysExec(USERMOD_BIN " -a -G " NETDEV_GROUP_NAME " " SERVICE_ACCOUNT_NAME); sysExec(USERMOD_BIN " -a -G " NETDEV_GROUP_NAME " " SERVICE_ACCOUNT_NAME);
// create and configure /var directory. // create and configure /var directory.
fs::path varDirectory("/var/pipedal"); fs::path varDirectory("/var/pipedal");
@@ -1211,11 +1222,11 @@ static void PrintHelp()
<< "\n\n" << "\n\n"
<< "One of the following hotspot options can be specifed. If no hotspot option is given, the hotspot will always be enabled. " << "One of the following hotspot options can be specifed. If no hotspot option is given, the hotspot will always be enabled. "
<< "If one of the hotspot options are given, the PiPedal server will turn the hotspot on or off automatically, as conditions change." << "If one of the hotspot options are given, the PiPedal server will turn the hotspot on or off automatically, as conditions change."
<< "\n\n" << "\n\n"
<< "--home-network <wifi-ssid>\n" << "--home-network <wifi-ssid>\n"
<< AddIndent(4) << "Hotspot is disabled if the specificed Wi-Fi network is detected.\n" << AddIndent(4) << "Hotspot is disabled if the specificed Wi-Fi network is detected.\n"
<< AddIndent(-4) << AddIndent(-4)
<< "--no-ethernet\n" << "--no-ethernet\n"
<< AddIndent(4) << "Hotspot is disabled if an ethernet network is connected.\n" << AddIndent(4) << "Hotspot is disabled if an ethernet network is connected.\n"
<< AddIndent(-4) << AddIndent(-4)
<< "--no-wifi\n" << "--no-wifi\n"
@@ -1336,9 +1347,9 @@ int main(int argc, char **argv)
parser.AddOption("--port", &portOption); parser.AddOption("--port", &portOption);
parser.AddOption("--enable-hotspot", &enable_hotspot); parser.AddOption("--enable-hotspot", &enable_hotspot);
parser.AddOption("--disable-hotspot", &disable_hotspot); parser.AddOption("--disable-hotspot", &disable_hotspot);
parser.AddOption("--home-network",&homeNetwork); parser.AddOption("--home-network", &homeNetwork);
parser.AddOption("--no-ethernet",&noEthernet); parser.AddOption("--no-ethernet", &noEthernet);
parser.AddOption("--no-wifi",&noWifi); parser.AddOption("--no-wifi", &noWifi);
try try
{ {
parser.Parse(argc, (const char **)argv); parser.Parse(argc, (const char **)argv);
@@ -1367,9 +1378,7 @@ int main(int argc, char **argv)
} }
} }
int hotspotOptionCount = int hotspotOptionCount =
(homeNetwork.length() != 0 ? 1: 0) (homeNetwork.length() != 0 ? 1 : 0) + noEthernet + noWifi;
+ noEthernet
+ noWifi;
if (enable_hotspot) if (enable_hotspot)
{ {
@@ -1377,7 +1386,9 @@ int main(int argc, char **argv)
{ {
throw std::runtime_error("Only one hotspot option at a time can be specified."); throw std::runtime_error("Only one hotspot option at a time can be specified.");
} }
} else { }
else
{
if (hotspotOptionCount > 0) if (hotspotOptionCount > 0)
{ {
throw std::runtime_error("Hotspot options only only valid when the --enable-hotspot option has been supplied."); throw std::runtime_error("Hotspot options only only valid when the --enable-hotspot option has been supplied.");
@@ -1432,7 +1443,8 @@ int main(int argc, char **argv)
} }
if (install) if (install)
{ {
try { try
{
fs::path prefix; fs::path prefix;
if (prefixOption.length() != 0) if (prefixOption.length() != 0)
{ {
@@ -1465,8 +1477,8 @@ int main(int argc, char **argv)
} }
Install(prefix, portOption); Install(prefix, portOption);
FileSystemSync(); FileSystemSync();
}
} catch (const std::exception&e) catch (const std::exception &e)
{ {
cout << "ERROR: " << e.what() << endl; cout << "ERROR: " << e.what() << endl;
FileSystemSync(); FileSystemSync();
@@ -1475,10 +1487,12 @@ int main(int argc, char **argv)
} }
else if (uninstall) else if (uninstall)
{ {
try { try
{
Uninstall(); Uninstall();
FileSystemSync(); FileSystemSync();
} catch (const std::exception &e) }
catch (const std::exception &e)
{ {
cout << "ERROR: " << e.what() << endl; cout << "ERROR: " << e.what() << endl;
FileSystemSync(); FileSystemSync();
@@ -1489,7 +1503,6 @@ int main(int argc, char **argv)
{ {
RequireNetworkManager(); RequireNetworkManager();
StopService(); StopService();
} }
else if (start) else if (start)
{ {
@@ -1506,14 +1519,12 @@ int main(int argc, char **argv)
RequireNetworkManager(); RequireNetworkManager();
EnableService(); EnableService();
FileSystemSync(); FileSystemSync();
} }
else if (disable) else if (disable)
{ {
RequireNetworkManager(); RequireNetworkManager();
DisableService(); DisableService();
FileSystemSync(); FileSystemSync();
} }
else if (enable_p2p) else if (enable_p2p)
{ {
@@ -1541,8 +1552,7 @@ int main(int argc, char **argv)
settings.Load(); settings.Load();
settings.enable_ = false; settings.enable_ = false;
SetWifiDirectConfig(settings); SetWifiDirectConfig(settings);
RestartService(true); RestartService(true);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
@@ -1557,15 +1567,17 @@ int main(int argc, char **argv)
if (homeNetwork.length() != 0) if (homeNetwork.length() != 0)
{ {
startMode = HotspotAutoStartMode::NotAtHome; startMode = HotspotAutoStartMode::NotAtHome;
} else if (noEthernet) }
else if (noEthernet)
{ {
startMode = HotspotAutoStartMode::NoEthernetConnection; startMode = HotspotAutoStartMode::NoEthernetConnection;
} else if (noWifi) }
else if (noWifi)
{ {
startMode = HotspotAutoStartMode::NoRememberedWifiConections; startMode = HotspotAutoStartMode::NoRememberedWifiConections;
} }
settings.ParseArguments(argv,startMode,homeNetwork); settings.ParseArguments(argv, startMode, homeNetwork);
if (settings.hasPassword_) if (settings.hasPassword_)
{ {