[gnome] Update extensions
This commit is contained in:
@ -0,0 +1,102 @@
|
||||
// SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import * as atspi from './atspi.js';
|
||||
import * as clipboard from './clipboard.js';
|
||||
import * as contacts from './contacts.js';
|
||||
import * as input from './input.js';
|
||||
import * as mpris from './mpris.js';
|
||||
import * as notification from './notification.js';
|
||||
import * as pulseaudio from './pulseaudio.js';
|
||||
import * as session from './session.js';
|
||||
import * as sound from './sound.js';
|
||||
import * as upower from './upower.js';
|
||||
import * as ydotool from './ydotool.js';
|
||||
|
||||
export const functionOverrides = {};
|
||||
|
||||
const components = {
|
||||
atspi,
|
||||
clipboard,
|
||||
contacts,
|
||||
input,
|
||||
mpris,
|
||||
notification,
|
||||
pulseaudio,
|
||||
session,
|
||||
sound,
|
||||
upower,
|
||||
ydotool,
|
||||
};
|
||||
|
||||
/*
|
||||
* Singleton Tracker
|
||||
*/
|
||||
const Default = new Map();
|
||||
|
||||
|
||||
/**
|
||||
* Acquire a reference to a component. Calls to this function should always be
|
||||
* followed by a call to `release()`.
|
||||
*
|
||||
* @param {string} name - The module name
|
||||
* @return {*} The default instance of a component
|
||||
*/
|
||||
export function acquire(name) {
|
||||
if (functionOverrides.acquire)
|
||||
return functionOverrides.acquire(name);
|
||||
|
||||
let component;
|
||||
|
||||
try {
|
||||
let info = Default.get(name);
|
||||
|
||||
if (info === undefined) {
|
||||
const module = components[name];
|
||||
|
||||
info = {
|
||||
instance: new module.default(),
|
||||
refcount: 0,
|
||||
};
|
||||
|
||||
Default.set(name, info);
|
||||
}
|
||||
|
||||
info.refcount++;
|
||||
component = info.instance;
|
||||
} catch (e) {
|
||||
debug(e, name);
|
||||
}
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Release a reference on a component. If the caller was the last reference
|
||||
* holder, the component will be freed.
|
||||
*
|
||||
* @param {string} name - The module name
|
||||
* @return {null} A %null value, useful for overriding a traced variable
|
||||
*/
|
||||
export function release(name) {
|
||||
if (functionOverrides.release)
|
||||
return functionOverrides.release(name);
|
||||
|
||||
try {
|
||||
const info = Default.get(name);
|
||||
|
||||
if (info.refcount === 1) {
|
||||
info.instance.destroy();
|
||||
Default.delete(name);
|
||||
}
|
||||
|
||||
info.refcount--;
|
||||
} catch (e) {
|
||||
debug(e, name);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user