From 49851fe4c728f3deb7b5ff8e9afb18caf788cfee Mon Sep 17 00:00:00 2001 From: indusy <1243619454@qq.com> Date: Thu, 13 Jun 2024 18:29:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A3=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define.d.ts | 2 +- package.json | 3 ++ pnpm-lock.yaml | 34 +++++++++++++++++++++++ rollup.config.mjs | 15 ++++++++-- src/components/exit.ts | 10 ------- src/components/indicator.ts | 9 ++++-- src/components/settings.ts | 4 ++- src/extension.ts | 1 + src/preferences/components/switch-core.ts | 16 +++++++++++ src/preferences/index.ts | 13 +++++++++ src/preferences/ui.ts | 12 ++++++++ src/prefs.ts | 10 +++++++ 12 files changed, 112 insertions(+), 17 deletions(-) delete mode 100644 src/components/exit.ts create mode 100644 src/preferences/components/switch-core.ts create mode 100644 src/preferences/index.ts create mode 100644 src/preferences/ui.ts create mode 100644 src/prefs.ts diff --git a/define.d.ts b/define.d.ts index 336ce12..cb0ff5c 100644 --- a/define.d.ts +++ b/define.d.ts @@ -1 +1 @@ -export {} +export {}; diff --git a/package.json b/package.json index d917229..ceff073 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "prebuild": "rimraf dist", "build": "rollup -c", "build:dev": "rollup -c --environment DEBUG", + "format": "prettier -c -w **/*.ts", "test": "sh test.sh", "push": "sh push.sh" }, @@ -15,6 +16,7 @@ "license": "ISC", "packageManager": "pnpm@9.3.0+sha512.ee7b93e0c2bd11409c6424f92b866f31d3ea1bef5fbe47d3c7500cdc3c9668833d2e55681ad66df5b640c61fa9dc25d546efa54d76d7f8bf54b13614ac293631", "devDependencies": { + "@girs/adw-1": "1.4.3-3.3.0", "@girs/clutter-14": "14.0.0-4.0.0-beta.5", "@girs/gio-2.0": "2.78.0-3.3.0", "@girs/gjs": "^3.3.0", @@ -28,6 +30,7 @@ "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", + "prettier": "^3.3.2", "rimraf": "^5.0.7", "rollup": "^4.18.0", "rollup-plugin-copy": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e48ebf1..d247456 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + '@girs/adw-1': + specifier: 1.4.3-3.3.0 + version: 1.4.3-3.3.0 '@girs/clutter-14': specifier: 14.0.0-4.0.0-beta.5 version: 14.0.0-4.0.0-beta.5 @@ -47,6 +50,9 @@ importers: '@rollup/plugin-terser': specifier: ^0.4.4 version: 0.4.4(rollup@4.18.0) + prettier: + specifier: ^3.3.2 + version: 3.3.2 rimraf: specifier: ^5.0.7 version: 5.0.7 @@ -68,6 +74,9 @@ packages: '@girs/accountsservice-1.0@1.0.0-4.0.0-beta.5': resolution: {integrity: sha512-+l+kEv7a54o8jMDtftOmOpOl0bG+2rLVaCf1LqQDyLeGe74tpVCeCGre4g27VyC4KI6dh5Tp2kOnzx4u4Q1+bw==} + '@girs/adw-1@1.4.3-3.3.0': + resolution: {integrity: sha512-BZBGnR+NjDyO4bUvY9WgWw2laFwVjNEye53NbyP/OyKgLViJmRd9eNdfb5743zLtjAvs3eB+5XIp1A5L0F9vqA==} + '@girs/adw-1@1.5.0-4.0.0-beta.5': resolution: {integrity: sha512-bIndXhtH0jXL1che7tsfkdQd0rU0pnXuQTag/zeTSlVwOmkCF8RFASN96bHChK/npFaFQJ2psAu3L63sPob+3g==} @@ -700,6 +709,11 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + engines: {node: '>=14'} + hasBin: true + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -861,6 +875,24 @@ snapshots: '@girs/glib-2.0': 2.80.0-4.0.0-beta.5 '@girs/gobject-2.0': 2.80.0-4.0.0-beta.5 + '@girs/adw-1@1.4.3-3.3.0': + dependencies: + '@girs/cairo-1.0': 1.0.0-4.0.0-beta.5 + '@girs/freetype2-2.0': 2.0.0-4.0.0-beta.5 + '@girs/gdk-4.0': 4.0.0-4.0.0-beta.5 + '@girs/gdkpixbuf-2.0': 2.0.0-4.0.0-beta.5 + '@girs/gio-2.0': 2.78.0-3.3.0 + '@girs/gjs': 3.3.0 + '@girs/glib-2.0': 2.78.0-3.3.0 + '@girs/gmodule-2.0': 2.0.0-4.0.0-beta.5 + '@girs/gobject-2.0': 2.78.0-3.3.0 + '@girs/graphene-1.0': 1.0.0-4.0.0-beta.5 + '@girs/gsk-4.0': 4.0.0-4.0.0-beta.5 + '@girs/gtk-4.0': 4.12.5-3.3.0 + '@girs/harfbuzz-0.0': 8.2.1-3.3.0 + '@girs/pango-1.0': 1.51.0-3.3.0 + '@girs/pangocairo-1.0': 1.0.0-4.0.0-beta.5 + '@girs/adw-1@1.5.0-4.0.0-beta.5': dependencies: '@girs/cairo-1.0': 1.0.0-4.0.0-beta.5 @@ -1830,6 +1862,8 @@ snapshots: dependencies: find-up: 4.1.0 + prettier@3.3.2: {} + queue-microtask@1.2.3: {} randombytes@2.1.0: diff --git a/rollup.config.mjs b/rollup.config.mjs index a3b64f3..230d27f 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -8,7 +8,7 @@ import json from "@rollup/plugin-json"; import terser from "@rollup/plugin-terser"; import typescript from "rollup-plugin-typescript2"; import copy from "rollup-plugin-copy"; -import tsconfigPaths from 'rollup-plugin-tsconfig-paths' +import tsconfigPaths from "rollup-plugin-tsconfig-paths"; /** @type {(options: {matches: RegExp[]}) => import("rollup").Plugin} */ const excludeImports = (options) => { @@ -62,7 +62,18 @@ const config = defineConfig(() => { ], }; - return [extensionModule]; + /** @type {import('rollup').RollupOptions} */ + const prefsModule = { + input: "src/prefs.ts", + output: { + name: "[name].js", + dir: "dist", + format: "es", + }, + plugins: [...commonPlugs], + }; + + return [extensionModule, prefsModule]; }); export default config; diff --git a/src/components/exit.ts b/src/components/exit.ts deleted file mode 100644 index 567f41c..0000000 --- a/src/components/exit.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as PopupMenu from "@girs/gnome-shell/ui/popupMenu"; - -import { registerGObjectClass } from "../utils/gjs"; - -@registerGObjectClass -export class Exit extends PopupMenu.PopupMenuItem { - constructor() { - super("退出"); - } -} diff --git a/src/components/indicator.ts b/src/components/indicator.ts index 941160f..48be7b5 100644 --- a/src/components/indicator.ts +++ b/src/components/indicator.ts @@ -16,7 +16,10 @@ import { ExtensionMetadata } from "@girs/gnome-shell/extensions/extension"; @registerGObjectClass export class Indicator extends PanelMenu.Button { metadata: ExtensionMetadata; - constructor(options: { metadata: ExtensionMetadata }) { + constructor(options: { + metadata: ExtensionMetadata; + openPreferences: () => void; + }) { super(0.0, _("Clash Indicator")); this.metadata = options.metadata; @@ -27,7 +30,7 @@ export class Indicator extends PanelMenu.Button { }) ); - this.menu = this.menu as PopupMenu.PopupMenu + this.menu = this.menu as PopupMenu.PopupMenu; const enabler = new Enabler(); this.menu.addMenuItem(enabler); @@ -47,7 +50,7 @@ export class Indicator extends PanelMenu.Button { const allowLAN = new AllowLAN(); this.menu.addMenuItem(allowLAN); - const settings = new Settings(); + const settings = new Settings({ openPreferences: options.openPreferences }); this.menu.addMenuItem(settings); const configure = new Configure({ diff --git a/src/components/settings.ts b/src/components/settings.ts index 26424fc..2b1cafb 100644 --- a/src/components/settings.ts +++ b/src/components/settings.ts @@ -4,7 +4,9 @@ import { registerGObjectClass } from "../utils/gjs"; @registerGObjectClass export class Settings extends PopupMenu.PopupMenuItem { - constructor() { + constructor(options: { openPreferences: () => void }) { super("打开设置面板"); + + this.connect('activate', options.openPreferences) } } diff --git a/src/extension.ts b/src/extension.ts index fc13a80..a6ccfb7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -49,6 +49,7 @@ export default class ClashIndicatorExtension extends Extension { enable() { this.indicator = new Indicator({ metadata: this.metadata, + openPreferences: this.openPreferences.bind(this) }); Main.panel.addToStatusArea(this.uuid, this.indicator); } diff --git a/src/preferences/components/switch-core.ts b/src/preferences/components/switch-core.ts new file mode 100644 index 0000000..1265e70 --- /dev/null +++ b/src/preferences/components/switch-core.ts @@ -0,0 +1,16 @@ +import { Adw } from "@girs/adw-1"; +import { Gtk } from "@girs/gtk-4.0"; + +import { registerGObjectClass } from "../../utils/gjs"; + +@registerGObjectClass +export class SwitchCore extends Adw.ComboRow { + constructor() { + super({ title: "切换内核" }); + + const options = ["clash-meta", "clash-meta-alpha"]; + const coreOptions = new Gtk.StringList(); + options.forEach(x => coreOptions.append(x)); + this.model = coreOptions; + } +} diff --git a/src/preferences/index.ts b/src/preferences/index.ts new file mode 100644 index 0000000..6adf7f2 --- /dev/null +++ b/src/preferences/index.ts @@ -0,0 +1,13 @@ +import {Adw} from '@girs/adw-1' + +import { registerGObjectClass } from "../utils/gjs"; +import { UI } from './ui'; + +@registerGObjectClass +export class SettingsPage extends Adw.PreferencesPage { + constructor () { + super() + + this.add(new UI()) + } +} \ No newline at end of file diff --git a/src/preferences/ui.ts b/src/preferences/ui.ts new file mode 100644 index 0000000..732c232 --- /dev/null +++ b/src/preferences/ui.ts @@ -0,0 +1,12 @@ +import {Adw} from '@girs/adw-1' +import { registerGObjectClass } from '../utils/gjs' +import { SwitchCore } from './components/switch-core' + +@registerGObjectClass +export class UI extends Adw.PreferencesGroup { + constructor () { + super({title: '界面设置'}) + this.add(new SwitchCore()) + + } +} \ No newline at end of file diff --git a/src/prefs.ts b/src/prefs.ts new file mode 100644 index 0000000..1c80b48 --- /dev/null +++ b/src/prefs.ts @@ -0,0 +1,10 @@ +import { ExtensionPreferences } from "@girs/gnome-shell/extensions/prefs"; +import { SettingsPage } from "./preferences"; + +export default class ClashIndicatorPreferences extends ExtensionPreferences { + fillPreferencesWindow(window: any) { + const page = new SettingsPage(); + + window.add(page); + } +}