mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-14 23:34:01 -04:00
45 lines
1.5 KiB
QML
45 lines
1.5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import qs.Services
|
|
|
|
Singleton {
|
|
readonly property var log: Log.scoped("Deprecation")
|
|
readonly property var _warned: ({})
|
|
|
|
function type(instance, oldName, newName, module) {
|
|
_emit(instance, oldName, `${oldName} is deprecated and will be removed in a future release.`, `Replace it with ${newName} from ${module}.`);
|
|
}
|
|
|
|
function module(instance, name, oldModule, newModule) {
|
|
_emit(instance, oldModule, `${oldModule} is deprecated and will be removed in a future release.`, `Import ${name} from ${newModule} instead.`);
|
|
}
|
|
|
|
function _emit(instance, subject, headline, advice) {
|
|
const plugin = _owningPlugin(instance);
|
|
const key = subject + "@" + (plugin ? plugin.id : "");
|
|
if (_warned[key])
|
|
return;
|
|
_warned[key] = true;
|
|
const lines = [headline, advice];
|
|
if (plugin)
|
|
lines.push(`Used by the "${plugin.name}" plugin (${plugin.id}, by ${plugin.author}). Contact the plugin author to update it.`);
|
|
log.error(lines.join("\n "));
|
|
}
|
|
|
|
function _owningPlugin(instance) {
|
|
for (let o = instance; o; o = o.parent ?? null) {
|
|
if (typeof o.pluginId !== "string" || !o.pluginId)
|
|
continue;
|
|
const info = PluginService.availablePlugins[o.pluginId];
|
|
return {
|
|
id: o.pluginId,
|
|
name: info?.name ?? o.pluginId,
|
|
author: info?.author ?? "unknown"
|
|
};
|
|
}
|
|
return null;
|
|
}
|
|
}
|