Skip to content

Commit

Permalink
🐛 Pass subsetting to sync maintainer
Browse files Browse the repository at this point in the history
  • Loading branch information
actuallymentor committed Mar 13, 2023
1 parent 156e132 commit 0abd636
Show file tree
Hide file tree
Showing 8 changed files with 389 additions and 43 deletions.
2 changes: 1 addition & 1 deletion app/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { eslint_config } = require('@poap/skunk-linter')
const { eslint_config } = require( '@poap/skunk-linter' )

// Export the default eslint config
module.exports = {
Expand Down
19 changes: 0 additions & 19 deletions app/.vscode/settings.json

This file was deleted.

7 changes: 5 additions & 2 deletions app/modules/battery.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
const { app } = require( 'electron' )
const { exec } = require( 'node:child_process' )
const { log, alert, wait, confirm } = require( './helpers' )
const { get_force_discharge_setting } = require( './settings' )
const { USER } = process.env
const path_fix = 'PATH=/bin:/usr/bin:/usr/local/bin:/usr/sbin:/opt/homebrew'
const battery = `${ path_fix } battery`
Expand Down Expand Up @@ -79,12 +80,14 @@ const get_battery_status = async () => {
/* ///////////////////////////////
// Battery cli functions
// /////////////////////////////*/
const enable_battery_limiter = async ( force_discharge=false ) => {
const enable_battery_limiter = async () => {


try {
// Start battery maintainer
const status = await get_battery_status()
await exec_async( `${ battery } maintain ${ status?.maintain_percentage || 80 }${ force_discharge ? ' --force-discharge' : '' }` )
const allow_force_discharge = get_force_discharge_setting()
await exec_async( `${ battery } maintain ${ status?.maintain_percentage || 80 }${ allow_force_discharge ? ' --force-discharge' : '' }` )
log( `enable_battery_limiter exec complete` )
return status?.percentage
} catch ( e ) {
Expand Down
19 changes: 16 additions & 3 deletions app/modules/interface.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
const { shell, app, Tray, Menu, powerMonitor, nativeTheme } = require( 'electron' )
const { enable_battery_limiter, disable_battery_limiter, initialize_battery, is_limiter_enabled, get_battery_status, uninstall_battery } = require( './battery' )
const { log } = require( "./helpers" )
const { log, wait, confirm } = require( "./helpers" )
const { get_logo_template } = require( './theme' )
const { get_force_discharge_setting, toggle_force_discharge, update_force_discharge_setting } = require( './settings' )

/* ///////////////////////////////
// Menu helpers
// /////////////////////////////*/
let tray = undefined


// Set interface to usable
const generate_app_menu = async () => {

Expand All @@ -18,8 +20,11 @@ const generate_app_menu = async () => {
// Check if limiter is on
const limiter_on = await is_limiter_enabled()

// Check force discharge setting
const allow_discharge = get_force_discharge_setting()

// Set tray icon
log( `Generate app menu percentage: ${ percentage }` )
log( `Generate app menu percentage: ${ percentage } (discharge ${ allow_discharge ? 'allowed' : 'disallowed' }, limited ${ limiter_on ? 'on' : 'off' })` )
tray.setImage( get_logo_template( percentage, limiter_on ) )

// Build menu
Expand Down Expand Up @@ -48,6 +53,12 @@ const generate_app_menu = async () => {
label: `Power: ${ daemon_state }`,
enabled: false
},
{
label: `Allow force-discharging`,
type: 'checkbox',
checked: allow_discharge,
click: update_force_discharge_setting
},
{
type: 'separator'
},
Expand Down Expand Up @@ -224,6 +235,8 @@ async function disable_limiter() {

}


module.exports = {
set_initial_interface
set_initial_interface,
refresh_tray
}
56 changes: 56 additions & 0 deletions app/modules/settings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
const Store = require( 'electron-store' )
const { is_limiter_enabled, disable_battery_limiter, enable_battery_limiter } = require( './battery' )
const { log } = require( './helpers' )
const { refresh_tray } = require( './interface' )
const store = new Store( {
force_discharge_if_needed: {
type: 'boolean'
}
} )

const get_force_discharge_setting = () => {
// Check if force discharge is on
const force_discharge_if_needed = store.get( 'force_discharge_if_needed' )
log( `🔥 Force discharge setting: ${ typeof force_discharge_if_needed } ${ force_discharge_if_needed }` )
return force_discharge_if_needed === true
}

const toggle_force_discharge = () => {
const status = get_force_discharge_setting()
log( `Setting force discharge to ${ !status }` )
store.set( 'force_discharge_if_needed', !status )
}

// Update the force discharge setting
const update_force_discharge_setting = async () => {

try {

const currently_allowed = get_force_discharge_setting()
if( !currently_allowed ) {
const proceed = await confirm( `This setting allows your battery to drain to the desired maintenance level while plugged in. This does not work well in Clamshell mode (laptop closed with an external monitor).\n\nAllow force-discharging?` )
if( !proceed ) return
}

// Toggle setting and refresh tray
toggle_force_discharge()
await refresh_tray()

// Restart battery if needed
const limiter_on = await is_limiter_enabled()
if( limiter_on ) {
await disable_battery_limiter()
await enable_battery_limiter()
}

} catch ( e ) {
log( `Error updating force discharge: `, e )
}

}

module.exports = {
get_force_discharge_setting,
toggle_force_discharge,
update_force_discharge_setting
}
Loading

0 comments on commit 0abd636

Please sign in to comment.