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",