diff --git a/src/features/device/Device.jsx b/src/features/device/Device.jsx
index e2573643f..234e621b0 100644
--- a/src/features/device/Device.jsx
+++ b/src/features/device/Device.jsx
@@ -21,6 +21,8 @@ import {
selectRebooting,
} from "./deviceSlice";
+import { selectUpdate } from "../packages/packagesSlice";
+
export default function Device({
adbDetection,
error,
@@ -33,6 +35,7 @@ export default function Device({
const isRebooting = useSelector(selectRebooting);
const adbConnectionFailed = useSelector(selectAdbDetectionFailed);
+ const update = useSelector(selectUpdate);
let content = (
}
-
-
- {adbDetection &&
+ {(update.waitingOnPostUpdateReboot || update.postUpdateRebootDone) &&
- {tc("adbCheck")}
-
- }
-
- {!error && window.navigator.usb && !adbDetection && !adbConnectionFailed &&
-
-
- {t("warningConnection")}
+ {tc("rebooting")}
}
- { error &&
-
-
- {t("errorConnection")}
-
- }
-
- { isLinux() &&
- }
-
- {!adbDetection && !adbConnectionFailed &&
- }
+ {(!update.waitingOnPostUpdateReboot && !update.postUpdateRebootDone) &&
+ <>
+
+
+ {adbDetection &&
+
+
+ {tc("adbCheck")}
+
+ }
+
+ {!error && window.navigator.usb && !adbDetection && !adbConnectionFailed &&
+
+
+ {t("warningConnection")}
+
+ }
+
+ { error &&
+
+
+ {t("errorConnection")}
+
+ }
+
+ { isLinux() && !update.waitingOnPostUpdateReboot &&
+ }
+
+ {!adbDetection && !adbConnectionFailed &&
+ }
+ >}
);
diff --git a/src/features/packages/packagesSlice.js b/src/features/packages/packagesSlice.js
index e95db6f40..a56788979 100644
--- a/src/features/packages/packagesSlice.js
+++ b/src/features/packages/packagesSlice.js
@@ -28,6 +28,8 @@ const initialState = {
update: {
ran: false,
success: false,
+ waitingOnPostUpdateReboot: false,
+ postUpdateRebootDone: false,
},
};
@@ -133,6 +135,8 @@ export const upgrade = createAsyncThunk(
let errorMessage = ["Unknown error while upgrading packages..."];
try {
await adb.upgradePackages(callback);
+ await adb.reboot();
+
return;
} catch(e) {
if(e.stdout) {
@@ -243,7 +247,17 @@ export const packagesSlice = createSlice({
state.error = initialState.error;
state.errors = initialState.errors;
},
- reset: () => initialState,
+ setPostUpdateRebootDone: (state, event) => {
+ state.update.waitingOnPostUpdateReboot = false;
+ state.update.postUpdateRebootDone = true;
+ },
+ reset: (state, event) => {
+ state = {
+ ...initialState,
+ update: state.update,
+ };
+ },
+ fullReset: () => initialState,
},
extraReducers: (builder) => {
builder
@@ -323,6 +337,8 @@ export const packagesSlice = createSlice({
state.processing = true;
state.fetchedUpgradable = false;
state.update.ran = false;
+ state.update.waitingOnPostUpdateReboot = false;
+ state.update.postUpdateRebootDone = false;
})
.addCase(upgrade.rejected, (state, action) => {
state.error = action.payload;
@@ -337,6 +353,7 @@ export const packagesSlice = createSlice({
state.processing = false;
state.update.ran = true;
state.update.success = true;
+ state.update.waitingOnPostUpdateReboot = true;
})
.addCase(installWTFOS.pending, (state, action) => {
state.processing = true;
@@ -355,11 +372,13 @@ export const packagesSlice = createSlice({
export const {
clearError,
+ fullReset,
installedFilter,
processing,
repo,
reset,
search,
+ setPostUpdateRebootDone,
systemFilter,
} = packagesSlice.actions;
diff --git a/src/features/router/Adb.jsx b/src/features/router/Adb.jsx
index f2dc935f4..9b8124ea6 100644
--- a/src/features/router/Adb.jsx
+++ b/src/features/router/Adb.jsx
@@ -45,6 +45,11 @@ import {
selectAdbDetectionFailed,
} from "../device/deviceSlice";
+import {
+ selectUpdate,
+ setPostUpdateRebootDone,
+} from "../packages/packagesSlice";
+
import {
selectChecked as selectCheckedMaster,
selectIsMaster,
@@ -60,6 +65,7 @@ export default function AdbRouter() {
const isMaster = useSelector(selectIsMaster);
const checkedMasterState = useSelector(selectCheckedMaster);
const adbDetectionFailed = useSelector(selectAdbDetectionFailed);
+ const update = useSelector(selectUpdate);
const [startupCheck, setStartupCheck] = useState(false);
const [adb, setAdb] = useState(null);
@@ -162,6 +168,10 @@ export default function AdbRouter() {
setAdbDetection(false);
dispatch(setAdbDetectionFailed(false));
+ if(update.waitingOnPostUpdateReboot) {
+ dispatch(setPostUpdateRebootDone());
+ }
+
return;
}
@@ -179,7 +189,7 @@ export default function AdbRouter() {
setAdbDetection(false);
dispatch(setAdbDetectionFailed(true));
navigate("/root");
- }, [adbDetection, adbDetectionFailed, connectToDevice, dispatch, navigate, setAdbDetection]);
+ }, [adbDetection, adbDetectionFailed, connectToDevice, dispatch, navigate, setAdbDetection, update.waitingOnPostUpdateReboot]);
/**
* Auto connect to ADB device if all criteria are matched.
diff --git a/src/features/setup/Update.jsx b/src/features/setup/Update.jsx
index 2573b47cb..d6019a7cc 100644
--- a/src/features/setup/Update.jsx
+++ b/src/features/setup/Update.jsx
@@ -81,7 +81,7 @@ export default function Update({ adb }) {
- {update.ran && update.success &&
+ {update.ran && update.success && update.postUpdateRebootDone &&
{t("updateSuccess")}
}
diff --git a/src/utils/AdbWrapper.js b/src/utils/AdbWrapper.js
index f36bc9e6a..3dae0e5e6 100644
--- a/src/utils/AdbWrapper.js
+++ b/src/utils/AdbWrapper.js
@@ -211,6 +211,10 @@ export default class AdbWrapper {
return upgradable;
}
+ async reboot() {
+ await this.executeCommand("reboot");
+ }
+
async upgradePackages(callback) {
const output = await this.opkgQueue.add([
"upgrade",