feat: make various improvements to blend-settings

This commit is contained in:
Rudra Saraswat 2023-05-14 19:04:56 +05:30
parent 2e0016f941
commit fd8d0cb9a8
4 changed files with 7 additions and 182 deletions

View file

@ -18,7 +18,7 @@
Containers</button> Containers</button>
<button class="btn btn-outline-light shadow-none d-none" id="android-button" onclick="page('android')">Android <button class="btn btn-outline-light shadow-none d-none" id="android-button" onclick="page('android')">Android
Apps</button> Apps</button>
<!-- <button class="btn btn-outline-light shadow-none" id="system-button" onclick="page('system')">System</button> --> <button class="btn btn-outline-light shadow-none" id="system-button" onclick="page('system')">System</button>
</div> </div>
</div> </div>

View file

@ -1,96 +1,3 @@
function rollback() {
let rollback_worker = new Worker(
`data:text/javascript,
let s = require('child_process').spawnSync('pkexec', ['blend-system', 'rollback']).status
if (s === 0) {
postMessage('success')
} else {
postMessage('failure')
}
`
)
rollback_worker.onmessage = e => {
if (e.data == 'success') {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="undo_rollback()" id="rollback-btn">Cancel rollback</button>'
} else {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" id="rollback-btn" disabled>Failed</button>'
setTimeout(() => document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="rollback()" id="rollback-btn">Rollback</button>', 2000)
}
}
}
function undo_rollback() {
let undo_rollback_worker = new Worker(
`data:text/javascript,
let s = require('child_process').spawnSync('pkexec', ['rm', '-f', '/blend/states/.load_prev_state']).status
if (s === 0) {
postMessage('success')
} else {
postMessage('failure')
}
`
)
undo_rollback_worker.onmessage = e => {
if (e.data == 'success') {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="rollback()" id="rollback-btn">Rollback</button>'
} else {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" id="rollback-btn" disabled>Failed</button>'
setTimeout(() => document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="undo_rollback()" id="rollback-btn">Cancel rollback</button>', 2000)
}
}
}
function save_state() {
$("#settings-tabs").find("*").prop('disabled', true)
let save_state_worker = new Worker(
`data:text/javascript,
let s = require('child_process').spawnSync('pkexec', ['blend-system', 'save-state']).status
if (s === 0) {
postMessage('success')
} else {
postMessage('failure')
}
`
)
save_state_worker.onmessage = e => {
if (e.data == 'success') {
document.getElementById('save-state-btn').outerHTML =
'<button type="button" class="btn btn-success" id="save-state-btn" disabled>Saved state</button>'
$("#settings-tabs").find("*").prop('disabled', false)
setTimeout(() => document.getElementById('save-state-btn').outerHTML =
'<button type="button" id="save-state-btn" onclick="save_state()" class="btn btn-success">Save state</button>', 2000)
} else {
document.getElementById('save-state-btn').outerHTML =
'<button type="button" class="btn btn-success" id="save-state-btn" disabled>Failed</button>'
$("#settings-tabs").find("*").prop('disabled', false)
setTimeout(() => document.getElementById('save-state-btn').outerHTML =
'<button type="button" id="save-state-btn" onclick="save_state()" class="btn btn-success">Save state</button>', 2000)
}
}
}
function check_rollback() {
if (require('fs').existsSync('/blend/states/.load_prev_state')) {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="undo_rollback()" id="rollback-btn">Cancel rollback</button>'
} else {
document.getElementById('rollback-btn').outerHTML =
'<button type="button" class="btn btn-danger" onclick="rollback()" id="rollback-btn">Rollback</button>'
}
}
function check_state_creation() {
if (require('fs').existsSync('/blend/states/.disable_states')) {
document.getElementById('automatic-state-toggle').setAttribute('checked', '')
}
}
function check_app_grouping() { function check_app_grouping() {
if (require('fs').existsSync(`${require('os').homedir()}/.config/categorize_apps_gnome_disable`)) { if (require('fs').existsSync(`${require('os').homedir()}/.config/categorize_apps_gnome_disable`)) {
@ -99,48 +6,6 @@ function check_app_grouping() {
} }
check_app_grouping() check_app_grouping()
check_state_creation()
check_rollback()
$('#automatic-state-toggle').on('change', () => {
if (!document.getElementById('automatic-state-toggle').checked) {
let enable_autostate_worker = new Worker(
`data:text/javascript,
let s = require('child_process').spawnSync('pkexec', ['rm', '-f', '/blend/states/.disable_states']).status
if (s === 0) {
postMessage('success')
} else {
postMessage('failure')
}
`
)
enable_autostate_worker.onmessage = e => {
if (e.data == 'success') {
document.getElementById('automatic-state-toggle').checked = false
} else {
document.getElementById('automatic-state-toggle').checked = true
}
}
} else {
let disable_autostate_worker = new Worker(
`data:text/javascript,
let s = require('child_process').spawnSync('pkexec', ['blend-system', 'toggle-states']).status
if (s === 0) {
postMessage('success')
} else {
postMessage('failure')
}
`
)
disable_autostate_worker.onmessage = e => {
if (e.data == 'success') {
document.getElementById('automatic-state-toggle').checked = true
} else {
document.getElementById('automatic-state-toggle').checked = false
}
}
}
});
$('#app-grouping-toggle').on('change', () => { $('#app-grouping-toggle').on('change', () => {
if (!document.getElementById('app-grouping-toggle').checked) { if (!document.getElementById('app-grouping-toggle').checked) {

View file

@ -1,50 +1,8 @@
<div class="container-fluid d-flex justify-content-center"> <div class="container-fluid d-flex justify-content-center">
<div class="col-12 col-lg-10 col-xl-8 mx-auto"> <div class="col-12 col-lg-10 col-xl-8 mx-auto">
<strong class="mb-0">System Settings</strong> <strong class="mb-0">System Settings</strong>
<br><br> <div style="height: 0.75rem;"></div>
<div class="list-group mb-5 shadow"> <div class="list-group mb-3 shadow">
<div class="list-group-item">
<div class="row align-items-center">
<div class="col">
<strong class="mb-0">Disable automatic state creation</strong>
<p class="text-muted mb-0">blendOS creates copies of apps and config every 12 hours (and keeps the
previous one).</p>
</div>
<div class="col-auto">
<div class="form-check form-switch align-middle">
<input class="form-check-input align-middle" type="checkbox" role="switch" id="automatic-state-toggle">
</div>
</div>
</div>
</div>
<div class="list-group-item">
<div class="row align-items-center">
<div class="col">
<strong class="mb-0">Save current state</strong>
<p class="text-muted mb-0">Create a copy of the current system state, including apps and config.</p>
</div>
<div class="col-auto">
<div class="form-check form-switch align-middle">
<button type="button" id="save-state-btn" onclick="save_state()" class="btn btn-success">Save
state</button>
</div>
</div>
</div>
</div>
<div class="list-group-item">
<div class="row align-items-center">
<div class="col">
<strong class="mb-0">Rollback</strong>
<p class="text-muted mb-0">Rollback to the most recent state on the next boot. (note: this is irreversible)
</p>
</div>
<div class="col-auto">
<div class="form-check form-switch align-middle">
<button type="button" class="btn btn-danger" onclick="rollback()" id="rollback-btn">Rollback</button>
</div>
</div>
</div>
</div>
<div class="list-group-item d-none" id="app-grouping-item"> <div class="list-group-item d-none" id="app-grouping-item">
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col"> <div class="col">

View file

@ -105,6 +105,8 @@ if [[ ! -f '/.init_blend.lock' ]]; then
### ###
echo 'nameserver 1.1.1.1' > /etc/resolv.conf
if command -v apt-get &>/dev/null; then if command -v apt-get &>/dev/null; then
apt-get update &>/dev/null apt-get update &>/dev/null
DEBIAN_FRONTEND=noninteractive apt-get -y install bash bc curl less wget apt-utils apt-transport-https dialog \ DEBIAN_FRONTEND=noninteractive apt-get -y install bash bc curl less wget apt-utils apt-transport-https dialog \
@ -383,7 +385,7 @@ for full_file in /usr/share/applications/*.desktop; do
mkdir -p "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"; cp "${line:5}" "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}" mkdir -p "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"; cp "${line:5}" "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"
echo "Icon=${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}/$(basename "${line:5}")" >> "${HOME}/.local/share/applications/blend;${CONTAINER_NAME};${file}" echo "Icon=${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}/$(basename "${line:5}")" >> "${HOME}/.local/share/applications/blend;${CONTAINER_NAME};${file}"
else else
ICON_PATH="$(find /usr/share/icons/hicolor -type f -iname "${line:5}.*" -print -quit 2>/dev/null)" ICON_PATH="$(find /usr/share/icons/hicolor -type f -iname "*${line:5}*" -print -quit 2>/dev/null)"
mkdir -p "$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')" mkdir -p "$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')"
FINAL_ICON_PATH="$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')/$(echo "${file%.*}").$(basename "${ICON_PATH}" | sed 's/^.*\.//')" FINAL_ICON_PATH="$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')/$(echo "${file%.*}").$(basename "${ICON_PATH}" | sed 's/^.*\.//')"
cp "${ICON_PATH}" "${FINAL_ICON_PATH}" &>/dev/null cp "${ICON_PATH}" "${FINAL_ICON_PATH}" &>/dev/null
@ -445,7 +447,7 @@ inotifywait -m /usr/share/applications /usr/bin -e create,delete,move 2>/dev/nul
mkdir -p "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"; cp "${line:5}" "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}" mkdir -p "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"; cp "${line:5}" "${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}"
echo "Icon=${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}/$(basename "${line:5}")" >> "${HOME}/.local/share/applications/blend;${CONTAINER_NAME};${file}" echo "Icon=${HOME}/.local/share/blend/icons/${CONTAINER_NAME}_${file}/$(basename "${line:5}")" >> "${HOME}/.local/share/applications/blend;${CONTAINER_NAME};${file}"
else else
ICON_PATH="$(find /usr/share/icons/hicolor -type f -iname "${line:5}.*" -print -quit 2>/dev/null)" ICON_PATH="$(find /usr/share/icons/hicolor -type f -iname "*${line:5}*" -print -quit 2>/dev/null)"
mkdir -p "$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')" mkdir -p "$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')"
FINAL_ICON_PATH="$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')/$(echo "${file%.*}").$(basename "${ICON_PATH}" | sed 's/^.*\.//')" FINAL_ICON_PATH="$(dirname "${ICON_PATH}" | sed 's/\/usr\/share/'"\/home\/${_uname}"'\/.local\/share/g')/$(echo "${file%.*}").$(basename "${ICON_PATH}" | sed 's/^.*\.//')"
cp "${ICON_PATH}" "${FINAL_ICON_PATH}" cp "${ICON_PATH}" "${FINAL_ICON_PATH}"