This commit is contained in:
Robin E. R. Davies
2025-02-20 15:40:20 -05:00
44 changed files with 518 additions and 357 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ project(pipedal
EXECUTE_PROCESS( COMMAND dpkg --print-architecture COMMAND tr -d '\n' OUTPUT_VARIABLE DEBIAN_ARCHITECTURE )
set (DISPLAY_VERSION "PiPedal v1.4.70-Release")
set (DISPLAY_VERSION "PiPedal v1.4.70-Beta")
set (PACKAGE_ARCHITECTURE ${DEBIAN_ARCHITECTURE})
set (CMAKE_INSTALL_PREFIX "/usr/")
+3
View File
@@ -118,4 +118,7 @@ namespace pipedal
std::string ToLower(const std::string&value);
std::filesystem::path MakeRelativePath(const std::filesystem::path &path, const std::filesystem::path&parentPath);
bool IsSubdirectory(const std::filesystem::path &path, const std::filesystem::path &basePath);
}
+27
View File
@@ -189,3 +189,30 @@ std::filesystem::path pipedal::MakeRelativePath(const std::filesystem::path &pat
return remander;
}
bool pipedal::IsSubdirectory(const std::filesystem::path &path, const std::filesystem::path &basePath)
{
auto iPath = path.begin();
for (auto i = basePath.begin(); i != basePath.end(); ++i)
{
if (iPath == path.end())
{
return false;
}
if ((*i) != (*iPath))
{
return false;
}
++iPath;
}
while (iPath != path.end())
{
if (iPath->string() == "..")
{
return false;
}
++iPath;
}
return true;
}
+1 -1
View File
@@ -15,7 +15,7 @@ Documentation: [https://rerdavies.github.io/pipedal/Documentation.html](htt
#### Important notice: PiPedal has a submitted a request to support sharing of Pipedal presets at [PatchStorage.com](https:///patchstorage.com). We need your support! Please vote for PiPedal [here](https://patchstorage.com/requests/pipedal/).
#### NEW version 1.4.70 Release, providing [snapshots](https://rerdavies.github.io/pipedal/Snaphots.html), and a new Performance View. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
#### NEW version 1.4.70 Beta. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
 
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -5,7 +5,7 @@ page_icon: img/Compiling.jpg
{% include pageIcon.html %}
PiPedal has only been tested on Raspberry Pi OS, and Ubuntu, but should run with some modifications on most Linux distributions. Pull requests to correct problems with building PiPedal on other versions of Linux are welcome. However, getting build pre-requisites installed on non-Debian-derived Linux distrubutions (distros that don't use `apt`) will be challenging.
PiPedal has only been tested on Raspberry Pi OS, and Ubuntu 24.x, but should run with some modifications on most Linux distributions. Pull requests to correct problems with building PiPedal on other versions of Linux are welcome. However, getting build pre-requisites installed on non-Debian-derived Linux distrubutions (distros that don't use `apt`) will be challenging.
To build and debug PiPedal using Visual Studio Code, you need 8GB of memory. You can build PiPedal with 2GB of memory.
+16
View File
@@ -3,6 +3,22 @@ page_icon: img/Setup.jpg
icon_width: 320px
icon_float: left
---
## Selecting a real-time kernel on Ubuntu.
This step is unneccesary on Raspberry Pi OS, which installs an RT_PREEMPT kernel by default.
By default, Ubuntu installs a PREEMT_DYNAMIC kernel, configured to run with volutary preemption. You will need to change this. You can do this by running the following command after you have installed PiPedal:
```
pipedal_kconfig
```
In order to support real-time audio processing, select Preempt=full.
An RT_PREEMPT kernel provides slightly better realtime audio than a PREEMPT_DYNAMIC/preempt=full kernel, but the PREEMPT_DYNAMIC should be perfectly adequate. If you are having problems with audio dropouts, you may want to try an RT_PREEMPT kernel instead. Ubuntu provides a pre-built RT_PREEMPT kernel; but on our test systems, you can acheive stable low-latency audio using only the PREEMPT_DYNAMIC/preempt=full kernel. The pre-build Ubuntu RT_PREEMPT
kernel is only available if yo have an Ubuntu Pro subscription. But it is relatively easy to build the Ubuntu RT_PREEMPT kernel from source. That is, however, outside the scope of this document. We recommend using the PREEMPT_DYNAMIC/preempt=full Ubuntu kernel.
## Configuring PiPedal After Installation
+12 -9
View File
@@ -2,7 +2,7 @@
PipPedal consists of the following components:
* A web application build in React, found in the react subdirectory.
* A web application built using vite/React, found in the `vite` subdirectory.
* `pipedald`
@@ -40,7 +40,7 @@ same /etc/pipedal and /var/pipedal directories as an instance of `pipedal` runn
under systemd. Note that when running under systemd, `pipedald` runs under an unprivileged
`piedal_d` service account, and relies it's group (also 'pipedal_d`) in order to access its
data files, and to communicate with the `pipedaladmin` service, which does run with root
priveleges when `pipedald` needs to perform operations that do required root privileges.
privileges when `pipedald` needs to perform operations that do required root privileges (e.g. shutdown/reboot and starting and stopping WiFi services).
For what it's worth, `pipedaldmin` is virtually undebuggable, becuase it does require root privileges to run.
If you really _must_ debug pipedaladmin, you can fire up a sudo isntance of Visual Studio Code
@@ -53,8 +53,8 @@ audio and Wi-Fi configuration changes) may fail if the pipedaladmind service is
with pipedaladmin via Unix docket that can only be opened by members of the pipedal_d group. So if you have
added your own account to the `pipedal_d` group, debug instances of `pipedald` will in fact work properly.
In production, the pipedald web server serves the PiPedal web socket, as well as static HTML from the built
react components. But while debugging, it is much more convenient to use the React debug server for
In production, the pipedald web server serves the PiPedal web socket, as well as static HTML from the built
vite/React components. But while debugging, it is much more convenient to use the Vite debug server for
React sources, and configure pipedald to serve only the websocket.
Note that a debug instance of `pipedald` cannot bind to port 80, since that requires either root privileges or
@@ -72,23 +72,26 @@ make the systemd instance of `pipedald` bind to port 8080 instead of port 80:
(which will also restart the `pipedald` service).
To start the React debug server, from a shell, `cd` to the react directory, and run `./start`. The react debug
server will detect any changes to React sources, and rebuild them automatically (no build step required).
Actual debugging is performed using the Chrome debugger (which is remarkably well integrated with React).
To start the web app debug server, from a shell, `cd` to the `./vite` directory, and run `npm run dev`. The
Vite debug server will automatically detect any changes to web app sources, and rebuild them automatically (no build step required). Note that the `pipedald` service must be running in order for the web app to function properly, either
as a the `pipedald` service, or by running `pipedald` in a debugger.
Actual debugging is performed using the Chrome debugger (which is remarkably well integrated with Vite/React).
You won't actually see changes to the version of the systemd version of the static web app until you
do a full _Release_ or _RelWithDebInfo_ build of PiPedal, followed by running `./install.sh` which pushes
the built react app in the location where the systemd version of `pipedald` serves static web content.
By default, the debug React app will attempt to contact the pipedald server on ws:*:8080 -- the address on which
the debug version of pipedald listens on. This can be reconfigured
in the file `react/src/public/var/config.json` if desired. If you connect to the the pipedald server port (port 80), pipedald intercepts requests for this file and points the react app at itself, so the file has no effect when running in production.
in the file `react/src/public/var/config.json` if desired. If you connect to the the pipedald server port (port 80), pipedald intercepts requests for `http://./var/config.json` and points the react app at itself, so the file has no effect when running in production.
The React app will display the message "Error: Failed to connect to the server", until you start the pipedald websocket server in the VSCode debugger. However, it's quite reasonable to point the react debug app at a systemd instance of the pipedald server instead, if you don't intend to debug C++ code.
react/public/var/config.json:
{
...
"socket_server_port": 8080, # (PiPedald's port number)
# (PiPedald's port number. 80 for the production service, 8080 (by default) for
# pipedal running under a debugger.
"socket_server_port": 8080,
"socket_server_address": "*",
...
}
+7 -6
View File
@@ -13,24 +13,25 @@ page_icon: img/Install4.jpg
Download the most recent Debian (.deb) package for your platform:
- [Raspberry Pi OS bookworm (64-bit) v1.4.70](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)
- [Raspberry Pi OS bookworm (aarch64) v1.4.70 Beta](https://github.com/rerdavies/pipedal/releases/download/)
- [Ubuntu 24.x (aarch64) v1.4.70 Alpha](https://github.com/rerdavies/pipedal/releases/download/)
- [Ubuntu 24.x (amd64) v1.4.70 Alpha](https://github.com/rerdavies/pipedal/releases/download/)
Version 1.4.70 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
Version 1.4.70 has been tested on Raspberry Pi OS bookworm, Ubuntu 24.04 (amd64), and Ubuntu 24.10 (aarch64). Download the appropriate package for your platform, and install using the following proceduer:
```
sudo apt update
cd ~/Downloads
sudo apt-get install pipedal_1.4.70_arm64.deb
```
Adjust accordingly if you have downloaded v1.1.31.
Adjust accordingly depending which package you downloaded.
On Raspberry Pi OS, if you have a graphical desktop installed, you can also install the package by double-clicking on the downloaded package in the File Manager.
After installing, follow the instructions in [Configuring PiPedal after Installation](Configuring.md).
After installing, follow the instructions in [Configuring PiPedal after Installation](Configuring.md). If
you are using Ubuntu, you will need to reconfigure Ubuntu to use a real-time kernel.
--------
+5 -4
View File
@@ -2,15 +2,16 @@
## PiPedal 1.4.70 Beta
- Support for Ubuntu 24.04 (arm64 and amd64)
- Ubunto CPU Freq/governor/thermal status display.
- Ubuntu 24.x compatibility (arm64 and amd64)
- Ubuntu CPU Freq/governor/thermal status display.
- Support for WiFi on on Ubuntu
- TooB Plugin compatibility issues on x64/amd64.
- TooB Plugin compatibility issues on x64/amd64 (handling of NaNs)
- Restart audio automatically after ALSA stalls.
- Improvements to File Upload UI for plugins that have complex file types (e.g. Ratatoille)
- Improvements to File Upload UI for plugins that have complex file types (e.g. Ratatouille)
- Support for LV2 Trigger controls, and MIDI bindings to LV2 trigger controls (common in looper and recording/playback plugsin).
- MIDI bindings for LV2 trigger controls.
- Port Web app from CRA to Vite framework to avoid deprecated dependencies.
- ToobAmp 1.1.57: Correctly set file path of the default file property for Toob Convolution Reverb.
## PiPedal 1.3.69
+10
View File
@@ -21,6 +21,10 @@
display: block;
height: 24px;
}
img-icon {
width: 24px;
height:
}
</style>
<div class="footer-offset">
@@ -41,6 +45,12 @@
<span style="margin-right: 60px" >&nbsp;</span>
<a rel="me" href="https://rerdavies.github.io" target="_blank" title="rerdavies.github.io"><img
class="svg-icon" src="img/rerdavies.svg" />
</img>rerdavies.github.io</a>
<span style="margin-right: 60px" >&nbsp;</span>
<a rel="me" href="https://github.com/rerdavies" target="_blank" title="rerdavies"><svg
class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#github' | relative_url }}"></use>
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

+2 -1
View File
@@ -10,7 +10,8 @@ To view PiPedal documentation, click [here](Documentation.md).
be enormously grateful. Note that media and model files are included in patch files, so you can share patches that
include model files or audio samples. If you make use of plugins that are not included in the PiPedal distribution, please include a link to the plugin in the patch description.
#### NEW version 1.4.70 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
#### NEW version 1.4.70 Beta, plus alpha releases of
PiPedal for Ubuntu on aarch64 and amd64. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.
&nbsp;
+1 -1
View File
@@ -93,7 +93,7 @@ cabir:impulseFile3
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
TooB Cab IR is a convolution-based guitar cabinet impulse response simulator.
+1 -1
View File
@@ -49,7 +49,7 @@ toob:frequencyResponseVector
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
mod:brand "TooB";
mod:label "TooB CabSim";
@@ -53,7 +53,7 @@ toobimpulse:impulseFile
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
Convolution reverb is a notoriously compute-intensive effect. If you are having performance issues, use the Max T control to constrain the length of the impulse file to
@@ -51,7 +51,7 @@ toobimpulse:impulseFile
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
+1 -1
View File
@@ -65,7 +65,7 @@ inputStage:filterGroup
doap:license <https://two-play.com/TooB/licenses/isc> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
mod:brand "TooB";
mod:label "TooB Input";
+1 -1
View File
@@ -67,7 +67,7 @@ pstage:stage3
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
mod:brand "TooB";
mod:label "Power Stage";
+1 -1
View File
@@ -58,7 +58,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment "TooB spectrum analyzer" ;
mod:brand "TooB";
+1 -1
View File
@@ -55,7 +55,7 @@ tonestack:eqGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
uiext:ui <http://two-play.com/plugins/toob-tone-stack-ui>;
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
Emulation of a Boss CE-2 Chorus.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
A straightforward no-frills digital delay.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
Emulation of a Boss BF-2 Flanger, based on circuit analysis and simulation of the original.
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
Digital emulation of a Boss BF-2 Flanger.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
Toob Freeverb is an Lv2 implementation of the famous Freeverb reverb effect. FreeVerb delivers a well-balanced reverb with very little tonal coloration.
+2 -2
View File
@@ -65,7 +65,7 @@ toobml:sagGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
The TooB ML Amplifier plugin provides emulation of a variety of amplifiers and overdrive pedals that are implemented
using neural-network-based machine learning models of real amplifiers.
@@ -313,7 +313,7 @@ and uses model files from the GuitarML Neural Pi project (https://github.com/Gui
lv2:default 3.0 ;
lv2:minimum 0.0 ;
lv2:maximum 10.0 ;
rdfs:comment "Model gain parameter (used by BluesJR model only)"
rdfs:comment "Model gain parameter (if supported by model) ()"
],
[
a lv2:InputPort ,
@@ -61,7 +61,7 @@ toobNam:eqGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
A port of Steven Atkinson's Neural Amp Modeler to LV2.
@@ -326,7 +326,7 @@ toobNam:ui
pipedal_ui:fileProperties
[
a pipedal_ui:fileProperty;
rdfs:label "Model (*.nam)" ;
rdfs:label "Model" ;
pipedal_ui:directory "NeuralAmpModels";
lv2:index 2 ;
pipedal_ui:patchProperty toobNam:modelFile ;
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 55 ;
lv2:microVersion 57 ;
rdfs:comment """
TooB Tuner is a chromatic guitar tuner.
""" ;
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/bash
# Install react dependencies
cd react
cd vite
npm install
cd ..
+38 -1
View File
@@ -50,6 +50,7 @@
#endif /* NO_MLOCK */
using namespace pipedal;
namespace fs = std::filesystem;
template <typename T>
T &constMutex(const T &mutex)
@@ -2309,10 +2310,46 @@ void PiPedalModel::SetSystemMidiBindings(std::vector<MidiBinding> &bindings)
}
}
FileRequestResult PiPedalModel::GetFileList2(const std::string &relativePath, const UiFileProperty &fileProperty)
PedalboardItem*PiPedalModel::GetPedalboardItemForFileProperty(const UiFileProperty& fileProperty)
{
for (PedalboardItem*pedalboardItem: this->pedalboard.GetAllPlugins())
{
if (pedalboardItem->pathProperties_.contains(fileProperty.patchProperty()))
{
return pedalboardItem;
}
}
return nullptr;
}
FileRequestResult PiPedalModel::GetFileList2(const std::string &relativePath_, const UiFileProperty &fileProperty)
{
std::string relativePath = relativePath_;
try
{
if (!storage.IsInUploadsDirectory(relativePath))
{
// if relativePath is in a resource directory of the plugin, then we have loaded a factory preset or are using a default property.
// map the resource path to the corresponding file in the uploads directory.
// :-(
PedalboardItem *pedalboardItem = GetPedalboardItemForFileProperty(fileProperty);
if (pedalboardItem)
{
auto pluginInfo = GetPluginInfo(pedalboardItem->uri());
if (pluginInfo) {
std::filesystem::path resourcePath = fs::path(pluginInfo->bundle_path())
/ fileProperty.resourceDirectory();
if (IsSubdirectory(relativePath,resourcePath))
{
fs::path t = MakeRelativePath(relativePath,resourcePath);
t = fileProperty.directory() / t;
if (fs::exists(t))
{
relativePath = t;
}
}
}
}
}
return this->storage.GetFileList2(relativePath, fileProperty);
}
catch (const std::exception &e)
+1
View File
@@ -109,6 +109,7 @@ namespace pipedal
using NetworkChangedListener = std::function<void(void)>;
private:
PedalboardItem* GetPedalboardItemForFileProperty(const UiFileProperty& fileProperty);
void CancelAudioRetry();
clock::time_point lastRestartTime = clock::time_point::min();
+30 -9
View File
@@ -681,19 +681,26 @@ Lv2PluginInfo::FindWritablePathProperties(PluginHost *lv2Host, const LilvPlugin
std::filesystem::path bundleDirectoryName = std::filesystem::path(bundle_path()).parent_path().filename();
std::filesystem::path legacyUploadPath = lv2Host->MapPath(bundleDirectoryName.string());
if (std::filesystem::exists(legacyUploadPath))
{
if (!std::filesystem::exists(legacyUploadPath / ".migrated"))
{
fileProperty->useLegacyModDirectory(true);
fileProperty->directory(bundleDirectoryName);
}
modFileTypes.rootDirectories().push_back(bundleDirectoryName.filename()); // push the private directory!
}
fileProperty->setModFileTypes(modFileTypes);
fileProperty->directory(bundleDirectoryName);
if (std::filesystem::exists(legacyUploadPath)
&& !std::filesystem::exists(legacyUploadPath / ".migrated"))
{
fileProperty->useLegacyModDirectory(true);
fileProperty->directory(bundleDirectoryName);
modFileTypes.rootDirectories().push_back(bundleDirectoryName.filename()); // push the private directory!
} else {
if (modFileTypes.rootDirectories().size() == 1)
{
std::string modName = modFileTypes.rootDirectories()[0];
auto modDirectory = modFileTypes.GetModDirectory(modName);
fileProperty->directory(modDirectory->pipedalPath);
}
}
fileProperties.push_back(fileProperty);
} else {
unsupportedPatchProperty = true;
@@ -1540,6 +1547,20 @@ static void createTargetLinks(const std::filesystem::path &sourceDirectory, cons
}
}
}
std::string PluginHost::MapResourcePath(const std::string&pluginUri, const std::string&filePath)
{
auto plugin = GetPluginInfo(pluginUri);
if (plugin) {
return filePath;
}
return filePath;
}
void PluginHost::CheckForResourceInitialization(const std::string &pluginUri, const std::filesystem::path &pluginUploadDirectory)
{
+3
View File
@@ -838,6 +838,9 @@ namespace pipedal
public:
virtual MapFeature &GetMapFeature() { return this->mapFeature; }
void CheckForResourceInitialization(const std::string& pluginUri,const std::filesystem::path& pluginUploadDirectory);
std::string MapResourcePath(const std::string&uri, const std::string&relativePath);
void ReloadPlugins();
// equivalent to LV2 MapPath AbstractPath features.
+8 -29
View File
@@ -46,32 +46,6 @@ const char *BANKS_FILENAME = "index.banks";
#define USER_SETTINGS_FILENAME "userSettings.json";
static bool isSubdirectory(const fs::path &path, const fs::path &basePath)
{
auto iPath = path.begin();
for (auto i = basePath.begin(); i != basePath.end(); ++i)
{
if (iPath == path.end())
{
return false;
}
if ((*i) != (*iPath))
{
return false;
}
++iPath;
}
while (iPath != path.end())
{
if (iPath->string() == "..")
{
return false;
}
++iPath;
}
return true;
}
static bool hasSyntheticModRoot(const UiFileProperty &fileProperty)
{
@@ -1755,7 +1729,7 @@ FileRequestResult Storage::GetModFileList2(const std::string &relativePath, cons
const ModFileTypes::ModDirectory *modDirectoryInfo = ModFileTypes::GetModDirectory(modDirectory);
if (modDirectoryInfo)
{
if (isSubdirectory(fsRelativePath, uploadsDirectory / modDirectoryInfo->pipedalPath))
if (IsSubdirectory(fsRelativePath, uploadsDirectory / modDirectoryInfo->pipedalPath))
{
rootModDirectory = modDirectoryInfo;
modDirectoryPath = uploadsDirectory / modDirectoryInfo->pipedalPath;
@@ -1766,7 +1740,7 @@ FileRequestResult Storage::GetModFileList2(const std::string &relativePath, cons
}
if (modDirectoryPath.empty() && fileProperty.useLegacyModDirectory())
{
if (isSubdirectory(fsRelativePath, uploadsDirectory / fileProperty.directory()))
if (IsSubdirectory(fsRelativePath, uploadsDirectory / fileProperty.directory()))
{
modDirectoryPath = uploadsDirectory / fileProperty.directory();
result.breadcrumbs_.push_back({modDirectoryPath.string(), fs::path(fileProperty.directory()).filename().string()});
@@ -1881,7 +1855,7 @@ FileRequestResult Storage::GetFileList2(const std::string &relativePath_, const
++iAbsolutePath;
}
}
if (!isSubdirectory(absolutePath, pluginRootDirectory))
if (!IsSubdirectory(absolutePath, pluginRootDirectory))
{
throw std::runtime_error(SS("Improper location. " << absolutePath));
}
@@ -2239,6 +2213,11 @@ FilePropertyDirectoryTree::ptr Storage::GetFilePropertydirectoryTree(const UiFil
}
}
bool Storage::IsInUploadsDirectory(const std::filesystem::path&path) const
{
return IsSubdirectory(path,this->GetPluginUploadDirectory());
}
const PluginPresetIndex &Storage::GetPluginPresetIndex()
{
return pluginPresetIndex;
+2
View File
@@ -154,6 +154,8 @@ public:
void MoveBank(int from, int to);
int64_t DeleteBank(int64_t bankId);
bool IsInUploadsDirectory(const std::filesystem::path&path) const;
FileRequestResult GetFileList2(const std::string&relativePath,const UiFileProperty&fileProperty);
FileRequestResult GetModFileList2(const std::string &relativePath,const UiFileProperty &fileProperty);
+45 -1
View File
@@ -636,6 +636,40 @@ std::string GetFromAddress(const tcp::socket &socket)
s << socket.remote_endpoint().address().to_string() << ':' << socket.remote_endpoint().port();
return s.str();
}
static bool encoding_allowed(const std::string&acceptEncodingHeader,const std::string&encoding)
{
auto npos = acceptEncodingHeader.find(encoding);
if (npos == std::string::npos)
return false;
std::vector<std::string> encodings = split(acceptEncodingHeader, ',');
for (auto &e : encodings)
{
if (e.starts_with(encoding)) {
if (e.length() == encoding.length())
return true;
if (e[encoding.length()] == ';')
return true;
}
}
return false;
}
static bool can_use_gzip_encoding(
const std::string &acceptEncodingHeader,
const std::filesystem::path &filename,
std::filesystem::path *gzName)
{
if (!encoding_allowed(acceptEncodingHeader, "gzip"))
return false;
*gzName = filename.string() + ".gz";
if (std::filesystem::exists(*gzName)) {
return true;
}
return false;
}
namespace pipedal
{
@@ -1125,12 +1159,22 @@ namespace pipedal
}
}
std::string mimeType = mime_type(filename);
std::filesystem::path gzName;
if (can_use_gzip_encoding(req.get(HttpField::accept_encoding) ,filename,&gzName) )
{
filename = gzName;
res.set(HttpField::content_encoding,"gzip");
}
if (req.method() != HttpVerb::get)
{
ServerError(*con, "Unknown HTTP-Method");
return;
}
std::string mimeType = mime_type(filename);
file.open(filename.c_str(), std::ios::in);
if (!file)
+2
View File
@@ -71,6 +71,8 @@ public:
constexpr static const char* date = "Date";
constexpr static const char* referer = "Referer";
constexpr static const char * location = "Location";
constexpr static const char* accept_encoding = "Accept-Encoding";
constexpr static const char* content_encoding = "Content-Encoding";
};
+267 -263
View File
@@ -11,7 +11,7 @@ else()
set(BUILD_REACT_ARGS run build)
endif()
set (BUILD_DIRECTORY ${PROJECT_SOURCE_DIR}/dist)
set (BUILD_DIRECTORY ${PROJECT_SOURCE_DIR}/vite/dist)
add_custom_command(
@@ -22,290 +22,294 @@ add_custom_command(
DEPENDS
# find public src *.json *.ts -type f >/tmp/tmp.txt
public/vite.svg
public/serve.json
public/fonts/Roboto-BoldItalic.woff2
public/fonts/Roboto-MediumItalic.woff2
public/fonts/Roboto-Thin.woff2
public/fonts/Roboto-LightItalic.woff2
public/fonts/Roboto-Light.woff2
public/fonts/Roboto-BlackItalic.woff2
public/fonts/Roboto-ThinItalic.woff2
public/fonts/LICENSE.txt
public/fonts/Roboto-Regular.woff2
public/fonts/Roboto-Medium.woff2
public/fonts/Roboto-Black.woff2
public/fonts/Roboto-Bold.woff2
public/fonts/Roboto-Italic.woff2
public/robots.txt
public/css/roboto.css
public/iso_codes.json
public/serve.json
public/var/current_pedalboard.json
public/var/config.json
public/var/uiplugins.json
public/var/plugin_classes.json
public/logo512.png
public/img/fx_delay.svg
public/img/fx_error.svg
public/img/fx_parametric_eq.svg
public/img/fx_simulator.svg
public/img/fx_lr.svg
public/img/fx_plugin.svg
public/img/fx_flanger2.svg
public/img/fx_phaser.svg
public/img/ic_bank.svg
public/img/ic_drawer.svg
public/img/Pi-Logo-3.png
public/img/fx_constant.svg
public/img/ic_drawer_2.png
public/img/Pi-Logo-3.svg
public/img/fx_split_a.svg
public/img/fx_chorus.svg
public/img/fx_split_b.svg
public/img/fx_terminal.svg
public/img/fx_spectral.svg
public/img/settings_black_24dp.svg
public/img/fx_analyzer.svg
public/img/fx_oscillator.svg
public/img/fx_generator.svg
public/img/edit_banks.svg
public/img/delete_outline_black_24dp.svg
public/img/old_delete_outline_white_24dp.svg
public/img/fx_converter.svg
public/img/settings_white_24dp.svg
public/img/ic_drawer_2.svg
public/img/vst.png
public/img/edit_banks_white.svg
public/img/fx_pitch.svg
public/img/fx_spatial.svg
public/img/old_delete_outline_black_24dp.svg
public/img/fx_limiter.svg
public/img/vst.svg
public/img/ic_navigate_before.svg
public/img/cc-by.png
public/img/fx_gate.svg
public/img/ic_presets.svg
public/img/fx_modulator.svg
public/img/fx_filter_hp.svg
public/img/VST_Logo_Steinberg.png
public/img/fx_dial.svg
public/img/VST_Logo_Steinberg.ico
public/img/cx_mono.svg
public/img/ic_navigate_next.svg
public/img/fx_instrument.svg
public/img/fx_flanger.svg
public/img/fx_empty.svg
public/img/fx_mixer.svg
public/img/cx_stereo.svg
public/img/ic_logo.svg
public/img/fx_compressor.svg
public/img/fx_amplifier.svg
public/img/fx_filter.svg
public/img/fx_eq.svg
public/img/fx_utility.svg
public/img/fx_function.svg
public/img/fx_reverb.svg
public/img/fx_distortion.svg
public/img/ic_presets_white.svg
public/manifest.json
public/logo192.png
public/sample_lv2_plugins.json
public/fonts/Roboto-Thin.woff2
public/fonts/LICENSE.txt
public/fonts/Roboto-Italic.woff2
public/fonts/Roboto-BoldItalic.woff2
public/fonts/Roboto-Black.woff2
public/fonts/Roboto-ThinItalic.woff2
public/fonts/Roboto-BlackItalic.woff2
public/fonts/Roboto-MediumItalic.woff2
public/fonts/Roboto-Medium.woff2
public/fonts/Roboto-LightItalic.woff2
public/fonts/Roboto-Regular.woff2
public/fonts/Roboto-Bold.woff2
public/fonts/Roboto-Light.woff2
public/img/fx_dial.svg
public/img/fx_spatial.svg
public/img/ic_logo.svg
public/img/ic_navigate_next.svg
public/img/fx_simulator.svg
public/img/VST_Logo_Steinberg.png
public/img/fx_lr.svg
public/img/fx_pitch.svg
public/img/vst.svg
public/img/ic_bank.svg
public/img/fx_utility.svg
public/img/fx_compressor.svg
public/img/fx_phaser.svg
public/img/fx_delay.svg
public/img/ic_drawer.svg
public/img/fx_limiter.svg
public/img/fx_mixer.svg
public/img/fx_amplifier.svg
public/img/edit_banks.svg
public/img/old_delete_outline_black_24dp.svg
public/img/fx_eq.svg
public/img/edit_banks_white.svg
public/img/Pi-Logo-3.svg
public/img/fx_split_a.svg
public/img/fx_spectral.svg
public/img/settings_white_24dp.svg
public/img/fx_converter.svg
public/img/ic_presets.svg
public/img/fx_flanger2.svg
public/img/fx_generator.svg
public/img/Pi-Logo-3.png
public/img/fx_oscillator.svg
public/img/ic_drawer_2.svg
public/img/ic_presets_white.svg
public/img/fx_chorus.svg
public/img/settings_black_24dp.svg
public/img/fx_analyzer.svg
public/img/old_delete_outline_white_24dp.svg
public/img/fx_reverb.svg
public/img/fx_instrument.svg
public/img/ic_drawer_2.png
public/img/cx_mono.svg
public/img/fx_split_b.svg
public/img/fx_filter_hp.svg
public/img/fx_parametric_eq.svg
public/img/fx_filter.svg
public/img/fx_error.svg
public/img/cx_stereo.svg
public/img/fx_modulator.svg
public/img/delete_outline_black_24dp.svg
public/img/fx_gate.svg
public/img/vst.png
public/img/fx_function.svg
public/img/VST_Logo_Steinberg.ico
public/img/fx_terminal.svg
public/img/fx_plugin.svg
public/img/fx_distortion.svg
public/img/fx_constant.svg
public/img/cc-by.png
public/img/fx_empty.svg
public/img/ic_navigate_before.svg
public/img/fx_flanger.svg
public/var/plugin_classes.json
public/var/uiplugins.json
public/var/current_pedalboard.json
public/var/config.json
public/favicon.ico
public/index.html
src/main.tsx
src/index.css
src/assets/react.svg
src/vite-env.d.ts
src/App.tsx
src/pipedal/MainPage.tsx
src/pipedal/ColorDropdownButton.tsx
src/pipedal/AppThemed.tsx
src/pipedal/ModFileTypes.tsx
src/pipedal/ChannelBindingsHelpDialog.tsx
public/iso_codes.json
public/logo512.png
public/sample_lv2_plugins.json
public/vite.svg
src/pipedal/SplitUiControls.tsx
src/pipedal/RadioSelectDialog.tsx
src/pipedal/Pedal.tsx
src/pipedal/WindowScale.tsx
src/pipedal/MidiChannelBindingDialog.tsx
src/pipedal/BankDialog.tsx
src/pipedal/IControlViewFactory.tsx
src/pipedal/Pedalboard.tsx
src/pipedal/Lv2Plugin.tsx
src/pipedal/WifiConfigDialog.tsx
src/pipedal/GxTunerControl.tsx
src/pipedal/ControlTooltip.tsx
src/pipedal/StringBuilder.tsx
src/pipedal/UploadFileDialog.tsx
src/pipedal/FilePropertyDirectorySelectDialog.tsx
src/pipedal/ObservableProperty.tsx
src/pipedal/OldDeleteIcon.tsx
src/pipedal/OkCancelDialog.tsx
src/pipedal/PluginControl.tsx
src/pipedal/WifiDirectConfigSettings.tsx
src/pipedal/FullScreenIME.tsx
src/pipedal/WifiConfigSettings.tsx
src/pipedal/JackServerSettingsDialog.tsx
src/pipedal/Utility.tsx
src/pipedal/SelectChannelsDialog.tsx
src/pipedal/AlsaDeviceInfo.tsx
src/pipedal/LoadPluginDialog.tsx
src/pipedal/PiPedalModel.tsx
src/pipedal/SelectThemeDialog.tsx
src/pipedal/ResizeResponsiveComponent.tsx
src/pipedal/FilePropertyControl.tsx
src/pipedal/NumericInput.tsx
src/pipedal/MidiBinding.tsx
src/pipedal/GovernorSettings.tsx
src/pipedal/SnapshotPanel.tsx
src/pipedal/PedalboardView.tsx
src/pipedal/ToobSpectrumAnalyzerView.tsx
src/pipedal/ToobMLView.tsx
src/pipedal/MaterialColors.tsx
src/pipedal/ZoomedUiControl.tsx
src/pipedal/TemporaryDrawer.tsx
src/pipedal/WifiChannel.tsx
src/pipedal/MidiChannelBinding.tsx
src/pipedal/SystemMidiBindingView.tsx
src/pipedal/SelectMidiChannelsDialog.tsx
src/pipedal/Banks.tsx
src/pipedal/SelectHoverBackground.tsx
src/pipedal/ToobWaveShapeView.tsx
src/pipedal/PluginPresetSelector.tsx
src/pipedal/PluginOutputControl.tsx
src/pipedal/Rect.tsx
src/pipedal/JackStatusView.tsx
src/pipedal/JackHostStatus.tsx
src/pipedal/PluginClass.tsx
src/pipedal/VuMeter.tsx
src/pipedal/svg/fx_delay.svg
src/pipedal/svg/fx_error.svg
src/pipedal/svg/old_delete_outline_24dp.svg
src/pipedal/svg/drive_file_rename_outline_black_24dp.svg
src/pipedal/svg/fx_parametric_eq.svg
src/pipedal/svg/fx_simulator.svg
src/pipedal/svg/fx_lr.svg
src/pipedal/svg/fx_plugin.svg
src/pipedal/svg/fx_flanger2.svg
src/pipedal/svg/fx_phaser.svg
src/pipedal/svg/ic_bank.svg
src/pipedal/svg/fx_constant.svg
src/pipedal/svg/snapshot_3.svg
src/pipedal/svg/snapshot_0.svg
src/pipedal/svg/fx_split_a.svg
src/pipedal/svg/fx_chorus.svg
src/pipedal/svg/fx_split_b.svg
src/pipedal/svg/fx_terminal.svg
src/pipedal/svg/ic_save_bank_as.svg
src/pipedal/svg/fx_spectral.svg
src/pipedal/svg/ic_settings.svg
src/pipedal/svg/ic_pluginpreset2.svg
src/pipedal/svg/fx_analyzer.svg
src/pipedal/svg/fx_oscillator.svg
src/pipedal/svg/fx_generator.svg
src/pipedal/svg/snapshot_2.svg
src/pipedal/svg/fx_converter.svg
src/pipedal/svg/ic_midi.svg
src/pipedal/svg/fx_pitch.svg
src/pipedal/svg/fx_spatial.svg
src/pipedal/svg/fx_limiter.svg
src/pipedal/svg/fx_gate.svg
src/pipedal/svg/ic_presets.svg
src/pipedal/svg/snapshot_5.svg
src/pipedal/svg/fx_modulator.svg
src/pipedal/svg/snapshot_6.svg
src/pipedal/svg/fx_filter_hp.svg
src/pipedal/svg/fx_dial.svg
src/pipedal/svg/ic_pluginpreset.svg
src/pipedal/svg/fx_instrument.svg
src/pipedal/svg/fx_flanger.svg
src/pipedal/svg/file_download_black_24dp.svg
src/pipedal/svg/snapshot_1.svg
src/pipedal/svg/fx_empty.svg
src/pipedal/svg/fx_mixer.svg
src/pipedal/svg/ic_edit_banks.svg
src/pipedal/svg/file_upload_black_24dp.svg
src/pipedal/svg/fx_compressor.svg
src/pipedal/svg/fx_amplifier.svg
src/pipedal/svg/fx_filter.svg
src/pipedal/svg/fx_eq.svg
src/pipedal/svg/fx_utility.svg
src/pipedal/svg/fx_function.svg
src/pipedal/svg/snapshot_4.svg
src/pipedal/svg/fx_reverb.svg
src/pipedal/svg/fx_distortion.svg
src/pipedal/svg/ic_help_outline.svg
src/pipedal/AppThemed.css
src/pipedal/AboutDialog.tsx
src/pipedal/SettingsDialog.tsx
src/pipedal/PluginControlView.tsx
src/pipedal/VirtualKeyboardHandler.tsx
src/pipedal/react-app-env.d.ts
src/pipedal/DialogEx.tsx
src/pipedal/ToobInputStageView.tsx
src/pipedal/UpdateDialog.tsx
src/pipedal/UploadPresetDialog.tsx
src/pipedal/SnapshotButton.tsx
src/pipedal/GxTunerView.tsx
src/pipedal/SnapshotColors.tsx
src/pipedal/MidiChannelBindingControl.tsx
src/pipedal/DarkMode.tsx
src/pipedal/PluginInfoDialog.tsx
src/pipedal/ToobCabSimView.tsx
src/pipedal/Jack.tsx
src/pipedal/SnapshotEditor.tsx
src/pipedal/ControlViewFactory.tsx
src/pipedal/MidiBindingsDialog.tsx
src/pipedal/SplitControlView.tsx
src/pipedal/JackStatusView.tsx
src/pipedal/Pedal.tsx
src/pipedal/PiPedalError.tsx
src/pipedal/XxxSnippet.tsx
src/pipedal/SearchControl.tsx
src/pipedal/PluginPreset.tsx
src/pipedal/AlsaMidiDeviceInfo.tsx
src/pipedal/PiPedalSocket.tsx
src/pipedal/NoChangePassword.tsx
src/pipedal/App.tsx
src/pipedal/ObservableEvent.tsx
src/pipedal/JackServerSettings.tsx
src/pipedal/SnapshotPropertiesDialog.tsx
src/pipedal/TextFieldEx.tsx
src/pipedal/FilePropertyDialog.tsx
src/pipedal/PresetDialog.tsx
src/pipedal/SearchFilter.tsx
src/pipedal/Units.tsx
src/pipedal/AndroidHost.tsx
src/pipedal/ToobPowerStage2View.tsx
src/pipedal/Rectangle.tsx
src/pipedal/PluginPresetsDialog.tsx
src/pipedal/FilePropertyDirectoryTree.tsx
src/pipedal/RenameDialog.tsx
src/pipedal/FilePropertyControl.tsx
src/pipedal/PerformanceView.tsx
src/pipedal/ToobFrequencyResponseView.tsx
src/pipedal/MidiBindingView.tsx
src/pipedal/SnapshotDialog.tsx
src/pipedal/PluginIcon.tsx
src/pipedal/JsonAtom.tsx
src/pipedal/ToobToneStackView.tsx
src/pipedal/logo.svg
src/pipedal/ToobSpectrumResponseView.tsx
src/pipedal/ZoomedDial.tsx
src/pipedal/Draggable.tsx
src/pipedal/DraggableGrid.tsx
src/pipedal/WifiDirectConfigDialog.tsx
src/pipedal/SvgPathBuilder.tsx
src/pipedal/ChannelBindingsHelpDialog.tsx
src/pipedal/TemporaryDrawer.tsx
src/pipedal/OkCancelDialog.tsx
src/pipedal/SystemMidiBindingView.tsx
src/pipedal/WifiConfigSettings.tsx
src/pipedal/react-app-env.d.ts
src/pipedal/UpdateDialog.tsx
src/pipedal/PresetSelector.tsx
src/pipedal/SystemMidiBindingsDialog.tsx
src/pipedal/OptionsDialog.tsx
src/pipedal/JackServerSettings.tsx
src/pipedal/SearchControl.tsx
src/pipedal/ObservableEvent.tsx
src/pipedal/WindowScale.tsx
src/pipedal/DialogStack.tsx
src/pipedal/ToobToneStackView.tsx
src/pipedal/TextFieldEx.tsx
src/pipedal/AppThemed.css
src/pipedal/PluginIcon.tsx
src/pipedal/svg/snapshot_4.svg
src/pipedal/svg/fx_dial.svg
src/pipedal/svg/fx_spatial.svg
src/pipedal/svg/snapshot_6.svg
src/pipedal/svg/fx_simulator.svg
src/pipedal/svg/ic_save_bank_as.svg
src/pipedal/svg/fx_lr.svg
src/pipedal/svg/fx_pitch.svg
src/pipedal/svg/snapshot_3.svg
src/pipedal/svg/ic_pluginpreset2.svg
src/pipedal/svg/ic_bank.svg
src/pipedal/svg/fx_utility.svg
src/pipedal/svg/fx_compressor.svg
src/pipedal/svg/fx_phaser.svg
src/pipedal/svg/fx_delay.svg
src/pipedal/svg/ic_edit_banks.svg
src/pipedal/svg/fx_limiter.svg
src/pipedal/svg/ic_settings.svg
src/pipedal/svg/fx_mixer.svg
src/pipedal/svg/fx_amplifier.svg
src/pipedal/svg/ic_help_outline.svg
src/pipedal/svg/fx_eq.svg
src/pipedal/svg/fx_split_a.svg
src/pipedal/svg/fx_spectral.svg
src/pipedal/svg/fx_converter.svg
src/pipedal/svg/ic_presets.svg
src/pipedal/svg/fx_flanger2.svg
src/pipedal/svg/fx_generator.svg
src/pipedal/svg/old_delete_outline_24dp.svg
src/pipedal/svg/file_download_black_24dp.svg
src/pipedal/svg/fx_oscillator.svg
src/pipedal/svg/snapshot_1.svg
src/pipedal/svg/fx_chorus.svg
src/pipedal/svg/fx_analyzer.svg
src/pipedal/svg/fx_reverb.svg
src/pipedal/svg/fx_instrument.svg
src/pipedal/svg/drive_file_rename_outline_black_24dp.svg
src/pipedal/svg/fx_split_b.svg
src/pipedal/svg/snapshot_5.svg
src/pipedal/svg/fx_filter_hp.svg
src/pipedal/svg/fx_parametric_eq.svg
src/pipedal/svg/fx_filter.svg
src/pipedal/svg/fx_error.svg
src/pipedal/svg/fx_modulator.svg
src/pipedal/svg/ic_midi.svg
src/pipedal/svg/fx_gate.svg
src/pipedal/svg/ic_pluginpreset.svg
src/pipedal/svg/fx_function.svg
src/pipedal/svg/snapshot_2.svg
src/pipedal/svg/file_upload_black_24dp.svg
src/pipedal/svg/fx_terminal.svg
src/pipedal/svg/fx_plugin.svg
src/pipedal/svg/fx_distortion.svg
src/pipedal/svg/fx_constant.svg
src/pipedal/svg/snapshot_0.svg
src/pipedal/svg/fx_empty.svg
src/pipedal/svg/fx_flanger.svg
src/pipedal/AboutDialog.tsx
src/pipedal/NumericInput.tsx
src/pipedal/SelectHoverBackground.tsx
src/pipedal/MidiBindingView.tsx
src/pipedal/GxTunerView.tsx
src/pipedal/SnapshotDialog.tsx
src/pipedal/AndroidHost.tsx
src/pipedal/SplitControlView.tsx
src/pipedal/ToobFrequencyResponseView.tsx
src/pipedal/ObservableProperty.tsx
src/pipedal/UploadPresetDialog.tsx
src/pipedal/Utility.tsx
src/pipedal/ToobSpectrumResponseView.tsx
src/pipedal/ToobMLView.tsx
src/pipedal/Banks.tsx
src/pipedal/Units.tsx
src/pipedal/StringBuilder.tsx
src/pipedal/ToobCabSimView.tsx
src/pipedal/ToobSpectrumAnalyzerView.tsx
src/pipedal/ControlTooltip.tsx
src/pipedal/AlsaMidiDeviceInfo.tsx
src/pipedal/ToobInputStageView.tsx
src/pipedal/MidiChannelBindingControl.tsx
src/pipedal/MidiChannelBindingDialog.tsx
src/pipedal/ToobWaveShapeView.tsx
src/pipedal/PiPedalSocket.tsx
src/pipedal/SnapshotColors.tsx
src/pipedal/SnapshotButton.tsx
src/pipedal/ResizeResponsiveComponent.tsx
src/pipedal/SnapshotPropertiesDialog.tsx
src/pipedal/PluginInfoDialog.tsx
src/pipedal/DarkMode.tsx
src/pipedal/Updater.tsx
src/pipedal/Rect.tsx
src/pipedal/PedalboardView.tsx
src/pipedal/JackServerSettingsDialog.tsx
src/pipedal/PluginOutputControl.tsx
src/pipedal/PresetDialog.tsx
src/pipedal/MidiBinding.tsx
src/pipedal/FilePropertyDirectoryTree.tsx
src/pipedal/SnapshotPanel.tsx
src/pipedal/PiPedalModel.tsx
src/pipedal/RadioSelectDialog.tsx
src/pipedal/WifiChannel.tsx
src/pipedal/App.tsx
src/pipedal/IControlViewFactory.tsx
src/pipedal/WifiDirectConfigSettings.tsx
src/pipedal/ZoomedUiControl.tsx
src/pipedal/MidiBindingsDialog.tsx
src/pipedal/JsonAtom.tsx
src/pipedal/DialogEx.tsx
src/pipedal/FullScreenIME.tsx
src/pipedal/FilePropertyDialog.tsx
src/pipedal/RenameDialog.tsx
src/pipedal/ControlViewFactory.tsx
src/pipedal/MaterialColors.tsx
src/pipedal/PluginPresetsDialog.tsx
src/pipedal/PluginControl.tsx
src/pipedal/PluginControlView.tsx
src/pipedal/ToobPowerStage2View.tsx
src/pipedal/NoChangePassword.tsx
src/pipedal/logo.svg
src/pipedal/WithStyles.tsx
src/pipedal/AlsaDeviceInfo.tsx
src/pipedal/Lv2Plugin.tsx
src/pipedal/SvgPathBuilder.tsx
src/pipedal/SnapshotEditor.tsx
src/pipedal/ColorDropdownButton.tsx
src/pipedal/ZoomedDial.tsx
src/pipedal/VuMeter.tsx
src/pipedal/SystemMidiBindingsDialog.tsx
src/pipedal/GxTunerControl.tsx
src/pipedal/BankDialog.tsx
src/pipedal/FilePropertyDirectorySelectDialog.tsx
src/pipedal/GovernorSettings.tsx
src/pipedal/XxxSnippet.tsx
src/pipedal/PluginPresetSelector.tsx
src/pipedal/OldDeleteIcon.tsx
src/pipedal/SelectMidiChannelsDialog.tsx
src/pipedal/SearchFilter.tsx
src/pipedal/Jack.tsx
src/pipedal/LoadPluginDialog.tsx
src/pipedal/Pedalboard.tsx
src/pipedal/Draggable.tsx
src/pipedal/SelectChannelsDialog.tsx
src/pipedal/PluginClass.tsx
src/pipedal/DraggableGrid.tsx
src/pipedal/WifiConfigDialog.tsx
src/pipedal/SelectThemeDialog.tsx
src/pipedal/WifiDirectConfigDialog.tsx
src/pipedal/UploadFileDialog.tsx
src/pipedal/MainPage.tsx
src/pipedal/Rectangle.tsx
src/pipedal/PluginPreset.tsx
src/pipedal/SettingsDialog.tsx
src/pipedal/AppThemed.tsx
src/pipedal/OptionsDialog.tsx
src/pipedal/MidiChannelBinding.tsx
src/pipedal/ModFileTypes.tsx
src/assets/react.svg
src/App.css
src/App.tsx
src/vite-env.d.ts
src/index.css
src/main.tsx
package.json
package-lock.json
tsconfig.app.json
tsconfig.json
tsconfig.node.json
vite.config.ts
)
message(STATUS "VITE TARGET: ${BUILD_DIRECTORY}/index.html")
add_custom_target (
ReactBuild ALL
DEPENDS ${BUILD_DIRECTORY}/index.html
Executable
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
npm run build && \
#remove any existing .gz files.
if ls dist/assets/index*.js.gz 1> /dev/null 2>&1; then
rm dist/assets/index*.js.gz
fi
# generate a .gz file for each index*.js file
if ls dist/assets/index*.js 1> /dev/null 2>&1; then
for file in dist/assets/index*.js; do
# generate a .gz file
gzip -c $file > $file.gz
done
fi
+1 -10
View File
@@ -77,16 +77,12 @@ export function pushDialogStack(dialog: IDialogStackable): void {
historyState: dialogStackState
});
console.log("pushDialogStack " + stackId + " #" + dialog.getTag());
window.history.pushState(
topState,
"",
"#" + dialog.getTag());
if (window.history.state.id != stackId)
{
console.log("pushDialogStack: nav deferred.");
}
if (!gWatchingHistory) {
gWatchingHistory = true;
window.addEventListener("popstate", handlePopState);
@@ -103,7 +99,6 @@ let handlePopState = (ev: PopStateEvent) => {
ev.stopPropagation();
console.log("handlePopState: " + evTag?.tag + " " + evTag?.id + " " + gPopFromBack);
let id = evTag.id;
let ix = dialogStack.length-1;
while (ix >= 0) {
@@ -151,9 +146,7 @@ let handlePopState = (ev: PopStateEvent) => {
{
if (window.history.state != null)
{
console.log("handlePopState: nav back");
window.setTimeout(() => { window.history.back(); }, 0);
console.log("handlePopState: id= "+ (window.history?.state?.id??"null"));
} else {
dialogStack.pop();
}
@@ -169,7 +162,6 @@ export function popDialogStack(dialog: IDialogStackable): void {
while (ix >= 0) {
let entry = dialogStack[ix];
if (entry.dialog === dialog) {
console.log("popDialogStack " + entry.historyState.id + " #" + dialog.getTag());
break;
}
ix--;
@@ -181,7 +173,6 @@ export function popDialogStack(dialog: IDialogStackable): void {
dialogStack[ix].dialog = null;
if (dialogStack.length != 0 && dialogStack[dialogStack.length - 1].dialog === null)
{
console.log("popDialogStack nav back: " + dialogStack[ix].historyState.id );
window.history.back();
}
}
+3 -2
View File
@@ -29,7 +29,8 @@ import ResizeResponsiveComponent from './ResizeResponsiveComponent';
import Typography from '@mui/material/Typography';
import { UiFileProperty,UiFileType } from './Lv2Plugin';
import SvgIcon from '@mui/material/SvgIcon';
import ErrorIcon from '@mui/icons-material/Error';
//import ErrorIcon from '@mui/icons-material/Error';
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
import IconButton from '@mui/material/IconButton';
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';
@@ -291,7 +292,7 @@ export default class UploadFileDialog extends ResizeResponsiveComponent<UploadFi
switch (status) {
case FileUploadStatus.Error:
return (<ErrorIcon color="error" style={style} />);
return (<ErrorOutlineIcon color="error" style={style} />);
case FileUploadStatus.Uploaded:
return (
<CheckCircleOutlineIcon color="success" style={style}/>);