Upgrade to Agsv2 + Astal (#533)
* migrate to astal * Reorganize project structure. * progress * Migrate Dashboard and Window Title modules. * Migrate clock and notification bar modules. * Remove unused code * Media menu * Rework network and volume modules * Finish custom modules. * Migrate battery bar module. * Update battery module and organize helpers. * Migrate workspace module. * Wrap up bar modules. * Checkpoint before I inevitbly blow something up. * Updates * Fix event propagation logic. * Type fixes * More type fixes * Fix padding for event boxes. * Migrate volume menu and refactor scroll event handlers. * network module WIP * Migrate network service. * Migrate bluetooth menu * Updates * Migrate notifications * Update scrolling behavior for custom modules. * Improve popup notifications and add timer functionality. * Migration notifications menu header/controls. * Migrate notifications menu and consolidate notifications menu code. * Migrate power menu. * Dashboard progress * Migrate dashboard * Migrate media menu. * Reduce media menu nesting. * Finish updating media menu bindings to navigate active player. * Migrate battery menu * Consolidate code * Migrate calendar menu * Fix workspace logic to update on client add/change/remove and consolidate code. * Migrate osd * Consolidate hyprland service connections. * Implement startup dropdown menu position allocation. * Migrate settings menu (WIP) * Settings dialo menu fixes * Finish Dashboard menu * Type updates * update submoldule for types * update github ci * ci * Submodule update * Ci updates * Remove type checking for now. * ci fix * Fix a bunch of stuff, losing track... need rest. Brb coffee * Validate dropdown menu before render. * Consolidate code and add auto-hide functionality. * Improve auto-hide behavior. * Consolidate audio menu code * Organize bluetooth code * Improve active player logic * Properly dismiss a notification on action button resolution. * Implement CLI command engine and migrate CLI commands. * Handle variable disposal * Bar component fixes and add hyprland startup rules. * Handle potentially null bindings network and bluetooth bindings. * Handle potentially null wired adapter. * Fix GPU stats * Handle poller for GPU * Fix gpu bar logic. * Clean up logic for stat bars. * Handle wifi and wired bar icon bindings. * Fix battery percentages * Fix switch behavior * Wifi staging fixes * Reduce redundant hyprland service calls. * Code cleanup * Document the option code and reduce redundant calls to optimize performance. * Remove outdated comment. * Add JSDocs * Add meson to build hyprpanel * Consistency updates * Organize commands * Fix images not showing up on notifications. * Remove todo * Move hyprpanel configuration to the ~/.config/hyprpanel directory and add utility commands. * Handle SRC directory for the bundled/built hyprpanel. * Add namespaces to all windows * Migrate systray * systray updates * Update meson to include ts, tsx and scss files. * Remove log from meson * Fix file choose path and make it float. * Added a command to check the dependency status * Update dep names. * Get scale directly from env * Add todo
This commit is contained in:
93
src/components/menus/dashboard/shortcuts/helpers.ts
Normal file
93
src/components/menus/dashboard/shortcuts/helpers.ts
Normal file
@@ -0,0 +1,93 @@
|
||||
import { bind, execAsync, timeout, Variable } from 'astal';
|
||||
import { App } from 'astal/gtk3';
|
||||
import { BashPoller } from 'src/lib/poller/BashPoller';
|
||||
import { ShortcutVariable } from 'src/lib/types/dashboard';
|
||||
import options from 'src/options';
|
||||
|
||||
const { left } = options.menus.dashboard.shortcuts;
|
||||
|
||||
/**
|
||||
* Handles the recorder status based on the command output.
|
||||
*
|
||||
* This function checks if the command output indicates that recording is in progress.
|
||||
*
|
||||
* @param commandOutput The output of the command to check.
|
||||
*
|
||||
* @returns True if the command output is 'recording', false otherwise.
|
||||
*/
|
||||
export const handleRecorder = (commandOutput: string): boolean => {
|
||||
if (commandOutput === 'recording') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles the click action for a shortcut.
|
||||
*
|
||||
* This function hides the dashboard menu and executes the specified action after an optional timeout.
|
||||
*
|
||||
* @param action The action to execute.
|
||||
* @param tOut The timeout in milliseconds before executing the action. Defaults to 0.
|
||||
*/
|
||||
export const handleClick = (action: string, tOut: number = 0): void => {
|
||||
App.get_window('dashboardmenu')?.set_visible(false);
|
||||
|
||||
timeout(tOut, () => {
|
||||
execAsync(`bash -c "${action}"`)
|
||||
.then((res) => {
|
||||
return res;
|
||||
})
|
||||
.catch((err) => console.error(err));
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if a shortcut has a command.
|
||||
*
|
||||
* This function determines if the provided shortcut has a command defined.
|
||||
*
|
||||
* @param shortCut The shortcut to check.
|
||||
*
|
||||
* @returns True if the shortcut has a command, false otherwise.
|
||||
*/
|
||||
export const hasCommand = (shortCut: ShortcutVariable): boolean => {
|
||||
return shortCut.command.get().length > 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* A variable indicating whether the left card is hidden.
|
||||
*
|
||||
* This variable is set to true if none of the left shortcuts have commands defined.
|
||||
*/
|
||||
export const leftCardHidden = Variable(
|
||||
!(
|
||||
hasCommand(left.shortcut1) ||
|
||||
hasCommand(left.shortcut2) ||
|
||||
hasCommand(left.shortcut3) ||
|
||||
hasCommand(left.shortcut4)
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* A variable representing the polling interval in milliseconds.
|
||||
*/
|
||||
export const pollingInterval = Variable(1000);
|
||||
|
||||
/**
|
||||
* A variable indicating whether recording is in progress.
|
||||
*/
|
||||
export const isRecording = Variable(false);
|
||||
|
||||
/**
|
||||
* A poller for checking the recording status.
|
||||
*
|
||||
* This poller periodically checks the recording status by executing a bash command and updates the `isRecording` variable.
|
||||
*/
|
||||
export const recordingPoller = new BashPoller<boolean, []>(
|
||||
isRecording,
|
||||
[],
|
||||
bind(pollingInterval),
|
||||
`${SRC_DIR}/scripts/screen_record.sh status`,
|
||||
handleRecorder,
|
||||
);
|
||||
Reference in New Issue
Block a user