diff --git a/CMakeLists.txt b/CMakeLists.txt
index a4b97ff..33f7aa9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.16.0)
project(pipedal
- VERSION 1.1.20
+ VERSION 1.1.21
DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi"
HOMEPAGE_URL "https://rerdavies.github.io/pipedal"
)
-set (DISPLAY_VERSION "v1.1.20")
+set (DISPLAY_VERSION "v1.1.21")
set (CMAKE_INSTALL_PREFIX "/usr/")
diff --git a/README.md b/README.md
index caee372..cf87873 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@

-Download: v1.1.20
+Download: v1.1.21
Website: [https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal).
diff --git a/debian/control b/debian/control
index 604fd2c..16b3439 100644
--- a/debian/control
+++ b/debian/control
@@ -9,6 +9,6 @@ Package: pipedal
Pre-Depends: hostapd;authbind;dnsmasq
Priority: optional
Section: sound
-Version: 1.1.20
+Version: 1.1.21
Installed-Size: 15147
diff --git a/docs/Installing.md b/docs/Installing.md
index d07c32a..4d9376f 100644
--- a/docs/Installing.md
+++ b/docs/Installing.md
@@ -13,14 +13,14 @@ page_icon: img/Install4.jpg
Download the most recent Debian (.deb) package for your platform:
-- [Ubuntu/Raspberry Pi OS (64-bit) v1.1.20](https://github.com/rerdavies/pipedal/releases/download/v1.1.20/pipedal_1.1.20_arm64.deb)
+- [Ubuntu/Raspberry Pi OS (64-bit) v1.1.21](https://github.com/rerdavies/pipedal/releases/download/v1.1.21/pipedal_1.1.21_arm64.deb)
Install the package by running
```
sudo apt update
cd ~/Downloads
- sudo apt-get install ./pipedal_1.1.20_arm64.deb
+ sudo apt-get install ./pipedal_1.1.21_arm64.deb
```
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.
diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md
index 324cb12..4f11608 100644
--- a/docs/ReleaseNotes.md
+++ b/docs/ReleaseNotes.md
@@ -1,6 +1,6 @@
# Release Notes
-## PiPedal 1.1.20
+## PiPedal 1.1.21
Features:
diff --git a/docs/download.md b/docs/download.md
index 9f46c4d..5ff8dea 100644
--- a/docs/download.md
+++ b/docs/download.md
@@ -4,14 +4,14 @@
Download the most recent Debian (.deb) package for your platform:
-- [Ubuntu or Raspberry Pi OS (64-bit)](https://github.com/rerdavies/pipedal/releases/download/v1.1.20/pipedal_1.1.20_arm64.deb) v1.1.20
+- [Ubuntu or Raspberry Pi OS (64-bit)](https://github.com/rerdavies/pipedal/releases/download/v1.1.21/pipedal_1.1.21_arm64.deb) v1.1.21
Install the package by running
```
sudo apt update
cd ~/Downloads
- sudo apt-get install ./pipedal_1.1.20_arm64.deb
+ sudo apt-get install ./pipedal_1.1.21_arm64.deb
```
Follow the instructions in [_Configuring PiPedal After Installation_](https://rerdavies.github.io/pipedal/Configuring.html) to complete the installation.
diff --git a/docs/index.md b/docs/index.md
index 74f4dd9..502f6f8 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,7 +1,7 @@
-v1.1.20
+v1.1.21
diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0 b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0
index de69364..0e249c4 120000
--- a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0
+++ b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0
@@ -1 +1 @@
-ToobAmp.so.1.0.8
\ No newline at end of file
+ToobAmp.so.1.0.9
\ No newline at end of file
diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.1.0.9 b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.1.0.9
new file mode 100644
index 0000000..b7d1ef3
Binary files /dev/null and b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.1.0.9 differ
diff --git a/react/src/AppThemed.tsx b/react/src/AppThemed.tsx
index d7fa9fc..144e8d1 100644
--- a/react/src/AppThemed.tsx
+++ b/react/src/AppThemed.tsx
@@ -318,6 +318,7 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
};
this.errorChangeHandler_ = this.setErrorMessage.bind(this);
+ this.unmountListener = this.unmountListener.bind(this);
this.stateChangeHandler_ = this.setDisplayState.bind(this);
this.presetChangedHandler = this.presetChangedHandler.bind(this);
this.alertMessageChangedHandler = this.alertMessageChangedHandler.bind(this);
@@ -427,12 +428,10 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
this.setState({
isDrawerOpen: false,
});
- if (this.model_.isAndroidHosted())
- {
+ if (this.model_.isAndroidHosted()) {
this.model_.showAndroidDonationActivity();
} else {
- if (window)
- {
+ if (window) {
window.open("https://github.com/sponsors/rerdavies", '_blank');
}
}
@@ -488,17 +487,18 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
setFullScreen(this.state.isFullScreen);
this.setState({ isFullScreen: !this.state.isFullScreen });
}
+
+ private unmountListener(e: Event) {
+ e.preventDefault();
+ if (this.model_.state.get() === State.Ready && !this.model_.isAndroidHosted()) {
+ (e as any).returnValue = "Are you sure you want to leave this page?";
+ return "Are you sure you want to leave this page?";
+ }
+ }
componentDidMount() {
super.componentDidMount();
-
- window.addEventListener("beforeunload", (e) => {
- e.preventDefault();
- if (this.model_.state.get() === State.Ready) {
- e.returnValue = "Are you sure you want to leave this page?";
- return "Are you sure you want to leave this page?";
- }
- });
+ window.addEventListener("beforeunload",this.unmountListener);
this.model_.errorMessage.addOnChangedHandler(this.errorChangeHandler_);
this.model_.state.addOnChangedHandler(this.stateChangeHandler_);
@@ -510,193 +510,168 @@ const AppThemed = withStyles(appStyles)(class extends ResizeResponsiveComponent<
}
- updateOverscroll(): void {
- if (this.model_.serverVersion) {
- // no pull-down refresh on android devices once we're ready (unless we're debug)
- let preventOverscroll =
- this.model_.state.get() === State.Ready
- && !this.model_.debug;
+updateOverscroll(): void {
+ if(this.model_.serverVersion) {
+ // no pull-down refresh on android devices once we're ready (unless we're debug)
+ let preventOverscroll =
+ this.model_.state.get() === State.Ready
+ && !this.model_.debug;
- let overscrollBehavior = preventOverscroll ? "none" : "auto";
- document.body.style.overscrollBehavior = overscrollBehavior;
- }
+ let overscrollBehavior = preventOverscroll ? "none" : "auto";
+ document.body.style.overscrollBehavior = overscrollBehavior;
+}
}
- componentDidUpdate() {
- }
+componentDidUpdate() {
+}
- componentWillUnmount() {
- super.componentWillUnmount();
- this.model_.errorMessage.removeOnChangedHandler(this.errorChangeHandler_);
- this.model_.state.removeOnChangedHandler(this.stateChangeHandler_);
- this.model_.pedalboard.removeOnChangedHandler(this.presetChangedHandler);
- this.model_.banks.removeOnChangedHandler(this.banksChangedHandler);
- this.model_.banks.removeOnChangedHandler(this.showStatusMonitorHandler);
+componentWillUnmount() {
+ super.componentWillUnmount();
+ window.removeEventListener("beforeunload",this.unmountListener);
- }
+ this.model_.errorMessage.removeOnChangedHandler(this.errorChangeHandler_);
+ this.model_.state.removeOnChangedHandler(this.stateChangeHandler_);
+ this.model_.pedalboard.removeOnChangedHandler(this.presetChangedHandler);
+ this.model_.banks.removeOnChangedHandler(this.banksChangedHandler);
+ this.model_.banks.removeOnChangedHandler(this.showStatusMonitorHandler);
- alertMessageChangedHandler() {
- let message = this.model_.alertMessage.get();
- if (message === "") {
- this.setState({ alertDialogOpen: false });
- // leave the message intact so the dialog can fade.
- } else {
- this.setState({
- alertDialogOpen: true,
- alertDialogMessage: message
- });
- }
-
- }
- updateResponsive() {
- // functional, but disabled.
- // let tinyToolBar_ = this.windowSize.height < 600;
- // this.setState({ tinyToolBar: tinyToolBar_ });
-
- let height = this.windowSize.height;
-
- const ENTRY_HEIGHT = 48;
- // ENTRY_HEIGHT*6 +K = 727 from observation.
- const K = 450;
-
- let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT);
- if (bankEntries < 1) bankEntries = 1;
- if (bankEntries > 7) bankEntries = 7;
- this.setState({ bankDisplayItems: bankEntries });
-
- }
- onWindowSizeChanged(width: number, height: number): void {
- super.onWindowSizeChanged(width, height);
- this.updateResponsive();
- }
-
-
- setErrorMessage(message: string): void {
- this.setState({ errorMessage: message });
- }
-
-
- setDisplayState(newState: State): void {
- this.updateOverscroll();
+}
+alertMessageChangedHandler() {
+ let message = this.model_.alertMessage.get();
+ if (message === "") {
+ this.setState({ alertDialogOpen: false });
+ // leave the message intact so the dialog can fade.
+ } else {
this.setState({
- displayState: newState,
- canFullScreen: supportsFullScreen() && !this.model_.isAndroidHosted()
+ alertDialogOpen: true,
+ alertDialogMessage: message
});
- if (newState === State.Ready)
- {
- if (this.model_.isOnboarding())
- {
- this.handleDisplayOnboarding();
- }
- }
}
- showDrawer() {
- this.setState({ isDrawerOpen: true })
- }
- hideDrawer() {
- this.setState({ isDrawerOpen: false })
- }
- shortBankList(banks: BankIndex): BankIndexEntry[] {
- let n = this.state.bankDisplayItems;
- let entries = banks.entries;
- if (entries.length < n + 1) { // +1 for the .... entry.
- return entries;
- }
- let result: BankIndexEntry[] = [];
- let selectedIndex = -1;
- for (let i = 0; i < entries.length; ++i) {
- if (entries[i].instanceId === banks.selectedBank) {
- selectedIndex = 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[selectedIndex]);
- } else {
- for (let i = 0; i < n; ++i) {
- result.push(entries[i]);
- }
- }
- return result;
- }
- handleReload() {
- if (this.model_.isAndroidHosted()) {
- this.model_.chooseNewDevice();
- } else {
- window.location.reload();
- }
- }
- render() {
+}
+updateResponsive() {
+ // functional, but disabled.
+ // let tinyToolBar_ = this.windowSize.height < 600;
+ // this.setState({ tinyToolBar: tinyToolBar_ });
- const { classes } = this.props;
+ let height = this.windowSize.height;
- let shortBankList = this.shortBankList(this.state.banks);
- let showBankSelectDialog = shortBankList.length !== this.state.banks.entries.length;
+ const ENTRY_HEIGHT = 48;
+ // ENTRY_HEIGHT*6 +K = 727 from observation.
+ const K = 450;
+
+ let bankEntries = Math.floor((height - K) / ENTRY_HEIGHT);
+ if (bankEntries < 1) bankEntries = 1;
+ if (bankEntries > 7) bankEntries = 7;
+ this.setState({ bankDisplayItems: bankEntries });
+
+}
+onWindowSizeChanged(width: number, height: number): void {
+ super.onWindowSizeChanged(width, height);
+ this.updateResponsive();
+}
- return (
-
- Error: {this.state.errorMessage} -
-+ Error: {this.state.errorMessage} +
+