mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-02 11:38:30 -04:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d94117a69 | |||
| 92569d8b4d | |||
| fdee09b583 | |||
| b60af507d7 | |||
| 2cc12b70d2 | |||
| 2df1dfe0bd | |||
| abf084eea2 |
@@ -2,16 +2,15 @@
|
|||||||
name: dms-plugin-dev
|
name: dms-plugin-dev
|
||||||
description: >
|
description: >
|
||||||
Develop plugins for DankMaterialShell (DMS), a QML-based Linux desktop shell built on
|
Develop plugins for DankMaterialShell (DMS), a QML-based Linux desktop shell built on
|
||||||
Quickshell. Supports five plugin types: widget (bar + Control Center), daemon (background
|
Quickshell. Supports four plugin types: widget (bar + Control Center), daemon (background
|
||||||
service), launcher (search + actions), desktop (draggable desktop widgets), and composite
|
service), launcher (search + actions), and desktop (draggable desktop widgets). Covers
|
||||||
(multi-surface). Covers manifest creation, QML component development, startup checks,
|
manifest creation, QML component development, settings UI, data persistence, theme
|
||||||
settings UI, data persistence, theme integration, PopoutService usage, IPC runtime
|
integration, PopoutService usage, and external command execution. Use when the user wants
|
||||||
discovery, and external command execution. Use when the user wants to create, modify,
|
to create, modify, or debug a DMS plugin, or asks about the DMS plugin API.
|
||||||
or debug a DMS plugin, or asks about the DMS plugin API.
|
|
||||||
compatibility: Designed for Claude Code (or similar products)
|
compatibility: Designed for Claude Code (or similar products)
|
||||||
metadata:
|
metadata:
|
||||||
author: DankMaterialShell
|
author: DankMaterialShell
|
||||||
version: "1.1"
|
version: "1.0"
|
||||||
domain: qml-desktop-development
|
domain: qml-desktop-development
|
||||||
framework: DankMaterialShell
|
framework: DankMaterialShell
|
||||||
languages: qml, javascript
|
languages: qml, javascript
|
||||||
@@ -38,15 +37,14 @@ integrations, and desktop widgets. Plugins are QML components discovered from
|
|||||||
|
|
||||||
**Plugin registry:** Community plugins are available at https://plugins.danklinux.com/
|
**Plugin registry:** Community plugins are available at https://plugins.danklinux.com/
|
||||||
|
|
||||||
**Five plugin types:**
|
**Four plugin types:**
|
||||||
|
|
||||||
| Type | Purpose | Base Component | Bar pills | CC integration |
|
| Type | Purpose | Base Component | Bar pills | CC integration |
|
||||||
|-------------|--------------------------------|----------------------------|-----------|----------------|
|
|------------|--------------------------------|----------------------------|-----------|----------------|
|
||||||
| `widget` | Bar widget + popout | `PluginComponent` | Yes | Yes |
|
| `widget` | Bar widget + popout | `PluginComponent` | Yes | Yes |
|
||||||
| `daemon` | Background service | `PluginComponent` (no UI) | No | Optional |
|
| `daemon` | Background service | `PluginComponent` (no UI) | No | Optional |
|
||||||
| `launcher` | Searchable items in launcher | `Item` | No | No |
|
| `launcher` | Searchable items in launcher | `Item` | No | No |
|
||||||
| `desktop` | Draggable desktop widget | `DesktopPluginComponent` | No | No |
|
| `desktop` | Draggable desktop widget | `DesktopPluginComponent` | No | No |
|
||||||
| `composite` | Multi-surface plugin | One component per surface | Optional | Optional |
|
|
||||||
|
|
||||||
## Step 1: Determine Plugin Type
|
## Step 1: Determine Plugin Type
|
||||||
|
|
||||||
@@ -60,9 +58,6 @@ Choose the type based on what the plugin does:
|
|||||||
with trigger-based filtering (e.g., type `=` for calculator, `:` for emoji).
|
with trigger-based filtering (e.g., type `=` for calculator, `:` for emoji).
|
||||||
- **Shows on the desktop background?** - Use `desktop`. Draggable, resizable widget on the
|
- **Shows on the desktop background?** - Use `desktop`. Draggable, resizable widget on the
|
||||||
desktop layer.
|
desktop layer.
|
||||||
- **Needs multiple surfaces?** - Use `composite`. A single plugin that registers any combination
|
|
||||||
of the above (e.g., a daemon + bar widget + desktop widget). Each surface gets its own
|
|
||||||
QML component file.
|
|
||||||
|
|
||||||
## Step 2: Create the Manifest
|
## Step 2: Create the Manifest
|
||||||
|
|
||||||
@@ -83,7 +78,7 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**With settings, startup check, and permissions:**
|
**With settings and permissions:**
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -97,31 +92,7 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
|
|||||||
"component": "./YourWidget.qml",
|
"component": "./YourWidget.qml",
|
||||||
"icon": "extension",
|
"icon": "extension",
|
||||||
"settings": "./Settings.qml",
|
"settings": "./Settings.qml",
|
||||||
"startupCheck": "./StartupCheck.qml",
|
|
||||||
"requires_dms": ">=0.1.0",
|
"requires_dms": ">=0.1.0",
|
||||||
"dependencies": ["mytool"],
|
|
||||||
"permissions": ["settings_read", "settings_write"]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Composite plugin (multi-surface):**
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"id": "myComposite",
|
|
||||||
"name": "My Composite Plugin",
|
|
||||||
"description": "Daemon + widget + desktop from one plugin",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"author": "Your Name",
|
|
||||||
"type": "composite",
|
|
||||||
"capabilities": ["daemon", "dankbar-widget", "desktop-widget"],
|
|
||||||
"icon": "extension",
|
|
||||||
"components": {
|
|
||||||
"daemon": "./MyDaemon.qml",
|
|
||||||
"widget": "./MyBarWidget.qml",
|
|
||||||
"desktop": "./MyDesktopWidget.qml"
|
|
||||||
},
|
|
||||||
"settings": "./Settings.qml",
|
|
||||||
"permissions": ["settings_read", "settings_write"]
|
"permissions": ["settings_read", "settings_write"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -129,11 +100,9 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
|
|||||||
**Key rules:**
|
**Key rules:**
|
||||||
- `id` must be camelCase, matching pattern `^[a-zA-Z][a-zA-Z0-9]*$`
|
- `id` must be camelCase, matching pattern `^[a-zA-Z][a-zA-Z0-9]*$`
|
||||||
- `version` must be semver (e.g., `1.0.0`)
|
- `version` must be semver (e.g., `1.0.0`)
|
||||||
- Provide either `component` (single-surface) or `components` (multi-surface), not both
|
- `component` must start with `./` and end with `.qml`
|
||||||
- `component` / component paths must start with `./` and end with `.qml`
|
- `type: "launcher"` requires a `trigger` field
|
||||||
- `type: "launcher"` (or a `components` object with a `launcher` key) requires a `trigger` field
|
|
||||||
- `settings_write` permission is **required** if the plugin has a settings component
|
- `settings_write` permission is **required** if the plugin has a settings component
|
||||||
- `dependencies` replaces the deprecated `requires` field
|
|
||||||
|
|
||||||
## Step 3: Create the Main Component
|
## Step 3: Create the Main Component
|
||||||
|
|
||||||
@@ -280,69 +249,7 @@ PluginComponent {
|
|||||||
|
|
||||||
See [daemon-plugin-guide.md](references/daemon-plugin-guide.md) for event-driven patterns and process execution.
|
See [daemon-plugin-guide.md](references/daemon-plugin-guide.md) for event-driven patterns and process execution.
|
||||||
|
|
||||||
### Composite
|
## Step 4: Add Settings (Optional)
|
||||||
|
|
||||||
For composite plugins, create a separate QML file per surface. Each surface uses the same
|
|
||||||
base component as the corresponding single-surface type (PluginComponent for widget/daemon,
|
|
||||||
Item for launcher, etc.). All surfaces share the same `pluginId` and `pluginService`.
|
|
||||||
|
|
||||||
```
|
|
||||||
MyCompositePlugin/
|
|
||||||
plugin.json
|
|
||||||
MyBarWidget.qml # PluginComponent (widget surface)
|
|
||||||
MyDaemon.qml # PluginComponent (daemon surface)
|
|
||||||
MyDesktopWidget.qml # Item with desktop widget properties
|
|
||||||
Settings.qml # Shared settings for all surfaces
|
|
||||||
```
|
|
||||||
|
|
||||||
Use `pluginService.pluginHasSurface(pluginId, "widget")` to check whether a specific surface
|
|
||||||
is registered for a plugin at runtime.
|
|
||||||
|
|
||||||
## Step 4: Add Startup Check (Optional)
|
|
||||||
|
|
||||||
Gate plugin activation on dependency checks by providing a `startupCheck` component. This
|
|
||||||
runs before the plugin loads and blocks activation if a required tool or condition is missing.
|
|
||||||
|
|
||||||
Create a `StartupCheck.qml` (non-visual QtObject):
|
|
||||||
|
|
||||||
```qml
|
|
||||||
import QtQuick
|
|
||||||
import qs.Common
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
function check(done) {
|
|
||||||
Proc.runCommand("myPlugin.depCheck", ["sh", "-c", "command -v mytool"], (stdout, exitCode) => {
|
|
||||||
if (exitCode === 0) {
|
|
||||||
done(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
done({
|
|
||||||
"title": I18n.tr("mytool is required"),
|
|
||||||
"details": I18n.tr("Install 'mytool' and re-enable this plugin.")
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The `done` callback accepts:
|
|
||||||
- `null` - allow activation
|
|
||||||
- A string - block with a short error message
|
|
||||||
- `{ title, details }` - block with a title and expandable details body
|
|
||||||
|
|
||||||
A synchronous variant (no `done` parameter, return the result directly) is also supported.
|
|
||||||
|
|
||||||
Failed checks show a toast error and store the error in `pluginService.pluginLoadErrors`.
|
|
||||||
|
|
||||||
Add to your manifest:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"startupCheck": "./StartupCheck.qml",
|
|
||||||
"dependencies": ["mytool"]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 5: Add Settings (Optional)
|
|
||||||
|
|
||||||
Wrap settings in `PluginSettings` with your `pluginId`. All settings auto-save and auto-load.
|
Wrap settings in `PluginSettings` with your `pluginId`. All settings auto-save and auto-load.
|
||||||
|
|
||||||
@@ -386,7 +293,7 @@ See [settings-components-reference.md](references/settings-components-reference.
|
|||||||
|
|
||||||
**Important:** Your plugin must declare `"permissions": ["settings_write"]` in plugin.json, or the settings UI will show an error.
|
**Important:** Your plugin must declare `"permissions": ["settings_write"]` in plugin.json, or the settings UI will show an error.
|
||||||
|
|
||||||
## Step 6: Use Data Persistence
|
## Step 5: Use Data Persistence
|
||||||
|
|
||||||
Three tiers of persistence:
|
Three tiers of persistence:
|
||||||
|
|
||||||
@@ -395,7 +302,6 @@ Three tiers of persistence:
|
|||||||
| `pluginService.savePluginData(id, key, val)` / `loadPluginData(id, key, default)` | Yes (settings.json) | User preferences, config |
|
| `pluginService.savePluginData(id, key, val)` / `loadPluginData(id, key, default)` | Yes (settings.json) | User preferences, config |
|
||||||
| `pluginService.savePluginState(id, key, val)` / `loadPluginState(id, key, default)` | Yes (separate state file) | Runtime state, history, cache |
|
| `pluginService.savePluginState(id, key, val)` / `loadPluginState(id, key, default)` | Yes (separate state file) | Runtime state, history, cache |
|
||||||
| `PluginGlobalVar { varName; defaultValue; value; set() }` | No (runtime only) | Cross-instance shared state |
|
| `PluginGlobalVar { varName; defaultValue; value; set() }` | No (runtime only) | Cross-instance shared state |
|
||||||
| `pluginService.getPluginPath(id)` | N/A | Get the plugin's installation directory path |
|
|
||||||
|
|
||||||
- `pluginData` is a reactive property on PluginComponent, auto-loaded from settings
|
- `pluginData` is a reactive property on PluginComponent, auto-loaded from settings
|
||||||
- React to settings changes with `Connections { target: pluginService; function onPluginDataChanged(id) { ... } }`
|
- React to settings changes with `Connections { target: pluginService; function onPluginDataChanged(id) { ... } }`
|
||||||
@@ -403,7 +309,7 @@ Three tiers of persistence:
|
|||||||
|
|
||||||
See [data-persistence-guide.md](references/data-persistence-guide.md) for details and examples.
|
See [data-persistence-guide.md](references/data-persistence-guide.md) for details and examples.
|
||||||
|
|
||||||
## Step 7: Theme Integration
|
## Step 6: Theme Integration
|
||||||
|
|
||||||
Always use `Theme.*` properties from `qs.Common` - never hardcode colors or sizes.
|
Always use `Theme.*` properties from `qs.Common` - never hardcode colors or sizes.
|
||||||
|
|
||||||
@@ -418,7 +324,7 @@ Always use `Theme.*` properties from `qs.Common` - never hardcode colors or size
|
|||||||
|
|
||||||
See [theme-reference.md](references/theme-reference.md) for the complete property list.
|
See [theme-reference.md](references/theme-reference.md) for the complete property list.
|
||||||
|
|
||||||
## Step 8: Add Popout Content (Widgets Only)
|
## Step 7: Add Popout Content (Widgets Only)
|
||||||
|
|
||||||
Add a popout that opens when the bar pill is clicked:
|
Add a popout that opens when the bar pill is clicked:
|
||||||
|
|
||||||
@@ -454,7 +360,7 @@ PluginComponent {
|
|||||||
|
|
||||||
Calculate available content height: `popoutHeight - headerHeight - detailsHeight - spacing`
|
Calculate available content height: `popoutHeight - headerHeight - detailsHeight - spacing`
|
||||||
|
|
||||||
## Step 9: Control Center Integration (Widgets Only)
|
## Step 8: Control Center Integration (Widgets Only)
|
||||||
|
|
||||||
Add your widget to the Control Center grid:
|
Add your widget to the Control Center grid:
|
||||||
|
|
||||||
@@ -483,7 +389,7 @@ PluginComponent {
|
|||||||
|
|
||||||
**CC sizing:** 25% width = SmallToggleButton (icon only), 50% width = ToggleButton or CompoundPill (if ccDetailContent is defined).
|
**CC sizing:** 25% width = SmallToggleButton (icon only), 50% width = ToggleButton or CompoundPill (if ccDetailContent is defined).
|
||||||
|
|
||||||
## Step 10: External Commands and Clipboard
|
## Step 9: External Commands and Clipboard
|
||||||
|
|
||||||
**Run commands and capture output:**
|
**Run commands and capture output:**
|
||||||
|
|
||||||
@@ -514,33 +420,18 @@ Quickshell.execDetached(["dms", "cl", "copy", textToCopy])
|
|||||||
|
|
||||||
**Do NOT use** `globalThis.clipboard` or browser JavaScript APIs - they don't exist in the QML runtime.
|
**Do NOT use** `globalThis.clipboard` or browser JavaScript APIs - they don't exist in the QML runtime.
|
||||||
|
|
||||||
## Step 11: Validate and Test
|
## Step 10: Validate and Test
|
||||||
|
|
||||||
1. Validate `plugin.json` against the schema at [assets/plugin-schema.json](assets/plugin-schema.json)
|
1. Validate `plugin.json` against the schema at [assets/plugin-schema.json](assets/plugin-schema.json)
|
||||||
2. Run the shell with verbose output: `qs -v -p $CONFIGPATH/quickshell/dms/shell.qml`
|
2. Run the shell with verbose output: `qs -v -p $CONFIGPATH/quickshell/dms/shell.qml`
|
||||||
3. Open Settings > Plugins > Scan for Plugins
|
3. Open Settings > Plugins > Scan for Plugins
|
||||||
4. Enable your plugin and add it to the DankBar layout
|
4. Enable your plugin and add it to the DankBar layout
|
||||||
|
|
||||||
**Runtime plugin discovery via IPC:**
|
|
||||||
|
|
||||||
Plugins can be scanned, rescanned, and reloaded at runtime without restarting the shell:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dms ipc plugin-scan scan # Trigger a full rescan of all plugin directories
|
|
||||||
dms ipc plugin-scan rescan <id> # Force rescan of a specific plugin
|
|
||||||
dms ipc plugin-scan reload <id> # Force reload of a loaded plugin
|
|
||||||
dms ipc plugin-scan list # List all known plugins (TSV: id, loaded, type, name)
|
|
||||||
dms ipc plugin-scan status <id> # Get status of a specific plugin (TSV: loaded, type, error)
|
|
||||||
```
|
|
||||||
|
|
||||||
Plugin IDs are validated against `^[a-zA-Z0-9_\-:]{1,64}$`.
|
|
||||||
|
|
||||||
**Common issues:**
|
**Common issues:**
|
||||||
- Plugin not detected: check plugin.json syntax with `jq . plugin.json`
|
- Plugin not detected: check plugin.json syntax with `jq . plugin.json`
|
||||||
- Widget not showing: ensure it's enabled AND added to a DankBar section
|
- Widget not showing: ensure it's enabled AND added to a DankBar section
|
||||||
- Settings error: verify `settings_write` permission is declared
|
- Settings error: verify `settings_write` permission is declared
|
||||||
- Data not persisting: check pluginService injection and permissions
|
- Data not persisting: check pluginService injection and permissions
|
||||||
- Startup check failing: check `pluginService.pluginLoadErrors` or run `dms ipc plugin-scan status <id>`
|
|
||||||
|
|
||||||
## Common Mistakes
|
## Common Mistakes
|
||||||
|
|
||||||
@@ -554,9 +445,6 @@ Plugin IDs are validated against `^[a-zA-Z0-9_\-:]{1,64}$`.
|
|||||||
8. **Forgetting `categories` in launcher items** - Items won't display without it
|
8. **Forgetting `categories` in launcher items** - Items won't display without it
|
||||||
9. **Not handling null pluginService** - Always use optional chaining or null checks
|
9. **Not handling null pluginService** - Always use optional chaining or null checks
|
||||||
10. **Using `PluginComponent` for launchers** - Launchers use plain `Item`, not `PluginComponent`
|
10. **Using `PluginComponent` for launchers** - Launchers use plain `Item`, not `PluginComponent`
|
||||||
11. **Using `requires` instead of `dependencies`** - `requires` is deprecated; use `dependencies`
|
|
||||||
12. **Providing both `component` and `components`** - Use one or the other, not both
|
|
||||||
13. **Missing `trigger` on composite with launcher surface** - Still required when `components` has a `launcher` key
|
|
||||||
|
|
||||||
## Quick Reference: Imports
|
## Quick Reference: Imports
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
"version",
|
"version",
|
||||||
"author",
|
"author",
|
||||||
"type",
|
"type",
|
||||||
"capabilities"
|
"capabilities",
|
||||||
|
"component"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
@@ -41,8 +42,8 @@
|
|||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Plugin type. Use 'composite' (or any value) together with 'components' to provide multiple surfaces from one plugin.",
|
"description": "Plugin type",
|
||||||
"enum": ["widget", "daemon", "launcher", "desktop", "composite"]
|
"enum": ["widget", "daemon", "launcher", "desktop"]
|
||||||
},
|
},
|
||||||
"capabilities": {
|
"capabilities": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -54,37 +55,9 @@
|
|||||||
},
|
},
|
||||||
"component": {
|
"component": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Relative path to main QML component file. Required unless 'components' is provided.",
|
"description": "Relative path to main QML component file",
|
||||||
"pattern": "^\\./.*\\.qml$"
|
"pattern": "^\\./.*\\.qml$"
|
||||||
},
|
},
|
||||||
"components": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Map of surface name to relative QML component path, for multi-surface (composite) plugins. Provide any subset of surfaces; each is loaded independently.",
|
|
||||||
"properties": {
|
|
||||||
"widget": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Bar/Control Center widget component (PluginComponent)",
|
|
||||||
"pattern": "^\\./.*\\.qml$"
|
|
||||||
},
|
|
||||||
"desktop": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Desktop widget component",
|
|
||||||
"pattern": "^\\./.*\\.qml$"
|
|
||||||
},
|
|
||||||
"daemon": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Background daemon component (instantiated once)",
|
|
||||||
"pattern": "^\\./.*\\.qml$"
|
|
||||||
},
|
|
||||||
"launcher": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Launcher provider component (requires 'trigger')",
|
|
||||||
"pattern": "^\\./.*\\.qml$"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": false,
|
|
||||||
"minProperties": 1
|
|
||||||
},
|
|
||||||
"trigger": {
|
"trigger": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Trigger string for launcher activation (required for launcher type)"
|
"description": "Trigger string for launcher activation (required for launcher type)"
|
||||||
@@ -98,26 +71,14 @@
|
|||||||
"description": "Path to settings component QML file",
|
"description": "Path to settings component QML file",
|
||||||
"pattern": "^\\./.*\\.qml$"
|
"pattern": "^\\./.*\\.qml$"
|
||||||
},
|
},
|
||||||
"startupCheck": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to a non-visual (QtObject) component exposing a check(done) function that gates activation. done(null) allows; done(error) blocks, where error is a string or { title, details }.",
|
|
||||||
"pattern": "^\\./.*\\.qml$"
|
|
||||||
},
|
|
||||||
"requires_dms": {
|
"requires_dms": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Minimum DMS version requirement (e.g., '>=0.1.18', '>0.1.0')",
|
"description": "Minimum DMS version requirement (e.g., '>=0.1.18', '>0.1.0')",
|
||||||
"pattern": "^(>=?|<=?|=|>|<)\\d+\\.\\d+\\.\\d+$"
|
"pattern": "^(>=?|<=?|=|>|<)\\d+\\.\\d+\\.\\d+$"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Array of required system tools/dependencies (registry metadata)",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"description": "Deprecated alias for 'dependencies'.",
|
"description": "Array of required system tools/dependencies",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
@@ -148,29 +109,6 @@
|
|||||||
"then": {
|
"then": {
|
||||||
"required": ["trigger"]
|
"required": ["trigger"]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"if": {
|
|
||||||
"required": ["components"],
|
|
||||||
"properties": {
|
|
||||||
"components": {
|
|
||||||
"required": ["launcher"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"then": {
|
|
||||||
"required": ["trigger"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"required": ["component"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"required": ["components"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
|
|||||||
@@ -166,16 +166,6 @@ function increment() {
|
|||||||
| Cross-instance sync (multi-monitor data) | `PluginGlobalVar` or `getGlobalVar`/`setGlobalVar` | No (runtime only) | All instances |
|
| Cross-instance sync (multi-monitor data) | `PluginGlobalVar` or `getGlobalVar`/`setGlobalVar` | No (runtime only) | All instances |
|
||||||
| Quick reactive reads from settings | `pluginData` property | N/A (read-only) | Per instance |
|
| Quick reactive reads from settings | `pluginData` property | N/A (read-only) | Per instance |
|
||||||
|
|
||||||
## Plugin Path
|
|
||||||
|
|
||||||
Retrieve a plugin's installation directory at runtime:
|
|
||||||
|
|
||||||
```qml
|
|
||||||
var dir = pluginService.getPluginPath(pluginId)
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns the absolute path to the plugin's directory (e.g., `~/.config/DankMaterialShell/plugins/MyPlugin`), or an empty string if the plugin is not found. Useful for loading bundled assets (images, data files) relative to the plugin's location.
|
|
||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
1. **pluginData is reactive** - bindings update automatically when data changes
|
1. **pluginData is reactive** - bindings update automatically when data changes
|
||||||
|
|||||||
@@ -9,22 +9,15 @@
|
|||||||
| `description` | string | Short description (shown in UI) | Non-empty |
|
| `description` | string | Short description (shown in UI) | Non-empty |
|
||||||
| `version` | string | Semantic version | Pattern `^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$` |
|
| `version` | string | Semantic version | Pattern `^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$` |
|
||||||
| `author` | string | Creator name or email | Non-empty |
|
| `author` | string | Creator name or email | Non-empty |
|
||||||
| `type` | string | Plugin type | One of: `widget`, `daemon`, `launcher`, `desktop`, `composite` |
|
| `type` | string | Plugin type | One of: `widget`, `daemon`, `launcher`, `desktop` |
|
||||||
| `capabilities` | array | Plugin capabilities | At least 1 string item |
|
| `capabilities` | array | Plugin capabilities | At least 1 string item |
|
||||||
|
| `component` | string | Path to main QML file | Must start with `./`, end with `.qml` |
|
||||||
One of `component` or `components` is required (not both):
|
|
||||||
|
|
||||||
| Field | Type | Description | Validation |
|
|
||||||
|-------|------|-------------|------------|
|
|
||||||
| `component` | string | Path to main QML file (single-surface plugins) | Must start with `./`, end with `.qml` |
|
|
||||||
| `components` | object | Map of surface name to QML path (multi-surface plugins) | At least 1 entry; keys: `widget`, `desktop`, `daemon`, `launcher` |
|
|
||||||
|
|
||||||
## Conditional Requirements
|
## Conditional Requirements
|
||||||
|
|
||||||
| Condition | Required Field | Description |
|
| Condition | Required Field | Description |
|
||||||
|-----------|---------------|-------------|
|
|-----------|---------------|-------------|
|
||||||
| `type: "launcher"` | `trigger` | Trigger string for launcher activation (e.g., `=`, `#`, `!`) |
|
| `type: "launcher"` | `trigger` | Trigger string for launcher activation (e.g., `=`, `#`, `!`) |
|
||||||
| `components` has `launcher` key | `trigger` | Same requirement applies to composite plugins with a launcher surface |
|
|
||||||
|
|
||||||
## Optional Fields
|
## Optional Fields
|
||||||
|
|
||||||
@@ -32,10 +25,8 @@ One of `component` or `components` is required (not both):
|
|||||||
|-------|------|-------------|
|
|-------|------|-------------|
|
||||||
| `icon` | string | Material Design icon name (displayed in plugin list UI) |
|
| `icon` | string | Material Design icon name (displayed in plugin list UI) |
|
||||||
| `settings` | string | Path to settings QML file (must start with `./`, end with `.qml`) |
|
| `settings` | string | Path to settings QML file (must start with `./`, end with `.qml`) |
|
||||||
| `startupCheck` | string | Path to a QtObject component that gates plugin activation via a `check(done)` function (must start with `./`, end with `.qml`). See Startup Check section below. |
|
|
||||||
| `requires_dms` | string | Minimum DMS version (e.g., `>=0.1.18`), pattern `^(>=?\|<=?\|=\|>\|<)\d+\.\d+\.\d+$` |
|
| `requires_dms` | string | Minimum DMS version (e.g., `>=0.1.18`), pattern `^(>=?\|<=?\|=\|>\|<)\d+\.\d+\.\d+$` |
|
||||||
| `dependencies` | array | System tool dependencies (e.g., `["curl", "jq"]`). Registry metadata. |
|
| `requires` | array | System tool dependencies (e.g., `["curl", "jq"]`) |
|
||||||
| `requires` | array | Deprecated alias for `dependencies` |
|
|
||||||
| `permissions` | array | Required permissions |
|
| `permissions` | array | Required permissions |
|
||||||
| `trigger` | string | Launcher trigger string (required for launcher type) |
|
| `trigger` | string | Launcher trigger string (required for launcher type) |
|
||||||
|
|
||||||
@@ -62,65 +53,6 @@ Capabilities are free-form strings that describe what the plugin does. Common va
|
|||||||
- `ai` - AI/LLM integration
|
- `ai` - AI/LLM integration
|
||||||
- `slideout` - uses slideout panel
|
- `slideout` - uses slideout panel
|
||||||
|
|
||||||
## Startup Check
|
|
||||||
|
|
||||||
The `startupCheck` field points to a non-visual `QtObject` component that gates plugin activation on dependency checks. The component must expose a `check(done)` function:
|
|
||||||
|
|
||||||
```qml
|
|
||||||
import QtQuick
|
|
||||||
import qs.Common
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
function check(done) {
|
|
||||||
Proc.runCommand("myPlugin.depCheck", ["sh", "-c", "command -v mytool"], (stdout, exitCode) => {
|
|
||||||
if (exitCode === 0) {
|
|
||||||
done(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
done({
|
|
||||||
"title": I18n.tr("mytool is required"),
|
|
||||||
"details": I18n.tr("Install 'mytool' and re-enable this plugin.")
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The `done` callback accepts:
|
|
||||||
- `null` - allow activation
|
|
||||||
- A string - block with a short error message
|
|
||||||
- `{ title, details }` - block with a title and expandable details
|
|
||||||
|
|
||||||
A synchronous variant (no `done` parameter, return the result directly) is also supported.
|
|
||||||
|
|
||||||
Failed startup checks show a toast error and store the error in `pluginService.pluginLoadErrors`.
|
|
||||||
|
|
||||||
## Components (Composite Plugins)
|
|
||||||
|
|
||||||
The `components` field maps surface names to QML paths, allowing a single plugin to register multiple surfaces:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"id": "myComposite",
|
|
||||||
"name": "My Composite Plugin",
|
|
||||||
"description": "Daemon + widget + desktop from one plugin",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"author": "Developer Name",
|
|
||||||
"type": "composite",
|
|
||||||
"capabilities": ["daemon", "dankbar-widget", "desktop-widget"],
|
|
||||||
"icon": "extension",
|
|
||||||
"components": {
|
|
||||||
"daemon": "./MyDaemon.qml",
|
|
||||||
"widget": "./MyBarWidget.qml",
|
|
||||||
"desktop": "./MyDesktopWidget.qml"
|
|
||||||
},
|
|
||||||
"settings": "./Settings.qml",
|
|
||||||
"permissions": ["settings_read", "settings_write"]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Valid surface keys: `widget`, `desktop`, `daemon`, `launcher`. Provide any subset. Each surface is loaded independently in the appropriate registry.
|
|
||||||
|
|
||||||
## Complete Example
|
## Complete Example
|
||||||
|
|
||||||
```json
|
```json
|
||||||
@@ -135,9 +67,8 @@ Valid surface keys: `widget`, `desktop`, `daemon`, `launcher`. Provide any subse
|
|||||||
"component": "./MyWidget.qml",
|
"component": "./MyWidget.qml",
|
||||||
"icon": "extension",
|
"icon": "extension",
|
||||||
"settings": "./Settings.qml",
|
"settings": "./Settings.qml",
|
||||||
"startupCheck": "./StartupCheck.qml",
|
|
||||||
"requires_dms": ">=0.1.18",
|
"requires_dms": ">=0.1.18",
|
||||||
"dependencies": ["curl", "jq"],
|
"requires": ["curl", "jq"],
|
||||||
"permissions": ["settings_read", "settings_write", "process", "network"]
|
"permissions": ["settings_read", "settings_write", "process", "network"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -235,12 +235,10 @@ Conditionally show/hide the bar pill:
|
|||||||
```qml
|
```qml
|
||||||
PluginComponent {
|
PluginComponent {
|
||||||
visibilityCommand: "pgrep -x myapp"
|
visibilityCommand: "pgrep -x myapp"
|
||||||
visibilityInterval: 5 // seconds between checks
|
visibilityInterval: 5 // seconds between checks; polling pauses while the bar is hidden
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Bar reveal optimization:** The visibility timer automatically pauses while the bar is hidden (auto-hide mode) and resumes checks when the bar is revealed. This is handled via the internal `_barRevealed` property - no plugin code needed. Plugins using `visibilityCommand` with `visibilityInterval` benefit from this automatically.
|
|
||||||
|
|
||||||
## Popout Namespace
|
## Popout Namespace
|
||||||
|
|
||||||
For plugins with multiple popout instances, use `layerNamespacePlugin` to isolate popout state:
|
For plugins with multiple popout instances, use `layerNamespacePlugin` to isolate popout state:
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ jobs:
|
|||||||
check-updates:
|
check-updates:
|
||||||
name: Check for updates
|
name: Check for updates
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'AvengeMedia/DankMaterialShell'
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
has_updates: ${{ steps.check.outputs.has_updates }}
|
has_updates: ${{ steps.check.outputs.has_updates }}
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ jobs:
|
|||||||
check-updates:
|
check-updates:
|
||||||
name: Check package/series updates
|
name: Check package/series updates
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'AvengeMedia/DankMaterialShell'
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
has_updates: ${{ steps.check.outputs.has_updates }}
|
has_updates: ${{ steps.check.outputs.has_updates }}
|
||||||
|
|||||||
@@ -1,268 +0,0 @@
|
|||||||
name: Void Linux XBPS Repository
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 2,5,14,17,20,23 * * *" # 9am, 12pm, 3pm, 6pm, 9pm, 12am EST (UTC times shown)
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
force_rebuild:
|
|
||||||
description: 'Force rebuilding packages even if they already exist in the repository'
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
build_git:
|
|
||||||
description: 'Build dms-git package'
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
build_dms:
|
|
||||||
description: 'Build stable dms package'
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
build_greeter:
|
|
||||||
description: 'Build stable dms-greeter package'
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-deploy:
|
|
||||||
name: Build & Deploy XBPS packages
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'AvengeMedia/DankMaterialShell'
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Checkout gh-pages branch
|
|
||||||
run: |
|
|
||||||
git clone --branch gh-pages https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git gh-pages-repo || {
|
|
||||||
echo "⚠️ gh-pages branch not found or empty, initializing a new one..."
|
|
||||||
mkdir gh-pages-repo
|
|
||||||
cd gh-pages-repo
|
|
||||||
git init
|
|
||||||
git checkout -b gh-pages
|
|
||||||
git remote add origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git
|
|
||||||
cd ..
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Install XBPS Static Utilities
|
|
||||||
run: |
|
|
||||||
mkdir -p ${{ github.workspace }}/xbps
|
|
||||||
curl -s -L https://repo-default.voidlinux.org/static/xbps-static-latest.x86_64-musl.tar.xz | tar -xJ -C ${{ github.workspace }}/xbps
|
|
||||||
echo "${{ github.workspace }}/xbps/usr/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Clone void-packages
|
|
||||||
run: |
|
|
||||||
git clone --depth=1 https://github.com/void-linux/void-packages.git
|
|
||||||
|
|
||||||
- name: Inject templates
|
|
||||||
run: |
|
|
||||||
cp -R distro/void/srcpkgs/dms void-packages/srcpkgs/
|
|
||||||
cp -R distro/void/srcpkgs/dms-greeter void-packages/srcpkgs/
|
|
||||||
cp -R distro/void/srcpkgs/dms-git void-packages/srcpkgs/
|
|
||||||
|
|
||||||
- name: Enable unprivileged user namespaces (Ubuntu 24.04)
|
|
||||||
run: |
|
|
||||||
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 || true
|
|
||||||
|
|
||||||
- name: Bootstrap xbps-src
|
|
||||||
run: |
|
|
||||||
cd void-packages
|
|
||||||
./xbps-src binary-bootstrap
|
|
||||||
|
|
||||||
- name: Configure signing keys and trust
|
|
||||||
run: |
|
|
||||||
# Write private key; extract and register the public key
|
|
||||||
echo "${{ secrets.XBPS_PRIVATE_KEY }}" > /tmp/xbps_privkey.pem
|
|
||||||
chmod 600 /tmp/xbps_privkey.pem
|
|
||||||
|
|
||||||
# Extract public key in PEM format
|
|
||||||
openssl rsa -in /tmp/xbps_privkey.pem -pubout -out /tmp/dms-key.pub
|
|
||||||
rm -f /tmp/xbps_privkey.pem
|
|
||||||
|
|
||||||
# Compute MD5 fingerprint in colon-separated hex format
|
|
||||||
FINGERPRINT=$(openssl rsa -pubin -in /tmp/dms-key.pub -outform DER 2>/dev/null | openssl dgst -md5 -c | tr '[:upper:]' '[:lower:]' | awk '{print $NF}')
|
|
||||||
|
|
||||||
# Format key in XML property list (plist) format as expected by xbps
|
|
||||||
mkdir -p /tmp/keys
|
|
||||||
cat <<EOF > "/tmp/keys/${FINGERPRINT}.plist"
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>public-key</key>
|
|
||||||
<data>$(base64 -w0 /tmp/dms-key.pub)</data>
|
|
||||||
<key>public-key-size</key>
|
|
||||||
<integer>4096</integer>
|
|
||||||
<key>signature-by</key>
|
|
||||||
<string>AvengeMedia</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Copy keys to all host and chroot trust stores
|
|
||||||
sudo mkdir -p /var/db/xbps/keys
|
|
||||||
sudo cp "/tmp/keys/${FINGERPRINT}.plist" "/var/db/xbps/keys/${FINGERPRINT}.plist"
|
|
||||||
|
|
||||||
mkdir -p void-packages/masterdir/var/db/xbps/keys
|
|
||||||
cp "/tmp/keys/${FINGERPRINT}.plist" "void-packages/masterdir/var/db/xbps/keys/${FINGERPRINT}.plist"
|
|
||||||
|
|
||||||
mkdir -p void-packages/etc/xbps.d/keys
|
|
||||||
cp "/tmp/keys/${FINGERPRINT}.plist" "void-packages/etc/xbps.d/keys/${FINGERPRINT}.plist"
|
|
||||||
|
|
||||||
mkdir -p void-packages/common/repo-keys
|
|
||||||
cp "/tmp/keys/${FINGERPRINT}.plist" "void-packages/common/repo-keys/${FINGERPRINT}.plist"
|
|
||||||
|
|
||||||
rm -rf /tmp/keys /tmp/dms-key.pub
|
|
||||||
|
|
||||||
- name: Configure repositories
|
|
||||||
run: |
|
|
||||||
# Append the repository to repos-remote templates so xbps-src translates it automatically
|
|
||||||
echo "repository=https://avengemedia.github.io/DankLinux/current" >> void-packages/etc/xbps.d/repos-remote.conf
|
|
||||||
echo "repository=https://avengemedia.github.io/DankLinux/current" >> void-packages/etc/xbps.d/repos-remote-x86_64-multilib.conf
|
|
||||||
|
|
||||||
# Add any existing compiled packages to the build cache directory to avoid rebuilds
|
|
||||||
if [ -d "gh-pages-repo/current" ]; then
|
|
||||||
mkdir -p void-packages/hostdir/binpkgs
|
|
||||||
cp -L gh-pages-repo/current/*.xbps void-packages/hostdir/binpkgs/ 2>/dev/null || true
|
|
||||||
xbps-rindex -a void-packages/hostdir/binpkgs/*.xbps 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build packages
|
|
||||||
run: |
|
|
||||||
mkdir -p gh-pages-repo/current
|
|
||||||
|
|
||||||
BUILD_DMS="${{ github.event.inputs.build_dms || 'true' }}"
|
|
||||||
BUILD_GREETER="${{ github.event.inputs.build_greeter || 'true' }}"
|
|
||||||
BUILD_GIT="${{ github.event.inputs.build_git || 'true' }}"
|
|
||||||
FORCE_REBUILD="${{ github.event.inputs.force_rebuild || 'false' }}"
|
|
||||||
|
|
||||||
if [ "${{ github.event_name }}" = "schedule" ]; then
|
|
||||||
BUILD_DMS="false"
|
|
||||||
BUILD_GREETER="false"
|
|
||||||
BUILD_GIT="true"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${{ github.event_name }}" = "release" ]; then
|
|
||||||
BUILD_DMS="true"
|
|
||||||
BUILD_GREETER="true"
|
|
||||||
BUILD_GIT="false"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "=== Starting Builds ==="
|
|
||||||
echo "DMS stable build enabled: $BUILD_DMS"
|
|
||||||
echo "Greeter stable build enabled: $BUILD_GREETER"
|
|
||||||
echo "Git build enabled: $BUILD_GIT"
|
|
||||||
echo "Force rebuild: $FORCE_REBUILD"
|
|
||||||
|
|
||||||
cd void-packages
|
|
||||||
|
|
||||||
# 1. Build dms-git (development package)
|
|
||||||
if [ "$BUILD_GIT" = "true" ]; then
|
|
||||||
# Calculate dynamic git version (tag.commits.hash)
|
|
||||||
GIT_VER=$(git -C .. describe --tags --always | sed 's/^v//; s/-/./g')
|
|
||||||
echo "🔨 Preparing dms-git version $GIT_VER"
|
|
||||||
|
|
||||||
# Stage source tarball in the xbps-src source cache.
|
|
||||||
# --transform adds a top-level directory so xbps-src can extract
|
|
||||||
# into $wrksrc (create_wrksrc=yes handles the rest).
|
|
||||||
SRC_CACHE="hostdir/sources/dms-git-${GIT_VER}"
|
|
||||||
mkdir -p "$SRC_CACHE"
|
|
||||||
tar -czf "${SRC_CACHE}/dms-git-${GIT_VER}.tar.gz" \
|
|
||||||
--exclude=void-packages \
|
|
||||||
--exclude=gh-pages-repo \
|
|
||||||
--exclude=.git \
|
|
||||||
--exclude=danklinux \
|
|
||||||
-C .. .
|
|
||||||
|
|
||||||
CHECKSUM=$(sha256sum "${SRC_CACHE}/dms-git-${GIT_VER}.tar.gz" | cut -d' ' -f1)
|
|
||||||
|
|
||||||
# Dynamically patch template version, checksum, and distfiles
|
|
||||||
sed -i "s/^version=.*/version=${GIT_VER}/" srcpkgs/dms-git/template
|
|
||||||
sed -i "s/^checksum=.*/checksum=${CHECKSUM}/" srcpkgs/dms-git/template
|
|
||||||
sed -i "s|^distfiles=.*|distfiles=\"dms-git-${GIT_VER}.tar.gz\"|" srcpkgs/dms-git/template
|
|
||||||
|
|
||||||
EXPECTED_GIT_FILE="dms-git-${GIT_VER}_1.x86_64.xbps"
|
|
||||||
|
|
||||||
if [ -f "../gh-pages-repo/current/$EXPECTED_GIT_FILE" ] && [ "$FORCE_REBUILD" != "true" ]; then
|
|
||||||
echo "✅ $EXPECTED_GIT_FILE already exists, skipping build."
|
|
||||||
else
|
|
||||||
echo "🔨 Compiling dms-git..."
|
|
||||||
./xbps-src pkg dms-git
|
|
||||||
rm -f "../gh-pages-repo/current/${EXPECTED_GIT_FILE}"
|
|
||||||
cp -L hostdir/binpkgs/dms-git-*.xbps ../gh-pages-repo/current/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Build stable dms package
|
|
||||||
if [ "$BUILD_DMS" = "true" ]; then
|
|
||||||
STABLE_VER=$(grep -E '^version=' srcpkgs/dms/template | cut -d= -f2 | tr -d '"')
|
|
||||||
STABLE_REV=$(grep -E '^revision=' srcpkgs/dms/template | cut -d= -f2 | tr -d '"')
|
|
||||||
|
|
||||||
EXPECTED_DMS_FILE="dms-${STABLE_VER}_${STABLE_REV}.x86_64.xbps"
|
|
||||||
if [ -f "../gh-pages-repo/current/$EXPECTED_DMS_FILE" ] && [ "$FORCE_REBUILD" != "true" ]; then
|
|
||||||
echo "✅ $EXPECTED_DMS_FILE already exists, skipping build."
|
|
||||||
else
|
|
||||||
echo "🔨 Compiling dms ($STABLE_VER)..."
|
|
||||||
./xbps-src pkg dms
|
|
||||||
rm -f "../gh-pages-repo/current/${EXPECTED_DMS_FILE}"
|
|
||||||
cp -L hostdir/binpkgs/dms-${STABLE_VER}_${STABLE_REV}.x86_64.xbps ../gh-pages-repo/current/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. Build stable dms-greeter package
|
|
||||||
if [ "$BUILD_GREETER" = "true" ]; then
|
|
||||||
GREETER_VER=$(grep -E '^version=' srcpkgs/dms-greeter/template | cut -d= -f2 | tr -d '"')
|
|
||||||
GREETER_REV=$(grep -E '^revision=' srcpkgs/dms-greeter/template | cut -d= -f2 | tr -d '"')
|
|
||||||
|
|
||||||
EXPECTED_GREETER_FILE="dms-greeter-${GREETER_VER}_${GREETER_REV}.x86_64.xbps"
|
|
||||||
if [ -f "../gh-pages-repo/current/$EXPECTED_GREETER_FILE" ] && [ "$FORCE_REBUILD" != "true" ]; then
|
|
||||||
echo "✅ $EXPECTED_GREETER_FILE already exists, skipping build."
|
|
||||||
else
|
|
||||||
echo "🔨 Compiling dms-greeter ($GREETER_VER)..."
|
|
||||||
./xbps-src pkg dms-greeter
|
|
||||||
rm -f "../gh-pages-repo/current/${EXPECTED_GREETER_FILE}"
|
|
||||||
cp -L hostdir/binpkgs/dms-greeter-${GREETER_VER}_${GREETER_REV}.x86_64.xbps ../gh-pages-repo/current/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Index and sign repository
|
|
||||||
run: |
|
|
||||||
cd gh-pages-repo/current
|
|
||||||
|
|
||||||
# Clean up any stale or dangling signature files to prevent O_CREAT ENOENT errors
|
|
||||||
rm -f *.sig2 *.sig
|
|
||||||
|
|
||||||
# Guard: nothing to index if no .xbps files exist
|
|
||||||
if ! ls *.xbps 1>/dev/null 2>&1; then
|
|
||||||
echo "⚠️ No .xbps files found to index, skipping."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Regenerate repo index
|
|
||||||
xbps-rindex -a $(pwd)/*.xbps
|
|
||||||
|
|
||||||
# Sign repository
|
|
||||||
echo "${{ secrets.XBPS_PRIVATE_KEY }}" > /tmp/xbps_privkey.pem
|
|
||||||
chmod 600 /tmp/xbps_privkey.pem
|
|
||||||
|
|
||||||
xbps-rindex --sign --signedby "AvengeMedia <AvengeMedia.US@gmail.com>" --privkey /tmp/xbps_privkey.pem $(pwd)
|
|
||||||
xbps-rindex --sign-pkg --privkey /tmp/xbps_privkey.pem $(pwd)/*.xbps
|
|
||||||
|
|
||||||
rm -f /tmp/xbps_privkey.pem
|
|
||||||
|
|
||||||
- name: Deploy to gh-pages branch
|
|
||||||
run: |
|
|
||||||
cd gh-pages-repo
|
|
||||||
git config user.name "github-actions[bot]"
|
|
||||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
||||||
git add current/
|
|
||||||
git diff --quiet && git diff --staged --quiet || (git commit -m "Update XBPS packages [skip ci]" && git push origin gh-pages)
|
|
||||||
@@ -110,9 +110,6 @@ bin/
|
|||||||
# Core dumps
|
# Core dumps
|
||||||
core.*
|
core.*
|
||||||
|
|
||||||
# prek-installed local git hooks (generated from .pre-commit-config.yaml)
|
|
||||||
.githooks/
|
|
||||||
|
|
||||||
# direnv
|
# direnv
|
||||||
.envrc
|
.envrc
|
||||||
.direnv/
|
.direnv/
|
||||||
@@ -120,9 +117,3 @@ quickshell/dms-plugins
|
|||||||
__pycache__
|
__pycache__
|
||||||
|
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
# Void (xbps) build artifacts
|
|
||||||
*.xbps
|
|
||||||
distro/void/temp/
|
|
||||||
distro/void/hostdir/
|
|
||||||
distro/void/masterdir*/
|
|
||||||
|
|||||||
@@ -20,22 +20,6 @@ repos:
|
|||||||
language: system
|
language: system
|
||||||
files: ^core/.*\.(go|mod|sum)$
|
files: ^core/.*\.(go|mod|sum)$
|
||||||
pass_filenames: false
|
pass_filenames: false
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: settings-search-index
|
|
||||||
name: settings search index is up to date
|
|
||||||
entry: bash -c 'python3 quickshell/translations/extract_settings_index.py >/dev/null || exit 1; if ! git diff --exit-code -- quickshell/translations/settings_search_index.json; then echo "settings_search_index.json is out of date; run quickshell/translations/extract_settings_index.py and stage the result" >&2; exit 1; fi'
|
|
||||||
language: system
|
|
||||||
files: ^quickshell/(Modules/Settings/.*\.qml|Modals/Settings/SettingsSidebar\.qml|translations/extract_settings_index\.py)$
|
|
||||||
pass_filenames: false
|
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: i18n-term-freeze
|
|
||||||
name: i18n term freeze (no new I18n.tr/qsTr terms)
|
|
||||||
entry: python3 quickshell/translations/check_term_freeze.py
|
|
||||||
language: system
|
|
||||||
files: ^quickshell/(.*\.qml|translations/(term_freeze\.json|check_term_freeze\.py|extract_translations\.py))$
|
|
||||||
pass_filenames: false
|
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
- id: no-console-in-qml
|
- id: no-console-in-qml
|
||||||
|
|||||||
@@ -74,12 +74,10 @@ install-icon:
|
|||||||
@echo "Icon installed"
|
@echo "Icon installed"
|
||||||
|
|
||||||
install-desktop:
|
install-desktop:
|
||||||
@echo "Installing desktop entries..."
|
@echo "Installing desktop entry..."
|
||||||
@install -D -m 644 $(ASSETS_DIR)/dms-open.desktop $(APPLICATIONS_DIR)/dms-open.desktop
|
@install -D -m 644 $(ASSETS_DIR)/dms-open.desktop $(APPLICATIONS_DIR)/dms-open.desktop
|
||||||
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
|
|
||||||
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.notepad.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
|
|
||||||
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
|
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
|
||||||
@echo "Desktop entries installed"
|
@echo "Desktop entry installed"
|
||||||
|
|
||||||
install: install-bin install-shell install-completions install-systemd install-icon install-desktop
|
install: install-bin install-shell install-completions install-systemd install-icon install-desktop
|
||||||
@echo ""
|
@echo ""
|
||||||
@@ -118,12 +116,10 @@ uninstall-icon:
|
|||||||
@echo "Icon removed"
|
@echo "Icon removed"
|
||||||
|
|
||||||
uninstall-desktop:
|
uninstall-desktop:
|
||||||
@echo "Removing desktop entries..."
|
@echo "Removing desktop entry..."
|
||||||
@rm -f $(APPLICATIONS_DIR)/dms-open.desktop
|
@rm -f $(APPLICATIONS_DIR)/dms-open.desktop
|
||||||
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
|
|
||||||
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
|
|
||||||
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
|
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
|
||||||
@echo "Desktop entries removed"
|
@echo "Desktop entry removed"
|
||||||
|
|
||||||
uninstall: uninstall-systemd uninstall-desktop uninstall-icon uninstall-completions uninstall-shell uninstall-bin
|
uninstall: uninstall-systemd uninstall-desktop uninstall-icon uninstall-completions uninstall-shell uninstall-bin
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=DankMaterialShell
|
|
||||||
GenericName=Desktop Shell
|
|
||||||
Comment=Material 3 inspired shell for Wayland compositors
|
|
||||||
Exec=dms run
|
|
||||||
Icon=danklogo
|
|
||||||
Terminal=false
|
|
||||||
NoDisplay=true
|
|
||||||
StartupNotify=false
|
|
||||||
Categories=Utility;
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=DMS Notepad
|
|
||||||
GenericName=Text Editor
|
|
||||||
Comment=Quick notes and text files in the dank desktop shell
|
|
||||||
Exec=dms ipc call notepad openFile %f
|
|
||||||
Icon=danklogo
|
|
||||||
Terminal=false
|
|
||||||
NoDisplay=true
|
|
||||||
Categories=Utility;TextEditor;
|
|
||||||
MimeType=text/plain;text/markdown;
|
|
||||||
StartupNotify=false
|
|
||||||
+77
-80
@@ -1,85 +1,82 @@
|
|||||||
dir: internal/mocks/{{.InterfaceDirRelative}}
|
with-expecter: true
|
||||||
structname: Mock{{.InterfaceName}}
|
dir: "internal/mocks/{{.InterfaceDirRelative}}"
|
||||||
pkgname: '{{.SrcPackageName}}'
|
mockname: "Mock{{.InterfaceName}}"
|
||||||
filename: 'mock_{{.InterfaceName}}.go'
|
outpkg: "{{.PackageName}}"
|
||||||
template: testify
|
|
||||||
template-data:
|
|
||||||
unroll-variadic: true
|
|
||||||
packages:
|
packages:
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/geolocation
|
|
||||||
pkgname: mocks_geolocation
|
|
||||||
interfaces:
|
|
||||||
Client: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/cups
|
|
||||||
pkgname: mocks_cups
|
|
||||||
interfaces:
|
|
||||||
CUPSClientInterface: {}
|
|
||||||
PkHelper:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/cups_pkhelper
|
|
||||||
pkgname: mocks_cups_pkhelper
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/server/evdev:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/evdev
|
|
||||||
pkgname: mocks_evdev
|
|
||||||
interfaces:
|
|
||||||
EvdevDevice: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/server/network:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/network
|
|
||||||
pkgname: mocks_network
|
|
||||||
interfaces:
|
|
||||||
Backend: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/wlcontext
|
|
||||||
pkgname: mocks_wlcontext
|
|
||||||
interfaces:
|
|
||||||
WaylandContext: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/utils:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/utils
|
|
||||||
pkgname: mocks_utils
|
|
||||||
interfaces:
|
|
||||||
AppChecker: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/version:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/version
|
|
||||||
pkgname: mocks_version
|
|
||||||
interfaces:
|
|
||||||
VersionFetcher: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/wlclient
|
|
||||||
pkgname: mocks_wlclient
|
|
||||||
interfaces:
|
|
||||||
WaylandDisplay: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/plugins:
|
|
||||||
interfaces:
|
|
||||||
GitClient: {}
|
|
||||||
github.com/AvengeMedia/DankMaterialShell/core/internal/server/brightness:
|
|
||||||
config:
|
|
||||||
dir: internal/mocks/brightness
|
|
||||||
pkgname: mocks_brightness
|
|
||||||
interfaces:
|
|
||||||
DBusConn: {}
|
|
||||||
github.com/Wifx/gonetworkmanager/v2:
|
github.com/Wifx/gonetworkmanager/v2:
|
||||||
interfaces:
|
interfaces:
|
||||||
AccessPoint: {}
|
NetworkManager:
|
||||||
ActiveConnection: {}
|
Device:
|
||||||
Connection: {}
|
DeviceWireless:
|
||||||
Device: {}
|
AccessPoint:
|
||||||
DeviceWireless: {}
|
Connection:
|
||||||
IP4Config: {}
|
Settings:
|
||||||
NetworkManager: {}
|
ActiveConnection:
|
||||||
Settings: {}
|
IP4Config:
|
||||||
github.com/godbus/dbus/v5:
|
|
||||||
interfaces:
|
|
||||||
BusObject: {}
|
|
||||||
net:
|
net:
|
||||||
interfaces:
|
interfaces:
|
||||||
Conn: {}
|
Conn:
|
||||||
|
github.com/AvengeMedia/danklinux/internal/plugins:
|
||||||
|
interfaces:
|
||||||
|
GitClient:
|
||||||
|
github.com/godbus/dbus/v5:
|
||||||
|
interfaces:
|
||||||
|
BusObject:
|
||||||
|
github.com/AvengeMedia/danklinux/internal/server/brightness:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/brightness"
|
||||||
|
outpkg: mocks_brightness
|
||||||
|
interfaces:
|
||||||
|
DBusConn:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/geolocation"
|
||||||
|
outpkg: mocks_geolocation
|
||||||
|
interfaces:
|
||||||
|
Client:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/server/network:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/network"
|
||||||
|
outpkg: mocks_network
|
||||||
|
interfaces:
|
||||||
|
Backend:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/cups"
|
||||||
|
outpkg: mocks_cups
|
||||||
|
interfaces:
|
||||||
|
CUPSClientInterface:
|
||||||
|
PkHelper:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/cups_pkhelper"
|
||||||
|
outpkg: mocks_cups_pkhelper
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/server/evdev:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/evdev"
|
||||||
|
outpkg: mocks_evdev
|
||||||
|
interfaces:
|
||||||
|
EvdevDevice:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/version:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/version"
|
||||||
|
outpkg: mocks_version
|
||||||
|
interfaces:
|
||||||
|
VersionFetcher:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/wlcontext"
|
||||||
|
outpkg: mocks_wlcontext
|
||||||
|
interfaces:
|
||||||
|
WaylandContext:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/wlclient"
|
||||||
|
outpkg: mocks_wlclient
|
||||||
|
interfaces:
|
||||||
|
WaylandDisplay:
|
||||||
|
github.com/AvengeMedia/DankMaterialShell/core/internal/utils:
|
||||||
|
config:
|
||||||
|
dir: "internal/mocks/utils"
|
||||||
|
outpkg: mocks_utils
|
||||||
|
interfaces:
|
||||||
|
AppChecker:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/golangci/golangci-lint
|
- repo: https://github.com/golangci/golangci-lint
|
||||||
rev: v2.12.2
|
rev: v2.10.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: golangci-lint-fmt
|
- id: golangci-lint-fmt
|
||||||
require_serial: true
|
require_serial: true
|
||||||
|
|||||||
+2
-5
@@ -10,7 +10,7 @@ Go-based backend for DankMaterialShell providing system integration, IPC, and in
|
|||||||
Command-line interface and daemon for shell management and system control.
|
Command-line interface and daemon for shell management and system control.
|
||||||
|
|
||||||
**dankinstall**
|
**dankinstall**
|
||||||
Distribution-aware installer for deploying DMS and compositor configurations on Arch, Fedora, Debian, Ubuntu, openSUSE, Gentoo, and Void. Supports both an interactive TUI and a headless (unattended) mode via CLI flags.
|
Distribution-aware installer for deploying DMS and compositor configurations on Arch, Fedora, Debian, Ubuntu, openSUSE, and Gentoo. Supports both an interactive TUI and a headless (unattended) mode via CLI flags.
|
||||||
|
|
||||||
## System Integration
|
## System Integration
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ Set the `DANKINSTALL_LOG_DIR` environment variable to override the log directory
|
|||||||
|
|
||||||
## Supported Distributions
|
## Supported Distributions
|
||||||
|
|
||||||
Arch, Fedora, Debian, Ubuntu, openSUSE, Gentoo, Void (and derivatives)
|
Arch, Fedora, Debian, Ubuntu, openSUSE, Gentoo (and derivatives)
|
||||||
|
|
||||||
**Arch Linux**
|
**Arch Linux**
|
||||||
Uses `pacman` for system packages, builds AUR packages via `makepkg`, no AUR helper dependency.
|
Uses `pacman` for system packages, builds AUR packages via `makepkg`, no AUR helper dependency.
|
||||||
@@ -214,7 +214,4 @@ Most packages available in standard repos. Minimal building required.
|
|||||||
**Gentoo**
|
**Gentoo**
|
||||||
Uses Portage with GURU overlay. Automatically configures USE flags. Variable success depending on system configuration.
|
Uses Portage with GURU overlay. Automatically configures USE flags. Variable success depending on system configuration.
|
||||||
|
|
||||||
**Void Linux**
|
|
||||||
Uses XBPS with the DMS and DankLinux self-hosted repositories.
|
|
||||||
|
|
||||||
See installer output for distribution-specific details during installation.
|
See installer output for distribution-specific details during installation.
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ var (
|
|||||||
replaceConfigs []string
|
replaceConfigs []string
|
||||||
replaceConfigsAll bool
|
replaceConfigsAll bool
|
||||||
yes bool
|
yes bool
|
||||||
danksearch bool
|
|
||||||
dankcalendar bool
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
@@ -51,8 +49,6 @@ func init() {
|
|||||||
rootCmd.Flags().StringSliceVar(&replaceConfigs, "replace-configs", []string{}, "Deploy only named configs (e.g. niri,ghostty)")
|
rootCmd.Flags().StringSliceVar(&replaceConfigs, "replace-configs", []string{}, "Deploy only named configs (e.g. niri,ghostty)")
|
||||||
rootCmd.Flags().BoolVar(&replaceConfigsAll, "replace-configs-all", false, "Deploy and replace all configurations")
|
rootCmd.Flags().BoolVar(&replaceConfigsAll, "replace-configs-all", false, "Deploy and replace all configurations")
|
||||||
rootCmd.Flags().BoolVarP(&yes, "yes", "y", false, "Auto-confirm all prompts")
|
rootCmd.Flags().BoolVarP(&yes, "yes", "y", false, "Auto-confirm all prompts")
|
||||||
rootCmd.Flags().BoolVar(&danksearch, "danksearch", false, "Install danksearch and enable its user indexing service")
|
|
||||||
rootCmd.Flags().BoolVar(&dankcalendar, "dankcalendar", false, "Install dankcalendar")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -78,8 +74,6 @@ func runDankinstall(cmd *cobra.Command, args []string) error {
|
|||||||
"replace-configs",
|
"replace-configs",
|
||||||
"replace-configs-all",
|
"replace-configs-all",
|
||||||
"yes",
|
"yes",
|
||||||
"danksearch",
|
|
||||||
"dankcalendar",
|
|
||||||
}
|
}
|
||||||
var set []string
|
var set []string
|
||||||
for _, name := range headlessOnly {
|
for _, name := range headlessOnly {
|
||||||
@@ -115,8 +109,6 @@ func runHeadless() error {
|
|||||||
ReplaceConfigs: replaceConfigs,
|
ReplaceConfigs: replaceConfigs,
|
||||||
ReplaceConfigsAll: replaceConfigsAll,
|
ReplaceConfigsAll: replaceConfigsAll,
|
||||||
Yes: yes,
|
Yes: yes,
|
||||||
DankSearch: danksearch,
|
|
||||||
DankCalendar: dankcalendar,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runner := headless.NewRunner(cfg)
|
runner := headless.NewRunner(cfg)
|
||||||
|
|||||||
@@ -63,15 +63,6 @@ var clipPasteCmd = &cobra.Command{
|
|||||||
Run: runClipPaste,
|
Run: runClipPaste,
|
||||||
}
|
}
|
||||||
|
|
||||||
var clipSendPasteCmd = &cobra.Command{
|
|
||||||
Use: "send-paste",
|
|
||||||
Short: "Send a paste keystroke to the focused window",
|
|
||||||
Long: "Emulate ctrl+v (or ctrl+shift+v with --shift) via a virtual keyboard. Works without server.",
|
|
||||||
Run: runClipSendPaste,
|
|
||||||
}
|
|
||||||
|
|
||||||
var clipSendPasteShift bool
|
|
||||||
|
|
||||||
var clipWatchCmd = &cobra.Command{
|
var clipWatchCmd = &cobra.Command{
|
||||||
Use: "watch [command]",
|
Use: "watch [command]",
|
||||||
Short: "Watch clipboard for changes",
|
Short: "Watch clipboard for changes",
|
||||||
@@ -225,10 +216,8 @@ func init() {
|
|||||||
|
|
||||||
clipMigrateCmd.Flags().BoolVar(&clipMigrateDelete, "delete", false, "Delete cliphist db after successful migration")
|
clipMigrateCmd.Flags().BoolVar(&clipMigrateDelete, "delete", false, "Delete cliphist db after successful migration")
|
||||||
|
|
||||||
clipSendPasteCmd.Flags().BoolVarP(&clipSendPasteShift, "shift", "s", false, "Send ctrl+shift+v (terminal paste)")
|
|
||||||
|
|
||||||
clipConfigCmd.AddCommand(clipConfigGetCmd, clipConfigSetCmd)
|
clipConfigCmd.AddCommand(clipConfigGetCmd, clipConfigSetCmd)
|
||||||
clipboardCmd.AddCommand(clipCopyCmd, clipPasteCmd, clipSendPasteCmd, clipWatchCmd, clipHistoryCmd, clipGetCmd, clipDeleteCmd, clipClearCmd, clipSearchCmd, clipConfigCmd, clipExportCmd, clipImportCmd, clipMigrateCmd)
|
clipboardCmd.AddCommand(clipCopyCmd, clipPasteCmd, clipWatchCmd, clipHistoryCmd, clipGetCmd, clipDeleteCmd, clipClearCmd, clipSearchCmd, clipConfigCmd, clipExportCmd, clipImportCmd, clipMigrateCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runClipCopy(cmd *cobra.Command, args []string) {
|
func runClipCopy(cmd *cobra.Command, args []string) {
|
||||||
@@ -325,12 +314,6 @@ func runClipPaste(cmd *cobra.Command, args []string) {
|
|||||||
os.Stdout.Write(data)
|
os.Stdout.Write(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runClipSendPaste(cmd *cobra.Command, args []string) {
|
|
||||||
if err := clipboard.SendPasteKeystroke(clipSendPasteShift); err != nil {
|
|
||||||
log.Fatalf("send-paste: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func runClipWatch(cmd *cobra.Command, args []string) {
|
func runClipWatch(cmd *cobra.Command, args []string) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|||||||
@@ -19,12 +19,7 @@ var (
|
|||||||
var colorCmd = &cobra.Command{
|
var colorCmd = &cobra.Command{
|
||||||
Use: "color",
|
Use: "color",
|
||||||
Short: "Color utilities",
|
Short: "Color utilities",
|
||||||
Long: `Color utilities including picking colors from the screen.
|
Long: "Color utilities including picking colors from the screen",
|
||||||
|
|
||||||
This is the screen eyedropper CLI. To open the in-shell color modal, use:
|
|
||||||
dms ipc call color-picker toggle
|
|
||||||
|
|
||||||
See: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var colorPickCmd = &cobra.Command{
|
var colorPickCmd = &cobra.Command{
|
||||||
@@ -34,9 +29,6 @@ var colorPickCmd = &cobra.Command{
|
|||||||
|
|
||||||
Click on any pixel to capture its color, or press Escape to cancel.
|
Click on any pixel to capture its color, or press Escape to cancel.
|
||||||
|
|
||||||
This is the screen eyedropper CLI. To open the in-shell color modal, use:
|
|
||||||
dms ipc call color-picker toggle
|
|
||||||
|
|
||||||
Output format flags (mutually exclusive, default: --hex):
|
Output format flags (mutually exclusive, default: --hex):
|
||||||
--hex - Hexadecimal (#RRGGBB)
|
--hex - Hexadecimal (#RRGGBB)
|
||||||
--rgb - RGB values (R G B)
|
--rgb - RGB values (R G B)
|
||||||
|
|||||||
@@ -77,15 +77,10 @@ var killCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ipcCmd = &cobra.Command{
|
var ipcCmd = &cobra.Command{
|
||||||
Use: "ipc",
|
Use: "ipc [target] [function] [args...]",
|
||||||
Short: "Send IPC commands to running DMS shell",
|
Short: "Send IPC commands to running DMS shell",
|
||||||
Long: `Send IPC commands to the running DMS shell.
|
|
||||||
|
|
||||||
dms ipc call <target> <function> [args...] invoke a command
|
|
||||||
dms ipc list list all targets and functions
|
|
||||||
|
|
||||||
Full reference: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
|
|
||||||
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
_ = findConfig(cmd, args)
|
||||||
return getShellIPCCompletions(args, toComplete), cobra.ShellCompDirectiveNoFileComp
|
return getShellIPCCompletions(args, toComplete), cobra.ShellCompDirectiveNoFileComp
|
||||||
},
|
},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
@@ -93,21 +88,11 @@ Full reference: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var ipcListCmd = &cobra.Command{
|
|
||||||
Use: "list",
|
|
||||||
Short: "List all IPC targets and functions",
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
printIPCHelp()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ipcCmd.AddCommand(ipcListCmd)
|
|
||||||
ipcCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
|
ipcCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
|
||||||
|
_ = findConfig(cmd, args)
|
||||||
printIPCHelp()
|
printIPCHelp()
|
||||||
})
|
})
|
||||||
pluginsUpdateCmd.Flags().BoolP("all", "a", false, "Update all installed plugins")
|
|
||||||
pluginsUpdateCmd.Flags().Bool("check", false, "Check for available updates without applying them")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var debugSrvCmd = &cobra.Command{
|
var debugSrvCmd = &cobra.Command{
|
||||||
@@ -186,22 +171,10 @@ var pluginsUninstallCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var pluginsUpdateCmd = &cobra.Command{
|
var pluginsUpdateCmd = &cobra.Command{
|
||||||
Use: "update [plugin-id]",
|
Use: "update <plugin-id>",
|
||||||
Short: "Update a plugin by ID, or all plugins",
|
Short: "Update a plugin by ID",
|
||||||
Long: "Update an installed DMS plugin using its ID (e.g., 'myPlugin'). If --all or -a is specified, all installed plugins will be updated.",
|
Long: "Update an installed DMS plugin using its ID (e.g., 'myPlugin'). Plugin names are also supported.",
|
||||||
Args: func(cmd *cobra.Command, args []string) error {
|
Args: cobra.ExactArgs(1),
|
||||||
updateAll, _ := cmd.Flags().GetBool("all")
|
|
||||||
if updateAll {
|
|
||||||
if len(args) > 0 {
|
|
||||||
return fmt.Errorf("cannot specify plugin ID when using --all/-a")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if len(args) != 1 {
|
|
||||||
return fmt.Errorf("requires exactly 1 arg (plugin ID) or use --all/-a")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
if len(args) != 0 {
|
if len(args) != 0 {
|
||||||
return nil, cobra.ShellCompDirectiveNoFileComp
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
||||||
@@ -209,26 +182,6 @@ var pluginsUpdateCmd = &cobra.Command{
|
|||||||
return getInstalledPluginIDs(), cobra.ShellCompDirectiveNoFileComp
|
return getInstalledPluginIDs(), cobra.ShellCompDirectiveNoFileComp
|
||||||
},
|
},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
checkOnly, _ := cmd.Flags().GetBool("check")
|
|
||||||
updateAll, _ := cmd.Flags().GetBool("all")
|
|
||||||
if checkOnly {
|
|
||||||
if updateAll {
|
|
||||||
if err := checkAllPluginsCLI(); err != nil {
|
|
||||||
log.Fatalf("Error checking updates: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := checkPluginCLI(args[0]); err != nil {
|
|
||||||
log.Fatalf("Error checking update: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if updateAll {
|
|
||||||
if err := updateAllPluginsCLI(); err != nil {
|
|
||||||
log.Fatalf("Error updating plugins: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := updatePluginCLI(args[0]); err != nil {
|
if err := updatePluginCLI(args[0]); err != nil {
|
||||||
log.Fatalf("Error updating plugin: %v", err)
|
log.Fatalf("Error updating plugin: %v", err)
|
||||||
}
|
}
|
||||||
@@ -314,13 +267,6 @@ func browsePlugins() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
feedback := plugins.FetchFeedback()
|
|
||||||
|
|
||||||
nameByID := make(map[string]string, len(pluginList))
|
|
||||||
for _, plugin := range pluginList {
|
|
||||||
nameByID[plugin.ID] = plugin.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("\nAvailable Plugins (%d):\n\n", len(pluginList))
|
fmt.Printf("\nAvailable Plugins (%d):\n\n", len(pluginList))
|
||||||
for _, plugin := range pluginList {
|
for _, plugin := range pluginList {
|
||||||
installed, _ := manager.IsInstalled(plugin)
|
installed, _ := manager.IsInstalled(plugin)
|
||||||
@@ -344,26 +290,6 @@ func browsePlugins() error {
|
|||||||
if len(plugin.Dependencies) > 0 {
|
if len(plugin.Dependencies) > 0 {
|
||||||
fmt.Printf(" Dependencies: %s\n", strings.Join(plugin.Dependencies, ", "))
|
fmt.Printf(" Dependencies: %s\n", strings.Join(plugin.Dependencies, ", "))
|
||||||
}
|
}
|
||||||
if fb, ok := feedback[plugin.ID]; ok {
|
|
||||||
fmt.Printf(" Upvotes: %d\n", fb.Upvotes)
|
|
||||||
if len(fb.Status) > 0 {
|
|
||||||
fmt.Printf(" Status: %s\n", strings.Join(fb.Status, ", "))
|
|
||||||
}
|
|
||||||
if fb.IssueURL != "" {
|
|
||||||
fmt.Printf(" Discuss: %s\n", fb.IssueURL)
|
|
||||||
}
|
|
||||||
if len(fb.Similar) > 0 {
|
|
||||||
names := make([]string, len(fb.Similar))
|
|
||||||
for i, id := range fb.Similar {
|
|
||||||
if name, ok := nameByID[id]; ok {
|
|
||||||
names[i] = name
|
|
||||||
} else {
|
|
||||||
names[i] = id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf(" Related: %s\n", strings.Join(names, ", "))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,11 +330,7 @@ func listInstalledPlugins() error {
|
|||||||
fmt.Printf("\nInstalled Plugins (%d):\n\n", len(installedNames))
|
fmt.Printf("\nInstalled Plugins (%d):\n\n", len(installedNames))
|
||||||
for _, id := range installedNames {
|
for _, id := range installedNames {
|
||||||
if plugin, ok := pluginMap[id]; ok {
|
if plugin, ok := pluginMap[id]; ok {
|
||||||
hasUpdateStr := ""
|
fmt.Printf(" %s\n", plugin.Name)
|
||||||
if hasUpdates, _, err := manager.HasUpdates(id, plugin); err == nil && hasUpdates {
|
|
||||||
hasUpdateStr = " (update available)"
|
|
||||||
}
|
|
||||||
fmt.Printf(" %s%s\n", plugin.Name, hasUpdateStr)
|
|
||||||
fmt.Printf(" ID: %s\n", plugin.ID)
|
fmt.Printf(" ID: %s\n", plugin.ID)
|
||||||
fmt.Printf(" Category: %s\n", plugin.Category)
|
fmt.Printf(" Category: %s\n", plugin.Category)
|
||||||
fmt.Printf(" Author: %s\n", plugin.Author)
|
fmt.Printf(" Author: %s\n", plugin.Author)
|
||||||
@@ -588,160 +510,6 @@ func updatePluginCLI(idOrName string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateAllPluginsCLI() error {
|
|
||||||
manager, err := plugins.NewManager()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create manager: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
registry, err := plugins.NewRegistry()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create registry: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
installed, err := manager.ListInstalled()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to list installed plugins: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginList, _ := registry.List()
|
|
||||||
|
|
||||||
var errs []error
|
|
||||||
for _, pluginID := range installed {
|
|
||||||
plugin := plugins.FindByIDOrName(pluginID, pluginList)
|
|
||||||
if plugin != nil {
|
|
||||||
fmt.Printf("Updating plugin: %s (ID: %s)\n", plugin.Name, plugin.ID)
|
|
||||||
if err := manager.Update(*plugin); err != nil {
|
|
||||||
if strings.Contains(err.Error(), "cannot update system plugin") {
|
|
||||||
fmt.Printf("Skipping system plugin: %s\n", plugin.Name)
|
|
||||||
} else {
|
|
||||||
errs = append(errs, fmt.Errorf("failed to update %s: %w", plugin.Name, err))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Plugin updated successfully: %s\n", plugin.Name)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Updating plugin: %s\n", pluginID)
|
|
||||||
if err := manager.UpdateByIDOrName(pluginID); err != nil {
|
|
||||||
if strings.Contains(err.Error(), "cannot update system plugin") {
|
|
||||||
fmt.Printf("Skipping system plugin: %s\n", pluginID)
|
|
||||||
} else {
|
|
||||||
errs = append(errs, fmt.Errorf("failed to update %s: %w", pluginID, err))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Plugin updated successfully: %s\n", pluginID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(errs) > 0 {
|
|
||||||
for _, err := range errs {
|
|
||||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("failed to update some plugins")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkPluginCLI(idOrName string) error {
|
|
||||||
manager, err := plugins.NewManager()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create manager: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
registry, err := plugins.NewRegistry()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create registry: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginList, _ := registry.List()
|
|
||||||
plugin := plugins.FindByIDOrName(idOrName, pluginList)
|
|
||||||
|
|
||||||
if plugin != nil {
|
|
||||||
installed, err := manager.IsInstalled(*plugin)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to check install status: %w", err)
|
|
||||||
}
|
|
||||||
if !installed {
|
|
||||||
return fmt.Errorf("plugin not installed: %s", plugin.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
hasUpdates, _, err := manager.HasUpdates(plugin.ID, *plugin)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to check updates: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasUpdates {
|
|
||||||
fmt.Printf("Update available for plugin: %s (ID: %s)\n", plugin.Name, plugin.ID)
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Plugin is up to date: %s\n", plugin.Name)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
dummyPlugin := plugins.Plugin{ID: idOrName}
|
|
||||||
hasUpdates, _, err := manager.HasUpdates(idOrName, dummyPlugin)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to check updates: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasUpdates {
|
|
||||||
fmt.Printf("Update available for plugin: %s\n", idOrName)
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Plugin is up to date: %s\n", idOrName)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkAllPluginsCLI() error {
|
|
||||||
manager, err := plugins.NewManager()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create manager: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
registry, err := plugins.NewRegistry()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create registry: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
installed, err := manager.ListInstalled()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to list installed plugins: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginList, _ := registry.List()
|
|
||||||
|
|
||||||
var count int
|
|
||||||
for _, pluginID := range installed {
|
|
||||||
plugin := plugins.FindByIDOrName(pluginID, pluginList)
|
|
||||||
var hasUpdates bool
|
|
||||||
var name string
|
|
||||||
|
|
||||||
if plugin != nil {
|
|
||||||
name = plugin.Name
|
|
||||||
hasUpdates, _, _ = manager.HasUpdates(pluginID, *plugin)
|
|
||||||
} else {
|
|
||||||
name = pluginID
|
|
||||||
dummyPlugin := plugins.Plugin{ID: pluginID}
|
|
||||||
hasUpdates, _, _ = manager.HasUpdates(pluginID, dummyPlugin)
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasUpdates {
|
|
||||||
fmt.Printf("Update available for plugin: %s (ID: %s)\n", name, pluginID)
|
|
||||||
count++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if count > 0 {
|
|
||||||
fmt.Printf("\nFound %d plugin(s) with available updates.\n", count)
|
|
||||||
} else {
|
|
||||||
fmt.Println("All plugins are up to date.")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getCommonCommands() []*cobra.Command {
|
func getCommonCommands() []*cobra.Command {
|
||||||
return []*cobra.Command{
|
return []*cobra.Command{
|
||||||
versionCmd,
|
versionCmd,
|
||||||
|
|||||||
@@ -37,11 +37,9 @@ var resolveIncludeCmd = &cobra.Command{
|
|||||||
"cursor.lua",
|
"cursor.lua",
|
||||||
"windowrules.lua",
|
"windowrules.lua",
|
||||||
"cursor.kdl",
|
"cursor.kdl",
|
||||||
"layout.kdl",
|
|
||||||
"outputs.kdl",
|
"outputs.kdl",
|
||||||
"binds.kdl",
|
"binds.kdl",
|
||||||
"cursor.conf",
|
"cursor.conf",
|
||||||
"layout.conf",
|
|
||||||
"outputs.conf",
|
"outputs.conf",
|
||||||
"binds.conf",
|
"binds.conf",
|
||||||
}, cobra.ShellCompDirectiveNoFileComp
|
}, cobra.ShellCompDirectiveNoFileComp
|
||||||
|
|||||||
@@ -557,8 +557,6 @@ func detectRunningWM() string {
|
|||||||
return "Hyprland"
|
return "Hyprland"
|
||||||
case os.Getenv("NIRI_SOCKET") != "":
|
case os.Getenv("NIRI_SOCKET") != "":
|
||||||
return "niri"
|
return "niri"
|
||||||
case os.Getenv("MANGO_INSTANCE_SIGNATURE") != "":
|
|
||||||
return "MangoWC"
|
|
||||||
case os.Getenv("MIRACLESOCK") != "":
|
case os.Getenv("MIRACLESOCK") != "":
|
||||||
return "Miracle WM"
|
return "Miracle WM"
|
||||||
case os.Getenv("XDG_CURRENT_DESKTOP") != "":
|
case os.Getenv("XDG_CURRENT_DESKTOP") != "":
|
||||||
@@ -886,7 +884,6 @@ func checkOptionalDependencies() []checkResult {
|
|||||||
{"cava", "cava", "Audio visualizer", true},
|
{"cava", "cava", "Audio visualizer", true},
|
||||||
{"khal", "khal", "Calendar events", false},
|
{"khal", "khal", "Calendar events", false},
|
||||||
{"danksearch", "dsearch", "File search", false},
|
{"danksearch", "dsearch", "File search", false},
|
||||||
{"dankcalendar", "dcal", "Calendar app", false},
|
|
||||||
{"fprintd", "fprintd-list", "Fingerprint auth", false},
|
{"fprintd", "fprintd-list", "Fingerprint auth", false},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,14 +32,13 @@ var greeterCmd = &cobra.Command{
|
|||||||
var (
|
var (
|
||||||
greeterConfigSyncFn = greeter.SyncDMSConfigs
|
greeterConfigSyncFn = greeter.SyncDMSConfigs
|
||||||
sharedAuthSyncFn = sharedpam.SyncAuthConfig
|
sharedAuthSyncFn = sharedpam.SyncAuthConfig
|
||||||
greeterIsNixOSFn = greeter.IsNixOS
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var greeterInstallCmd = &cobra.Command{
|
var greeterInstallCmd = &cobra.Command{
|
||||||
Use: "install",
|
Use: "install",
|
||||||
Short: "Install and configure DMS greeter",
|
Short: "Install and configure DMS greeter",
|
||||||
Long: "Install greetd and configure it to use DMS as the greeter interface",
|
Long: "Install greetd and configure it to use DMS as the greeter interface",
|
||||||
PreRunE: preRunGreeterMutation,
|
PreRunE: preRunPrivileged,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
yes, _ := cmd.Flags().GetBool("yes")
|
yes, _ := cmd.Flags().GetBool("yes")
|
||||||
term, _ := cmd.Flags().GetBool("terminal")
|
term, _ := cmd.Flags().GetBool("terminal")
|
||||||
@@ -65,9 +64,6 @@ var greeterSyncCmd = &cobra.Command{
|
|||||||
Short: "Sync DMS theme and settings with greeter",
|
Short: "Sync DMS theme and settings with greeter",
|
||||||
Long: "Synchronize your current user's DMS theme, settings, and wallpaper configuration with the login greeter screen. Also updates a per-user cache slot at users/<username>/ for multi-account greeter theme preview.\n\nUse --profile on secondary accounts to sync only your own users/<username>/ slot without sudo or greetd changes.",
|
Long: "Synchronize your current user's DMS theme, settings, and wallpaper configuration with the login greeter screen. Also updates a per-user cache slot at users/<username>/ for multi-account greeter theme preview.\n\nUse --profile on secondary accounts to sync only your own users/<username>/ slot without sudo or greetd changes.",
|
||||||
PreRunE: func(cmd *cobra.Command, args []string) error {
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
||||||
if err := rejectNixOSGreeterMutation(cmd); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
profile, _ := cmd.Flags().GetBool("profile")
|
profile, _ := cmd.Flags().GetBool("profile")
|
||||||
if profile {
|
if profile {
|
||||||
return nil
|
return nil
|
||||||
@@ -99,35 +95,6 @@ var greeterSyncCmd = &cobra.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var greeterLaunchSessionCmd = &cobra.Command{
|
|
||||||
Use: "launch-session",
|
|
||||||
Short: "Launch a remembered greeter session",
|
|
||||||
Hidden: true,
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
sessionID, _ := cmd.Flags().GetString("session-id")
|
|
||||||
fromMemory, _ := cmd.Flags().GetBool("from-memory")
|
|
||||||
cacheDir, _ := cmd.Flags().GetString("cache-dir")
|
|
||||||
|
|
||||||
if fromMemory {
|
|
||||||
homeDir, err := os.UserHomeDir()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to get user home directory: %v", err)
|
|
||||||
}
|
|
||||||
if err := greeter.LaunchSessionFromMemory(cacheDir, homeDir); err != nil {
|
|
||||||
log.Fatalf("failed to launch remembered greeter session: %v", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if sessionID == "" {
|
|
||||||
log.Fatal("missing --session-id or --from-memory")
|
|
||||||
}
|
|
||||||
if err := greeter.LaunchSessionByID(sessionID); err != nil {
|
|
||||||
log.Fatalf("failed to launch greeter session %q: %v", sessionID, err)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
greeterSyncCmd.Flags().BoolP("yes", "y", false, "Non-interactive mode: skip prompts, use defaults (for UI)")
|
greeterSyncCmd.Flags().BoolP("yes", "y", false, "Non-interactive mode: skip prompts, use defaults (for UI)")
|
||||||
greeterSyncCmd.Flags().BoolP("terminal", "t", false, "Run sync in a new terminal (for entering sudo password); terminal auto-closes when done")
|
greeterSyncCmd.Flags().BoolP("terminal", "t", false, "Run sync in a new terminal (for entering sudo password); terminal auto-closes when done")
|
||||||
@@ -135,16 +102,13 @@ func init() {
|
|||||||
greeterSyncCmd.Flags().BoolP("local", "l", false, "Developer mode: force greetd config to use a local DMS checkout path")
|
greeterSyncCmd.Flags().BoolP("local", "l", false, "Developer mode: force greetd config to use a local DMS checkout path")
|
||||||
greeterSyncCmd.Flags().BoolP("profile", "p", false, "Sync only your per-user greeter slot (no sudo; for secondary accounts)")
|
greeterSyncCmd.Flags().BoolP("profile", "p", false, "Sync only your per-user greeter slot (no sudo; for secondary accounts)")
|
||||||
greeterSyncCmd.Flags().Bool("autologin", false, "Apply only greeter auto-login on startup settings to greetd (no theme or auth sync)")
|
greeterSyncCmd.Flags().Bool("autologin", false, "Apply only greeter auto-login on startup settings to greetd (no theme or auth sync)")
|
||||||
greeterLaunchSessionCmd.Flags().String("session-id", "", "Desktop session id to launch")
|
|
||||||
greeterLaunchSessionCmd.Flags().Bool("from-memory", false, "Resolve the session id from greeter memory")
|
|
||||||
greeterLaunchSessionCmd.Flags().String("cache-dir", greeter.GreeterCacheDir, "Greeter cache directory")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var greeterEnableCmd = &cobra.Command{
|
var greeterEnableCmd = &cobra.Command{
|
||||||
Use: "enable",
|
Use: "enable",
|
||||||
Short: "Enable DMS greeter in greetd config",
|
Short: "Enable DMS greeter in greetd config",
|
||||||
Long: "Configure greetd to use DMS as the greeter",
|
Long: "Configure greetd to use DMS as the greeter",
|
||||||
PreRunE: preRunGreeterMutation,
|
PreRunE: preRunPrivileged,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
yes, _ := cmd.Flags().GetBool("yes")
|
yes, _ := cmd.Flags().GetBool("yes")
|
||||||
term, _ := cmd.Flags().GetBool("terminal")
|
term, _ := cmd.Flags().GetBool("terminal")
|
||||||
@@ -180,7 +144,7 @@ var greeterUninstallCmd = &cobra.Command{
|
|||||||
Use: "uninstall",
|
Use: "uninstall",
|
||||||
Short: "Remove DMS greeter configuration and restore previous display manager",
|
Short: "Remove DMS greeter configuration and restore previous display manager",
|
||||||
Long: "Disable greetd, remove DMS managed configs, and restore the system to its pre-DMS-greeter state",
|
Long: "Disable greetd, remove DMS managed configs, and restore the system to its pre-DMS-greeter state",
|
||||||
PreRunE: preRunGreeterMutation,
|
PreRunE: preRunPrivileged,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
yes, _ := cmd.Flags().GetBool("yes")
|
yes, _ := cmd.Flags().GetBool("yes")
|
||||||
term, _ := cmd.Flags().GetBool("terminal")
|
term, _ := cmd.Flags().GetBool("terminal")
|
||||||
@@ -210,21 +174,6 @@ func init() {
|
|||||||
greeterUninstallCmd.Flags().BoolP("terminal", "t", false, "Run in a new terminal (for entering sudo password)")
|
greeterUninstallCmd.Flags().BoolP("terminal", "t", false, "Run in a new terminal (for entering sudo password)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func rejectNixOSGreeterMutation(cmd *cobra.Command) error {
|
|
||||||
if !greeterIsNixOSFn() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("dms %s is disabled on NixOS because the greeter is managed declaratively\nConfigure the DMS greeter in your NixOS module, then apply the change with your normal nixos-rebuild workflow", normalizeCommandSpec(cmd.CommandPath()))
|
|
||||||
}
|
|
||||||
|
|
||||||
func preRunGreeterMutation(cmd *cobra.Command, args []string) error {
|
|
||||||
if err := rejectNixOSGreeterMutation(cmd); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return preRunPrivileged(cmd, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
func syncGreeterConfigsAndAuth(dmsPath, compositor string, logFunc func(string), options sharedpam.SyncAuthOptions, beforeAuth func()) error {
|
func syncGreeterConfigsAndAuth(dmsPath, compositor string, logFunc func(string), options sharedpam.SyncAuthOptions, beforeAuth func()) error {
|
||||||
if err := greeterConfigSyncFn(dmsPath, compositor, logFunc, ""); err != nil {
|
if err := greeterConfigSyncFn(dmsPath, compositor, logFunc, ""); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -350,7 +299,7 @@ func installGreeter(nonInteractive bool) error {
|
|||||||
|
|
||||||
fmt.Println("\n=== Installation Complete ===")
|
fmt.Println("\n=== Installation Complete ===")
|
||||||
fmt.Println("\nTo start the greeter now, run:")
|
fmt.Println("\nTo start the greeter now, run:")
|
||||||
fmt.Println(startGreeterHint())
|
fmt.Println(" sudo systemctl start greetd")
|
||||||
fmt.Println("\nOr reboot to see the greeter at next boot.")
|
fmt.Println("\nOr reboot to see the greeter at next boot.")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -377,13 +326,7 @@ func uninstallGreeter(nonInteractive bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("\nDisabling greetd...")
|
fmt.Println("\nDisabling greetd...")
|
||||||
if isRunit() {
|
if err := privesc.Run(context.Background(), "", "systemctl", "disable", "greetd"); err != nil {
|
||||||
if err := disableRunitService("greetd"); err != nil {
|
|
||||||
fmt.Printf(" ⚠ Could not disable greetd: %v\n", err)
|
|
||||||
} else {
|
|
||||||
fmt.Println(" ✓ greetd disabled")
|
|
||||||
}
|
|
||||||
} else if err := privesc.Run(context.Background(), "", "systemctl", "disable", "greetd"); err != nil {
|
|
||||||
fmt.Printf(" ⚠ Could not disable greetd: %v\n", err)
|
fmt.Printf(" ⚠ Could not disable greetd: %v\n", err)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(" ✓ greetd disabled")
|
fmt.Println(" ✓ greetd disabled")
|
||||||
@@ -506,14 +449,6 @@ func suggestDisplayManagerRestore(nonInteractive bool) {
|
|||||||
|
|
||||||
enableDM := func(dm string) {
|
enableDM := func(dm string) {
|
||||||
fmt.Printf(" Enabling %s...\n", dm)
|
fmt.Printf(" Enabling %s...\n", dm)
|
||||||
if isRunit() {
|
|
||||||
if err := enableRunitService(dm); err != nil {
|
|
||||||
fmt.Printf(" ⚠ Failed to enable %s: %v\n", dm, err)
|
|
||||||
} else {
|
|
||||||
fmt.Printf(" ✓ %s enabled (linked into %s).\n", dm, runitServiceDir)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := privesc.Run(context.Background(), "", "systemctl", "enable", "--force", dm); err != nil {
|
if err := privesc.Run(context.Background(), "", "systemctl", "enable", "--force", dm); err != nil {
|
||||||
fmt.Printf(" ⚠ Failed to enable %s: %v\n", dm, err)
|
fmt.Printf(" ⚠ Failed to enable %s: %v\n", dm, err)
|
||||||
} else {
|
} else {
|
||||||
@@ -560,9 +495,6 @@ func suggestDisplayManagerRestore(nonInteractive bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isSystemdUnitInstalled(unit string) bool {
|
func isSystemdUnitInstalled(unit string) bool {
|
||||||
if isRunit() {
|
|
||||||
return runitServiceInstalled(unit)
|
|
||||||
}
|
|
||||||
cmd := exec.Command("systemctl", "list-unit-files", unit+".service", "--no-legend", "--no-pager")
|
cmd := exec.Command("systemctl", "list-unit-files", unit+".service", "--no-legend", "--no-pager")
|
||||||
out, err := cmd.Output()
|
out, err := cmd.Output()
|
||||||
return err == nil && strings.Contains(string(out), unit)
|
return err == nil && strings.Contains(string(out), unit)
|
||||||
@@ -1011,18 +943,6 @@ func resolveLocalDMSPath() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func disableDisplayManager(dmName string) (bool, error) {
|
func disableDisplayManager(dmName string) (bool, error) {
|
||||||
if isRunit() {
|
|
||||||
if !runitServiceEnabled(dmName) {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
fmt.Printf("\nDisabling %s (runit)...\n", dmName)
|
|
||||||
if err := disableRunitService(dmName); err != nil {
|
|
||||||
return false, fmt.Errorf("failed to disable %s: %w", dmName, err)
|
|
||||||
}
|
|
||||||
fmt.Printf(" ✓ %s disabled (removed from %s)\n", dmName, runitServiceDir)
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
state, err := getSystemdServiceState(dmName)
|
state, err := getSystemdServiceState(dmName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to check %s state: %w", dmName, err)
|
return false, fmt.Errorf("failed to check %s state: %w", dmName, err)
|
||||||
@@ -1076,21 +996,6 @@ func disableDisplayManager(dmName string) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ensureGreetdEnabled() error {
|
func ensureGreetdEnabled() error {
|
||||||
if isRunit() {
|
|
||||||
fmt.Println("\nEnabling greetd service (runit)...")
|
|
||||||
if !runitServiceInstalled("greetd") {
|
|
||||||
return fmt.Errorf("greetd service not found in %s. Please install greetd first", runitSvDir)
|
|
||||||
}
|
|
||||||
// Seat + runtime-dir setup that logind handles automatically on systemd.
|
|
||||||
ensureRunitSeat("_greeter")
|
|
||||||
ensureGreetdPamRundir()
|
|
||||||
if err := enableRunitService("greetd"); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable greetd: %w", err)
|
|
||||||
}
|
|
||||||
fmt.Printf(" ✓ greetd enabled (%s)\n", runitServiceDir)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("\nChecking greetd service status...")
|
fmt.Println("\nChecking greetd service status...")
|
||||||
|
|
||||||
state, err := getSystemdServiceState("greetd")
|
state, err := getSystemdServiceState("greetd")
|
||||||
@@ -1138,12 +1043,6 @@ func ensureGreetdEnabled() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ensureGraphicalTarget() error {
|
func ensureGraphicalTarget() error {
|
||||||
if isRunit() {
|
|
||||||
// runit has no targets; a supervised greetd service is the graphical
|
|
||||||
// login, so there is nothing to set here.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
getDefaultCmd := exec.Command("systemctl", "get-default")
|
getDefaultCmd := exec.Command("systemctl", "get-default")
|
||||||
currentTarget, err := getDefaultCmd.Output()
|
currentTarget, err := getDefaultCmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1277,7 +1176,7 @@ func enableGreeter(nonInteractive bool) error {
|
|||||||
fmt.Println("\n=== Enable Complete ===")
|
fmt.Println("\n=== Enable Complete ===")
|
||||||
fmt.Println("\nGreeter configuration verified and system state corrected.")
|
fmt.Println("\nGreeter configuration verified and system state corrected.")
|
||||||
fmt.Println("To start the greeter now, run:")
|
fmt.Println("To start the greeter now, run:")
|
||||||
fmt.Println(startGreeterHint())
|
fmt.Println(" sudo systemctl start greetd")
|
||||||
fmt.Println("\nOr reboot to see the greeter at boot time.")
|
fmt.Println("\nOr reboot to see the greeter at boot time.")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -1358,7 +1257,7 @@ func enableGreeter(nonInteractive bool) error {
|
|||||||
|
|
||||||
fmt.Println("\n=== Enable Complete ===")
|
fmt.Println("\n=== Enable Complete ===")
|
||||||
fmt.Println("\nTo start the greeter now, run:")
|
fmt.Println("\nTo start the greeter now, run:")
|
||||||
fmt.Println(startGreeterHint())
|
fmt.Println(" sudo systemctl start greetd")
|
||||||
fmt.Println("\nOr reboot to see the greeter at boot time.")
|
fmt.Println("\nOr reboot to see the greeter at boot time.")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -1434,36 +1333,24 @@ func readDefaultSessionCommand(configPath string) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func explicitGreeterCacheDirFromCommand(command string) (string, bool) {
|
func extractGreeterCacheDirFromCommand(command string) string {
|
||||||
|
if command == "" {
|
||||||
|
return greeter.GreeterCacheDir
|
||||||
|
}
|
||||||
tokens := strings.Fields(command)
|
tokens := strings.Fields(command)
|
||||||
for i := 0; i < len(tokens); i++ {
|
for i := 0; i < len(tokens); i++ {
|
||||||
token := strings.Trim(tokens[i], "\"")
|
token := strings.Trim(tokens[i], "\"")
|
||||||
if token == "--cache-dir" && i+1 < len(tokens) {
|
if token == "--cache-dir" && i+1 < len(tokens) {
|
||||||
value := strings.Trim(tokens[i+1], "\"")
|
return strings.Trim(tokens[i+1], "\"")
|
||||||
if value != "" {
|
|
||||||
return value, true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(token, "--cache-dir=") {
|
if strings.HasPrefix(token, "--cache-dir=") {
|
||||||
value := strings.TrimPrefix(token, "--cache-dir=")
|
value := strings.TrimPrefix(token, "--cache-dir=")
|
||||||
value = strings.Trim(value, "\"")
|
value = strings.Trim(value, "\"")
|
||||||
if value != "" {
|
if value != "" {
|
||||||
return value, true
|
return value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
|
|
||||||
const nixOSGreeterStateDir = "/var/lib/dms-greeter"
|
|
||||||
|
|
||||||
func greeterStatusStateDir(command string, isNixOS bool) string {
|
|
||||||
if cacheDir, ok := explicitGreeterCacheDirFromCommand(command); ok {
|
|
||||||
return cacheDir
|
|
||||||
}
|
|
||||||
if isNixOS {
|
|
||||||
return nixOSGreeterStateDir
|
|
||||||
}
|
|
||||||
return greeter.GreeterCacheDir
|
return greeter.GreeterCacheDir
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1534,8 +1421,6 @@ func packageInstallHint() string {
|
|||||||
return "Install with 'sudo dnf install dms-greeter' (requires COPR: sudo dnf copr enable avengemedia/danklinux)"
|
return "Install with 'sudo dnf install dms-greeter' (requires COPR: sudo dnf copr enable avengemedia/danklinux)"
|
||||||
case distros.FamilyArch:
|
case distros.FamilyArch:
|
||||||
return "Install from AUR with 'paru -S greetd-dms-greeter-git' or 'yay -S greetd-dms-greeter-git'"
|
return "Install from AUR with 'paru -S greetd-dms-greeter-git' or 'yay -S greetd-dms-greeter-git'"
|
||||||
case distros.FamilyVoid:
|
|
||||||
return "Install with 'sudo xbps-install -S dms-greeter' (requires DMS XBPS repo: echo 'repository=https://avengemedia.github.io/DankMaterialShell/current' | sudo tee /etc/xbps.d/dms.conf)"
|
|
||||||
default:
|
default:
|
||||||
return "Run 'dms greeter install' to install greeter"
|
return "Run 'dms greeter install' to install greeter"
|
||||||
}
|
}
|
||||||
@@ -1574,8 +1459,7 @@ func isPackageOnlyGreeterDistro() bool {
|
|||||||
config.Family == distros.FamilySUSE ||
|
config.Family == distros.FamilySUSE ||
|
||||||
config.Family == distros.FamilyUbuntu ||
|
config.Family == distros.FamilyUbuntu ||
|
||||||
config.Family == distros.FamilyFedora ||
|
config.Family == distros.FamilyFedora ||
|
||||||
config.Family == distros.FamilyArch ||
|
config.Family == distros.FamilyArch
|
||||||
config.Family == distros.FamilyVoid
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func promptCompositorChoice(compositors []string) (string, error) {
|
func promptCompositorChoice(compositors []string) (string, error) {
|
||||||
@@ -1603,10 +1487,6 @@ func checkGreeterStatus() error {
|
|||||||
fmt.Println("=== DMS Greeter Status ===")
|
fmt.Println("=== DMS Greeter Status ===")
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
|
|
||||||
if greeterIsNixOSFn() {
|
|
||||||
return checkNixOSGreeterStatus()
|
|
||||||
}
|
|
||||||
|
|
||||||
homeDir, err := os.UserHomeDir()
|
homeDir, err := os.UserHomeDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get user home directory: %w", err)
|
return fmt.Errorf("failed to get user home directory: %w", err)
|
||||||
@@ -1670,7 +1550,7 @@ func checkGreeterStatus() error {
|
|||||||
fmt.Println(" Run 'dms greeter sync' to set up group membership and permissions")
|
fmt.Println(" Run 'dms greeter sync' to set up group membership and permissions")
|
||||||
}
|
}
|
||||||
|
|
||||||
cacheDir := greeterStatusStateDir(configuredCommand, false)
|
cacheDir := extractGreeterCacheDirFromCommand(configuredCommand)
|
||||||
fmt.Println("\nGreeter Cache Directory:")
|
fmt.Println("\nGreeter Cache Directory:")
|
||||||
fmt.Printf(" Effective cache dir: %s\n", cacheDir)
|
fmt.Printf(" Effective cache dir: %s\n", cacheDir)
|
||||||
if cacheDir != greeter.GreeterCacheDir {
|
if cacheDir != greeter.GreeterCacheDir {
|
||||||
@@ -1933,85 +1813,6 @@ func checkGreeterStatus() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkNixOSGreeterStatus() error {
|
|
||||||
const configPath = "/etc/greetd/config.toml"
|
|
||||||
|
|
||||||
configuredCommand := readDefaultSessionCommand(configPath)
|
|
||||||
allGood := true
|
|
||||||
|
|
||||||
fmt.Println("Greeter Configuration:")
|
|
||||||
switch {
|
|
||||||
case strings.Contains(configuredCommand, "dms-greeter"):
|
|
||||||
fmt.Println(" ✓ DMS greeter command found")
|
|
||||||
if wrapper := extractGreeterWrapperFromCommand(configuredCommand); wrapper != "" {
|
|
||||||
fmt.Printf(" Wrapper: %s\n", wrapper)
|
|
||||||
}
|
|
||||||
case configuredCommand != "":
|
|
||||||
fmt.Println(" ⚠ greetd default session does not reference dms-greeter")
|
|
||||||
allGood = false
|
|
||||||
default:
|
|
||||||
fmt.Printf(" ℹ No readable DMS command found in %s\n", configPath)
|
|
||||||
}
|
|
||||||
fmt.Println(" ℹ NixOS manages greeter configuration declaratively; apply changes through your NixOS module.")
|
|
||||||
|
|
||||||
stateDir := greeterStatusStateDir(configuredCommand, true)
|
|
||||||
fmt.Println("\nGreeter State Directory:")
|
|
||||||
fmt.Printf(" Effective state dir: %s\n", stateDir)
|
|
||||||
if stateDir == nixOSGreeterStateDir {
|
|
||||||
fmt.Println(" ✓ Using the NixOS module state path")
|
|
||||||
}
|
|
||||||
if stat, err := os.Stat(stateDir); err == nil && stat.IsDir() {
|
|
||||||
fmt.Printf(" ✓ %s exists\n", stateDir)
|
|
||||||
} else if os.IsNotExist(err) {
|
|
||||||
fmt.Printf(" ✗ %s not found\n", stateDir)
|
|
||||||
fmt.Println(" Rebuild your NixOS configuration after enabling the DMS greeter module.")
|
|
||||||
allGood = false
|
|
||||||
} else if err != nil {
|
|
||||||
fmt.Printf(" ✗ Could not inspect %s: %v\n", stateDir, err)
|
|
||||||
allGood = false
|
|
||||||
} else {
|
|
||||||
fmt.Printf(" ✗ %s is not a directory\n", stateDir)
|
|
||||||
allGood = false
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("\nDeclarative Configuration Files:")
|
|
||||||
configFiles := []struct {
|
|
||||||
name string
|
|
||||||
path string
|
|
||||||
}{
|
|
||||||
{name: "Settings", path: filepath.Join(stateDir, "settings.json")},
|
|
||||||
{name: "Session state", path: filepath.Join(stateDir, "session.json")},
|
|
||||||
{name: "Color theme", path: filepath.Join(stateDir, "colors.json")},
|
|
||||||
}
|
|
||||||
for _, configFile := range configFiles {
|
|
||||||
if stat, err := os.Stat(configFile.path); err == nil && !stat.IsDir() {
|
|
||||||
fmt.Printf(" ✓ %s: %s\n", configFile.name, configFile.path)
|
|
||||||
} else if os.IsNotExist(err) {
|
|
||||||
fmt.Printf(" ℹ %s not present (optional; configure configHome/configFiles in the NixOS module)\n", configFile.name)
|
|
||||||
} else if err != nil {
|
|
||||||
fmt.Printf(" ⚠ %s could not be inspected: %v\n", configFile.name, err)
|
|
||||||
} else {
|
|
||||||
fmt.Printf(" ⚠ %s path is not a regular file: %s\n", configFile.name, configFile.path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("\nGroup Membership:")
|
|
||||||
fmt.Println(" ℹ User group membership is managed by NixOS and is not required for declarative theme copies.")
|
|
||||||
|
|
||||||
fmt.Println("\nGreeter PAM Authentication:")
|
|
||||||
fmt.Println(" ℹ PAM is managed by NixOS modules.")
|
|
||||||
fmt.Println(" Configure fingerprint/U2F through security.pam.services.greetd.")
|
|
||||||
|
|
||||||
fmt.Println()
|
|
||||||
if allGood {
|
|
||||||
fmt.Println("✓ NixOS greeter state looks healthy and is managed declaratively.")
|
|
||||||
} else {
|
|
||||||
fmt.Println("⚠ Some issues detected. Update the DMS greeter module and rebuild NixOS; do not run 'dms greeter sync'.")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func recentAppArmorGreeterDenials(sampleLimit int) (int, []string, error) {
|
func recentAppArmorGreeterDenials(sampleLimit int) (int, []string, error) {
|
||||||
if sampleLimit <= 0 {
|
if sampleLimit <= 0 {
|
||||||
sampleLimit = 3
|
sampleLimit = 3
|
||||||
|
|||||||
@@ -3,11 +3,9 @@ package main
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
sharedpam "github.com/AvengeMedia/DankMaterialShell/core/internal/pam"
|
sharedpam "github.com/AvengeMedia/DankMaterialShell/core/internal/pam"
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSyncGreeterConfigsAndAuthDelegatesSharedAuth(t *testing.T) {
|
func TestSyncGreeterConfigsAndAuthDelegatesSharedAuth(t *testing.T) {
|
||||||
@@ -87,57 +85,3 @@ func TestSyncGreeterConfigsAndAuthStopsOnConfigError(t *testing.T) {
|
|||||||
t.Fatal("expected auth sync not to run after config sync failure")
|
t.Fatal("expected auth sync not to run after config sync failure")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGreeterStatusStateDirUsesNixOSDefault(t *testing.T) {
|
|
||||||
if got := greeterStatusStateDir("", true); got != nixOSGreeterStateDir {
|
|
||||||
t.Fatalf("greeterStatusStateDir() = %q, want %q", got, nixOSGreeterStateDir)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGreeterStatusStateDirHonorsExplicitOverrideOnNixOS(t *testing.T) {
|
|
||||||
command := "dms-greeter --cache-dir /srv/dms-greeter --command niri"
|
|
||||||
if got := greeterStatusStateDir(command, true); got != "/srv/dms-greeter" {
|
|
||||||
t.Fatalf("greeterStatusStateDir() = %q, want %q", got, "/srv/dms-greeter")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRejectNixOSGreeterMutationBlocksImperativeCommands(t *testing.T) {
|
|
||||||
origGreeterIsNixOSFn := greeterIsNixOSFn
|
|
||||||
greeterIsNixOSFn = func() bool { return true }
|
|
||||||
t.Cleanup(func() {
|
|
||||||
greeterIsNixOSFn = origGreeterIsNixOSFn
|
|
||||||
})
|
|
||||||
|
|
||||||
for _, commandName := range []string{"install", "enable", "sync", "uninstall"} {
|
|
||||||
t.Run(commandName, func(t *testing.T) {
|
|
||||||
root := &cobra.Command{Use: "dms"}
|
|
||||||
greeterCommand := &cobra.Command{Use: "greeter"}
|
|
||||||
mutationCommand := &cobra.Command{Use: commandName}
|
|
||||||
root.AddCommand(greeterCommand)
|
|
||||||
greeterCommand.AddCommand(mutationCommand)
|
|
||||||
|
|
||||||
err := rejectNixOSGreeterMutation(mutationCommand)
|
|
||||||
if err == nil {
|
|
||||||
t.Fatalf("expected NixOS greeter %s to be rejected", commandName)
|
|
||||||
}
|
|
||||||
if !strings.Contains(err.Error(), "dms greeter "+commandName+" is disabled on NixOS") {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
if strings.Contains(err.Error(), "/var/cache/dms-greeter") {
|
|
||||||
t.Fatalf("NixOS remediation should not recommend the non-NixOS cache path: %v", err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRejectNixOSGreeterMutationAllowsOtherDistros(t *testing.T) {
|
|
||||||
origGreeterIsNixOSFn := greeterIsNixOSFn
|
|
||||||
greeterIsNixOSFn = func() bool { return false }
|
|
||||||
t.Cleanup(func() {
|
|
||||||
greeterIsNixOSFn = origGreeterIsNixOSFn
|
|
||||||
})
|
|
||||||
|
|
||||||
if err := rejectNixOSGreeterMutation(&cobra.Command{Use: "sync"}); err != nil {
|
|
||||||
t.Fatalf("expected non-NixOS greeter command to be allowed, got %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -38,17 +38,10 @@ var matugenCheckCmd = &cobra.Command{
|
|||||||
Run: runMatugenCheck,
|
Run: runMatugenCheck,
|
||||||
}
|
}
|
||||||
|
|
||||||
var matugenPreviewCmd = &cobra.Command{
|
|
||||||
Use: "preview",
|
|
||||||
Short: "Preview Matugen scheme colors without applying them",
|
|
||||||
Run: runMatugenPreview,
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
matugenCmd.AddCommand(matugenGenerateCmd)
|
matugenCmd.AddCommand(matugenGenerateCmd)
|
||||||
matugenCmd.AddCommand(matugenQueueCmd)
|
matugenCmd.AddCommand(matugenQueueCmd)
|
||||||
matugenCmd.AddCommand(matugenCheckCmd)
|
matugenCmd.AddCommand(matugenCheckCmd)
|
||||||
matugenCmd.AddCommand(matugenPreviewCmd)
|
|
||||||
|
|
||||||
for _, cmd := range []*cobra.Command{matugenGenerateCmd, matugenQueueCmd} {
|
for _, cmd := range []*cobra.Command{matugenGenerateCmd, matugenQueueCmd} {
|
||||||
cmd.Flags().String("state-dir", "", "State directory for cache files")
|
cmd.Flags().String("state-dir", "", "State directory for cache files")
|
||||||
@@ -69,8 +62,6 @@ func init() {
|
|||||||
|
|
||||||
matugenQueueCmd.Flags().Bool("wait", true, "Wait for completion")
|
matugenQueueCmd.Flags().Bool("wait", true, "Wait for completion")
|
||||||
matugenQueueCmd.Flags().Duration("timeout", 90*time.Second, "Timeout for waiting")
|
matugenQueueCmd.Flags().Duration("timeout", 90*time.Second, "Timeout for waiting")
|
||||||
matugenPreviewCmd.Flags().String("source-color", "", "Source color used to generate previews")
|
|
||||||
matugenPreviewCmd.Flags().Float64("contrast", 0, "Contrast value from -1 to 1 (0 = standard)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildMatugenOptions(cmd *cobra.Command) matugen.Options {
|
func buildMatugenOptions(cmd *cobra.Command) matugen.Options {
|
||||||
@@ -209,17 +200,3 @@ func runMatugenCheck(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
fmt.Println(string(data))
|
fmt.Println(string(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func runMatugenPreview(cmd *cobra.Command, args []string) {
|
|
||||||
sourceColor, _ := cmd.Flags().GetString("source-color")
|
|
||||||
contrast, _ := cmd.Flags().GetFloat64("contrast")
|
|
||||||
previews, err := matugen.PreviewSchemes(sourceColor, contrast)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to generate Matugen previews: %v", err)
|
|
||||||
}
|
|
||||||
data, err := json.Marshal(previews)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to marshal Matugen previews: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Println(string(data))
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/greeter"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/greeter"
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
|
||||||
@@ -299,9 +298,6 @@ func runSetup() error {
|
|||||||
if wmSelected {
|
if wmSelected {
|
||||||
if wm == deps.WindowManagerMango {
|
if wm == deps.WindowManagerMango {
|
||||||
useSystemd = false
|
useSystemd = false
|
||||||
} else if isVoidSetup() {
|
|
||||||
useSystemd = false
|
|
||||||
fmt.Println("\nVoid Linux detected; deploying non-systemd session config.")
|
|
||||||
} else {
|
} else {
|
||||||
useSystemd = promptSystemd()
|
useSystemd = promptSystemd()
|
||||||
}
|
}
|
||||||
@@ -376,15 +372,6 @@ func runSetup() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isVoidSetup() bool {
|
|
||||||
osInfo, err := distros.GetOSInfo()
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
config, exists := distros.Registry[osInfo.Distribution.ID]
|
|
||||||
return exists && config.Family == distros.FamilyVoid
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add user to the input group for the evdev manager for inut state tracking.
|
// Add user to the input group for the evdev manager for inut state tracking.
|
||||||
// Caps Lock OSD and the Caps Lock bar indicator.
|
// Caps Lock OSD and the Caps Lock bar indicator.
|
||||||
func ensureInputGroup() {
|
func ensureInputGroup() {
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDefaultImmutablePolicyAllowsSyncButBlocksEnable(t *testing.T) {
|
|
||||||
var policyFile cliPolicyFile
|
|
||||||
if err := json.Unmarshal(defaultCLIPolicyJSON, &policyFile); err != nil {
|
|
||||||
t.Fatalf("failed to parse embedded CLI policy: %v", err)
|
|
||||||
}
|
|
||||||
if policyFile.BlockedCommands == nil {
|
|
||||||
t.Fatal("embedded CLI policy has no blocked_commands")
|
|
||||||
}
|
|
||||||
|
|
||||||
blocked := normalizeBlockedCommands(*policyFile.BlockedCommands)
|
|
||||||
if !commandBlockedByPolicy("greeter enable", blocked) {
|
|
||||||
t.Fatal("expected greeter enable to remain blocked on immutable/image-based systems")
|
|
||||||
}
|
|
||||||
if commandBlockedByPolicy("greeter sync", blocked) {
|
|
||||||
t.Fatal("expected greeter sync to remain available on immutable/image-based systems")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
|
|
||||||
)
|
|
||||||
|
|
||||||
// runit (Void Linux) service helpers. Services live in /etc/sv and are "enabled"
|
|
||||||
// by symlinking them into the /var/service supervision dir, so the greeter
|
|
||||||
// commands branch on isRunit() instead of shelling systemctl.
|
|
||||||
|
|
||||||
const (
|
|
||||||
runitSvDir = "/etc/sv"
|
|
||||||
runitServiceDir = "/var/service"
|
|
||||||
)
|
|
||||||
|
|
||||||
// isRunit reports whether this system is supervised by runit (Void Linux).
|
|
||||||
func isRunit() bool {
|
|
||||||
if fi, err := os.Stat("/run/runit"); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if _, err := os.Stat("/run/systemd/system"); err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if fi, err := os.Stat(runitServiceDir); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func runitServiceInstalled(name string) bool {
|
|
||||||
fi, err := os.Stat(runitSvDir + "/" + name)
|
|
||||||
return err == nil && fi.IsDir()
|
|
||||||
}
|
|
||||||
|
|
||||||
func runitServiceEnabled(name string) bool {
|
|
||||||
_, err := os.Lstat(runitServiceDir + "/" + name)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// enableRunitService links a service into /var/service (idempotent).
|
|
||||||
func enableRunitService(name string) error {
|
|
||||||
if !runitServiceInstalled(name) {
|
|
||||||
return fmt.Errorf("runit service %q not found in %s", name, runitSvDir)
|
|
||||||
}
|
|
||||||
if runitServiceEnabled(name) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return privesc.Run(context.Background(), "", "ln", "-sf",
|
|
||||||
runitSvDir+"/"+name, runitServiceDir+"/"+name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// disableRunitService removes a service's supervision symlink.
|
|
||||||
func disableRunitService(name string) error {
|
|
||||||
if !runitServiceEnabled(name) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return privesc.Run(context.Background(), "", "rm", "-f",
|
|
||||||
runitServiceDir+"/"+name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensureRunitSeat sets up the seat access a Wayland greeter needs on runit (the
|
|
||||||
// equivalent of logind on systemd): enables seatd and adds the greeter user to
|
|
||||||
// the seat/video/input groups. Failures are reported but non-fatal.
|
|
||||||
func ensureRunitSeat(greeterUser string) {
|
|
||||||
if runitServiceInstalled("seatd") {
|
|
||||||
if err := enableRunitService("seatd"); err != nil {
|
|
||||||
fmt.Printf(" ⚠ could not enable seatd: %v\n", err)
|
|
||||||
} else {
|
|
||||||
fmt.Println(" ✓ seatd enabled")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fmt.Println(" ⚠ seatd not installed — the greeter compositor needs it for GPU/seat access")
|
|
||||||
}
|
|
||||||
if err := privesc.Run(context.Background(), "", "usermod", "-aG", "_seatd,video,input", greeterUser); err != nil {
|
|
||||||
fmt.Printf(" ⚠ could not add %s to seat groups: %v\n", greeterUser, err)
|
|
||||||
} else {
|
|
||||||
fmt.Printf(" ✓ %s added to seat groups (_seatd, video, input)\n", greeterUser)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensureGreetdPamRundir adds pam_rundir to the greetd PAM stack so the post-login
|
|
||||||
// session gets an XDG_RUNTIME_DIR on systems without logind (Void with seatd).
|
|
||||||
// Appended outside DMS's managed auth block so it survives `dms greeter sync`.
|
|
||||||
func ensureGreetdPamRundir() {
|
|
||||||
const pamPath = "/etc/pam.d/greetd"
|
|
||||||
data, err := os.ReadFile(pamPath)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf(" ⚠ could not read %s: %v\n", pamPath, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if strings.Contains(string(data), "pam_rundir") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
line := "session optional pam_rundir.so"
|
|
||||||
if err := privesc.Run(context.Background(), "", "sh", "-c",
|
|
||||||
fmt.Sprintf("printf '%%s\\n' %q >> %s", line, pamPath)); err != nil {
|
|
||||||
fmt.Printf(" ⚠ could not add pam_rundir to %s: %v\n", pamPath, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
fmt.Println(" ✓ pam_rundir added to greetd PAM (provides XDG_RUNTIME_DIR for the session)")
|
|
||||||
}
|
|
||||||
|
|
||||||
// startGreeterHint returns the init-appropriate "start greetd now" command.
|
|
||||||
func startGreeterHint() string {
|
|
||||||
if isRunit() {
|
|
||||||
return " sudo sv up greetd"
|
|
||||||
}
|
|
||||||
return " sudo systemctl start greetd"
|
|
||||||
}
|
|
||||||
@@ -19,7 +19,7 @@ func init() {
|
|||||||
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
|
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
|
||||||
runCmd.Flags().MarkHidden("daemon-child")
|
runCmd.Flags().MarkHidden("daemon-child")
|
||||||
|
|
||||||
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd, greeterLaunchSessionCmd)
|
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd)
|
||||||
authCmd.AddCommand(authSyncCmd)
|
authCmd.AddCommand(authSyncCmd)
|
||||||
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
|
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
|
||||||
updateCmd.AddCommand(updateCheckCmd)
|
updateCmd.AddCommand(updateCheckCmd)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func init() {
|
|||||||
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
|
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
|
||||||
runCmd.Flags().MarkHidden("daemon-child")
|
runCmd.Flags().MarkHidden("daemon-child")
|
||||||
|
|
||||||
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd, greeterLaunchSessionCmd)
|
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd)
|
||||||
authCmd.AddCommand(authSyncCmd)
|
authCmd.AddCommand(authSyncCmd)
|
||||||
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
|
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
|
||||||
pluginsCmd.AddCommand(pluginsBrowseCmd, pluginsListCmd, pluginsInstallCmd, pluginsUninstallCmd, pluginsUpdateCmd)
|
pluginsCmd.AddCommand(pluginsBrowseCmd, pluginsListCmd, pluginsInstallCmd, pluginsUninstallCmd, pluginsUpdateCmd)
|
||||||
|
|||||||
@@ -101,13 +101,6 @@ func getServerSocketPath() string {
|
|||||||
runtimeDir = os.TempDir()
|
runtimeDir = os.TempDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
if parentPID, ok := sessionParentPID(os.Getenv("WAYLAND_DISPLAY")); ok {
|
|
||||||
sessionSock := filepath.Join(runtimeDir, fmt.Sprintf("danklinux-%d.sock", parentPID))
|
|
||||||
if _, err := os.Stat(sessionSock); err == nil {
|
|
||||||
return sessionSock
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
entries, err := os.ReadDir(runtimeDir)
|
entries, err := os.ReadDir(runtimeDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return filepath.Join(runtimeDir, "danklinux.sock")
|
return filepath.Join(runtimeDir, "danklinux.sock")
|
||||||
|
|||||||
+34
-133
@@ -101,23 +101,14 @@ func getPIDFilePath() string {
|
|||||||
return filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.pid", os.Getpid()))
|
return filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.pid", os.Getpid()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSessionFilePath() string {
|
|
||||||
return filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.session", os.Getpid()))
|
|
||||||
}
|
|
||||||
|
|
||||||
func writePIDFile(childPID int) error {
|
func writePIDFile(childPID int) error {
|
||||||
pidFile := getPIDFilePath()
|
pidFile := getPIDFilePath()
|
||||||
if display := os.Getenv("WAYLAND_DISPLAY"); display != "" {
|
|
||||||
if err := os.WriteFile(getSessionFilePath(), []byte(display), 0o644); err != nil {
|
|
||||||
log.Warnf("Failed to write session file: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return os.WriteFile(pidFile, []byte(strconv.Itoa(childPID)), 0o644)
|
return os.WriteFile(pidFile, []byte(strconv.Itoa(childPID)), 0o644)
|
||||||
}
|
}
|
||||||
|
|
||||||
func removePIDFile() {
|
func removePIDFile() {
|
||||||
os.Remove(getPIDFilePath())
|
pidFile := getPIDFilePath()
|
||||||
os.Remove(getSessionFilePath())
|
os.Remove(pidFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAllDMSPIDs() []int {
|
func getAllDMSPIDs() []int {
|
||||||
@@ -234,9 +225,6 @@ func runShellInteractive(session bool) {
|
|||||||
if os.Getenv("QT_QPA_PLATFORM") == "" {
|
if os.Getenv("QT_QPA_PLATFORM") == "" {
|
||||||
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
|
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
|
||||||
}
|
}
|
||||||
if os.Getenv("QSG_USE_SIMPLE_ANIMATION_DRIVER") == "" {
|
|
||||||
cmd.Env = append(cmd.Env, "QSG_USE_SIMPLE_ANIMATION_DRIVER=1")
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.Env = appendLogEnv(cmd.Env)
|
cmd.Env = appendLogEnv(cmd.Env)
|
||||||
|
|
||||||
@@ -399,11 +387,9 @@ func killShell() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
if !strings.HasPrefix(entry.Name(), "danklinux-") {
|
if strings.HasPrefix(entry.Name(), "danklinux-") && strings.HasSuffix(entry.Name(), ".pid") {
|
||||||
continue
|
pidFile := filepath.Join(dir, entry.Name())
|
||||||
}
|
os.Remove(pidFile)
|
||||||
if strings.HasSuffix(entry.Name(), ".pid") || strings.HasSuffix(entry.Name(), ".session") {
|
|
||||||
os.Remove(filepath.Join(dir, entry.Name()))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -491,9 +477,6 @@ func runShellDaemon(session bool) {
|
|||||||
if os.Getenv("QT_QPA_PLATFORM") == "" {
|
if os.Getenv("QT_QPA_PLATFORM") == "" {
|
||||||
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
|
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
|
||||||
}
|
}
|
||||||
if os.Getenv("QSG_USE_SIMPLE_ANIMATION_DRIVER") == "" {
|
|
||||||
cmd.Env = append(cmd.Env, "QSG_USE_SIMPLE_ANIMATION_DRIVER=1")
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.Env = appendLogEnv(cmd.Env)
|
cmd.Env = appendLogEnv(cmd.Env)
|
||||||
|
|
||||||
@@ -582,11 +565,7 @@ func runShellDaemon(session bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var qsHasAnyDisplay = sync.OnceValue(func() bool {
|
var qsHasAnyDisplay = sync.OnceValue(func() bool {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
out, err := exec.Command("qs", "ipc", "--help").Output()
|
||||||
defer cancel()
|
|
||||||
cmd := exec.CommandContext(ctx, "qs", "ipc", "--help")
|
|
||||||
cmd.WaitDelay = 500 * time.Millisecond
|
|
||||||
out, err := cmd.Output()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -622,34 +601,13 @@ func parseTargetsFromIPCShowOutput(output string) ipcTargets {
|
|||||||
return targets
|
return targets
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildQsIPCBaseArgs() ([]string, error) {
|
|
||||||
cmdArgs := []string{"ipc"}
|
|
||||||
switch pid, ok := getSessionDMSPID(); {
|
|
||||||
case ok:
|
|
||||||
cmdArgs = append(cmdArgs, "--pid", strconv.Itoa(pid))
|
|
||||||
default:
|
|
||||||
if err := findConfig(nil, nil); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if qsHasAnyDisplay() {
|
|
||||||
cmdArgs = append(cmdArgs, "--any-display")
|
|
||||||
}
|
|
||||||
cmdArgs = append(cmdArgs, "-p", configPath)
|
|
||||||
}
|
|
||||||
return cmdArgs, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getShellIPCCompletions(args []string, _ string) []string {
|
func getShellIPCCompletions(args []string, _ string) []string {
|
||||||
baseArgs, err := buildQsIPCBaseArgs()
|
cmdArgs := []string{"ipc"}
|
||||||
if err != nil {
|
if qsHasAnyDisplay() {
|
||||||
log.Debugf("Error building IPC args for completions: %v", err)
|
cmdArgs = append(cmdArgs, "--any-display")
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
cmdArgs := append(baseArgs, "show")
|
cmdArgs = append(cmdArgs, "-p", configPath, "show")
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
cmd := exec.Command("qs", cmdArgs...)
|
||||||
defer cancel()
|
|
||||||
cmd := exec.CommandContext(ctx, "qs", cmdArgs...)
|
|
||||||
cmd.WaitDelay = 500 * time.Millisecond
|
|
||||||
var targets ipcTargets
|
var targets ipcTargets
|
||||||
|
|
||||||
if output, err := cmd.Output(); err == nil {
|
if output, err := cmd.Output(); err == nil {
|
||||||
@@ -665,7 +623,7 @@ func getShellIPCCompletions(args []string, _ string) []string {
|
|||||||
|
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
targetNames := make([]string, 0)
|
targetNames := make([]string, 0)
|
||||||
targetNames = append(targetNames, "call", "list")
|
targetNames = append(targetNames, "call")
|
||||||
for k := range targets {
|
for k := range targets {
|
||||||
targetNames = append(targetNames, k)
|
targetNames = append(targetNames, k)
|
||||||
}
|
}
|
||||||
@@ -728,64 +686,6 @@ func getFirstDMSPID() (int, bool) {
|
|||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func sessionParentPID(display string) (int, bool) {
|
|
||||||
if display == "" {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
|
|
||||||
dir := getRuntimeDir()
|
|
||||||
entries, err := os.ReadDir(dir)
|
|
||||||
if err != nil {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, entry := range entries {
|
|
||||||
name := entry.Name()
|
|
||||||
if !strings.HasPrefix(name, "danklinux-") || !strings.HasSuffix(name, ".session") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := os.ReadFile(filepath.Join(dir, name))
|
|
||||||
if err != nil || strings.TrimSpace(string(data)) != display {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
parentStr := strings.TrimSuffix(strings.TrimPrefix(name, "danklinux-"), ".session")
|
|
||||||
parentPID, err := strconv.Atoi(parentStr)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return parentPID, true
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
|
|
||||||
func getSessionDMSPID() (int, bool) {
|
|
||||||
parentPID, ok := sessionParentPID(os.Getenv("WAYLAND_DISPLAY"))
|
|
||||||
if !ok {
|
|
||||||
return getFirstDMSPID()
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := os.ReadFile(filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.pid", parentPID)))
|
|
||||||
if err != nil {
|
|
||||||
return getFirstDMSPID()
|
|
||||||
}
|
|
||||||
|
|
||||||
pid, err := strconv.Atoi(strings.TrimSpace(string(data)))
|
|
||||||
if err != nil {
|
|
||||||
return getFirstDMSPID()
|
|
||||||
}
|
|
||||||
|
|
||||||
proc, err := os.FindProcess(pid)
|
|
||||||
if err != nil || proc.Signal(syscall.Signal(0)) != nil {
|
|
||||||
return getFirstDMSPID()
|
|
||||||
}
|
|
||||||
|
|
||||||
return pid, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func runShellIPCCommand(args []string) {
|
func runShellIPCCommand(args []string) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
printIPCHelp()
|
printIPCHelp()
|
||||||
@@ -796,11 +696,23 @@ func runShellIPCCommand(args []string) {
|
|||||||
args = append([]string{"call"}, args...)
|
args = append([]string{"call"}, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
baseArgs, err := buildQsIPCBaseArgs()
|
cmdArgs := []string{"ipc"}
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error finding config: %v", err)
|
switch pid, ok := getFirstDMSPID(); {
|
||||||
|
case ok:
|
||||||
|
cmdArgs = append(cmdArgs, "--pid", strconv.Itoa(pid))
|
||||||
|
default:
|
||||||
|
if err := findConfig(nil, nil); err != nil {
|
||||||
|
log.Fatalf("Error finding config: %v", err)
|
||||||
|
}
|
||||||
|
// ! TODO - remove check when QS 0.3 is released
|
||||||
|
if qsHasAnyDisplay() {
|
||||||
|
cmdArgs = append(cmdArgs, "--any-display")
|
||||||
|
}
|
||||||
|
cmdArgs = append(cmdArgs, "-p", configPath)
|
||||||
}
|
}
|
||||||
cmdArgs := append(baseArgs, args...)
|
|
||||||
|
cmdArgs = append(cmdArgs, args...)
|
||||||
cmd := exec.Command("qs", cmdArgs...)
|
cmd := exec.Command("qs", cmdArgs...)
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
@@ -812,20 +724,19 @@ func runShellIPCCommand(args []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printIPCHelp() {
|
func printIPCHelp() {
|
||||||
fmt.Println("Usage: dms ipc call <target> <function> [args...]")
|
fmt.Println("Usage: dms ipc <target> <function> [args...]")
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
|
|
||||||
baseArgs, err := buildQsIPCBaseArgs()
|
cmdArgs := []string{"ipc"}
|
||||||
if err != nil {
|
if qsHasAnyDisplay() {
|
||||||
printIPCHelpFailure(err)
|
cmdArgs = append(cmdArgs, "--any-display")
|
||||||
return
|
|
||||||
}
|
}
|
||||||
cmdArgs := append(baseArgs, "show")
|
cmdArgs = append(cmdArgs, "-p", configPath, "show")
|
||||||
cmd := exec.Command("qs", cmdArgs...)
|
cmd := exec.Command("qs", cmdArgs...)
|
||||||
|
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printIPCHelpFailure(err)
|
fmt.Println("Could not retrieve available IPC targets (is DMS running?)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -854,16 +765,6 @@ func printIPCHelp() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func printIPCHelpFailure(err error) {
|
|
||||||
fmt.Println("Could not retrieve IPC targets.")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf(" %v\n", err)
|
|
||||||
}
|
|
||||||
fmt.Println()
|
|
||||||
fmt.Println(" Full docs: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc")
|
|
||||||
fmt.Println(" Try: dms ipc call <target> <function>")
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensureFontCache rebuilds the fontconfig cache if user-configured fonts are missing while skipping defaults
|
// ensureFontCache rebuilds the fontconfig cache if user-configured fonts are missing while skipping defaults
|
||||||
func ensureFontCache() {
|
func ensureFontCache() {
|
||||||
if _, err := exec.LookPath("fc-list"); err != nil {
|
if _, err := exec.LookPath("fc-list"); err != nil {
|
||||||
|
|||||||
+1
-1
@@ -22,6 +22,7 @@ require (
|
|||||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
||||||
go.etcd.io/bbolt v1.4.3
|
go.etcd.io/bbolt v1.4.3
|
||||||
go4.org/mem v0.0.0-20240501181205-ae6ca9944745
|
go4.org/mem v0.0.0-20240501181205-ae6ca9944745
|
||||||
|
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
|
||||||
golang.org/x/image v0.39.0
|
golang.org/x/image v0.39.0
|
||||||
tailscale.com v1.96.5
|
tailscale.com v1.96.5
|
||||||
)
|
)
|
||||||
@@ -63,7 +64,6 @@ require (
|
|||||||
github.com/yeqown/reedsolomon v1.0.0 // indirect
|
github.com/yeqown/reedsolomon v1.0.0 // indirect
|
||||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
||||||
golang.org/x/crypto v0.50.0 // indirect
|
golang.org/x/crypto v0.50.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
|
|
||||||
golang.org/x/net v0.53.0 // indirect
|
golang.org/x/net v0.53.0 // indirect
|
||||||
golang.org/x/sync v0.20.0 // indirect
|
golang.org/x/sync v0.20.0 // indirect
|
||||||
golang.zx2c4.com/wireguard/windows v1.0.1 // indirect
|
golang.zx2c4.com/wireguard/windows v1.0.1 // indirect
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/ext_data_control"
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/ext_data_control"
|
||||||
|
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
const envServe = "_DMS_CLIPBOARD_SERVE"
|
const envServe = "_DMS_CLIPBOARD_SERVE"
|
||||||
@@ -16,37 +17,6 @@ const envMime = "_DMS_CLIPBOARD_MIME"
|
|||||||
const envPasteOnce = "_DMS_CLIPBOARD_PASTE_ONCE"
|
const envPasteOnce = "_DMS_CLIPBOARD_PASTE_ONCE"
|
||||||
const envCacheFile = "_DMS_CLIPBOARD_CACHE"
|
const envCacheFile = "_DMS_CLIPBOARD_CACHE"
|
||||||
|
|
||||||
type Offer struct {
|
|
||||||
MimeType string
|
|
||||||
Data []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// textMimeAliases are offered alongside plain-text content so legacy X11
|
|
||||||
// clients bridged through XWayland find a target they can convert.
|
|
||||||
var textMimeAliases = []string{
|
|
||||||
"text/plain",
|
|
||||||
"text/plain;charset=utf-8",
|
|
||||||
"UTF8_STRING",
|
|
||||||
"STRING",
|
|
||||||
"TEXT",
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExpandOffers turns raw clipboard data into the full offer list to serve,
|
|
||||||
// adding the standard alias set for text content.
|
|
||||||
func ExpandOffers(data []byte, mimeType string) []Offer {
|
|
||||||
offers := []Offer{{MimeType: mimeType, Data: data}}
|
|
||||||
if mimeType != "text/plain" && mimeType != "text/plain;charset=utf-8" {
|
|
||||||
return offers
|
|
||||||
}
|
|
||||||
for _, alias := range textMimeAliases {
|
|
||||||
if alias == mimeType {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
offers = append(offers, Offer{MimeType: alias, Data: data})
|
|
||||||
}
|
|
||||||
return offers
|
|
||||||
}
|
|
||||||
|
|
||||||
// MaybeServeAndExit intercepts before cobra when re-exec'd as a clipboard
|
// MaybeServeAndExit intercepts before cobra when re-exec'd as a clipboard
|
||||||
// child. Reads source data into memory, deletes any cache file, then serves.
|
// child. Reads source data into memory, deletes any cache file, then serves.
|
||||||
func MaybeServeAndExit() {
|
func MaybeServeAndExit() {
|
||||||
@@ -74,7 +44,7 @@ func MaybeServeAndExit() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := serveOffers(ExpandOffers(data, mimeType), pasteOnce); err != nil {
|
if err := serveClipboard(data, mimeType, pasteOnce); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "clipboard: serve: %v\n", err)
|
fmt.Fprintf(os.Stderr, "clipboard: serve: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
@@ -85,33 +55,22 @@ func Copy(data []byte, mimeType string) error {
|
|||||||
return copyForkCached(data, mimeType, false)
|
return copyForkCached(data, mimeType, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CopyText(text string) error {
|
|
||||||
return Copy([]byte(text), "text/plain;charset=utf-8")
|
|
||||||
}
|
|
||||||
|
|
||||||
func CopyOpts(data []byte, mimeType string, foreground, pasteOnce bool) error {
|
func CopyOpts(data []byte, mimeType string, foreground, pasteOnce bool) error {
|
||||||
if foreground {
|
if foreground {
|
||||||
return serveOffers(ExpandOffers(data, mimeType), pasteOnce)
|
return serveClipboard(data, mimeType, pasteOnce)
|
||||||
}
|
}
|
||||||
return copyForkCached(data, mimeType, pasteOnce)
|
return copyForkCached(data, mimeType, pasteOnce)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CopyReader(data io.Reader, mimeType string, foreground, pasteOnce bool) error {
|
func CopyReader(data io.Reader, mimeType string, foreground, pasteOnce bool) error {
|
||||||
if !foreground {
|
|
||||||
return copyFork(data, mimeType, pasteOnce)
|
|
||||||
}
|
|
||||||
buf, err := io.ReadAll(data)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("read source: %w", err)
|
|
||||||
}
|
|
||||||
return serveOffers(ExpandOffers(buf, mimeType), pasteOnce)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CopyMulti(offers []Offer, foreground, pasteOnce bool) error {
|
|
||||||
if foreground {
|
if foreground {
|
||||||
return serveOffers(offers, pasteOnce)
|
buf, err := io.ReadAll(data)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("read source: %w", err)
|
||||||
|
}
|
||||||
|
return serveClipboard(buf, mimeType, pasteOnce)
|
||||||
}
|
}
|
||||||
return copyMultiFork(offers, pasteOnce)
|
return copyFork(data, mimeType, pasteOnce)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newForkCmd(mimeType string, pasteOnce bool, extra ...string) *exec.Cmd {
|
func newForkCmd(mimeType string, pasteOnce bool, extra ...string) *exec.Cmd {
|
||||||
@@ -173,70 +132,39 @@ func copyForkCached(data []byte, mimeType string, pasteOnce bool) error {
|
|||||||
func copyFork(data io.Reader, mimeType string, pasteOnce bool) error {
|
func copyFork(data io.Reader, mimeType string, pasteOnce bool) error {
|
||||||
cmd := newForkCmd(mimeType, pasteOnce)
|
cmd := newForkCmd(mimeType, pasteOnce)
|
||||||
|
|
||||||
if src, ok := data.(*os.File); ok {
|
switch src := data.(type) {
|
||||||
|
case *os.File:
|
||||||
cmd.Stdin = src
|
cmd.Stdin = src
|
||||||
return waitReady(cmd)
|
return waitReady(cmd)
|
||||||
}
|
|
||||||
|
|
||||||
stdin, err := cmd.StdinPipe()
|
default:
|
||||||
if err != nil {
|
stdin, err := cmd.StdinPipe()
|
||||||
return fmt.Errorf("stdin pipe: %w", err)
|
if err != nil {
|
||||||
}
|
return fmt.Errorf("stdin pipe: %w", err)
|
||||||
|
|
||||||
stdout, err := cmd.StdoutPipe()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("stdout pipe: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cmd.Start(); err != nil {
|
|
||||||
return fmt.Errorf("start: %w", err)
|
|
||||||
}
|
|
||||||
if _, err := io.Copy(stdin, data); err != nil {
|
|
||||||
stdin.Close()
|
|
||||||
return fmt.Errorf("write stdin: %w", err)
|
|
||||||
}
|
|
||||||
if err := stdin.Close(); err != nil {
|
|
||||||
return fmt.Errorf("close stdin: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf [1]byte
|
|
||||||
if _, err := stdout.Read(buf[:]); err != nil {
|
|
||||||
return fmt.Errorf("waiting for clipboard ready: %w", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func copyMultiFork(offers []Offer, pasteOnce bool) error {
|
|
||||||
args := []string{os.Args[0], "cl", "copy", "--foreground", "--type", "__multi__"}
|
|
||||||
if pasteOnce {
|
|
||||||
args = append(args, "--paste-once")
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd := exec.Command(args[0], args[1:]...)
|
|
||||||
cmd.Stdin = nil
|
|
||||||
cmd.Stdout = nil
|
|
||||||
cmd.Stderr = nil
|
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
|
|
||||||
|
|
||||||
stdin, err := cmd.StdinPipe()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("stdin pipe: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cmd.Start(); err != nil {
|
|
||||||
return fmt.Errorf("start: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, offer := range offers {
|
|
||||||
fmt.Fprintf(stdin, "%s\x00%d\x00", offer.MimeType, len(offer.Data))
|
|
||||||
if _, err := stdin.Write(offer.Data); err != nil {
|
|
||||||
stdin.Close()
|
|
||||||
return fmt.Errorf("write offer data: %w", err)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
stdin.Close()
|
|
||||||
|
|
||||||
return nil
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("stdout pipe: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return fmt.Errorf("start: %w", err)
|
||||||
|
}
|
||||||
|
if _, err := io.Copy(stdin, data); err != nil {
|
||||||
|
stdin.Close()
|
||||||
|
return fmt.Errorf("write stdin: %w", err)
|
||||||
|
}
|
||||||
|
if err := stdin.Close(); err != nil {
|
||||||
|
return fmt.Errorf("close stdin: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf [1]byte
|
||||||
|
if _, err := stdout.Read(buf[:]); err != nil {
|
||||||
|
return fmt.Errorf("waiting for clipboard ready: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func signalReady() {
|
func signalReady() {
|
||||||
@@ -266,25 +194,57 @@ func createClipboardCacheFile() (*os.File, error) {
|
|||||||
return os.CreateTemp("", "dms-clipboard-*")
|
return os.CreateTemp("", "dms-clipboard-*")
|
||||||
}
|
}
|
||||||
|
|
||||||
// serveOffers owns the Wayland selection until cancelled (or first paste when
|
func serveClipboard(data []byte, mimeType string, pasteOnce bool) error {
|
||||||
// pasteOnce is set), answering every offered mime type with its data.
|
display, err := wlclient.Connect("")
|
||||||
func serveOffers(offers []Offer, pasteOnce bool) error {
|
|
||||||
if len(offers) == 0 {
|
|
||||||
return fmt.Errorf("no offers to serve")
|
|
||||||
}
|
|
||||||
|
|
||||||
s, err := connectSession()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("wayland connect: %w", err)
|
||||||
}
|
}
|
||||||
defer s.Close()
|
defer display.Destroy()
|
||||||
|
|
||||||
dataControlMgr, err := s.requireDataControl()
|
ctx := display.Context()
|
||||||
|
registry, err := display.GetRegistry()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("get registry: %w", err)
|
||||||
|
}
|
||||||
|
defer registry.Destroy()
|
||||||
|
|
||||||
|
var dataControlMgr *ext_data_control.ExtDataControlManagerV1
|
||||||
|
var seat *wlclient.Seat
|
||||||
|
var bindErr error
|
||||||
|
|
||||||
|
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
|
||||||
|
switch e.Interface {
|
||||||
|
case "ext_data_control_manager_v1":
|
||||||
|
dataControlMgr = ext_data_control.NewExtDataControlManagerV1(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, dataControlMgr); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
case "wl_seat":
|
||||||
|
if seat != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
seat = wlclient.NewSeat(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, seat); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
display.Roundtrip()
|
||||||
|
display.Roundtrip()
|
||||||
|
|
||||||
|
if bindErr != nil {
|
||||||
|
return fmt.Errorf("registry bind: %w", bindErr)
|
||||||
|
}
|
||||||
|
if dataControlMgr == nil {
|
||||||
|
return fmt.Errorf("compositor does not support ext_data_control_manager_v1")
|
||||||
|
}
|
||||||
|
defer dataControlMgr.Destroy()
|
||||||
|
if seat == nil {
|
||||||
|
return fmt.Errorf("no seat available")
|
||||||
}
|
}
|
||||||
|
|
||||||
device, err := dataControlMgr.GetDataDevice(s.seat)
|
device, err := dataControlMgr.GetDataDevice(seat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("get data device: %w", err)
|
return fmt.Errorf("get data device: %w", err)
|
||||||
}
|
}
|
||||||
@@ -295,12 +255,25 @@ func serveOffers(offers []Offer, pasteOnce bool) error {
|
|||||||
return fmt.Errorf("create data source: %w", err)
|
return fmt.Errorf("create data source: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
offerData := make(map[string][]byte, len(offers))
|
if err := source.Offer(mimeType); err != nil {
|
||||||
for _, offer := range offers {
|
return fmt.Errorf("offer mime type: %w", err)
|
||||||
if err := source.Offer(offer.MimeType); err != nil {
|
}
|
||||||
return fmt.Errorf("offer %s: %w", offer.MimeType, err)
|
if mimeType == "text/plain;charset=utf-8" || mimeType == "text/plain" {
|
||||||
|
if err := source.Offer("text/plain"); err != nil {
|
||||||
|
return fmt.Errorf("offer text/plain: %w", err)
|
||||||
|
}
|
||||||
|
if err := source.Offer("text/plain;charset=utf-8"); err != nil {
|
||||||
|
return fmt.Errorf("offer text/plain;charset=utf-8: %w", err)
|
||||||
|
}
|
||||||
|
if err := source.Offer("UTF8_STRING"); err != nil {
|
||||||
|
return fmt.Errorf("offer UTF8_STRING: %w", err)
|
||||||
|
}
|
||||||
|
if err := source.Offer("STRING"); err != nil {
|
||||||
|
return fmt.Errorf("offer STRING: %w", err)
|
||||||
|
}
|
||||||
|
if err := source.Offer("TEXT"); err != nil {
|
||||||
|
return fmt.Errorf("offer TEXT: %w", err)
|
||||||
}
|
}
|
||||||
offerData[offer.MimeType] = offer.Data
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelled := make(chan struct{})
|
cancelled := make(chan struct{})
|
||||||
@@ -310,11 +283,7 @@ func serveOffers(offers []Offer, pasteOnce bool) error {
|
|||||||
_ = syscall.SetNonblock(e.Fd, false)
|
_ = syscall.SetNonblock(e.Fd, false)
|
||||||
file := os.NewFile(uintptr(e.Fd), "pipe")
|
file := os.NewFile(uintptr(e.Fd), "pipe")
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
_, _ = file.Write(data)
|
||||||
if data, ok := offerData[e.MimeType]; ok {
|
|
||||||
_, _ = file.Write(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case pasted <- struct{}{}:
|
case pasted <- struct{}{}:
|
||||||
default:
|
default:
|
||||||
@@ -329,7 +298,7 @@ func serveOffers(offers []Offer, pasteOnce bool) error {
|
|||||||
return fmt.Errorf("set selection: %w", err)
|
return fmt.Errorf("set selection: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.display.Roundtrip()
|
display.Roundtrip()
|
||||||
signalReady()
|
signalReady()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@@ -341,26 +310,70 @@ func serveOffers(offers []Offer, pasteOnce bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if err := s.ctx.Dispatch(); err != nil {
|
if err := ctx.Dispatch(); err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CopyText(text string) error {
|
||||||
|
return Copy([]byte(text), "text/plain;charset=utf-8")
|
||||||
|
}
|
||||||
|
|
||||||
func Paste() ([]byte, string, error) {
|
func Paste() ([]byte, string, error) {
|
||||||
s, err := connectSession()
|
display, err := wlclient.Connect("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", fmt.Errorf("wayland connect: %w", err)
|
||||||
}
|
}
|
||||||
defer s.Close()
|
defer display.Destroy()
|
||||||
|
|
||||||
dataControlMgr, err := s.requireDataControl()
|
ctx := display.Context()
|
||||||
|
registry, err := display.GetRegistry()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", fmt.Errorf("get registry: %w", err)
|
||||||
|
}
|
||||||
|
defer registry.Destroy()
|
||||||
|
|
||||||
|
var dataControlMgr *ext_data_control.ExtDataControlManagerV1
|
||||||
|
var seat *wlclient.Seat
|
||||||
|
var bindErr error
|
||||||
|
|
||||||
|
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
|
||||||
|
switch e.Interface {
|
||||||
|
case "ext_data_control_manager_v1":
|
||||||
|
dataControlMgr = ext_data_control.NewExtDataControlManagerV1(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, dataControlMgr); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
case "wl_seat":
|
||||||
|
if seat != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
seat = wlclient.NewSeat(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, seat); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
display.Roundtrip()
|
||||||
|
display.Roundtrip()
|
||||||
|
|
||||||
|
if bindErr != nil {
|
||||||
|
return nil, "", fmt.Errorf("registry bind: %w", bindErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
device, err := dataControlMgr.GetDataDevice(s.seat)
|
if dataControlMgr == nil {
|
||||||
|
return nil, "", fmt.Errorf("compositor does not support ext_data_control_manager_v1")
|
||||||
|
}
|
||||||
|
defer dataControlMgr.Destroy()
|
||||||
|
|
||||||
|
if seat == nil {
|
||||||
|
return nil, "", fmt.Errorf("no seat available")
|
||||||
|
}
|
||||||
|
|
||||||
|
device, err := dataControlMgr.GetDataDevice(seat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", fmt.Errorf("get data device: %w", err)
|
return nil, "", fmt.Errorf("get data device: %w", err)
|
||||||
}
|
}
|
||||||
@@ -386,14 +399,15 @@ func Paste() ([]byte, string, error) {
|
|||||||
gotSelection = true
|
gotSelection = true
|
||||||
})
|
})
|
||||||
|
|
||||||
s.display.Roundtrip()
|
display.Roundtrip()
|
||||||
s.display.Roundtrip()
|
display.Roundtrip()
|
||||||
|
|
||||||
if !gotSelection || selectionOffer == nil {
|
if !gotSelection || selectionOffer == nil {
|
||||||
return nil, "", fmt.Errorf("no clipboard data")
|
return nil, "", fmt.Errorf("no clipboard data")
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedMime := selectPreferredMimeType(offerMimeTypes[selectionOffer])
|
mimeTypes := offerMimeTypes[selectionOffer]
|
||||||
|
selectedMime := selectPreferredMimeType(mimeTypes)
|
||||||
if selectedMime == "" {
|
if selectedMime == "" {
|
||||||
return nil, "", fmt.Errorf("no supported mime type")
|
return nil, "", fmt.Errorf("no supported mime type")
|
||||||
}
|
}
|
||||||
@@ -410,7 +424,7 @@ func Paste() ([]byte, string, error) {
|
|||||||
}
|
}
|
||||||
w.Close()
|
w.Close()
|
||||||
|
|
||||||
s.display.Roundtrip()
|
display.Roundtrip()
|
||||||
|
|
||||||
data, err := io.ReadAll(r)
|
data, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -456,3 +470,161 @@ func selectPreferredMimeType(mimes []string) string {
|
|||||||
func IsImageMimeType(mime string) bool {
|
func IsImageMimeType(mime string) bool {
|
||||||
return len(mime) > 6 && mime[:6] == "image/"
|
return len(mime) > 6 && mime[:6] == "image/"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Offer struct {
|
||||||
|
MimeType string
|
||||||
|
Data []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func CopyMulti(offers []Offer, foreground, pasteOnce bool) error {
|
||||||
|
if !foreground {
|
||||||
|
return copyMultiFork(offers, pasteOnce)
|
||||||
|
}
|
||||||
|
return copyMultiServe(offers, pasteOnce)
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyMultiFork(offers []Offer, pasteOnce bool) error {
|
||||||
|
args := []string{os.Args[0], "cl", "copy", "--foreground", "--type", "__multi__"}
|
||||||
|
if pasteOnce {
|
||||||
|
args = append(args, "--paste-once")
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command(args[0], args[1:]...)
|
||||||
|
cmd.Stdin = nil
|
||||||
|
cmd.Stdout = nil
|
||||||
|
cmd.Stderr = nil
|
||||||
|
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
|
||||||
|
|
||||||
|
stdin, err := cmd.StdinPipe()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("stdin pipe: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return fmt.Errorf("start: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, offer := range offers {
|
||||||
|
fmt.Fprintf(stdin, "%s\x00%d\x00", offer.MimeType, len(offer.Data))
|
||||||
|
if _, err := stdin.Write(offer.Data); err != nil {
|
||||||
|
stdin.Close()
|
||||||
|
return fmt.Errorf("write offer data: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stdin.Close()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyMultiServe(offers []Offer, pasteOnce bool) error {
|
||||||
|
display, err := wlclient.Connect("")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("wayland connect: %w", err)
|
||||||
|
}
|
||||||
|
defer display.Destroy()
|
||||||
|
|
||||||
|
ctx := display.Context()
|
||||||
|
registry, err := display.GetRegistry()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("get registry: %w", err)
|
||||||
|
}
|
||||||
|
defer registry.Destroy()
|
||||||
|
|
||||||
|
var dataControlMgr *ext_data_control.ExtDataControlManagerV1
|
||||||
|
var seat *wlclient.Seat
|
||||||
|
var bindErr error
|
||||||
|
|
||||||
|
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
|
||||||
|
switch e.Interface {
|
||||||
|
case "ext_data_control_manager_v1":
|
||||||
|
dataControlMgr = ext_data_control.NewExtDataControlManagerV1(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, dataControlMgr); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
case "wl_seat":
|
||||||
|
if seat != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
seat = wlclient.NewSeat(ctx)
|
||||||
|
if err := registry.Bind(e.Name, e.Interface, e.Version, seat); err != nil {
|
||||||
|
bindErr = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
display.Roundtrip()
|
||||||
|
display.Roundtrip()
|
||||||
|
|
||||||
|
if bindErr != nil {
|
||||||
|
return fmt.Errorf("registry bind: %w", bindErr)
|
||||||
|
}
|
||||||
|
if dataControlMgr == nil {
|
||||||
|
return fmt.Errorf("compositor does not support ext_data_control_manager_v1")
|
||||||
|
}
|
||||||
|
defer dataControlMgr.Destroy()
|
||||||
|
if seat == nil {
|
||||||
|
return fmt.Errorf("no seat available")
|
||||||
|
}
|
||||||
|
|
||||||
|
device, err := dataControlMgr.GetDataDevice(seat)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("get data device: %w", err)
|
||||||
|
}
|
||||||
|
defer device.Destroy()
|
||||||
|
|
||||||
|
source, err := dataControlMgr.CreateDataSource()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("create data source: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
offerMap := make(map[string][]byte)
|
||||||
|
for _, offer := range offers {
|
||||||
|
if err := source.Offer(offer.MimeType); err != nil {
|
||||||
|
return fmt.Errorf("offer %s: %w", offer.MimeType, err)
|
||||||
|
}
|
||||||
|
offerMap[offer.MimeType] = offer.Data
|
||||||
|
}
|
||||||
|
|
||||||
|
cancelled := make(chan struct{})
|
||||||
|
pasted := make(chan struct{}, 1)
|
||||||
|
|
||||||
|
source.SetSendHandler(func(e ext_data_control.ExtDataControlSourceV1SendEvent) {
|
||||||
|
_ = syscall.SetNonblock(e.Fd, false)
|
||||||
|
file := os.NewFile(uintptr(e.Fd), "pipe")
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
if data, ok := offerMap[e.MimeType]; ok {
|
||||||
|
_, _ = file.Write(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
case pasted <- struct{}{}:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
source.SetCancelledHandler(func(e ext_data_control.ExtDataControlSourceV1CancelledEvent) {
|
||||||
|
close(cancelled)
|
||||||
|
})
|
||||||
|
|
||||||
|
if err := device.SetSelection(source); err != nil {
|
||||||
|
return fmt.Errorf("set selection: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
display.Roundtrip()
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-cancelled:
|
||||||
|
return nil
|
||||||
|
case <-pasted:
|
||||||
|
if pasteOnce {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if err := ctx.Dispatch(); err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,206 +0,0 @@
|
|||||||
package clipboard
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"regexp"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
xkbKeymapFormatV1 = 1
|
|
||||||
|
|
||||||
keyStateReleased = 0
|
|
||||||
keyStatePressed = 1
|
|
||||||
|
|
||||||
// xkb real modifier bit positions are fixed: Shift=0, Lock=1, Control=2
|
|
||||||
shiftModMask = 1 << 0
|
|
||||||
ctrlModMask = 1 << 2
|
|
||||||
|
|
||||||
// evdev fallbacks for a standard pc105 map
|
|
||||||
fallbackCtrlKey = 29 // KEY_LEFTCTRL
|
|
||||||
fallbackShiftKey = 42 // KEY_LEFTSHIFT
|
|
||||||
fallbackVKey = 47 // KEY_V
|
|
||||||
)
|
|
||||||
|
|
||||||
// SendPasteKeystroke emulates a paste shortcut via zwp_virtual_keyboard_v1
|
|
||||||
// using the seat's own keymap, so keycodes stay valid for XWayland clients
|
|
||||||
// (a synthetic wtype-style keymap breaks X11 apps like Steam). withShift
|
|
||||||
// selects ctrl+shift+v for terminal targets.
|
|
||||||
func SendPasteKeystroke(withShift bool) error {
|
|
||||||
s, err := connectSession()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer s.Close()
|
|
||||||
|
|
||||||
if s.virtualKeyboardMgr == nil {
|
|
||||||
return fmt.Errorf("compositor does not support zwp_virtual_keyboard_manager_v1")
|
|
||||||
}
|
|
||||||
if s.seat == nil {
|
|
||||||
return fmt.Errorf("no seat available")
|
|
||||||
}
|
|
||||||
|
|
||||||
keyboard, err := s.seat.GetKeyboard()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("get keyboard: %w", err)
|
|
||||||
}
|
|
||||||
defer keyboard.Release()
|
|
||||||
|
|
||||||
var keymap *wlclient.KeyboardKeymapEvent
|
|
||||||
keyboard.SetKeymapHandler(func(e wlclient.KeyboardKeymapEvent) {
|
|
||||||
if keymap == nil {
|
|
||||||
keymap = &e
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
s.display.Roundtrip()
|
|
||||||
|
|
||||||
if keymap == nil || keymap.Format != xkbKeymapFormatV1 {
|
|
||||||
return fmt.Errorf("no xkb keymap from seat")
|
|
||||||
}
|
|
||||||
defer unix.Close(keymap.Fd)
|
|
||||||
|
|
||||||
keymapText, err := readKeymap(keymap.Fd, keymap.Size)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("read keymap: %w", err)
|
|
||||||
}
|
|
||||||
keys := resolveKeycodes(keymapText)
|
|
||||||
|
|
||||||
vk, err := s.virtualKeyboardMgr.CreateVirtualKeyboard(s.seat)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("create virtual keyboard: %w", err)
|
|
||||||
}
|
|
||||||
defer vk.Destroy()
|
|
||||||
|
|
||||||
if err := vk.Keymap(xkbKeymapFormatV1, keymap.Fd, keymap.Size); err != nil {
|
|
||||||
return fmt.Errorf("set keymap: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
mods := uint32(ctrlModMask)
|
|
||||||
held := []uint32{keys.ctrl}
|
|
||||||
if withShift {
|
|
||||||
mods |= shiftModMask
|
|
||||||
held = append(held, keys.shift)
|
|
||||||
}
|
|
||||||
|
|
||||||
t := uint32(0)
|
|
||||||
press := func(key, state uint32) error {
|
|
||||||
t++
|
|
||||||
return vk.Key(t, key, state)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, key := range held {
|
|
||||||
if err := press(key, keyStatePressed); err != nil {
|
|
||||||
return fmt.Errorf("key press: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := vk.Modifiers(mods, 0, 0, 0); err != nil {
|
|
||||||
return fmt.Errorf("set modifiers: %w", err)
|
|
||||||
}
|
|
||||||
if err := press(keys.v, keyStatePressed); err != nil {
|
|
||||||
return fmt.Errorf("key press: %w", err)
|
|
||||||
}
|
|
||||||
if err := press(keys.v, keyStateReleased); err != nil {
|
|
||||||
return fmt.Errorf("key release: %w", err)
|
|
||||||
}
|
|
||||||
for i := len(held) - 1; i >= 0; i-- {
|
|
||||||
if err := press(held[i], keyStateReleased); err != nil {
|
|
||||||
return fmt.Errorf("key release: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := vk.Modifiers(0, 0, 0, 0); err != nil {
|
|
||||||
return fmt.Errorf("clear modifiers: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
s.display.Roundtrip()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readKeymap(fd int, size uint32) (string, error) {
|
|
||||||
data, err := unix.Mmap(fd, 0, int(size), unix.PROT_READ, unix.MAP_PRIVATE)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
text := strings.TrimRight(string(data), "\x00")
|
|
||||||
return text, unix.Munmap(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
type pasteKeycodes struct {
|
|
||||||
ctrl uint32
|
|
||||||
shift uint32
|
|
||||||
v uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
keycodeDefRe = regexp.MustCompile(`<([A-Za-z0-9+_-]+)>\s*=\s*(\d+)`)
|
|
||||||
keySymbolsRe = regexp.MustCompile(`key\s*<([A-Za-z0-9+_-]+)>\s*\{([^}]*)\}`)
|
|
||||||
groupIndexRe = regexp.MustCompile(`\w+\[\d+\]\s*=`)
|
|
||||||
symbolListRe = regexp.MustCompile(`\[([^\]]*)\]`)
|
|
||||||
)
|
|
||||||
|
|
||||||
// xkbcommon may serialize keysyms as hex escapes instead of names
|
|
||||||
// (e.g. "0x76" for v, "0xffe3" for Control_L).
|
|
||||||
var keysymNames = map[uint32]string{
|
|
||||||
0x76: "v",
|
|
||||||
0xffe3: "Control_L",
|
|
||||||
0xffe1: "Shift_L",
|
|
||||||
}
|
|
||||||
|
|
||||||
func canonicalKeysym(sym string) string {
|
|
||||||
if !strings.HasPrefix(sym, "0x") && !strings.HasPrefix(sym, "0X") {
|
|
||||||
return sym
|
|
||||||
}
|
|
||||||
value, err := strconv.ParseUint(sym[2:], 16, 32)
|
|
||||||
if err != nil {
|
|
||||||
return sym
|
|
||||||
}
|
|
||||||
if name, ok := keysymNames[uint32(value)]; ok {
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
return sym
|
|
||||||
}
|
|
||||||
|
|
||||||
// resolveKeycodes finds the evdev keycodes producing the keysyms we need in
|
|
||||||
// the seat keymap's first group, falling back to pc105 positions.
|
|
||||||
func resolveKeycodes(keymap string) pasteKeycodes {
|
|
||||||
codes := map[string]uint32{}
|
|
||||||
for _, m := range keycodeDefRe.FindAllStringSubmatch(keymap, -1) {
|
|
||||||
if code, err := strconv.Atoi(m[2]); err == nil {
|
|
||||||
codes[m[1]] = uint32(code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := pasteKeycodes{ctrl: fallbackCtrlKey, shift: fallbackShiftKey, v: fallbackVKey}
|
|
||||||
want := map[string]*uint32{
|
|
||||||
"Control_L": &keys.ctrl,
|
|
||||||
"Shift_L": &keys.shift,
|
|
||||||
"v": &keys.v,
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, m := range keySymbolsRe.FindAllStringSubmatch(keymap, -1) {
|
|
||||||
group := symbolListRe.FindStringSubmatch(groupIndexRe.ReplaceAllString(m[2], ""))
|
|
||||||
if group == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
xkbCode, ok := codes[m[1]]
|
|
||||||
if !ok || xkbCode < 8 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
level1 := canonicalKeysym(strings.TrimSpace(strings.Split(group[1], ",")[0]))
|
|
||||||
target, wanted := want[level1]
|
|
||||||
if !wanted {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
*target = xkbCode - 8
|
|
||||||
delete(want, level1)
|
|
||||||
if len(want) == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return keys
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
package clipboard
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestLiveSeatKeymapResolution(t *testing.T) {
|
|
||||||
if os.Getenv("DMS_LIVE_TEST") == "" {
|
|
||||||
t.Skip("set DMS_LIVE_TEST=1 to run against the live compositor")
|
|
||||||
}
|
|
||||||
|
|
||||||
s, err := connectSession()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("connect: %v", err)
|
|
||||||
}
|
|
||||||
defer s.Close()
|
|
||||||
|
|
||||||
if s.virtualKeyboardMgr == nil {
|
|
||||||
t.Fatal("compositor does not advertise zwp_virtual_keyboard_manager_v1")
|
|
||||||
}
|
|
||||||
if s.seat == nil {
|
|
||||||
t.Fatal("no seat")
|
|
||||||
}
|
|
||||||
|
|
||||||
keyboard, err := s.seat.GetKeyboard()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("get keyboard: %v", err)
|
|
||||||
}
|
|
||||||
defer keyboard.Release()
|
|
||||||
|
|
||||||
var keymap *wlclient.KeyboardKeymapEvent
|
|
||||||
keyboard.SetKeymapHandler(func(e wlclient.KeyboardKeymapEvent) {
|
|
||||||
if keymap == nil {
|
|
||||||
keymap = &e
|
|
||||||
}
|
|
||||||
})
|
|
||||||
s.display.Roundtrip()
|
|
||||||
|
|
||||||
if keymap == nil {
|
|
||||||
t.Fatal("no keymap event")
|
|
||||||
}
|
|
||||||
defer unix.Close(keymap.Fd)
|
|
||||||
|
|
||||||
text, err := readKeymap(keymap.Fd, keymap.Size)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("read keymap: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if dump := os.Getenv("DMS_LIVE_DUMP"); dump != "" {
|
|
||||||
if err := os.WriteFile(dump, []byte(text), 0o644); err != nil {
|
|
||||||
t.Fatalf("dump keymap: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := resolveKeycodes(text)
|
|
||||||
t.Logf("keymap size=%d resolved ctrl=%d shift=%d v=%d", keymap.Size, keys.ctrl, keys.shift, keys.v)
|
|
||||||
|
|
||||||
if keys.ctrl == fallbackCtrlKey && keys.shift == fallbackShiftKey && keys.v == fallbackVKey {
|
|
||||||
t.Log("all keycodes are fallbacks - parsing may not have matched the live keymap")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
package clipboard
|
|
||||||
|
|
||||||
import "testing"
|
|
||||||
|
|
||||||
const qwertyKeymap = `xkb_keymap {
|
|
||||||
xkb_keycodes "(unnamed)" {
|
|
||||||
minimum = 8;
|
|
||||||
maximum = 708;
|
|
||||||
<ESC> = 9;
|
|
||||||
<AB04> = 55;
|
|
||||||
<LCTL> = 37;
|
|
||||||
<LFSH> = 50;
|
|
||||||
alias <AL01> = <AC01>;
|
|
||||||
indicator 1 = "Caps Lock";
|
|
||||||
};
|
|
||||||
xkb_types "(unnamed)" {
|
|
||||||
type "ALPHABETIC" {
|
|
||||||
modifiers = Shift+Lock;
|
|
||||||
map[Shift] = Level2;
|
|
||||||
level_name[Level1] = "Base";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
xkb_symbols "(unnamed)" {
|
|
||||||
key <ESC> { [ Escape ] };
|
|
||||||
key <AB04> { type= "ALPHABETIC", [ v, V ] };
|
|
||||||
key <LCTL> { [ Control_L ] };
|
|
||||||
key <LFSH> { [ Shift_L ] };
|
|
||||||
};
|
|
||||||
};`
|
|
||||||
|
|
||||||
const hexKeymap = `xkb_keymap {
|
|
||||||
xkb_keycodes "(unnamed)" {
|
|
||||||
<AB04> = 56;
|
|
||||||
<LCTL> = 38;
|
|
||||||
<LFSH> = 51;
|
|
||||||
};
|
|
||||||
xkb_symbols "(unnamed)" {
|
|
||||||
key <LCTL> { [ 0xffe3 ] };
|
|
||||||
key <LFSH> {
|
|
||||||
type= "PC_ALT_LEVEL2",
|
|
||||||
symbols[1]= [ 0xffe1, 0xfe08 ]
|
|
||||||
};
|
|
||||||
key <AB04> { [ 0x76, 0x56 ] };
|
|
||||||
};
|
|
||||||
};`
|
|
||||||
|
|
||||||
const dvorakKeymap = `xkb_keymap {
|
|
||||||
xkb_keycodes "(unnamed)" {
|
|
||||||
<AB09> = 60;
|
|
||||||
<LCTL> = 37;
|
|
||||||
<LFSH> = 50;
|
|
||||||
};
|
|
||||||
xkb_symbols "(unnamed)" {
|
|
||||||
key <AB09> { [ v, V ] };
|
|
||||||
key <LCTL> { [ Control_L ] };
|
|
||||||
key <LFSH> { [ Shift_L ] };
|
|
||||||
};
|
|
||||||
};`
|
|
||||||
|
|
||||||
func TestResolveKeycodes(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
keymap string
|
|
||||||
want pasteKeycodes
|
|
||||||
}{
|
|
||||||
{"qwerty", qwertyKeymap, pasteKeycodes{ctrl: 29, shift: 42, v: 47}},
|
|
||||||
{"dvorak", dvorakKeymap, pasteKeycodes{ctrl: 29, shift: 42, v: 52}},
|
|
||||||
{"hex keysyms", hexKeymap, pasteKeycodes{ctrl: 30, shift: 43, v: 48}},
|
|
||||||
{"empty falls back", "", pasteKeycodes{ctrl: fallbackCtrlKey, shift: fallbackShiftKey, v: fallbackVKey}},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
got := resolveKeycodes(tt.keymap)
|
|
||||||
if got != tt.want {
|
|
||||||
t.Errorf("resolveKeycodes() = %+v, want %+v", got, tt.want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExpandOffers(t *testing.T) {
|
|
||||||
text := ExpandOffers([]byte("hi"), "text/plain;charset=utf-8")
|
|
||||||
if len(text) != 5 {
|
|
||||||
t.Fatalf("expected 5 text offers, got %d", len(text))
|
|
||||||
}
|
|
||||||
seen := map[string]bool{}
|
|
||||||
for _, o := range text {
|
|
||||||
if string(o.Data) != "hi" {
|
|
||||||
t.Errorf("offer %s has wrong data", o.MimeType)
|
|
||||||
}
|
|
||||||
if seen[o.MimeType] {
|
|
||||||
t.Errorf("duplicate offer %s", o.MimeType)
|
|
||||||
}
|
|
||||||
seen[o.MimeType] = true
|
|
||||||
}
|
|
||||||
if !seen["UTF8_STRING"] || !seen["STRING"] || !seen["TEXT"] || !seen["text/plain"] {
|
|
||||||
t.Errorf("missing X11 alias offers: %v", seen)
|
|
||||||
}
|
|
||||||
|
|
||||||
img := ExpandOffers([]byte{1}, "image/png")
|
|
||||||
if len(img) != 1 || img[0].MimeType != "image/png" {
|
|
||||||
t.Errorf("non-text mime should not expand, got %+v", img)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
package clipboard
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/ext_data_control"
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/virtual_keyboard"
|
|
||||||
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
|
||||||
)
|
|
||||||
|
|
||||||
type session struct {
|
|
||||||
display *wlclient.Display
|
|
||||||
ctx *wlclient.Context
|
|
||||||
registry *wlclient.Registry
|
|
||||||
seat *wlclient.Seat
|
|
||||||
dataControlMgr *ext_data_control.ExtDataControlManagerV1
|
|
||||||
virtualKeyboardMgr *virtual_keyboard.ZwpVirtualKeyboardManagerV1
|
|
||||||
}
|
|
||||||
|
|
||||||
// connectSession opens a short-lived Wayland connection and binds the seat
|
|
||||||
// plus whichever clipboard-related globals the compositor advertises.
|
|
||||||
func connectSession() (*session, error) {
|
|
||||||
display, err := wlclient.Connect("")
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("wayland connect: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
s := &session{display: display, ctx: display.Context()}
|
|
||||||
|
|
||||||
registry, err := display.GetRegistry()
|
|
||||||
if err != nil {
|
|
||||||
display.Destroy()
|
|
||||||
return nil, fmt.Errorf("get registry: %w", err)
|
|
||||||
}
|
|
||||||
s.registry = registry
|
|
||||||
|
|
||||||
var bindErr error
|
|
||||||
bind := func(name uint32, iface string, version uint32, proxy wlclient.Proxy) {
|
|
||||||
if err := registry.Bind(name, iface, version, proxy); err != nil {
|
|
||||||
bindErr = fmt.Errorf("bind %s: %w", iface, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
|
|
||||||
switch e.Interface {
|
|
||||||
case ext_data_control.ExtDataControlManagerV1InterfaceName:
|
|
||||||
mgr := ext_data_control.NewExtDataControlManagerV1(s.ctx)
|
|
||||||
bind(e.Name, e.Interface, e.Version, mgr)
|
|
||||||
s.dataControlMgr = mgr
|
|
||||||
case virtual_keyboard.ZwpVirtualKeyboardManagerV1InterfaceName:
|
|
||||||
mgr := virtual_keyboard.NewZwpVirtualKeyboardManagerV1(s.ctx)
|
|
||||||
bind(e.Name, e.Interface, e.Version, mgr)
|
|
||||||
s.virtualKeyboardMgr = mgr
|
|
||||||
case "wl_seat":
|
|
||||||
if s.seat != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
seat := wlclient.NewSeat(s.ctx)
|
|
||||||
bind(e.Name, e.Interface, e.Version, seat)
|
|
||||||
s.seat = seat
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
display.Roundtrip()
|
|
||||||
display.Roundtrip()
|
|
||||||
|
|
||||||
if bindErr != nil {
|
|
||||||
s.Close()
|
|
||||||
return nil, bindErr
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *session) requireDataControl() (*ext_data_control.ExtDataControlManagerV1, error) {
|
|
||||||
switch {
|
|
||||||
case s.dataControlMgr == nil:
|
|
||||||
return nil, fmt.Errorf("compositor does not support ext_data_control_manager_v1")
|
|
||||||
case s.seat == nil:
|
|
||||||
return nil, fmt.Errorf("no seat available")
|
|
||||||
default:
|
|
||||||
return s.dataControlMgr, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *session) Close() {
|
|
||||||
if s.dataControlMgr != nil {
|
|
||||||
s.dataControlMgr.Destroy()
|
|
||||||
}
|
|
||||||
if s.registry != nil {
|
|
||||||
s.registry.Destroy()
|
|
||||||
}
|
|
||||||
s.display.Destroy()
|
|
||||||
}
|
|
||||||
@@ -61,10 +61,6 @@ func (cd *ConfigDeployer) DeployConfigurationsSelectiveWithReinstalls(ctx contex
|
|||||||
return cd.deployConfigurationsInternal(ctx, wm, terminal, installedDeps, replaceConfigs, reinstallItems, true)
|
return cd.deployConfigurationsInternal(ctx, wm, terminal, installedDeps, replaceConfigs, reinstallItems, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cd *ConfigDeployer) DeployConfigurationsSelectiveWithReinstallsAndSystemd(ctx context.Context, wm deps.WindowManager, terminal deps.Terminal, installedDeps []deps.Dependency, replaceConfigs map[string]bool, reinstallItems map[string]bool, useSystemd bool) ([]DeploymentResult, error) {
|
|
||||||
return cd.deployConfigurationsInternal(ctx, wm, terminal, installedDeps, replaceConfigs, reinstallItems, useSystemd)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cd *ConfigDeployer) deployConfigurationsInternal(ctx context.Context, wm deps.WindowManager, terminal deps.Terminal, installedDeps []deps.Dependency, replaceConfigs map[string]bool, reinstallItems map[string]bool, useSystemd bool) ([]DeploymentResult, error) {
|
func (cd *ConfigDeployer) deployConfigurationsInternal(ctx context.Context, wm deps.WindowManager, terminal deps.Terminal, installedDeps []deps.Dependency, replaceConfigs map[string]bool, reinstallItems map[string]bool, useSystemd bool) ([]DeploymentResult, error) {
|
||||||
var results []DeploymentResult
|
var results []DeploymentResult
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ mouse-hide-while-typing = true
|
|||||||
copy-on-select = false
|
copy-on-select = false
|
||||||
confirm-close-surface = false
|
confirm-close-surface = false
|
||||||
|
|
||||||
# Disable in-app Ghostty toast notifications
|
# Disable annoying copied to clipboard
|
||||||
app-notifications = false
|
app-notifications = no-clipboard-copy,no-config-reload
|
||||||
|
|
||||||
# Key bindings for common actions
|
# Key bindings for common actions
|
||||||
#keybind = ctrl+c=copy_to_clipboard
|
#keybind = ctrl+c=copy_to_clipboard
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ hl.bind("SUPER + M", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle"))
|
|||||||
hl.bind("SUPER + comma", hl.dsp.exec_cmd("dms ipc call settings focusOrToggle"))
|
hl.bind("SUPER + comma", hl.dsp.exec_cmd("dms ipc call settings focusOrToggle"))
|
||||||
hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notifications toggle"))
|
hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notifications toggle"))
|
||||||
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"))
|
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"))
|
||||||
hl.bind("SUPER + Y", hl.dsp.exec_cmd("dms ipc call dash toggle wallpaper"))
|
hl.bind("SUPER + Y", hl.dsp.exec_cmd("dms ipc call dankdash wallpaper"))
|
||||||
hl.bind("SUPER + TAB", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
hl.bind("SUPER + TAB", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||||
hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||||
hl.bind("SUPER + X", hl.dsp.exec_cmd("dms ipc call powermenu toggle"))
|
hl.bind("SUPER + X", hl.dsp.exec_cmd("dms ipc call powermenu toggle"))
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ hl.config({
|
|||||||
input = {
|
input = {
|
||||||
kb_layout = "us",
|
kb_layout = "us",
|
||||||
numlock_by_default = true,
|
numlock_by_default = true,
|
||||||
follow_mouse = 0,
|
|
||||||
touchpad = {
|
touchpad = {
|
||||||
tap_to_click = true,
|
tap_to_click = true,
|
||||||
natural_scroll = true,
|
natural_scroll = true,
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ bind=SUPER,n,spawn,dms ipc call notifications toggle
|
|||||||
# Notepad
|
# Notepad
|
||||||
bind=SUPER+SHIFT,n,spawn,dms ipc call notepad toggle
|
bind=SUPER+SHIFT,n,spawn,dms ipc call notepad toggle
|
||||||
# Browse Wallpapers
|
# Browse Wallpapers
|
||||||
bind=SUPER,y,spawn,dms ipc call dash toggle wallpaper
|
bind=SUPER,y,spawn,dms ipc call dankdash wallpaper
|
||||||
# Power Menu
|
# Power Menu
|
||||||
bind=SUPER,x,spawn,dms ipc call powermenu toggle
|
bind=SUPER,x,spawn,dms ipc call powermenu toggle
|
||||||
# Cycle Display Profile
|
# Cycle Display Profile
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ binds {
|
|||||||
spawn "dms" "ipc" "call" "settings" "focusOrToggle";
|
spawn "dms" "ipc" "call" "settings" "focusOrToggle";
|
||||||
}
|
}
|
||||||
Mod+Y hotkey-overlay-title="Browse Wallpapers" {
|
Mod+Y hotkey-overlay-title="Browse Wallpapers" {
|
||||||
spawn "dms" "ipc" "call" "dash" "toggle" "wallpaper";
|
spawn "dms" "ipc" "call" "dankdash" "wallpaper";
|
||||||
}
|
}
|
||||||
Mod+N hotkey-overlay-title="Notification Center" { spawn "dms" "ipc" "call" "notifications" "toggle"; }
|
Mod+N hotkey-overlay-title="Notification Center" { spawn "dms" "ipc" "call" "notifications" "toggle"; }
|
||||||
Mod+Shift+N hotkey-overlay-title="Notepad" { spawn "dms" "ipc" "call" "notepad" "toggle"; }
|
Mod+Shift+N hotkey-overlay-title="Notepad" { spawn "dms" "ipc" "call" "notepad" "toggle"; }
|
||||||
|
|||||||
@@ -20,10 +20,3 @@ window-rule {
|
|||||||
tiled-state true
|
tiled-state true
|
||||||
draw-border-with-background false
|
draw-border-with-background false
|
||||||
}
|
}
|
||||||
|
|
||||||
layer-rule {
|
|
||||||
exclude namespace="^dms:bar$"
|
|
||||||
background-effect {
|
|
||||||
xray false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -265,9 +265,9 @@ recent-windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Include dms files
|
// Include dms files
|
||||||
include optional=true "dms/colors.kdl"
|
include "dms/colors.kdl"
|
||||||
include optional=true "dms/layout.kdl"
|
include "dms/layout.kdl"
|
||||||
include optional=true "dms/alttab.kdl"
|
include "dms/alttab.kdl"
|
||||||
include optional=true "dms/binds.kdl"
|
include "dms/binds.kdl"
|
||||||
include optional=true "dms/outputs.kdl"
|
include "dms/outputs.kdl"
|
||||||
include optional=true "dms/cursor.kdl"
|
include "dms/cursor.kdl"
|
||||||
|
|||||||
@@ -119,30 +119,10 @@ func (a *ArchDistribution) DetectDependenciesWithTerminal(ctx context.Context, w
|
|||||||
|
|
||||||
dependencies = append(dependencies, a.detectMatugen())
|
dependencies = append(dependencies, a.detectMatugen())
|
||||||
dependencies = append(dependencies, a.detectDgop())
|
dependencies = append(dependencies, a.detectDgop())
|
||||||
dependencies = append(dependencies, a.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, a.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ArchDistribution) detectDanksearch() deps.Dependency {
|
|
||||||
dep := a.BaseDistribution.detectDanksearch()
|
|
||||||
dep.CanToggle = true
|
|
||||||
if a.packageInstalled("dsearch-git") {
|
|
||||||
dep.Variant = deps.VariantGit
|
|
||||||
}
|
|
||||||
return dep
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *ArchDistribution) detectDankCalendar() deps.Dependency {
|
|
||||||
dep := a.BaseDistribution.detectDankCalendar()
|
|
||||||
dep.CanToggle = true
|
|
||||||
if a.packageInstalled("dankcalendar-git") {
|
|
||||||
dep.Variant = deps.VariantGit
|
|
||||||
}
|
|
||||||
return dep
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *ArchDistribution) detectXDGPortal() deps.Dependency {
|
func (a *ArchDistribution) detectXDGPortal() deps.Dependency {
|
||||||
return a.detectPackage("xdg-desktop-portal-gtk", "Desktop integration portal for GTK", a.packageInstalled("xdg-desktop-portal-gtk"))
|
return a.detectPackage("xdg-desktop-portal-gtk", "Desktop integration portal for GTK", a.packageInstalled("xdg-desktop-portal-gtk"))
|
||||||
}
|
}
|
||||||
@@ -152,13 +132,7 @@ func (a *ArchDistribution) detectAccountsService() deps.Dependency {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *ArchDistribution) detectDMSGreeter() deps.Dependency {
|
func (a *ArchDistribution) detectDMSGreeter() deps.Dependency {
|
||||||
installed := a.packageInstalled("greetd-dms-greeter-git") || a.packageInstalled("greetd-dms-greeter-bin")
|
return a.detectOptionalPackage("dms-greeter", "DankMaterialShell greetd greeter", a.packageInstalled("greetd-dms-greeter-git"))
|
||||||
dep := a.detectOptionalPackage("dms-greeter", "DankMaterialShell greetd greeter", installed)
|
|
||||||
dep.CanToggle = true
|
|
||||||
if a.packageInstalled("greetd-dms-greeter-git") {
|
|
||||||
dep.Variant = deps.VariantGit
|
|
||||||
}
|
|
||||||
return dep
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ArchDistribution) packageInstalled(pkg string) bool {
|
func (a *ArchDistribution) packageInstalled(pkg string) bool {
|
||||||
@@ -217,7 +191,7 @@ func (a *ArchDistribution) GetPackageMappingWithVariants(wm deps.WindowManager,
|
|||||||
"dms (DankMaterialShell)": a.getDMSMapping(variants["dms (DankMaterialShell)"]),
|
"dms (DankMaterialShell)": a.getDMSMapping(variants["dms (DankMaterialShell)"]),
|
||||||
"git": {Name: "git", Repository: RepoTypeSystem},
|
"git": {Name: "git", Repository: RepoTypeSystem},
|
||||||
"quickshell": a.getQuickshellMapping(variants["quickshell"]),
|
"quickshell": a.getQuickshellMapping(variants["quickshell"]),
|
||||||
"dms-greeter": a.getDMSGreeterMapping(variants["dms-greeter"]),
|
"dms-greeter": {Name: "greetd-dms-greeter-git", Repository: RepoTypeAUR},
|
||||||
"matugen": a.getMatugenMapping(variants["matugen"]),
|
"matugen": a.getMatugenMapping(variants["matugen"]),
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypeSystem},
|
"dgop": {Name: "dgop", Repository: RepoTypeSystem},
|
||||||
"ghostty": {Name: "ghostty", Repository: RepoTypeSystem},
|
"ghostty": {Name: "ghostty", Repository: RepoTypeSystem},
|
||||||
@@ -225,8 +199,6 @@ func (a *ArchDistribution) GetPackageMappingWithVariants(wm deps.WindowManager,
|
|||||||
"alacritty": {Name: "alacritty", Repository: RepoTypeSystem},
|
"alacritty": {Name: "alacritty", Repository: RepoTypeSystem},
|
||||||
"xdg-desktop-portal-gtk": {Name: "xdg-desktop-portal-gtk", Repository: RepoTypeSystem},
|
"xdg-desktop-portal-gtk": {Name: "xdg-desktop-portal-gtk", Repository: RepoTypeSystem},
|
||||||
"accountsservice": {Name: "accountsservice", Repository: RepoTypeSystem},
|
"accountsservice": {Name: "accountsservice", Repository: RepoTypeSystem},
|
||||||
"danksearch": a.getDanksearchMapping(variants["danksearch"]),
|
|
||||||
"dankcalendar": a.getDankCalendarMapping(variants["dankcalendar"]),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch wm {
|
switch wm {
|
||||||
@@ -281,27 +253,6 @@ func (a *ArchDistribution) getMatugenMapping(variant deps.PackageVariant) Packag
|
|||||||
return PackageMapping{Name: "matugen", Repository: RepoTypeSystem}
|
return PackageMapping{Name: "matugen", Repository: RepoTypeSystem}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ArchDistribution) getDanksearchMapping(variant deps.PackageVariant) PackageMapping {
|
|
||||||
if variant == deps.VariantGit {
|
|
||||||
return PackageMapping{Name: "dsearch-git", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
return PackageMapping{Name: "dsearch-bin", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *ArchDistribution) getDankCalendarMapping(variant deps.PackageVariant) PackageMapping {
|
|
||||||
if variant == deps.VariantGit {
|
|
||||||
return PackageMapping{Name: "dankcalendar-git", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
return PackageMapping{Name: "dankcalendar-bin", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *ArchDistribution) getDMSGreeterMapping(variant deps.PackageVariant) PackageMapping {
|
|
||||||
if variant == deps.VariantGit {
|
|
||||||
return PackageMapping{Name: "greetd-dms-greeter-git", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
return PackageMapping{Name: "greetd-dms-greeter-bin", Repository: RepoTypeAUR}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *ArchDistribution) getDMSMapping(variant deps.PackageVariant) PackageMapping {
|
func (a *ArchDistribution) getDMSMapping(variant deps.PackageVariant) PackageMapping {
|
||||||
if forceDMSGit || variant == deps.VariantGit {
|
if forceDMSGit || variant == deps.VariantGit {
|
||||||
return PackageMapping{Name: "dms-shell-git", Repository: RepoTypeAUR}
|
return PackageMapping{Name: "dms-shell-git", Repository: RepoTypeAUR}
|
||||||
|
|||||||
@@ -107,14 +107,6 @@ func (b *BaseDistribution) detectDgop() deps.Dependency {
|
|||||||
return b.detectCommand("dgop", "Desktop portal management tool")
|
return b.detectCommand("dgop", "Desktop portal management tool")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BaseDistribution) detectDanksearch() deps.Dependency {
|
|
||||||
return b.detectOptionalPackage("danksearch", "File indexing and search service", b.commandExists("dsearch") || b.commandExists("danksearch"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *BaseDistribution) detectDankCalendar() deps.Dependency {
|
|
||||||
return b.detectOptionalPackage("dankcalendar", "Calendar application", b.commandExists("dcal") || b.commandExists("dankcalendar"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *BaseDistribution) detectDMS() deps.Dependency {
|
func (b *BaseDistribution) detectDMS() deps.Dependency {
|
||||||
dmsPath := filepath.Join(os.Getenv("HOME"), ".config/quickshell/dms")
|
dmsPath := filepath.Join(os.Getenv("HOME"), ".config/quickshell/dms")
|
||||||
|
|
||||||
|
|||||||
@@ -71,8 +71,6 @@ func (d *DebianDistribution) DetectDependenciesWithTerminal(ctx context.Context,
|
|||||||
|
|
||||||
dependencies = append(dependencies, d.detectMatugen())
|
dependencies = append(dependencies, d.detectMatugen())
|
||||||
dependencies = append(dependencies, d.detectDgop())
|
dependencies = append(dependencies, d.detectDgop())
|
||||||
dependencies = append(dependencies, d.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, d.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
@@ -137,8 +135,6 @@ func (d *DebianDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
|
|||||||
"matugen": {Name: "matugen", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"matugen": {Name: "matugen", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"dgop": {Name: "dgop", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"ghostty": {Name: "ghostty", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"ghostty": {Name: "ghostty", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"danksearch": {Name: "danksearch", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
|
||||||
"dankcalendar": {Name: "dankcalendar-git", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if wm == deps.WindowManagerNiri {
|
if wm == deps.WindowManagerNiri {
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
package distros
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os/exec"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetupDsearchService enables the dsearch.service user unit. Enablement failures
|
|
||||||
// are returned for the caller to surface as a non-fatal warning.
|
|
||||||
func SetupDsearchService(ctx context.Context, logf func(string)) error {
|
|
||||||
if logf == nil {
|
|
||||||
logf = func(string) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := runSystemctlUser(ctx, "daemon-reload"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := runSystemctlUser(ctx, "enable", "--now", "dsearch.service"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
logf("Enabled dsearch.service")
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func runSystemctlUser(ctx context.Context, args ...string) error {
|
|
||||||
cmd := exec.CommandContext(ctx, "systemctl", append([]string{"--user"}, args...)...)
|
|
||||||
if output, err := cmd.CombinedOutput(); err != nil {
|
|
||||||
return fmt.Errorf("systemctl --user %v failed: %w: %s", args, err, string(output))
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -104,8 +104,6 @@ func (f *FedoraDistribution) DetectDependenciesWithTerminal(ctx context.Context,
|
|||||||
|
|
||||||
dependencies = append(dependencies, f.detectMatugen())
|
dependencies = append(dependencies, f.detectMatugen())
|
||||||
dependencies = append(dependencies, f.detectDgop())
|
dependencies = append(dependencies, f.detectDgop())
|
||||||
dependencies = append(dependencies, f.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, f.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
@@ -140,8 +138,6 @@ func (f *FedoraDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
|
|||||||
"matugen": {Name: "matugen", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
"matugen": {Name: "matugen", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
||||||
"dms (DankMaterialShell)": f.getDmsMapping(variants["dms (DankMaterialShell)"]),
|
"dms (DankMaterialShell)": f.getDmsMapping(variants["dms (DankMaterialShell)"]),
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
"dgop": {Name: "dgop", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
||||||
"danksearch": {Name: "danksearch", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
|
||||||
"dankcalendar": {Name: "dankcalendar-git", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch wm {
|
switch wm {
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ func (g *GentooDistribution) DetectDependenciesWithTerminal(ctx context.Context,
|
|||||||
|
|
||||||
dependencies = append(dependencies, g.detectMatugen())
|
dependencies = append(dependencies, g.detectMatugen())
|
||||||
dependencies = append(dependencies, g.detectDgop())
|
dependencies = append(dependencies, g.detectDgop())
|
||||||
dependencies = append(dependencies, g.detectDanksearch())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
@@ -172,7 +171,6 @@ func (g *GentooDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
|
|||||||
"matugen": {Name: "x11-misc/matugen", Repository: RepoTypeGURU, AcceptKeywords: archKeyword},
|
"matugen": {Name: "x11-misc/matugen", Repository: RepoTypeGURU, AcceptKeywords: archKeyword},
|
||||||
"dms (DankMaterialShell)": g.getDmsMapping(),
|
"dms (DankMaterialShell)": g.getDmsMapping(),
|
||||||
"dgop": {Name: "gui-apps/dgop", Repository: RepoTypeGURU, AcceptKeywords: archKeyword},
|
"dgop": {Name: "gui-apps/dgop", Repository: RepoTypeGURU, AcceptKeywords: archKeyword},
|
||||||
"danksearch": {Name: "gui-apps/danksearch", Repository: RepoTypeGURU, AcceptKeywords: archKeyword},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch wm {
|
switch wm {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ const (
|
|||||||
FamilyDebian DistroFamily = "debian"
|
FamilyDebian DistroFamily = "debian"
|
||||||
FamilyNix DistroFamily = "nix"
|
FamilyNix DistroFamily = "nix"
|
||||||
FamilyGentoo DistroFamily = "gentoo"
|
FamilyGentoo DistroFamily = "gentoo"
|
||||||
FamilyVoid DistroFamily = "void"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// PackageManagerType defines the package manager a distro uses
|
// PackageManagerType defines the package manager a distro uses
|
||||||
@@ -30,7 +29,6 @@ const (
|
|||||||
PackageManagerZypper PackageManagerType = "zypper"
|
PackageManagerZypper PackageManagerType = "zypper"
|
||||||
PackageManagerNix PackageManagerType = "nix"
|
PackageManagerNix PackageManagerType = "nix"
|
||||||
PackageManagerPortage PackageManagerType = "portage"
|
PackageManagerPortage PackageManagerType = "portage"
|
||||||
PackageManagerXBPS PackageManagerType = "xbps"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// RepositoryType defines the type of repository for a package
|
// RepositoryType defines the type of repository for a package
|
||||||
@@ -44,7 +42,6 @@ const (
|
|||||||
RepoTypeOBS RepositoryType = "obs" // OpenBuild Service (Debian/OpenSUSE)
|
RepoTypeOBS RepositoryType = "obs" // OpenBuild Service (Debian/OpenSUSE)
|
||||||
RepoTypeFlake RepositoryType = "flake" // Nix flake
|
RepoTypeFlake RepositoryType = "flake" // Nix flake
|
||||||
RepoTypeGURU RepositoryType = "guru" // Gentoo GURU
|
RepoTypeGURU RepositoryType = "guru" // Gentoo GURU
|
||||||
RepoTypeXBPS RepositoryType = "xbps" // Custom XBPS repository
|
|
||||||
RepoTypeManual RepositoryType = "manual" // Manual build from source
|
RepoTypeManual RepositoryType = "manual" // Manual build from source
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,6 @@ func (o *OpenSUSEDistribution) DetectDependenciesWithTerminal(ctx context.Contex
|
|||||||
|
|
||||||
dependencies = append(dependencies, o.detectMatugen())
|
dependencies = append(dependencies, o.detectMatugen())
|
||||||
dependencies = append(dependencies, o.detectDgop())
|
dependencies = append(dependencies, o.detectDgop())
|
||||||
dependencies = append(dependencies, o.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, o.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
@@ -131,8 +129,6 @@ func (o *OpenSUSEDistribution) GetPackageMappingWithVariants(wm deps.WindowManag
|
|||||||
"ghostty": {Name: "ghostty", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"ghostty": {Name: "ghostty", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"matugen": {Name: "matugen", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"matugen": {Name: "matugen", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
"dgop": {Name: "dgop", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
||||||
"danksearch": {Name: "danksearch", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
|
||||||
"dankcalendar": {Name: "dankcalendar-git", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch wm {
|
switch wm {
|
||||||
|
|||||||
@@ -80,8 +80,6 @@ func (u *UbuntuDistribution) DetectDependenciesWithTerminal(ctx context.Context,
|
|||||||
|
|
||||||
dependencies = append(dependencies, u.detectMatugen())
|
dependencies = append(dependencies, u.detectMatugen())
|
||||||
dependencies = append(dependencies, u.detectDgop())
|
dependencies = append(dependencies, u.detectDgop())
|
||||||
dependencies = append(dependencies, u.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, u.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
return dependencies, nil
|
||||||
}
|
}
|
||||||
@@ -126,8 +124,6 @@ func (u *UbuntuDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
|
|||||||
"matugen": {Name: "matugen", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
"matugen": {Name: "matugen", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
"dgop": {Name: "dgop", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
||||||
"ghostty": {Name: "ghostty", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
"ghostty": {Name: "ghostty", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
||||||
"danksearch": {Name: "danksearch", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
|
||||||
"dankcalendar": {Name: "dankcalendar-git", Repository: RepoTypePPA, RepoURL: "ppa:avengemedia/danklinux"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch wm {
|
switch wm {
|
||||||
|
|||||||
@@ -1,534 +0,0 @@
|
|||||||
package distros
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
|
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
VoidDMSRepo = "https://avengemedia.github.io/DankMaterialShell/current"
|
|
||||||
VoidDankLinuxRepo = "https://avengemedia.github.io/DankLinux/current"
|
|
||||||
VoidHyprlandRepo = "https://mirror.black-hole.dev/x86_64"
|
|
||||||
|
|
||||||
voidRunitSvDir = "/etc/sv"
|
|
||||||
voidRunitServiceDir = "/var/service"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
Register("void", "#478061", FamilyVoid, func(config DistroConfig, logChan chan<- string) Distribution {
|
|
||||||
return NewVoidDistribution(config, logChan)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
type VoidDistribution struct {
|
|
||||||
*BaseDistribution
|
|
||||||
config DistroConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVoidDistribution(config DistroConfig, logChan chan<- string) *VoidDistribution {
|
|
||||||
return &VoidDistribution{
|
|
||||||
BaseDistribution: NewBaseDistribution(logChan),
|
|
||||||
config: config,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetID() string {
|
|
||||||
return v.config.ID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetColorHex() string {
|
|
||||||
return v.config.ColorHex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetFamily() DistroFamily {
|
|
||||||
return v.config.Family
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetPackageManager() PackageManagerType {
|
|
||||||
return PackageManagerXBPS
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) DetectDependencies(ctx context.Context, wm deps.WindowManager) ([]deps.Dependency, error) {
|
|
||||||
return v.DetectDependenciesWithTerminal(ctx, wm, deps.TerminalGhostty)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) DetectDependenciesWithTerminal(ctx context.Context, wm deps.WindowManager, terminal deps.Terminal) ([]deps.Dependency, error) {
|
|
||||||
var dependencies []deps.Dependency
|
|
||||||
|
|
||||||
dependencies = append(dependencies, v.detectDMS())
|
|
||||||
dependencies = append(dependencies, v.detectSpecificTerminal(terminal))
|
|
||||||
dependencies = append(dependencies, v.detectGit())
|
|
||||||
dependencies = append(dependencies, v.detectWindowManager(wm))
|
|
||||||
dependencies = append(dependencies, v.detectQuickshell())
|
|
||||||
dependencies = append(dependencies, v.detectDMSGreeter())
|
|
||||||
dependencies = append(dependencies, v.detectXDGPortal())
|
|
||||||
dependencies = append(dependencies, v.detectAccountsService())
|
|
||||||
dependencies = append(dependencies, v.detectDBus())
|
|
||||||
dependencies = append(dependencies, v.detectElogind())
|
|
||||||
|
|
||||||
if wm == deps.WindowManagerHyprland {
|
|
||||||
dependencies = append(dependencies, v.detectHyprlandTools()...)
|
|
||||||
}
|
|
||||||
|
|
||||||
if wm == deps.WindowManagerNiri || wm == deps.WindowManagerMango {
|
|
||||||
dependencies = append(dependencies, v.detectXwaylandSatellite())
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies = append(dependencies, v.detectMatugen())
|
|
||||||
dependencies = append(dependencies, v.detectDgop())
|
|
||||||
dependencies = append(dependencies, v.detectDanksearch())
|
|
||||||
dependencies = append(dependencies, v.detectDankCalendar())
|
|
||||||
|
|
||||||
return dependencies, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectDMS() deps.Dependency {
|
|
||||||
status := deps.StatusMissing
|
|
||||||
version := ""
|
|
||||||
variant := deps.VariantStable
|
|
||||||
|
|
||||||
if v.packageInstalled("dms-git") {
|
|
||||||
status = deps.StatusInstalled
|
|
||||||
version = v.packageVersion("dms-git")
|
|
||||||
variant = deps.VariantGit
|
|
||||||
} else if v.packageInstalled("dms") {
|
|
||||||
status = deps.StatusInstalled
|
|
||||||
version = v.packageVersion("dms")
|
|
||||||
} else if v.commandExists("dms") {
|
|
||||||
status = deps.StatusInstalled
|
|
||||||
}
|
|
||||||
|
|
||||||
return deps.Dependency{
|
|
||||||
Name: "dms (DankMaterialShell)",
|
|
||||||
Status: status,
|
|
||||||
Version: version,
|
|
||||||
Description: "Desktop Management System package",
|
|
||||||
Required: true,
|
|
||||||
Variant: variant,
|
|
||||||
CanToggle: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectQuickshell() deps.Dependency {
|
|
||||||
dep := v.BaseDistribution.detectQuickshell()
|
|
||||||
dep.CanToggle = false
|
|
||||||
return dep
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectXDGPortal() deps.Dependency {
|
|
||||||
return v.detectPackage("xdg-desktop-portal-gtk", "Desktop integration portal for GTK", v.packageInstalled("xdg-desktop-portal-gtk"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectDMSGreeter() deps.Dependency {
|
|
||||||
return v.detectOptionalPackage("dms-greeter", "DankMaterialShell greetd greeter", v.packageInstalled("dms-greeter"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectAccountsService() deps.Dependency {
|
|
||||||
return v.detectPackage("accountsservice", "D-Bus interface for user account query and manipulation", v.packageInstalled("accountsservice"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectDBus() deps.Dependency {
|
|
||||||
return v.detectPackage("dbus", "D-Bus system and session message bus", v.packageInstalled("dbus"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectElogind() deps.Dependency {
|
|
||||||
return v.detectPackage("elogind", "loginctl/logind provider for power management and session tracking", v.packageInstalled("elogind") || v.commandExists("loginctl"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) detectXwaylandSatellite() deps.Dependency {
|
|
||||||
return v.detectPackage("xwayland-satellite", "Xwayland support", v.packageInstalled("xwayland-satellite"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) packageInstalled(pkg string) bool {
|
|
||||||
return exec.Command("xbps-query", pkg).Run() == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) packageVersion(pkg string) string {
|
|
||||||
output, err := exec.Command("xbps-query", "-p", "pkgver", pkg).Output()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(string(output))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetPackageMapping(wm deps.WindowManager) map[string]PackageMapping {
|
|
||||||
return v.GetPackageMappingWithVariants(wm, make(map[string]deps.PackageVariant))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) GetPackageMappingWithVariants(wm deps.WindowManager, variants map[string]deps.PackageVariant) map[string]PackageMapping {
|
|
||||||
packages := map[string]PackageMapping{
|
|
||||||
"git": {Name: "git", Repository: RepoTypeSystem},
|
|
||||||
"ghostty": {Name: "ghostty", Repository: RepoTypeSystem},
|
|
||||||
"kitty": {Name: "kitty", Repository: RepoTypeSystem},
|
|
||||||
"alacritty": {Name: "alacritty", Repository: RepoTypeSystem},
|
|
||||||
"xdg-desktop-portal-gtk": {Name: "xdg-desktop-portal-gtk", Repository: RepoTypeSystem},
|
|
||||||
"accountsservice": {Name: "accountsservice", Repository: RepoTypeSystem},
|
|
||||||
"dbus": {Name: "dbus", Repository: RepoTypeSystem},
|
|
||||||
"elogind": {Name: "elogind", Repository: RepoTypeSystem},
|
|
||||||
|
|
||||||
"quickshell": {Name: "quickshell", Repository: RepoTypeSystem},
|
|
||||||
"matugen": {Name: "matugen", Repository: RepoTypeSystem},
|
|
||||||
"dms (DankMaterialShell)": v.getDmsMapping(variants["dms (DankMaterialShell)"]),
|
|
||||||
"dms-greeter": {Name: "dms-greeter", Repository: RepoTypeXBPS, RepoURL: VoidDMSRepo},
|
|
||||||
"dgop": {Name: "dgop", Repository: RepoTypeXBPS, RepoURL: VoidDankLinuxRepo},
|
|
||||||
"danksearch": {Name: "danksearch", Repository: RepoTypeXBPS, RepoURL: VoidDankLinuxRepo},
|
|
||||||
"dankcalendar": {Name: "dankcalendar", Repository: RepoTypeXBPS, RepoURL: VoidDankLinuxRepo},
|
|
||||||
}
|
|
||||||
|
|
||||||
switch wm {
|
|
||||||
case deps.WindowManagerHyprland:
|
|
||||||
packages["hyprland"] = PackageMapping{Name: "hyprland", Repository: RepoTypeXBPS, RepoURL: VoidHyprlandRepo}
|
|
||||||
packages["hyprctl"] = PackageMapping{Name: "hyprland", Repository: RepoTypeXBPS, RepoURL: VoidHyprlandRepo}
|
|
||||||
packages["jq"] = PackageMapping{Name: "jq", Repository: RepoTypeSystem}
|
|
||||||
case deps.WindowManagerNiri:
|
|
||||||
packages["niri"] = PackageMapping{Name: "niri", Repository: RepoTypeSystem}
|
|
||||||
packages["xwayland-satellite"] = PackageMapping{Name: "xwayland-satellite", Repository: RepoTypeSystem}
|
|
||||||
case deps.WindowManagerMango:
|
|
||||||
packages["mango"] = PackageMapping{Name: "mangowc", Repository: RepoTypeSystem}
|
|
||||||
packages["xwayland-satellite"] = PackageMapping{Name: "xwayland-satellite", Repository: RepoTypeSystem}
|
|
||||||
}
|
|
||||||
|
|
||||||
return packages
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) getDmsMapping(variant deps.PackageVariant) PackageMapping {
|
|
||||||
if variant == deps.VariantStable {
|
|
||||||
return PackageMapping{Name: "dms", Repository: RepoTypeXBPS, RepoURL: VoidDMSRepo}
|
|
||||||
}
|
|
||||||
return PackageMapping{Name: "dms-git", Repository: RepoTypeXBPS, RepoURL: VoidDMSRepo}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) InstallPrerequisites(ctx context.Context, sudoPassword string, progressChan chan<- InstallProgressMsg) error {
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhasePrerequisites,
|
|
||||||
Progress: 0.06,
|
|
||||||
Step: "Checking XBPS...",
|
|
||||||
IsComplete: false,
|
|
||||||
LogOutput: "Checking for xbps-install",
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := exec.LookPath("xbps-install"); err != nil {
|
|
||||||
return fmt.Errorf("xbps-install not found; Void Linux package tools are required: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) InstallPackages(ctx context.Context, dependencies []deps.Dependency, wm deps.WindowManager, sudoPassword string, reinstallFlags map[string]bool, disabledFlags map[string]bool, skipGlobalUseFlags bool, progressChan chan<- InstallProgressMsg) error {
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhasePrerequisites,
|
|
||||||
Progress: 0.05,
|
|
||||||
Step: "Checking system prerequisites...",
|
|
||||||
IsComplete: false,
|
|
||||||
LogOutput: "Starting prerequisite check...",
|
|
||||||
}
|
|
||||||
|
|
||||||
if wm == deps.WindowManagerHyprland {
|
|
||||||
arch, err := v.xbpsArch(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to detect XBPS architecture for Hyprland repository selection: %w", err)
|
|
||||||
}
|
|
||||||
if arch != "x86_64" {
|
|
||||||
return fmt.Errorf("hyprland on Void Linux is installed from %s, which currently provides x86_64 packages only (detected %s)", VoidHyprlandRepo, arch)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := v.InstallPrerequisites(ctx, sudoPassword, progressChan); err != nil {
|
|
||||||
return fmt.Errorf("failed to install prerequisites: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
systemPkgs, xbpsPkgs := v.categorizePackages(dependencies, wm, reinstallFlags, disabledFlags)
|
|
||||||
|
|
||||||
if len(xbpsPkgs) > 0 {
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseSystemPackages,
|
|
||||||
Progress: 0.15,
|
|
||||||
Step: "Enabling DMS XBPS repositories...",
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
LogOutput: "Setting up custom XBPS repositories for DMS packages",
|
|
||||||
}
|
|
||||||
if err := v.enableXBPSRepos(ctx, xbpsPkgs, sudoPassword, progressChan); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable XBPS repositories: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allPkgs := v.uniquePackageNames(systemPkgs, v.extractPackageNames(xbpsPkgs))
|
|
||||||
if len(allPkgs) > 0 {
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseSystemPackages,
|
|
||||||
Progress: 0.35,
|
|
||||||
Step: fmt.Sprintf("Installing %d XBPS packages...", len(allPkgs)),
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
LogOutput: fmt.Sprintf("Installing XBPS packages: %s", strings.Join(allPkgs, ", ")),
|
|
||||||
}
|
|
||||||
if err := v.installXBPSPackages(ctx, allPkgs, sudoPassword, progressChan); err != nil {
|
|
||||||
return fmt.Errorf("failed to install XBPS packages: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseConfiguration,
|
|
||||||
Progress: 0.90,
|
|
||||||
Step: "Configuring system...",
|
|
||||||
IsComplete: false,
|
|
||||||
LogOutput: "Starting post-installation configuration...",
|
|
||||||
}
|
|
||||||
|
|
||||||
v.log("Void Linux detected; DMS environment and autostart will be configured in the compositor config instead of systemd")
|
|
||||||
if err := v.ensureSessionServices(ctx, sudoPassword, progressChan); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable Void session services: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseComplete,
|
|
||||||
Progress: 1.0,
|
|
||||||
Step: "Installation complete!",
|
|
||||||
IsComplete: true,
|
|
||||||
LogOutput: "All packages installed and configured successfully",
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) ensureSessionServices(ctx context.Context, sudoPassword string, progressChan chan<- InstallProgressMsg) error {
|
|
||||||
if !v.isRunitSystem() {
|
|
||||||
v.log("Void runit service directory not detected; skipping dbus/elogind service enablement")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, service := range []string{"dbus", "elogind"} {
|
|
||||||
if !v.runitServiceInstalled(service) {
|
|
||||||
v.log(fmt.Sprintf("Warning: %s runit service not found in %s; power/session actions may not work until %s is installed", service, voidRunitSvDir, service))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if v.runitServiceEnabled(service) {
|
|
||||||
v.log(fmt.Sprintf("Void runit service %s already enabled", service))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseConfiguration,
|
|
||||||
Progress: 0.92,
|
|
||||||
Step: fmt.Sprintf("Enabling %s runit service...", service),
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
CommandInfo: fmt.Sprintf("sudo ln -sf %s %s", filepath.Join(voidRunitSvDir, service), filepath.Join(voidRunitServiceDir, service)),
|
|
||||||
LogOutput: fmt.Sprintf("Enabling Void runit service: %s", service),
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd := privesc.ExecCommand(ctx, sudoPassword, fmt.Sprintf("ln -sf %s %s", filepath.Join(voidRunitSvDir, service), filepath.Join(voidRunitServiceDir, service)))
|
|
||||||
if err := v.runWithProgress(cmd, progressChan, PhaseConfiguration, 0.92, 0.95); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable %s runit service: %w", service, err)
|
|
||||||
}
|
|
||||||
v.log(fmt.Sprintf("✓ Enabled %s runit service", service))
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) isRunitSystem() bool {
|
|
||||||
if fi, err := os.Stat("/run/runit"); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if _, err := os.Stat("/run/systemd/system"); err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if fi, err := os.Stat(voidRunitServiceDir); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) runitServiceInstalled(name string) bool {
|
|
||||||
fi, err := os.Stat(filepath.Join(voidRunitSvDir, name))
|
|
||||||
return err == nil && fi.IsDir()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) runitServiceEnabled(name string) bool {
|
|
||||||
_, err := os.Lstat(filepath.Join(voidRunitServiceDir, name))
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) categorizePackages(dependencies []deps.Dependency, wm deps.WindowManager, reinstallFlags map[string]bool, disabledFlags map[string]bool) ([]string, []PackageMapping) {
|
|
||||||
systemPkgs := []string{}
|
|
||||||
xbpsPkgs := []PackageMapping{}
|
|
||||||
|
|
||||||
variantMap := make(map[string]deps.PackageVariant)
|
|
||||||
for _, dep := range dependencies {
|
|
||||||
variantMap[dep.Name] = dep.Variant
|
|
||||||
}
|
|
||||||
|
|
||||||
packageMap := v.GetPackageMappingWithVariants(wm, variantMap)
|
|
||||||
|
|
||||||
for _, dep := range dependencies {
|
|
||||||
if disabledFlags[dep.Name] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if dep.Status == deps.StatusInstalled && !reinstallFlags[dep.Name] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
pkgInfo, exists := packageMap[dep.Name]
|
|
||||||
if !exists {
|
|
||||||
v.log(fmt.Sprintf("Warning: No package mapping for %s", dep.Name))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
switch pkgInfo.Repository {
|
|
||||||
case RepoTypeXBPS:
|
|
||||||
xbpsPkgs = append(xbpsPkgs, pkgInfo)
|
|
||||||
case RepoTypeSystem:
|
|
||||||
systemPkgs = append(systemPkgs, pkgInfo.Name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return systemPkgs, xbpsPkgs
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) enableXBPSRepos(ctx context.Context, xbpsPkgs []PackageMapping, sudoPassword string, progressChan chan<- InstallProgressMsg) error {
|
|
||||||
enabledRepos := make(map[string]bool)
|
|
||||||
enabledRepoURLs := []string{}
|
|
||||||
|
|
||||||
for _, pkg := range xbpsPkgs {
|
|
||||||
if pkg.RepoURL == "" || enabledRepos[pkg.RepoURL] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
repoName := v.xbpsRepoName(pkg.RepoURL)
|
|
||||||
confPath := filepath.Join("/etc/xbps.d", repoName+".conf")
|
|
||||||
repoLine := fmt.Sprintf("repository=%s", pkg.RepoURL)
|
|
||||||
repoFileContent := repoLine + "\n"
|
|
||||||
|
|
||||||
if content, err := os.ReadFile(confPath); err == nil && string(content) == repoFileContent {
|
|
||||||
v.log(fmt.Sprintf("XBPS repo %s already configured, skipping", pkg.RepoURL))
|
|
||||||
enabledRepos[pkg.RepoURL] = true
|
|
||||||
enabledRepoURLs = append(enabledRepoURLs, pkg.RepoURL)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseSystemPackages,
|
|
||||||
Progress: 0.18,
|
|
||||||
Step: fmt.Sprintf("Adding XBPS repo %s...", repoName),
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
CommandInfo: fmt.Sprintf("echo 'repository=%s' | sudo tee %s", pkg.RepoURL, confPath),
|
|
||||||
LogOutput: fmt.Sprintf("Adding XBPS repository: %s", pkg.RepoURL),
|
|
||||||
}
|
|
||||||
|
|
||||||
mkdirCmd := privesc.ExecCommand(ctx, sudoPassword, "mkdir -p /etc/xbps.d")
|
|
||||||
if err := v.runWithProgress(mkdirCmd, progressChan, PhaseSystemPackages, 0.18, 0.19); err != nil {
|
|
||||||
return fmt.Errorf("failed to create /etc/xbps.d: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
writeCmd := privesc.ExecCommand(ctx, sudoPassword,
|
|
||||||
fmt.Sprintf("bash -c 'printf \"%%s\\n\" %q > %s'", repoLine, confPath))
|
|
||||||
if err := v.runWithProgress(writeCmd, progressChan, PhaseSystemPackages, 0.19, 0.22); err != nil {
|
|
||||||
return fmt.Errorf("failed to add XBPS repo %s: %w", pkg.RepoURL, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
enabledRepos[pkg.RepoURL] = true
|
|
||||||
enabledRepoURLs = append(enabledRepoURLs, pkg.RepoURL)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(enabledRepos) > 0 {
|
|
||||||
syncArgs := []string{"xbps-install", "-Sy", "-i"}
|
|
||||||
for _, repoURL := range enabledRepoURLs {
|
|
||||||
syncArgs = append(syncArgs, "--repository", repoURL)
|
|
||||||
}
|
|
||||||
syncCommand := strings.Join(syncArgs, " ")
|
|
||||||
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseSystemPackages,
|
|
||||||
Progress: 0.25,
|
|
||||||
Step: "Synchronizing XBPS repositories...",
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
CommandInfo: "sudo sh -c 'yes y | " + syncCommand + "'",
|
|
||||||
LogOutput: "Synchronizing XBPS repository indexes",
|
|
||||||
}
|
|
||||||
|
|
||||||
syncCmd := privesc.ExecCommand(ctx, sudoPassword, "sh -c 'yes y | "+syncCommand+"'")
|
|
||||||
if err := v.runWithProgress(syncCmd, progressChan, PhaseSystemPackages, 0.25, 0.30); err != nil {
|
|
||||||
return fmt.Errorf("failed to synchronize XBPS repositories: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) xbpsRepoName(repoURL string) string {
|
|
||||||
switch repoURL {
|
|
||||||
case VoidDMSRepo:
|
|
||||||
return "dms"
|
|
||||||
case VoidDankLinuxRepo:
|
|
||||||
return "danklinux"
|
|
||||||
case VoidHyprlandRepo:
|
|
||||||
return "hyprland"
|
|
||||||
default:
|
|
||||||
name := strings.TrimPrefix(repoURL, "https://")
|
|
||||||
name = strings.TrimPrefix(name, "http://")
|
|
||||||
name = strings.NewReplacer("/", "-", ".", "-").Replace(name)
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) xbpsArch(ctx context.Context) (string, error) {
|
|
||||||
output, err := exec.CommandContext(ctx, "xbps-uhelper", "arch").Output()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(string(output)), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) installXBPSPackages(ctx context.Context, packages []string, sudoPassword string, progressChan chan<- InstallProgressMsg) error {
|
|
||||||
if len(packages) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
args := append([]string{"xbps-install", "-Sy"}, packages...)
|
|
||||||
progressChan <- InstallProgressMsg{
|
|
||||||
Phase: PhaseSystemPackages,
|
|
||||||
Progress: 0.40,
|
|
||||||
Step: "Installing XBPS packages...",
|
|
||||||
IsComplete: false,
|
|
||||||
NeedsSudo: true,
|
|
||||||
CommandInfo: fmt.Sprintf("sudo %s", strings.Join(args, " ")),
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd := privesc.ExecCommand(ctx, sudoPassword, strings.Join(args, " "))
|
|
||||||
return v.runWithProgress(cmd, progressChan, PhaseSystemPackages, 0.40, 0.85)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) extractPackageNames(packages []PackageMapping) []string {
|
|
||||||
names := make([]string, len(packages))
|
|
||||||
for i, pkg := range packages {
|
|
||||||
names[i] = pkg.Name
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoidDistribution) uniquePackageNames(groups ...[]string) []string {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
var unique []string
|
|
||||||
for _, group := range groups {
|
|
||||||
for _, pkg := range group {
|
|
||||||
if pkg == "" || seen[pkg] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
seen[pkg] = true
|
|
||||||
unique = append(unique, pkg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return unique
|
|
||||||
}
|
|
||||||
@@ -30,11 +30,6 @@ const appArmorProfileDest = "/etc/apparmor.d/usr.bin.dms-greeter"
|
|||||||
|
|
||||||
const GreeterCacheDir = "/var/cache/dms-greeter"
|
const GreeterCacheDir = "/var/cache/dms-greeter"
|
||||||
|
|
||||||
const (
|
|
||||||
runitSvDir = "/etc/sv"
|
|
||||||
runitServiceDir = "/var/service"
|
|
||||||
)
|
|
||||||
|
|
||||||
func DetectDMSPath() (string, error) {
|
func DetectDMSPath() (string, error) {
|
||||||
return config.LocateDMSConfig()
|
return config.LocateDMSConfig()
|
||||||
}
|
}
|
||||||
@@ -46,96 +41,6 @@ func IsNixOS() bool {
|
|||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsVoidLinux() bool {
|
|
||||||
osInfo, err := distros.GetOSInfo()
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
config, exists := distros.Registry[osInfo.Distribution.ID]
|
|
||||||
return exists && config.Family == distros.FamilyVoid
|
|
||||||
}
|
|
||||||
|
|
||||||
func isRunit() bool {
|
|
||||||
if fi, err := os.Stat("/run/runit"); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if _, err := os.Stat("/run/systemd/system"); err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if fi, err := os.Stat(runitServiceDir); err == nil && fi.IsDir() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func runitServiceInstalled(name string) bool {
|
|
||||||
fi, err := os.Stat(filepath.Join(runitSvDir, name))
|
|
||||||
return err == nil && fi.IsDir()
|
|
||||||
}
|
|
||||||
|
|
||||||
func runitServiceEnabled(name string) bool {
|
|
||||||
_, err := os.Lstat(filepath.Join(runitServiceDir, name))
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func enableRunitService(name, sudoPassword string) error {
|
|
||||||
if !runitServiceInstalled(name) {
|
|
||||||
return fmt.Errorf("runit service %q not found in %s", name, runitSvDir)
|
|
||||||
}
|
|
||||||
if runitServiceEnabled(name) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return privesc.Run(context.Background(), sudoPassword, "ln", "-sf",
|
|
||||||
filepath.Join(runitSvDir, name), filepath.Join(runitServiceDir, name))
|
|
||||||
}
|
|
||||||
|
|
||||||
func disableRunitService(name, sudoPassword string) error {
|
|
||||||
if !runitServiceEnabled(name) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return privesc.Run(context.Background(), sudoPassword, "rm", "-f",
|
|
||||||
filepath.Join(runitServiceDir, name))
|
|
||||||
}
|
|
||||||
|
|
||||||
func ensureRunitSeat(greeterUser, sudoPassword string, logFunc func(string)) {
|
|
||||||
if runitServiceInstalled("seatd") {
|
|
||||||
if err := enableRunitService("seatd", sudoPassword); err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ could not enable seatd: %v", err))
|
|
||||||
} else {
|
|
||||||
logFunc("✓ seatd enabled")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logFunc("⚠ seatd not installed — the greeter compositor needs it for GPU/seat access")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := privesc.Run(context.Background(), sudoPassword, "usermod", "-aG", "_seatd,video,input", greeterUser); err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ could not add %s to seat groups: %v", greeterUser, err))
|
|
||||||
} else {
|
|
||||||
logFunc(fmt.Sprintf("✓ %s added to seat groups (_seatd, video, input)", greeterUser))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ensureGreetdPamRundir(sudoPassword string, logFunc func(string)) {
|
|
||||||
const pamPath = "/etc/pam.d/greetd"
|
|
||||||
data, err := os.ReadFile(pamPath)
|
|
||||||
if err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ could not read %s: %v", pamPath, err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if strings.Contains(string(data), "pam_rundir") {
|
|
||||||
logFunc("✓ pam_rundir already present in greetd PAM")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
line := "session optional pam_rundir.so"
|
|
||||||
if err := privesc.Run(context.Background(), sudoPassword, "sh", "-c",
|
|
||||||
fmt.Sprintf("printf '%%s\\n' %q >> %s", line, pamPath)); err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ could not add pam_rundir to %s: %v", pamPath, err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
logFunc("✓ pam_rundir added to greetd PAM (provides XDG_RUNTIME_DIR for the session)")
|
|
||||||
}
|
|
||||||
|
|
||||||
func DetectGreeterGroup() string {
|
func DetectGreeterGroup() string {
|
||||||
data, err := os.ReadFile("/etc/group")
|
data, err := os.ReadFile("/etc/group")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -328,39 +233,24 @@ func stripDesktopExecCodes(execLine string) string {
|
|||||||
return strings.Join(cleaned, " ")
|
return strings.Join(cleaned, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
func shellQuote(value string) string {
|
func formatInitialSessionCommand(sessionExec string) string {
|
||||||
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
execLine := strings.TrimSpace(stripDesktopExecCodes(sessionExec))
|
||||||
}
|
if execLine == "" {
|
||||||
|
|
||||||
func stableDMSCommand() string {
|
|
||||||
for _, candidate := range []string{"/usr/bin/dms", "/usr/local/bin/dms"} {
|
|
||||||
info, err := os.Stat(candidate)
|
|
||||||
if err == nil && !info.IsDir() && info.Mode()&0o111 != 0 {
|
|
||||||
return candidate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "dms"
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatInitialSessionCommand(cacheDir string) string {
|
|
||||||
cacheDir = strings.TrimSpace(cacheDir)
|
|
||||||
if cacheDir == "" {
|
|
||||||
return `command = ""`
|
return `command = ""`
|
||||||
}
|
}
|
||||||
launcher := fmt.Sprintf("%s greeter launch-session --from-memory --cache-dir %s", stableDMSCommand(), shellQuote(cacheDir))
|
escaped := strings.ReplaceAll(execLine, `'`, `'\''`)
|
||||||
escaped := strings.ReplaceAll(launcher, `'`, `'\''`)
|
|
||||||
inner := fmt.Sprintf("env XDG_SESSION_TYPE=wayland sh -c 'exec %s'", escaped)
|
inner := fmt.Sprintf("env XDG_SESSION_TYPE=wayland sh -c 'exec %s'", escaped)
|
||||||
tomlEscaped := strings.ReplaceAll(inner, `\`, `\\`)
|
tomlEscaped := strings.ReplaceAll(inner, `\`, `\\`)
|
||||||
tomlEscaped = strings.ReplaceAll(tomlEscaped, `"`, `\"`)
|
tomlEscaped = strings.ReplaceAll(tomlEscaped, `"`, `\"`)
|
||||||
return fmt.Sprintf(`command = "%s"`, tomlEscaped)
|
return fmt.Sprintf(`command = "%s"`, tomlEscaped)
|
||||||
}
|
}
|
||||||
|
|
||||||
func upsertInitialSession(configContent, loginUser, cacheDir string, enabled bool) string {
|
func upsertInitialSession(configContent, loginUser, sessionExec string, enabled bool) string {
|
||||||
if !enabled {
|
if !enabled {
|
||||||
return removeTomlSection(configContent, "initial_session")
|
return removeTomlSection(configContent, "initial_session")
|
||||||
}
|
}
|
||||||
|
|
||||||
commandLine := formatInitialSessionCommand(cacheDir)
|
commandLine := formatInitialSessionCommand(sessionExec)
|
||||||
lines := strings.Split(configContent, "\n")
|
lines := strings.Split(configContent, "\n")
|
||||||
var out []string
|
var out []string
|
||||||
|
|
||||||
@@ -438,11 +328,10 @@ type greeterAutoLoginConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type greeterAutoLoginMemory struct {
|
type greeterAutoLoginMemory struct {
|
||||||
LastSuccessfulUser string `json:"lastSuccessfulUser"`
|
LastSuccessfulUser string `json:"lastSuccessfulUser"`
|
||||||
LastSessionID string `json:"lastSessionId"`
|
LastSessionID string `json:"lastSessionId"`
|
||||||
LastSessionDesktopID string `json:"lastSessionDesktopId"`
|
LastSessionExec string `json:"lastSessionExec"`
|
||||||
LastSessionExec string `json:"lastSessionExec"`
|
AutoLoginEnabled bool `json:"autoLoginEnabled"`
|
||||||
AutoLoginEnabled bool `json:"autoLoginEnabled"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func readGreeterAutoLoginConfig(settingsPath string) (greeterAutoLoginConfig, error) {
|
func readGreeterAutoLoginConfig(settingsPath string) (greeterAutoLoginConfig, error) {
|
||||||
@@ -492,7 +381,7 @@ func execFromDesktopFile(path string) (string, error) {
|
|||||||
return "", fmt.Errorf("no Exec= line found in %s", path)
|
return "", fmt.Errorf("no Exec= line found in %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, loginUser string, sessionID string, err error) {
|
func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, loginUser string, sessionExec string, err error) {
|
||||||
settingsPath := filepath.Join(cacheDir, "settings.json")
|
settingsPath := filepath.Join(cacheDir, "settings.json")
|
||||||
if _, statErr := os.Stat(settingsPath); statErr != nil {
|
if _, statErr := os.Stat(settingsPath); statErr != nil {
|
||||||
settingsPath = filepath.Join(homeDir, ".config", "DankMaterialShell", "settings.json")
|
settingsPath = filepath.Join(homeDir, ".config", "DankMaterialShell", "settings.json")
|
||||||
@@ -527,9 +416,15 @@ func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, login
|
|||||||
loginUser = current.Username
|
loginUser = current.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionID = sessionDesktopIDFromMemory(mem)
|
sessionExec = mem.LastSessionExec
|
||||||
|
if sessionExec == "" && mem.LastSessionID != "" {
|
||||||
|
sessionExec, err = execFromDesktopFile(mem.LastSessionID)
|
||||||
|
if err != nil {
|
||||||
|
sessionExec = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true, loginUser, sessionID, nil
|
return true, loginUser, sessionExec, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeGreetdConfig(configPath, content string, logFunc func(string), sudoPassword, successMsg string) error {
|
func writeGreetdConfig(configPath, content string, logFunc func(string), sudoPassword, successMsg string) error {
|
||||||
@@ -645,7 +540,7 @@ func readGreeterMemoryFile(memoryPath, sudoPassword string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPassword string) error {
|
func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPassword string) error {
|
||||||
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -673,7 +568,7 @@ func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPas
|
|||||||
return writeGreetdConfig(configPath, newConfig, logFunc, sudoPassword, "✓ Disabled greeter auto-login")
|
return writeGreetdConfig(configPath, newConfig, logFunc, sudoPassword, "✓ Disabled greeter auto-login")
|
||||||
}
|
}
|
||||||
|
|
||||||
if loginUser == "" || sessionID == "" {
|
if loginUser == "" || sessionExec == "" {
|
||||||
if logFunc != nil {
|
if logFunc != nil {
|
||||||
logFunc("⚠ Greeter auto-login is enabled but user or session is not configured yet. Log in manually once, then run sync.")
|
logFunc("⚠ Greeter auto-login is enabled but user or session is not configured yet. Log in manually once, then run sync.")
|
||||||
}
|
}
|
||||||
@@ -684,7 +579,7 @@ func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPas
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
newConfig := upsertInitialSession(configContent, loginUser, cacheDir, true)
|
newConfig := upsertInitialSession(configContent, loginUser, sessionExec, true)
|
||||||
if newConfig == configContent {
|
if newConfig == configContent {
|
||||||
if logFunc != nil {
|
if logFunc != nil {
|
||||||
logFunc(fmt.Sprintf("✓ Greeter auto-login already configured for %s", loginUser))
|
logFunc(fmt.Sprintf("✓ Greeter auto-login already configured for %s", loginUser))
|
||||||
@@ -861,8 +756,6 @@ func EnsureGreetdInstalled(logFunc func(string), sudoPassword string) error {
|
|||||||
installCmd = privesc.ExecCommand(ctx, sudoPassword, "apt-get install -y greetd")
|
installCmd = privesc.ExecCommand(ctx, sudoPassword, "apt-get install -y greetd")
|
||||||
case distros.FamilyGentoo:
|
case distros.FamilyGentoo:
|
||||||
installCmd = privesc.ExecCommand(ctx, sudoPassword, "emerge --ask n sys-apps/greetd")
|
installCmd = privesc.ExecCommand(ctx, sudoPassword, "emerge --ask n sys-apps/greetd")
|
||||||
case distros.FamilyVoid:
|
|
||||||
installCmd = privesc.ExecCommand(ctx, sudoPassword, "xbps-install -Sy greetd")
|
|
||||||
case distros.FamilyNix:
|
case distros.FamilyNix:
|
||||||
return fmt.Errorf("on NixOS, please add greetd to your configuration.nix")
|
return fmt.Errorf("on NixOS, please add greetd to your configuration.nix")
|
||||||
default:
|
default:
|
||||||
@@ -989,14 +882,6 @@ func TryInstallGreeterPackage(logFunc func(string), sudoPassword string) bool {
|
|||||||
}
|
}
|
||||||
failHint = fmt.Sprintf("⚠ dms-greeter install failed. Install from AUR: %s -S greetd-dms-greeter-git", aurHelper)
|
failHint = fmt.Sprintf("⚠ dms-greeter install failed. Install from AUR: %s -S greetd-dms-greeter-git", aurHelper)
|
||||||
installCmd = exec.CommandContext(ctx, aurHelper, "-S", "--noconfirm", "greetd-dms-greeter-git")
|
installCmd = exec.CommandContext(ctx, aurHelper, "-S", "--noconfirm", "greetd-dms-greeter-git")
|
||||||
case distros.FamilyVoid:
|
|
||||||
failHint = "⚠ dms-greeter install failed. Add the DMS XBPS repo manually:\necho 'repository=https://avengemedia.github.io/DankMaterialShell/current' | sudo tee /etc/xbps.d/dms.conf\nsudo xbps-install -Sy dms-greeter"
|
|
||||||
logFunc("Adding DMS XBPS repository...")
|
|
||||||
if err := ensureVoidXBPSRepo(ctx, sudoPassword, "dms", distros.VoidDMSRepo); err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ Failed to add DMS XBPS repository: %v", err))
|
|
||||||
}
|
|
||||||
privesc.ExecCommand(ctx, sudoPassword, "sh -c 'yes y | xbps-install -Sy -i --repository "+distros.VoidDMSRepo+"'").Run()
|
|
||||||
installCmd = privesc.ExecCommand(ctx, sudoPassword, "xbps-install -Sy dms-greeter")
|
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -1014,20 +899,6 @@ func TryInstallGreeterPackage(logFunc func(string), sudoPassword string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureVoidXBPSRepo(ctx context.Context, sudoPassword, name, repoURL string) error {
|
|
||||||
confPath := filepath.Join("/etc/xbps.d", name+".conf")
|
|
||||||
repoLine := fmt.Sprintf("repository=%s", repoURL)
|
|
||||||
repoFileContent := repoLine + "\n"
|
|
||||||
if content, err := os.ReadFile(confPath); err == nil && string(content) == repoFileContent {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := privesc.Run(ctx, sudoPassword, "mkdir", "-p", "/etc/xbps.d"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return privesc.Run(ctx, sudoPassword, "sh", "-c",
|
|
||||||
fmt.Sprintf("printf '%%s\\n' %q > %s", repoLine, confPath))
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyGreeterFiles installs the dms-greeter wrapper and sets up cache directory
|
// CopyGreeterFiles installs the dms-greeter wrapper and sets up cache directory
|
||||||
func CopyGreeterFiles(dmsPath, compositor string, logFunc func(string), sudoPassword string) error {
|
func CopyGreeterFiles(dmsPath, compositor string, logFunc func(string), sudoPassword string) error {
|
||||||
if IsGreeterPackaged() {
|
if IsGreeterPackaged() {
|
||||||
@@ -2394,19 +2265,6 @@ func checkSystemdEnabled(service string) (string, error) {
|
|||||||
func DisableConflictingDisplayManagers(sudoPassword string, logFunc func(string)) error {
|
func DisableConflictingDisplayManagers(sudoPassword string, logFunc func(string)) error {
|
||||||
conflictingDMs := []string{"gdm", "gdm3", "lightdm", "sddm", "lxdm", "xdm", "cosmic-greeter"}
|
conflictingDMs := []string{"gdm", "gdm3", "lightdm", "sddm", "lxdm", "xdm", "cosmic-greeter"}
|
||||||
for _, dm := range conflictingDMs {
|
for _, dm := range conflictingDMs {
|
||||||
if isRunit() {
|
|
||||||
if !runitServiceEnabled(dm) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
logFunc(fmt.Sprintf("Disabling conflicting display manager: %s", dm))
|
|
||||||
if err := disableRunitService(dm, sudoPassword); err != nil {
|
|
||||||
logFunc(fmt.Sprintf("⚠ Warning: Failed to disable %s: %v", dm, err))
|
|
||||||
} else {
|
|
||||||
logFunc(fmt.Sprintf("✓ Disabled %s", dm))
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
state, err := checkSystemdEnabled(dm)
|
state, err := checkSystemdEnabled(dm)
|
||||||
if err != nil || state == "" || state == "not-found" {
|
if err != nil || state == "" || state == "not-found" {
|
||||||
continue
|
continue
|
||||||
@@ -2426,19 +2284,6 @@ func DisableConflictingDisplayManagers(sudoPassword string, logFunc func(string)
|
|||||||
|
|
||||||
// EnableGreetd unmasks and enables greetd, forcing it over any other DM.
|
// EnableGreetd unmasks and enables greetd, forcing it over any other DM.
|
||||||
func EnableGreetd(sudoPassword string, logFunc func(string)) error {
|
func EnableGreetd(sudoPassword string, logFunc func(string)) error {
|
||||||
if isRunit() {
|
|
||||||
if !runitServiceInstalled("greetd") {
|
|
||||||
return fmt.Errorf("greetd service not found in %s; ensure greetd is installed", runitSvDir)
|
|
||||||
}
|
|
||||||
ensureRunitSeat(DetectGreeterUser(), sudoPassword, logFunc)
|
|
||||||
ensureGreetdPamRundir(sudoPassword, logFunc)
|
|
||||||
if err := enableRunitService("greetd", sudoPassword); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable greetd: %w", err)
|
|
||||||
}
|
|
||||||
logFunc(fmt.Sprintf("✓ greetd enabled (%s)", runitServiceDir))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
state, err := checkSystemdEnabled("greetd")
|
state, err := checkSystemdEnabled("greetd")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to check greetd state: %w", err)
|
return fmt.Errorf("failed to check greetd state: %w", err)
|
||||||
@@ -2462,11 +2307,6 @@ func EnableGreetd(sudoPassword string, logFunc func(string)) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func EnsureGraphicalTarget(sudoPassword string, logFunc func(string)) error {
|
func EnsureGraphicalTarget(sudoPassword string, logFunc func(string)) error {
|
||||||
if isRunit() {
|
|
||||||
logFunc("✓ runit detected; no graphical target is needed")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd := exec.Command("systemctl", "get-default")
|
cmd := exec.Command("systemctl", "get-default")
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -111,18 +111,15 @@ command = "/usr/bin/dms-greeter --command niri"
|
|||||||
|
|
||||||
t.Run("inserts initial session", func(t *testing.T) {
|
t.Run("inserts initial session", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
got := upsertInitialSession(baseConfig, "alice", "/var/cache/dms-greeter", true)
|
got := upsertInitialSession(baseConfig, "alice", "niri", true)
|
||||||
if !strings.Contains(got, "[initial_session]") {
|
if !strings.Contains(got, "[initial_session]") {
|
||||||
t.Fatalf("expected [initial_session] section, got:\n%s", got)
|
t.Fatalf("expected [initial_session] section, got:\n%s", got)
|
||||||
}
|
}
|
||||||
if !strings.Contains(got, `user = "alice"`) {
|
if !strings.Contains(got, `user = "alice"`) {
|
||||||
t.Fatalf("expected alice user in initial session, got:\n%s", got)
|
t.Fatalf("expected alice user in initial session, got:\n%s", got)
|
||||||
}
|
}
|
||||||
if !strings.Contains(got, `dms greeter launch-session --from-memory --cache-dir`) {
|
if !strings.Contains(got, `env XDG_SESSION_TYPE=wayland sh -c 'exec niri'`) {
|
||||||
t.Fatalf("expected stable launch-session command, got:\n%s", got)
|
t.Fatalf("expected wrapped session command, got:\n%s", got)
|
||||||
}
|
|
||||||
if strings.Contains(got, `exec niri`) {
|
|
||||||
t.Fatalf("initial session must not bake the desktop Exec command, got:\n%s", got)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -133,12 +130,12 @@ command = "/usr/bin/dms-greeter --command niri"
|
|||||||
user = "bob"
|
user = "bob"
|
||||||
command = "old-command"
|
command = "old-command"
|
||||||
`
|
`
|
||||||
got := upsertInitialSession(existing, "alice", "/var/cache/dms-greeter", true)
|
got := upsertInitialSession(existing, "alice", "Hyprland", true)
|
||||||
if strings.Contains(got, `user = "bob"`) {
|
if strings.Contains(got, `user = "bob"`) {
|
||||||
t.Fatalf("expected bob to be replaced, got:\n%s", got)
|
t.Fatalf("expected bob to be replaced, got:\n%s", got)
|
||||||
}
|
}
|
||||||
if !strings.Contains(got, `dms greeter launch-session --from-memory`) {
|
if !strings.Contains(got, `exec Hyprland`) {
|
||||||
t.Fatalf("expected launch-session command, got:\n%s", got)
|
t.Fatalf("expected Hyprland command, got:\n%s", got)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -182,46 +179,15 @@ func TestResolveGreeterAutoLoginState(t *testing.T) {
|
|||||||
}`)
|
}`)
|
||||||
writeTestFile(t, filepath.Join(cacheDir, ".local/state/memory.json"), `{
|
writeTestFile(t, filepath.Join(cacheDir, ".local/state/memory.json"), `{
|
||||||
"lastSuccessfulUser": "alice",
|
"lastSuccessfulUser": "alice",
|
||||||
"lastSessionDesktopId": "niri.desktop"
|
"lastSessionExec": "niri"
|
||||||
}`)
|
}`)
|
||||||
|
|
||||||
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
|
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
|
||||||
}
|
}
|
||||||
if !enabled || loginUser != "alice" || sessionID != "niri.desktop" {
|
if !enabled || loginUser != "alice" || sessionExec != "niri" {
|
||||||
t.Fatalf("got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
|
t.Fatalf("got enabled=%v user=%q exec=%q", enabled, loginUser, sessionExec)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestResolveGreeterAutoLoginStateIgnoresStaleSessionExec(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
cacheDir := t.TempDir()
|
|
||||||
homeDir := t.TempDir()
|
|
||||||
|
|
||||||
writeTestFile(t, filepath.Join(cacheDir, "settings.json"), `{
|
|
||||||
"greeterAutoLogin": true,
|
|
||||||
"greeterRememberLastUser": true,
|
|
||||||
"greeterRememberLastSession": true
|
|
||||||
}`)
|
|
||||||
writeTestFile(t, filepath.Join(cacheDir, ".local/state/memory.json"), `{
|
|
||||||
"lastSuccessfulUser": "alice",
|
|
||||||
"lastSessionId": "/nix/store/old-session/share/wayland-sessions/example.desktop",
|
|
||||||
"lastSessionExec": "/nix/store/old-session/bin/start-example-session"
|
|
||||||
}`)
|
|
||||||
|
|
||||||
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
|
|
||||||
}
|
|
||||||
if !enabled || loginUser != "alice" || sessionID != "example.desktop" {
|
|
||||||
t.Fatalf("got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := upsertInitialSession("", loginUser, cacheDir, true)
|
|
||||||
if strings.Contains(got, "/nix/store/old-session") {
|
|
||||||
t.Fatalf("initial session must not include stale store path, got:\n%s", got)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,35 +208,12 @@ func TestResolveGreeterAutoLoginStateIgnoresMemoryFlag(t *testing.T) {
|
|||||||
"lastSessionExec": "niri"
|
"lastSessionExec": "niri"
|
||||||
}`)
|
}`)
|
||||||
|
|
||||||
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
|
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
|
||||||
}
|
}
|
||||||
if enabled || loginUser != "" || sessionID != "" {
|
if enabled || loginUser != "" || sessionExec != "" {
|
||||||
t.Fatalf("expected disabled with empty user/session, got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
|
t.Fatalf("expected disabled with empty user/exec, got enabled=%v user=%q exec=%q", enabled, loginUser, sessionExec)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestResolveSessionExecInDirs(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
oldDir := filepath.Join(t.TempDir(), "wayland-sessions")
|
|
||||||
newDir := filepath.Join(t.TempDir(), "wayland-sessions")
|
|
||||||
writeTestFile(t, filepath.Join(oldDir, "example.desktop"), `[Desktop Entry]
|
|
||||||
Name=Example Session
|
|
||||||
Exec=/nix/store/old-session/bin/start-example-session
|
|
||||||
`)
|
|
||||||
writeTestFile(t, filepath.Join(newDir, "example.desktop"), `[Desktop Entry]
|
|
||||||
Name=Example Session
|
|
||||||
Exec=/run/current-system/sw/bin/start-example-session
|
|
||||||
`)
|
|
||||||
|
|
||||||
got, err := resolveSessionExecInDirs("example.desktop", []string{newDir, oldDir})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("resolveSessionExecInDirs returned error: %v", err)
|
|
||||||
}
|
|
||||||
if got != "/run/current-system/sw/bin/start-example-session" {
|
|
||||||
t.Fatalf("resolveSessionExecInDirs = %q", got)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,122 +0,0 @@
|
|||||||
package greeter
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
func sessionDesktopIDFromPath(path string) string {
|
|
||||||
id := strings.TrimSpace(path)
|
|
||||||
if id == "" {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if strings.ContainsAny(id, "/\\") {
|
|
||||||
id = filepath.Base(id)
|
|
||||||
}
|
|
||||||
if id == "" {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if !strings.HasSuffix(id, ".desktop") {
|
|
||||||
id += ".desktop"
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
|
|
||||||
func sessionDesktopIDFromMemory(mem greeterAutoLoginMemory) string {
|
|
||||||
if id := sessionDesktopIDFromPath(mem.LastSessionDesktopID); id != "" {
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
return sessionDesktopIDFromPath(mem.LastSessionID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sessionDesktopDirs() []string {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
dirs := make([]string, 0, 8)
|
|
||||||
|
|
||||||
addBase := func(base string) {
|
|
||||||
base = strings.TrimSpace(base)
|
|
||||||
if base == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, sub := range []string{"wayland-sessions", "xsessions"} {
|
|
||||||
dir := filepath.Join(base, sub)
|
|
||||||
if seen[dir] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
seen[dir] = true
|
|
||||||
dirs = append(dirs, dir)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if dataHome := os.Getenv("XDG_DATA_HOME"); dataHome != "" {
|
|
||||||
addBase(dataHome)
|
|
||||||
} else if home, err := os.UserHomeDir(); err == nil && home != "" {
|
|
||||||
addBase(filepath.Join(home, ".local", "share"))
|
|
||||||
}
|
|
||||||
|
|
||||||
if dataDirs := os.Getenv("XDG_DATA_DIRS"); dataDirs != "" {
|
|
||||||
for _, dir := range strings.Split(dataDirs, ":") {
|
|
||||||
addBase(dir)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
addBase("/usr/local/share")
|
|
||||||
addBase("/usr/share")
|
|
||||||
}
|
|
||||||
|
|
||||||
return dirs
|
|
||||||
}
|
|
||||||
|
|
||||||
func ResolveSessionExec(sessionID string) (string, error) {
|
|
||||||
return resolveSessionExecInDirs(sessionID, sessionDesktopDirs())
|
|
||||||
}
|
|
||||||
|
|
||||||
func resolveSessionExecInDirs(sessionID string, dirs []string) (string, error) {
|
|
||||||
id := sessionDesktopIDFromPath(sessionID)
|
|
||||||
if id == "" {
|
|
||||||
return "", fmt.Errorf("session id is empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, dir := range dirs {
|
|
||||||
path := filepath.Join(dir, id)
|
|
||||||
execLine, err := execFromDesktopFile(path)
|
|
||||||
if err == nil {
|
|
||||||
return execLine, nil
|
|
||||||
}
|
|
||||||
if !os.IsNotExist(err) {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", fmt.Errorf("session desktop file %q was not found", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LaunchSessionByID(sessionID string) error {
|
|
||||||
execLine, err := ResolveSessionExec(sessionID)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
execLine = strings.TrimSpace(stripDesktopExecCodes(execLine))
|
|
||||||
if execLine == "" {
|
|
||||||
return fmt.Errorf("session %q has an empty Exec command", sessionID)
|
|
||||||
}
|
|
||||||
|
|
||||||
env := append(os.Environ(), "XDG_SESSION_TYPE=wayland")
|
|
||||||
return syscall.Exec("/bin/sh", []string{"sh", "-c", "exec " + execLine}, env)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LaunchSessionFromMemory(cacheDir, homeDir string) error {
|
|
||||||
enabled, _, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !enabled {
|
|
||||||
return fmt.Errorf("greeter auto-login is disabled")
|
|
||||||
}
|
|
||||||
if sessionID == "" {
|
|
||||||
return fmt.Errorf("greeter auto-login has no remembered session")
|
|
||||||
}
|
|
||||||
return LaunchSessionByID(sessionID)
|
|
||||||
}
|
|
||||||
@@ -41,8 +41,6 @@ type Config struct {
|
|||||||
ReplaceConfigs []string // specific configs to deploy (e.g. "niri", "ghostty")
|
ReplaceConfigs []string // specific configs to deploy (e.g. "niri", "ghostty")
|
||||||
ReplaceConfigsAll bool // deploy/replace all configurations
|
ReplaceConfigsAll bool // deploy/replace all configurations
|
||||||
Yes bool
|
Yes bool
|
||||||
DankSearch bool // install danksearch and enable its user service
|
|
||||||
DankCalendar bool // install dankcalendar
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Runner orchestrates unattended (headless) installation.
|
// Runner orchestrates unattended (headless) installation.
|
||||||
@@ -216,11 +214,6 @@ func (r *Runner) Run() error {
|
|||||||
return fmt.Errorf("package installation failed: %w", err)
|
return fmt.Errorf("package installation failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
useSystemd := true
|
|
||||||
if distroConfig, exists := distros.Registry[osInfo.Distribution.ID]; exists && distroConfig.Family == distros.FamilyVoid {
|
|
||||||
useSystemd = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// 9. Greeter setup (if dms-greeter was included)
|
// 9. Greeter setup (if dms-greeter was included)
|
||||||
if !disabledItems["dms-greeter"] && r.depExists(dependencies, "dms-greeter") {
|
if !disabledItems["dms-greeter"] && r.depExists(dependencies, "dms-greeter") {
|
||||||
compositorName := "niri"
|
compositorName := "niri"
|
||||||
@@ -238,32 +231,18 @@ func (r *Runner) Run() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 9b. danksearch service setup (if danksearch was included)
|
|
||||||
if useSystemd && !disabledItems["danksearch"] && r.depExists(dependencies, "danksearch") {
|
|
||||||
fmt.Fprintln(os.Stdout, "Enabling danksearch service...")
|
|
||||||
logFunc := func(line string) {
|
|
||||||
r.log(line)
|
|
||||||
fmt.Fprintf(os.Stdout, " danksearch: %s\n", line)
|
|
||||||
}
|
|
||||||
if err := distros.SetupDsearchService(context.Background(), logFunc); err != nil {
|
|
||||||
// Non-fatal, matching greeter behavior
|
|
||||||
fmt.Fprintf(os.Stderr, "Warning: danksearch service setup issue (non-fatal): %v\n", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 10. Deploy configurations
|
// 10. Deploy configurations
|
||||||
fmt.Fprintln(os.Stdout, "Deploying configurations...")
|
fmt.Fprintln(os.Stdout, "Deploying configurations...")
|
||||||
r.log("Starting configuration deployment")
|
r.log("Starting configuration deployment")
|
||||||
|
|
||||||
deployer := config.NewConfigDeployer(r.logChan)
|
deployer := config.NewConfigDeployer(r.logChan)
|
||||||
results, err := deployer.DeployConfigurationsSelectiveWithReinstallsAndSystemd(
|
results, err := deployer.DeployConfigurationsSelectiveWithReinstalls(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
wm,
|
wm,
|
||||||
terminal,
|
terminal,
|
||||||
dependencies,
|
dependencies,
|
||||||
replaceConfigs,
|
replaceConfigs,
|
||||||
reinstallItems,
|
reinstallItems,
|
||||||
useSystemd,
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("configuration deployment failed: %w", err)
|
return fmt.Errorf("configuration deployment failed: %w", err)
|
||||||
@@ -288,31 +267,19 @@ func (r *Runner) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// buildDisabledItems computes the set of dependencies that should be skipped
|
// buildDisabledItems computes the set of dependencies that should be skipped
|
||||||
// during installation. Optional components are opt-in (disabled by default),
|
// during installation, applying the --include-deps and --exclude-deps filters.
|
||||||
// then re-enabled by the dedicated flags and --include-deps.
|
// dms-greeter is disabled by default (opt-in), matching TUI behavior.
|
||||||
func (r *Runner) buildDisabledItems(dependencies []deps.Dependency) (map[string]bool, error) {
|
func (r *Runner) buildDisabledItems(dependencies []deps.Dependency) (map[string]bool, error) {
|
||||||
disabledItems := make(map[string]bool)
|
disabledItems := make(map[string]bool)
|
||||||
|
|
||||||
|
// dms-greeter is opt-in (disabled by default), matching TUI behavior
|
||||||
for i := range dependencies {
|
for i := range dependencies {
|
||||||
if !dependencies[i].Required {
|
if dependencies[i].Name == "dms-greeter" {
|
||||||
disabledItems[dependencies[i].Name] = true
|
disabledItems["dms-greeter"] = true
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dedicated flags resolve before include/exclude
|
|
||||||
if r.cfg.DankSearch {
|
|
||||||
if !r.depExists(dependencies, "danksearch") {
|
|
||||||
return nil, fmt.Errorf("--danksearch: not available on this distribution")
|
|
||||||
}
|
|
||||||
delete(disabledItems, "danksearch")
|
|
||||||
}
|
|
||||||
if r.cfg.DankCalendar {
|
|
||||||
if !r.depExists(dependencies, "dankcalendar") {
|
|
||||||
return nil, fmt.Errorf("--dankcalendar: not available on this distribution")
|
|
||||||
}
|
|
||||||
delete(disabledItems, "dankcalendar")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process --include-deps (enable items that are disabled by default)
|
// Process --include-deps (enable items that are disabled by default)
|
||||||
for _, name := range r.cfg.IncludeDeps {
|
for _, name := range r.cfg.IncludeDeps {
|
||||||
name = strings.TrimSpace(name)
|
name = strings.TrimSpace(name)
|
||||||
|
|||||||
@@ -342,21 +342,17 @@ func TestConfigReplaceConfigsStoredCorrectly(t *testing.T) {
|
|||||||
|
|
||||||
func TestBuildDisabledItems(t *testing.T) {
|
func TestBuildDisabledItems(t *testing.T) {
|
||||||
dependencies := []deps.Dependency{
|
dependencies := []deps.Dependency{
|
||||||
{Name: "niri", Status: deps.StatusInstalled, Required: true},
|
{Name: "niri", Status: deps.StatusInstalled},
|
||||||
{Name: "ghostty", Status: deps.StatusMissing, Required: true},
|
{Name: "ghostty", Status: deps.StatusMissing},
|
||||||
{Name: "dms (DankMaterialShell)", Status: deps.StatusInstalled, Required: true},
|
{Name: "dms (DankMaterialShell)", Status: deps.StatusInstalled},
|
||||||
{Name: "dms-greeter", Status: deps.StatusMissing},
|
{Name: "dms-greeter", Status: deps.StatusMissing},
|
||||||
{Name: "danksearch", Status: deps.StatusMissing},
|
{Name: "waybar", Status: deps.StatusMissing},
|
||||||
{Name: "dankcalendar", Status: deps.StatusMissing},
|
|
||||||
{Name: "waybar", Status: deps.StatusMissing, Required: true},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
includeDeps []string
|
includeDeps []string
|
||||||
excludeDeps []string
|
excludeDeps []string
|
||||||
dankSearch bool
|
|
||||||
dankCalendar bool
|
|
||||||
deps []deps.Dependency // nil means use the shared fixture
|
deps []deps.Dependency // nil means use the shared fixture
|
||||||
wantErr bool
|
wantErr bool
|
||||||
errContains string // substring expected in error message
|
errContains string // substring expected in error message
|
||||||
@@ -364,20 +360,19 @@ func TestBuildDisabledItems(t *testing.T) {
|
|||||||
wantEnabled []string // dep names that should NOT be in disabledItems (extra check)
|
wantEnabled []string // dep names that should NOT be in disabledItems (extra check)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "no flags set, optional deps disabled by default",
|
name: "no flags set, dms-greeter disabled by default",
|
||||||
wantDisabled: []string{"dms-greeter", "danksearch", "dankcalendar"},
|
wantDisabled: []string{"dms-greeter"},
|
||||||
wantEnabled: []string{"niri", "ghostty", "waybar"},
|
wantEnabled: []string{"niri", "ghostty", "waybar"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "include dms-greeter enables it",
|
name: "include dms-greeter enables it",
|
||||||
includeDeps: []string{"dms-greeter"},
|
includeDeps: []string{"dms-greeter"},
|
||||||
wantEnabled: []string{"dms-greeter"},
|
wantEnabled: []string{"dms-greeter"},
|
||||||
wantDisabled: []string{"danksearch", "dankcalendar"},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "exclude a regular dep",
|
name: "exclude a regular dep",
|
||||||
excludeDeps: []string{"waybar"},
|
excludeDeps: []string{"waybar"},
|
||||||
wantDisabled: []string{"dms-greeter", "danksearch", "dankcalendar", "waybar"},
|
wantDisabled: []string{"dms-greeter", "waybar"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "include unknown dep returns error",
|
name: "include unknown dep returns error",
|
||||||
@@ -404,53 +399,24 @@ func TestBuildDisabledItems(t *testing.T) {
|
|||||||
wantDisabled: []string{"dms-greeter"},
|
wantDisabled: []string{"dms-greeter"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "whitespace entries are skipped",
|
name: "whitespace entries are skipped",
|
||||||
includeDeps: []string{" ", "dms-greeter"},
|
includeDeps: []string{" ", "dms-greeter"},
|
||||||
wantEnabled: []string{"dms-greeter"},
|
wantEnabled: []string{"dms-greeter"},
|
||||||
wantDisabled: []string{"danksearch", "dankcalendar"},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no optional deps present, nothing disabled by default",
|
name: "no dms-greeter in deps, nothing disabled by default",
|
||||||
deps: []deps.Dependency{
|
deps: []deps.Dependency{
|
||||||
{Name: "niri", Status: deps.StatusInstalled, Required: true},
|
{Name: "niri", Status: deps.StatusInstalled},
|
||||||
},
|
},
|
||||||
wantEnabled: []string{"niri"},
|
wantEnabled: []string{"niri"},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "danksearch flag enables it",
|
|
||||||
dankSearch: true,
|
|
||||||
wantEnabled: []string{"danksearch"},
|
|
||||||
wantDisabled: []string{"dms-greeter", "dankcalendar"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "dankcalendar flag enables it",
|
|
||||||
dankCalendar: true,
|
|
||||||
wantEnabled: []string{"dankcalendar"},
|
|
||||||
wantDisabled: []string{"dms-greeter", "danksearch"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "danksearch flag when unavailable errors",
|
|
||||||
dankSearch: true,
|
|
||||||
deps: []deps.Dependency{{Name: "niri", Status: deps.StatusInstalled, Required: true}},
|
|
||||||
wantErr: true,
|
|
||||||
errContains: "--danksearch",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "dankcalendar flag when unavailable errors",
|
|
||||||
dankCalendar: true,
|
|
||||||
deps: []deps.Dependency{{Name: "niri", Status: deps.StatusInstalled, Required: true}},
|
|
||||||
wantErr: true,
|
|
||||||
errContains: "--dankcalendar",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
r := NewRunner(Config{
|
r := NewRunner(Config{
|
||||||
IncludeDeps: tt.includeDeps,
|
IncludeDeps: tt.includeDeps,
|
||||||
ExcludeDeps: tt.excludeDeps,
|
ExcludeDeps: tt.excludeDeps,
|
||||||
DankSearch: tt.dankSearch,
|
|
||||||
DankCalendar: tt.dankCalendar,
|
|
||||||
})
|
})
|
||||||
d := tt.deps
|
d := tt.deps
|
||||||
if d == nil {
|
if d == nil {
|
||||||
|
|||||||
@@ -190,13 +190,9 @@ func (h *HyprlandProvider) formatRawAction(dispatcher, params string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *HyprlandProvider) formatKey(kb *HyprlandKeyBinding) string {
|
func (h *HyprlandProvider) formatKey(kb *HyprlandKeyBinding) string {
|
||||||
key := kb.Key
|
|
||||||
if canonical, ok := hyprlandScrollToCanonical(key); ok {
|
|
||||||
key = canonical
|
|
||||||
}
|
|
||||||
parts := make([]string, 0, len(kb.Mods)+1)
|
parts := make([]string, 0, len(kb.Mods)+1)
|
||||||
parts = append(parts, kb.Mods...)
|
parts = append(parts, kb.Mods...)
|
||||||
parts = append(parts, key)
|
parts = append(parts, kb.Key)
|
||||||
return strings.Join(parts, "+")
|
return strings.Join(parts, "+")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,9 +411,6 @@ func normalizeLuaBindKeyPart(part string) string {
|
|||||||
case "alt", "mod1":
|
case "alt", "mod1":
|
||||||
return "ALT"
|
return "ALT"
|
||||||
}
|
}
|
||||||
if native, ok := hyprlandScrollToNative(part); ok {
|
|
||||||
return native
|
|
||||||
}
|
|
||||||
if len(part) == 1 {
|
if len(part) == 1 {
|
||||||
return strings.ToUpper(part)
|
return strings.ToUpper(part)
|
||||||
}
|
}
|
||||||
@@ -1137,11 +1130,6 @@ func parseLuaUnbindLine(line string) (string, bool) {
|
|||||||
|
|
||||||
func luaKeyComboToInternalKey(combo string) string {
|
func luaKeyComboToInternalKey(combo string) string {
|
||||||
parts := strings.Fields(strings.ReplaceAll(strings.ReplaceAll(combo, "+", " "), " ", " "))
|
parts := strings.Fields(strings.ReplaceAll(strings.ReplaceAll(combo, "+", " "), " ", " "))
|
||||||
for i, part := range parts {
|
|
||||||
if canonical, ok := hyprlandScrollToCanonical(part); ok {
|
|
||||||
parts[i] = canonical
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return strings.Join(parts, "+")
|
return strings.Join(parts, "+")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1154,7 +1142,7 @@ func readLuaOrHyprlangOverride(path string) (map[string]*hyprlandOverrideBind, e
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
lines := expandLuaConfigLines(strings.Split(string(data), "\n"))
|
lines := strings.Split(string(data), "\n")
|
||||||
parser := NewHyprlandParser("")
|
parser := NewHyprlandParser("")
|
||||||
pendingUnbinds := make(map[string]string)
|
pendingUnbinds := make(map[string]string)
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
|
|||||||
@@ -1,414 +0,0 @@
|
|||||||
package providers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"maps"
|
|
||||||
"regexp"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Lua configs can express binds dynamically: variables (mainMod .. " + C"),
|
|
||||||
// tostring() calls, and numeric for loops (workspace binds). This resolves such
|
|
||||||
// expressions to literal key combos so the static bind parser can read them.
|
|
||||||
|
|
||||||
const luaMaxLoopIterations = 1000
|
|
||||||
|
|
||||||
var (
|
|
||||||
luaAssignRE = regexp.MustCompile(`^(?:local\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.+)$`)
|
|
||||||
luaForRE = regexp.MustCompile(`^for\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(-?\d+)\s*,\s*(-?\d+)\s*(?:,\s*(-?\d+)\s*)?do\b(.*)$`)
|
|
||||||
luaTostringRE = regexp.MustCompile(`to(?:string|number)\s*\(\s*("(?:\\.|[^"])*"|'(?:\\.|[^'])*'|-?\d+(?:\.\d+)?)\s*\)`)
|
|
||||||
luaBlockOpenRE = regexp.MustCompile(`\b(?:function|for|while|if)\b`)
|
|
||||||
luaBlockCloseRE = regexp.MustCompile(`\bend\b`)
|
|
||||||
luaNumberRE = regexp.MustCompile(`^-?\d+(?:\.\d+)?$`)
|
|
||||||
)
|
|
||||||
|
|
||||||
type luaVarEnv map[string]string
|
|
||||||
|
|
||||||
type luaForHeader struct {
|
|
||||||
varName string
|
|
||||||
start int
|
|
||||||
stop int
|
|
||||||
step int
|
|
||||||
inline string
|
|
||||||
}
|
|
||||||
|
|
||||||
func expandLuaConfigLines(lines []string) []string {
|
|
||||||
return expandLuaBlock(lines, luaVarEnv{})
|
|
||||||
}
|
|
||||||
|
|
||||||
func expandLuaBlock(lines []string, env luaVarEnv) []string {
|
|
||||||
out := make([]string, 0, len(lines))
|
|
||||||
for i := 0; i < len(lines); i++ {
|
|
||||||
code := strings.TrimSpace(luaStripLineComment(lines[i]))
|
|
||||||
|
|
||||||
if name, value, ok := parseLuaStringAssignment(code, env); ok {
|
|
||||||
env[name] = value
|
|
||||||
out = append(out, lines[i])
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
header, ok := parseLuaForHeader(code)
|
|
||||||
if !ok {
|
|
||||||
out = append(out, resolveLuaDynamicLine(lines[i], env))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
body, consumed, complete := collectLuaForBody(header, lines, i)
|
|
||||||
if !complete {
|
|
||||||
out = append(out, resolveLuaDynamicLine(lines[i], env))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
out = append(out, expandLuaForLoop(header, body, env)...)
|
|
||||||
i = consumed
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseLuaStringAssignment(code string, env luaVarEnv) (name, value string, ok bool) {
|
|
||||||
m := luaAssignRE.FindStringSubmatch(code)
|
|
||||||
if m == nil {
|
|
||||||
return "", "", false
|
|
||||||
}
|
|
||||||
value, ok = evalLuaConcat(m[2], env)
|
|
||||||
if !ok {
|
|
||||||
return "", "", false
|
|
||||||
}
|
|
||||||
return m[1], value, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseLuaForHeader(code string) (luaForHeader, bool) {
|
|
||||||
m := luaForRE.FindStringSubmatch(code)
|
|
||||||
if m == nil {
|
|
||||||
return luaForHeader{}, false
|
|
||||||
}
|
|
||||||
start, _ := strconv.Atoi(m[2])
|
|
||||||
stop, _ := strconv.Atoi(m[3])
|
|
||||||
step := 1
|
|
||||||
if m[4] != "" {
|
|
||||||
step, _ = strconv.Atoi(m[4])
|
|
||||||
}
|
|
||||||
if step == 0 {
|
|
||||||
return luaForHeader{}, false
|
|
||||||
}
|
|
||||||
return luaForHeader{varName: m[1], start: start, stop: stop, step: step, inline: strings.TrimSpace(m[5])}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func collectLuaForBody(header luaForHeader, lines []string, headerIdx int) (body []string, consumed int, complete bool) {
|
|
||||||
depth := 1
|
|
||||||
if header.inline != "" {
|
|
||||||
delta := luaBlockDelta(header.inline)
|
|
||||||
if depth+delta <= 0 {
|
|
||||||
if stmt := strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(header.inline), "end")); stmt != "" {
|
|
||||||
body = append(body, stmt)
|
|
||||||
}
|
|
||||||
return body, headerIdx, true
|
|
||||||
}
|
|
||||||
depth += delta
|
|
||||||
body = append(body, header.inline)
|
|
||||||
}
|
|
||||||
for j := headerIdx + 1; j < len(lines); j++ {
|
|
||||||
delta := luaBlockDelta(lines[j])
|
|
||||||
if depth+delta <= 0 {
|
|
||||||
return body, j, true
|
|
||||||
}
|
|
||||||
depth += delta
|
|
||||||
body = append(body, lines[j])
|
|
||||||
}
|
|
||||||
return nil, headerIdx, false
|
|
||||||
}
|
|
||||||
|
|
||||||
func expandLuaForLoop(header luaForHeader, body []string, env luaVarEnv) []string {
|
|
||||||
var out []string
|
|
||||||
inRange := func(v int) bool {
|
|
||||||
if header.step > 0 {
|
|
||||||
return v <= header.stop
|
|
||||||
}
|
|
||||||
return v >= header.stop
|
|
||||||
}
|
|
||||||
count := 0
|
|
||||||
for v := header.start; inRange(v); v += header.step {
|
|
||||||
if count++; count > luaMaxLoopIterations {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
value := strconv.Itoa(v)
|
|
||||||
iterLines := make([]string, len(body))
|
|
||||||
for k, bl := range body {
|
|
||||||
iterLines[k] = substituteLuaIdent(bl, header.varName, value)
|
|
||||||
}
|
|
||||||
out = append(out, expandLuaBlock(iterLines, cloneLuaEnv(env))...)
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func luaBlockDelta(line string) int {
|
|
||||||
masked := luaMaskStrings(line)
|
|
||||||
return len(luaBlockOpenRE.FindAllString(masked, -1)) - len(luaBlockCloseRE.FindAllString(masked, -1))
|
|
||||||
}
|
|
||||||
|
|
||||||
func resolveLuaDynamicLine(line string, env luaVarEnv) string {
|
|
||||||
if !strings.Contains(line, "hl.bind") && !strings.Contains(line, "hl.unbind") {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
line = normalizeLuaToString(line)
|
|
||||||
return rewriteLuaBindKeyArg(line, env)
|
|
||||||
}
|
|
||||||
|
|
||||||
func normalizeLuaToString(line string) string {
|
|
||||||
return luaTostringRE.ReplaceAllStringFunc(line, func(m string) string {
|
|
||||||
inner := luaTostringRE.FindStringSubmatch(m)[1]
|
|
||||||
if inner[0] == '"' || inner[0] == '\'' {
|
|
||||||
return inner
|
|
||||||
}
|
|
||||||
return strconv.Quote(inner)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func rewriteLuaBindKeyArg(line string, env luaVarEnv) string {
|
|
||||||
for _, fn := range []string{"hl.bind", "hl.unbind"} {
|
|
||||||
idx := strings.Index(line, fn)
|
|
||||||
if idx < 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
open := skipLuaWS(line, idx+len(fn))
|
|
||||||
if open >= len(line) || line[open] != '(' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
argStart := skipLuaWS(line, open+1)
|
|
||||||
expr, end, ok := parseLuaFirstArgExpr(line, argStart)
|
|
||||||
if !ok || isLuaPlainStringArg(expr) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
value, ok := evalLuaConcat(expr, env)
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return line[:argStart] + strconv.Quote(value) + line[end:]
|
|
||||||
}
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
func evalLuaConcat(expr string, env luaVarEnv) (string, bool) {
|
|
||||||
parts := splitLuaConcat(expr)
|
|
||||||
var sb strings.Builder
|
|
||||||
for _, part := range parts {
|
|
||||||
value, ok := evalLuaOperand(part, env)
|
|
||||||
if !ok {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
sb.WriteString(value)
|
|
||||||
}
|
|
||||||
return sb.String(), true
|
|
||||||
}
|
|
||||||
|
|
||||||
func evalLuaOperand(op string, env luaVarEnv) (string, bool) {
|
|
||||||
op = strings.TrimSpace(op)
|
|
||||||
if op == "" {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
switch op[0] {
|
|
||||||
case '"', '\'':
|
|
||||||
s, next, ok := parseLuaStringLiteral(op, 0)
|
|
||||||
return s, next == len(op) && ok
|
|
||||||
}
|
|
||||||
if luaNumberRE.MatchString(op) {
|
|
||||||
return op, true
|
|
||||||
}
|
|
||||||
if inner, ok := luaUnwrapCall(op, "tostring"); ok {
|
|
||||||
return evalLuaConcat(inner, env)
|
|
||||||
}
|
|
||||||
if inner, ok := luaUnwrapCall(op, "tonumber"); ok {
|
|
||||||
return evalLuaConcat(inner, env)
|
|
||||||
}
|
|
||||||
if value, ok := env[op]; ok {
|
|
||||||
return value, true
|
|
||||||
}
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
|
|
||||||
func splitLuaConcat(expr string) []string {
|
|
||||||
var parts []string
|
|
||||||
parenDepth, braceDepth, bracketDepth := 0, 0, 0
|
|
||||||
inStr := byte(0)
|
|
||||||
esc := false
|
|
||||||
start := 0
|
|
||||||
for i := 0; i < len(expr); i++ {
|
|
||||||
c := expr[i]
|
|
||||||
if inStr != 0 {
|
|
||||||
switch {
|
|
||||||
case esc:
|
|
||||||
esc = false
|
|
||||||
case c == '\\' && inStr == '"':
|
|
||||||
esc = true
|
|
||||||
case c == inStr:
|
|
||||||
inStr = 0
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch c {
|
|
||||||
case '"', '\'':
|
|
||||||
inStr = c
|
|
||||||
case '(':
|
|
||||||
parenDepth++
|
|
||||||
case ')':
|
|
||||||
if parenDepth > 0 {
|
|
||||||
parenDepth--
|
|
||||||
}
|
|
||||||
case '{':
|
|
||||||
braceDepth++
|
|
||||||
case '}':
|
|
||||||
if braceDepth > 0 {
|
|
||||||
braceDepth--
|
|
||||||
}
|
|
||||||
case '[':
|
|
||||||
bracketDepth++
|
|
||||||
case ']':
|
|
||||||
if bracketDepth > 0 {
|
|
||||||
bracketDepth--
|
|
||||||
}
|
|
||||||
case '.':
|
|
||||||
if parenDepth == 0 && braceDepth == 0 && bracketDepth == 0 && i+1 < len(expr) && expr[i+1] == '.' {
|
|
||||||
parts = append(parts, expr[start:i])
|
|
||||||
i++
|
|
||||||
start = i + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return append(parts, expr[start:])
|
|
||||||
}
|
|
||||||
|
|
||||||
func substituteLuaIdent(line, name, value string) string {
|
|
||||||
if !strings.Contains(line, name) {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
var sb strings.Builder
|
|
||||||
inStr := byte(0)
|
|
||||||
esc := false
|
|
||||||
for i := 0; i < len(line); {
|
|
||||||
c := line[i]
|
|
||||||
if inStr != 0 {
|
|
||||||
sb.WriteByte(c)
|
|
||||||
switch {
|
|
||||||
case esc:
|
|
||||||
esc = false
|
|
||||||
case c == '\\' && inStr == '"':
|
|
||||||
esc = true
|
|
||||||
case c == inStr:
|
|
||||||
inStr = 0
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if c == '"' || c == '\'' {
|
|
||||||
inStr = c
|
|
||||||
sb.WriteByte(c)
|
|
||||||
i++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if isLuaIdentStart(c) {
|
|
||||||
j := i + 1
|
|
||||||
for j < len(line) && isLuaIdentByte(line[j]) {
|
|
||||||
j++
|
|
||||||
}
|
|
||||||
word := line[i:j]
|
|
||||||
if word == name && (i == 0 || line[i-1] != '.') {
|
|
||||||
sb.WriteString(value)
|
|
||||||
} else {
|
|
||||||
sb.WriteString(word)
|
|
||||||
}
|
|
||||||
i = j
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
sb.WriteByte(c)
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
return sb.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func luaMaskStrings(line string) string {
|
|
||||||
b := []byte(line)
|
|
||||||
inStr := byte(0)
|
|
||||||
esc := false
|
|
||||||
for i := 0; i < len(b); i++ {
|
|
||||||
c := b[i]
|
|
||||||
if inStr != 0 {
|
|
||||||
wasEnd := !esc && c == inStr
|
|
||||||
esc = !esc && c == '\\' && inStr == '"'
|
|
||||||
b[i] = ' '
|
|
||||||
if wasEnd {
|
|
||||||
inStr = 0
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch c {
|
|
||||||
case '"', '\'':
|
|
||||||
inStr = c
|
|
||||||
b[i] = ' '
|
|
||||||
case '-':
|
|
||||||
if i+1 < len(b) && b[i+1] == '-' {
|
|
||||||
for ; i < len(b); i++ {
|
|
||||||
b[i] = ' '
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func luaStripLineComment(line string) string {
|
|
||||||
inStr := byte(0)
|
|
||||||
esc := false
|
|
||||||
for i := 0; i+1 < len(line); i++ {
|
|
||||||
c := line[i]
|
|
||||||
if inStr != 0 {
|
|
||||||
switch {
|
|
||||||
case esc:
|
|
||||||
esc = false
|
|
||||||
case c == '\\' && inStr == '"':
|
|
||||||
esc = true
|
|
||||||
case c == inStr:
|
|
||||||
inStr = 0
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch c {
|
|
||||||
case '"', '\'':
|
|
||||||
inStr = c
|
|
||||||
case '-':
|
|
||||||
if line[i+1] == '-' {
|
|
||||||
return line[:i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
||||||
func luaUnwrapCall(op, fn string) (string, bool) {
|
|
||||||
op = strings.TrimSpace(op)
|
|
||||||
if !strings.HasPrefix(op, fn) {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
rest := strings.TrimSpace(op[len(fn):])
|
|
||||||
if !strings.HasPrefix(rest, "(") || !strings.HasSuffix(rest, ")") {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
return rest[1 : len(rest)-1], true
|
|
||||||
}
|
|
||||||
|
|
||||||
func isLuaPlainStringArg(expr string) bool {
|
|
||||||
expr = strings.TrimSpace(expr)
|
|
||||||
if expr == "" || (expr[0] != '"' && expr[0] != '\'') {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
_, next, ok := parseLuaStringLiteral(expr, 0)
|
|
||||||
return ok && next == len(expr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func isLuaIdentStart(c byte) bool {
|
|
||||||
return c == '_' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|
|
||||||
}
|
|
||||||
|
|
||||||
func cloneLuaEnv(env luaVarEnv) luaVarEnv {
|
|
||||||
clone := make(luaVarEnv, len(env))
|
|
||||||
maps.Copy(clone, env)
|
|
||||||
return clone
|
|
||||||
}
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
package providers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestExpandLuaConfigLinesVariableConcat(t *testing.T) {
|
|
||||||
lines := []string{
|
|
||||||
`local mainMod = "SUPER"`,
|
|
||||||
`hl.bind(mainMod .. " + C", hl.dsp.window.close())`,
|
|
||||||
`hl.bind(mainMod .. " + H", hl.dsp.focus({direction = "l"}))`,
|
|
||||||
`hl.bind("ALT + TAB", hl.dsp.window.cycle_next({}))`,
|
|
||||||
}
|
|
||||||
got := expandLuaConfigLines(lines)
|
|
||||||
|
|
||||||
want := []string{
|
|
||||||
`hl.bind("SUPER + C",`,
|
|
||||||
`hl.bind("SUPER + H",`,
|
|
||||||
`hl.bind("ALT + TAB",`,
|
|
||||||
}
|
|
||||||
joined := strings.Join(got, "\n")
|
|
||||||
for _, w := range want {
|
|
||||||
if !strings.Contains(joined, w) {
|
|
||||||
t.Errorf("expanded output missing %q\n---\n%s", w, joined)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExpandLuaConfigLinesForLoop(t *testing.T) {
|
|
||||||
lines := []string{
|
|
||||||
`local mainMod = "SUPER"`,
|
|
||||||
`for i = 1, 3 do`,
|
|
||||||
` hl.bind(mainMod .. " + " .. i, hl.dsp.focus({workspace = tostring(i)}))`,
|
|
||||||
` hl.bind(mainMod .. " SHIFT + " .. i, hl.dsp.window.move({workspace = tostring(i)}))`,
|
|
||||||
`end`,
|
|
||||||
}
|
|
||||||
got := strings.Join(expandLuaConfigLines(lines), "\n")
|
|
||||||
|
|
||||||
for _, w := range []string{
|
|
||||||
`hl.bind("SUPER + 1",`,
|
|
||||||
`hl.bind("SUPER + 2",`,
|
|
||||||
`hl.bind("SUPER + 3",`,
|
|
||||||
`hl.bind("SUPER SHIFT + 3",`,
|
|
||||||
`{workspace = "1"}`,
|
|
||||||
} {
|
|
||||||
if !strings.Contains(got, w) {
|
|
||||||
t.Errorf("expanded loop missing %q\n---\n%s", w, got)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParseLuaLinesDynamicBinds(t *testing.T) {
|
|
||||||
content := strings.Join([]string{
|
|
||||||
`local mainMod = "SUPER"`,
|
|
||||||
`hl.bind(mainMod .. " + C", hl.dsp.window.close())`,
|
|
||||||
`hl.bind("ALT + TAB", hl.dsp.window.cycle_next({}))`,
|
|
||||||
`for i = 1, 2 do`,
|
|
||||||
` hl.bind(mainMod .. " + " .. i, hl.dsp.focus({workspace = tostring(i)}))`,
|
|
||||||
`end`,
|
|
||||||
}, "\n")
|
|
||||||
|
|
||||||
parser := NewHyprlandParser("")
|
|
||||||
section, err := parser.parseLuaLines(content, "", "test.lua", "")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("parseLuaLines: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := map[string]*HyprlandKeyBinding{}
|
|
||||||
for i := range section.Keybinds {
|
|
||||||
kb := §ion.Keybinds[i]
|
|
||||||
keys[parser.formatBindKey(kb)] = kb
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, want := range []string{"SUPER+C", "ALT+TAB", "SUPER+1", "SUPER+2"} {
|
|
||||||
if _, ok := keys[want]; !ok {
|
|
||||||
t.Errorf("missing bind %q; got %v", want, keysList(keys))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if kb := keys["SUPER+C"]; kb != nil && kb.Dispatcher != "killactive" {
|
|
||||||
t.Errorf("SUPER+C dispatcher = %q, want killactive", kb.Dispatcher)
|
|
||||||
}
|
|
||||||
if kb := keys["SUPER+1"]; kb != nil {
|
|
||||||
if kb.Dispatcher != "workspace" || kb.Params != "1" {
|
|
||||||
t.Errorf("SUPER+1 = %q %q, want workspace 1", kb.Dispatcher, kb.Params)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func keysList(m map[string]*HyprlandKeyBinding) []string {
|
|
||||||
out := make([]string, 0, len(m))
|
|
||||||
for k := range m {
|
|
||||||
out = append(out, k)
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEvalLuaConcat(t *testing.T) {
|
|
||||||
env := luaVarEnv{"mainMod": "SUPER", "i": "5"}
|
|
||||||
tests := []struct {
|
|
||||||
expr string
|
|
||||||
want string
|
|
||||||
ok bool
|
|
||||||
}{
|
|
||||||
{`mainMod .. " + C"`, "SUPER + C", true},
|
|
||||||
{`mainMod .. " + " .. i`, "SUPER + 5", true},
|
|
||||||
{`mainMod .. " + " .. tostring(i)`, "SUPER + 5", true},
|
|
||||||
{`"ALT + TAB"`, "ALT + TAB", true},
|
|
||||||
{`mainMod .. someFunc()`, "", false},
|
|
||||||
{`unknownVar .. "x"`, "", false},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
got, ok := evalLuaConcat(tt.expr, env)
|
|
||||||
if ok != tt.ok || (ok && got != tt.want) {
|
|
||||||
t.Errorf("evalLuaConcat(%q) = %q,%v want %q,%v", tt.expr, got, ok, tt.want, tt.ok)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSubstituteLuaIdent(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
line, name, value, want string
|
|
||||||
}{
|
|
||||||
{`hl.bind(m .. " + " .. i, x)`, "i", "3", `hl.bind(m .. " + " .. 3, x)`},
|
|
||||||
{`hl.dsp.exec("light -i")`, "i", "3", `hl.dsp.exec("light -i")`},
|
|
||||||
{`foo.i`, "i", "3", `foo.i`},
|
|
||||||
{`tostring(i)`, "i", "3", `tostring(3)`},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
if got := substituteLuaIdent(tt.line, tt.name, tt.value); got != tt.want {
|
|
||||||
t.Errorf("substituteLuaIdent(%q,%q,%q) = %q, want %q", tt.line, tt.name, tt.value, got, tt.want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -347,13 +347,9 @@ func (p *HyprlandParser) buildDMSStatus() *HyprlandDMSStatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *HyprlandParser) formatBindKey(kb *HyprlandKeyBinding) string {
|
func (p *HyprlandParser) formatBindKey(kb *HyprlandKeyBinding) string {
|
||||||
key := kb.Key
|
|
||||||
if canonical, ok := hyprlandScrollToCanonical(key); ok {
|
|
||||||
key = canonical
|
|
||||||
}
|
|
||||||
parts := make([]string, 0, len(kb.Mods)+1)
|
parts := make([]string, 0, len(kb.Mods)+1)
|
||||||
parts = append(parts, kb.Mods...)
|
parts = append(parts, kb.Mods...)
|
||||||
parts = append(parts, key)
|
parts = append(parts, kb.Key)
|
||||||
return strings.Join(parts, "+")
|
return strings.Join(parts, "+")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,7 +619,7 @@ func (p *HyprlandParser) parseLuaLines(content string, baseDir, absPath, section
|
|||||||
prevSource := p.currentSource
|
prevSource := p.currentSource
|
||||||
p.currentSource = absPath
|
p.currentSource = absPath
|
||||||
|
|
||||||
lines := expandLuaConfigLines(strings.Split(content, "\n"))
|
lines := strings.Split(content, "\n")
|
||||||
boundInFile := make(map[string]bool)
|
boundInFile := make(map[string]bool)
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
trimmed := strings.TrimSpace(line)
|
trimmed := strings.TrimSpace(line)
|
||||||
|
|||||||
@@ -486,61 +486,6 @@ hl.bind("SUPER + 1", hl.dsp.exec_cmd("hyprctl dispatch workspace 1"))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHyprlandSetBindTranslatesScrollWheelToMouse(t *testing.T) {
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
dmsDir := filepath.Join(tmpDir, "dms")
|
|
||||||
if err := os.MkdirAll(dmsDir, 0o755); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
bindsUser := filepath.Join(dmsDir, "binds-user.lua")
|
|
||||||
if err := os.WriteFile(bindsUser, []byte("-- DMS user keybind overrides\n"), 0o644); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
provider := NewHyprlandProvider(tmpDir)
|
|
||||||
if err := provider.SetBind("SUPER + WheelScrollDown", "workspace 1", "", nil); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := readFile(t, bindsUser)
|
|
||||||
if !strings.Contains(got, `hl.bind("SUPER + mouse_down"`) {
|
|
||||||
t.Fatalf("expected scroll key translated to mouse_down, got:\n%s", got)
|
|
||||||
}
|
|
||||||
if strings.Contains(got, "WheelScroll") {
|
|
||||||
t.Fatalf("expected no raw niri scroll keysym in hyprland output, got:\n%s", got)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := provider.SetBind("SUPER + WheelScrollDown", "workspace 2", "", nil); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
got = readFile(t, bindsUser)
|
|
||||||
if strings.Count(got, `hl.bind("SUPER + mouse_down"`) != 1 {
|
|
||||||
t.Fatalf("expected exactly one mouse_down bind after re-save, got:\n%s", got)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestHyprlandScrollWheelRoundTrips(t *testing.T) {
|
|
||||||
for native, canonical := range map[string]string{
|
|
||||||
"mouse_up": "WheelScrollUp",
|
|
||||||
"mouse_down": "WheelScrollDown",
|
|
||||||
"mouse_left": "WheelScrollLeft",
|
|
||||||
"mouse_right": "WheelScrollRight",
|
|
||||||
} {
|
|
||||||
if got := luaKeyComboToInternalKey("SUPER + " + native); got != "SUPER+"+canonical {
|
|
||||||
t.Errorf("luaKeyComboToInternalKey(%q) = %q, want SUPER+%s", native, got, canonical)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func readFile(t *testing.T, path string) string {
|
|
||||||
t.Helper()
|
|
||||||
data, err := os.ReadFile(path)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
return string(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestHyprlandRemoveBindReplacesExistingOverrideWithNegativeOverride(t *testing.T) {
|
func TestHyprlandRemoveBindReplacesExistingOverrideWithNegativeOverride(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
dmsDir := filepath.Join(tmpDir, "dms")
|
dmsDir := filepath.Join(tmpDir, "dms")
|
||||||
|
|||||||
@@ -236,9 +236,6 @@ func (m *MangoWCProvider) SetBind(key, action, description string, options map[s
|
|||||||
if optionPrefix := m.bindPrefixFromOptions(options); optionPrefix != "" {
|
if optionPrefix := m.bindPrefixFromOptions(options); optionPrefix != "" {
|
||||||
prefix = optionPrefix
|
prefix = optionPrefix
|
||||||
}
|
}
|
||||||
if _, leaf := m.parseKeyString(key); isScrollKey(leaf) {
|
|
||||||
prefix = mangowcAxisBindPrefix
|
|
||||||
}
|
|
||||||
|
|
||||||
existingBinds[normalizedKey] = &mangowcOverrideBind{
|
existingBinds[normalizedKey] = &mangowcOverrideBind{
|
||||||
Key: key,
|
Key: key,
|
||||||
@@ -349,12 +346,6 @@ func (m *MangoWCProvider) parseOverrideBindLine(line, precedingComment string) (
|
|||||||
keyName := strings.TrimSpace(fields[1])
|
keyName := strings.TrimSpace(fields[1])
|
||||||
command := strings.TrimSpace(fields[2])
|
command := strings.TrimSpace(fields[2])
|
||||||
|
|
||||||
if prefix == mangowcAxisBindPrefix {
|
|
||||||
if canonical, ok := mangowcDirectionToScroll(keyName); ok {
|
|
||||||
keyName = canonical
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var params string
|
var params string
|
||||||
if len(fields) > 3 {
|
if len(fields) > 3 {
|
||||||
params = strings.TrimSpace(fields[3])
|
params = strings.TrimSpace(fields[3])
|
||||||
@@ -374,9 +365,6 @@ func (m *MangoWCProvider) parseOverrideBindLine(line, precedingComment string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *MangoWCProvider) isBindPrefix(prefix string) bool {
|
func (m *MangoWCProvider) isBindPrefix(prefix string) bool {
|
||||||
if prefix == mangowcAxisBindPrefix {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if !strings.HasPrefix(prefix, "bind") {
|
if !strings.HasPrefix(prefix, "bind") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -603,11 +591,6 @@ func (m *MangoWCProvider) writeBindLine(sb *strings.Builder, bind *mangowcOverri
|
|||||||
if prefix == "" {
|
if prefix == "" {
|
||||||
prefix = "bind"
|
prefix = "bind"
|
||||||
}
|
}
|
||||||
if prefix == mangowcAxisBindPrefix {
|
|
||||||
if direction, ok := mangowcScrollToDirection(key); ok {
|
|
||||||
key = direction
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sb.WriteString(prefix)
|
sb.WriteString(prefix)
|
||||||
sb.WriteString("=")
|
sb.WriteString("=")
|
||||||
if mods == "" {
|
if mods == "" {
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ func (p *MangoWCParser) ParseKeys() []MangoWCKeyBinding {
|
|||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if !strings.HasPrefix(trimmed, "bind") && !strings.HasPrefix(trimmed, mangowcAxisBindPrefix) {
|
if !strings.HasPrefix(trimmed, "bind") {
|
||||||
pendingComment = ""
|
pendingComment = ""
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -427,7 +427,7 @@ func (p *MangoWCParser) parseFileWithSource(filePath string) ([]MangoWCKeyBindin
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !strings.HasPrefix(trimmed, "bind") && !strings.HasPrefix(trimmed, mangowcAxisBindPrefix) {
|
if !strings.HasPrefix(trimmed, "bind") {
|
||||||
pendingComment = ""
|
pendingComment = ""
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -493,7 +493,7 @@ func (p *MangoWCParser) parseDMSBindsDirectly(dmsBindsPath string) []MangoWCKeyB
|
|||||||
// line directly above) is the description: mango feeds inline comments to spawn
|
// line directly above) is the description: mango feeds inline comments to spawn
|
||||||
// as argv, so DMS keeps descriptions on the line above; inline `#` is a fallback.
|
// as argv, so DMS keeps descriptions on the line above; inline `#` is a fallback.
|
||||||
func (p *MangoWCParser) getKeybindAtLineContent(line string, precedingComment string) *MangoWCKeyBinding {
|
func (p *MangoWCParser) getKeybindAtLineContent(line string, precedingComment string) *MangoWCKeyBinding {
|
||||||
bindMatch := regexp.MustCompile(`^(bind[lsrp]*|axisbind)\s*=\s*(.+)$`)
|
bindMatch := regexp.MustCompile(`^(bind[lsrp]*)\s*=\s*(.+)$`)
|
||||||
matches := bindMatch.FindStringSubmatch(line)
|
matches := bindMatch.FindStringSubmatch(line)
|
||||||
if len(matches) < 3 {
|
if len(matches) < 3 {
|
||||||
return nil
|
return nil
|
||||||
@@ -527,12 +527,6 @@ func (p *MangoWCParser) getKeybindAtLineContent(line string, precedingComment st
|
|||||||
key := strings.TrimSpace(keyFields[1])
|
key := strings.TrimSpace(keyFields[1])
|
||||||
command := strings.TrimSpace(keyFields[2])
|
command := strings.TrimSpace(keyFields[2])
|
||||||
|
|
||||||
if matches[1] == mangowcAxisBindPrefix {
|
|
||||||
if canonical, ok := mangowcDirectionToScroll(key); ok {
|
|
||||||
key = canonical
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var params string
|
var params string
|
||||||
if len(keyFields) > 3 {
|
if len(keyFields) > 3 {
|
||||||
params = strings.TrimSpace(keyFields[3])
|
params = strings.TrimSpace(keyFields[3])
|
||||||
|
|||||||
@@ -6,29 +6,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMangoWCParseAxisBindToScrollKey(t *testing.T) {
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
cfg := filepath.Join(tmpDir, "config.conf")
|
|
||||||
content := "axisbind=SUPER,UP,spawn,dms ipc call test\n"
|
|
||||||
if err := os.WriteFile(cfg, []byte(content), 0o644); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
binds, err := ParseMangoWCKeys(cfg)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ParseMangoWCKeys failed: %v", err)
|
|
||||||
}
|
|
||||||
if len(binds) != 1 {
|
|
||||||
t.Fatalf("expected 1 bind, got %d", len(binds))
|
|
||||||
}
|
|
||||||
if binds[0].Key != "WheelScrollUp" {
|
|
||||||
t.Fatalf("expected axis direction parsed as WheelScrollUp, got %q", binds[0].Key)
|
|
||||||
}
|
|
||||||
if len(binds[0].Mods) != 1 || binds[0].Mods[0] != "SUPER" {
|
|
||||||
t.Fatalf("expected SUPER mod, got %v", binds[0].Mods)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMangoWCAutogenerateComment(t *testing.T) {
|
func TestMangoWCAutogenerateComment(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
command string
|
command string
|
||||||
|
|||||||
@@ -417,40 +417,6 @@ bind=SUPER,3,view,3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMangoWCSetBindTranslatesScrollWheelToAxisBind(t *testing.T) {
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
dmsDir := filepath.Join(tmpDir, "dms")
|
|
||||||
if err := os.MkdirAll(dmsDir, 0o755); err != nil {
|
|
||||||
t.Fatalf("failed to create dms dir: %v", err)
|
|
||||||
}
|
|
||||||
bindsPath := filepath.Join(dmsDir, "binds.conf")
|
|
||||||
seed := "# === Custom Keybinds ===\nbind=SUPER,t,spawn,ghostty\ngesturebind=none,left,3,focusdir,left\n"
|
|
||||||
if err := os.WriteFile(bindsPath, []byte(seed), 0o644); err != nil {
|
|
||||||
t.Fatalf("failed to write seed binds: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
provider := NewMangoWCProvider(tmpDir)
|
|
||||||
if err := provider.SetBind("SUPER+WheelScrollDown", "spawn dms ipc call test", "Scroll down", nil); err != nil {
|
|
||||||
t.Fatalf("SetBind failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
content := readFile(t, bindsPath)
|
|
||||||
if !strings.Contains(content, "axisbind=SUPER,DOWN,spawn,dms ipc call test") {
|
|
||||||
t.Fatalf("expected scroll bind written as axisbind direction, got:\n%s", content)
|
|
||||||
}
|
|
||||||
if strings.Contains(content, "WheelScroll") {
|
|
||||||
t.Fatalf("expected no raw niri scroll keysym in mango output, got:\n%s", content)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := provider.SetBind("SUPER+WheelScrollDown", "spawn dms ipc call test2", "Scroll down", nil); err != nil {
|
|
||||||
t.Fatalf("SetBind failed: %v", err)
|
|
||||||
}
|
|
||||||
content = readFile(t, bindsPath)
|
|
||||||
if strings.Count(content, "axisbind=SUPER,DOWN,") != 1 {
|
|
||||||
t.Fatalf("expected exactly one axisbind after re-save, got:\n%s", content)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMangoWCRemoveBindPreservesNonBindLines(t *testing.T) {
|
func TestMangoWCRemoveBindPreservesNonBindLines(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
dmsDir := filepath.Join(tmpDir, "dms")
|
dmsDir := filepath.Join(tmpDir, "dms")
|
||||||
|
|||||||
@@ -19,20 +19,6 @@ type NiriProvider struct {
|
|||||||
parsed bool
|
parsed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type niriActionPart struct {
|
|
||||||
value string
|
|
||||||
quoted bool
|
|
||||||
}
|
|
||||||
|
|
||||||
var niriActionPropertyOrder = []string{"focus", "show-pointer", "write-to-disk", "skip-confirmation", "delay-ms"}
|
|
||||||
var niriActionProperties = map[string]struct{}{
|
|
||||||
"focus": {},
|
|
||||||
"show-pointer": {},
|
|
||||||
"write-to-disk": {},
|
|
||||||
"skip-confirmation": {},
|
|
||||||
"delay-ms": {},
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewNiriProvider(configDir string) *NiriProvider {
|
func NewNiriProvider(configDir string) *NiriProvider {
|
||||||
if configDir == "" {
|
if configDir == "" {
|
||||||
configDir = defaultNiriConfigDir()
|
configDir = defaultNiriConfigDir()
|
||||||
@@ -69,7 +55,6 @@ func (n *NiriProvider) GetCheatSheet() (*keybinds.CheatSheet, error) {
|
|||||||
sheet := &keybinds.CheatSheet{
|
sheet := &keybinds.CheatSheet{
|
||||||
Title: "Niri Keybinds",
|
Title: "Niri Keybinds",
|
||||||
Provider: n.Name(),
|
Provider: n.Name(),
|
||||||
ModKey: result.ModKey,
|
|
||||||
Binds: categorizedBinds,
|
Binds: categorizedBinds,
|
||||||
DMSBindsIncluded: result.DMSBindsIncluded,
|
DMSBindsIncluded: result.DMSBindsIncluded,
|
||||||
}
|
}
|
||||||
@@ -367,7 +352,7 @@ func (n *NiriProvider) buildActionFromNode(bindNode *document.Node) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if actionNode.Properties != nil {
|
if actionNode.Properties != nil {
|
||||||
for _, propName := range niriActionPropertyOrder {
|
for _, propName := range []string{"focus", "show-pointer", "write-to-disk", "skip-confirmation", "delay-ms"} {
|
||||||
if val, ok := actionNode.Properties.Get(propName); ok {
|
if val, ok := actionNode.Properties.Get(propName); ok {
|
||||||
parts = append(parts, propName+"="+val.String())
|
parts = append(parts, propName+"="+val.String())
|
||||||
}
|
}
|
||||||
@@ -455,10 +440,10 @@ func (n *NiriProvider) buildActionNode(action string) *document.Node {
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
node.SetName(parts[0].value)
|
node.SetName(parts[0])
|
||||||
for _, arg := range parts[1:] {
|
for _, arg := range parts[1:] {
|
||||||
if n.isNiriActionPropertyToken(arg) {
|
if strings.Contains(arg, "=") {
|
||||||
kv := strings.SplitN(arg.value, "=", 2)
|
kv := strings.SplitN(arg, "=", 2)
|
||||||
switch kv[1] {
|
switch kv[1] {
|
||||||
case "true":
|
case "true":
|
||||||
node.AddProperty(kv[0], true, "")
|
node.AddProperty(kv[0], true, "")
|
||||||
@@ -469,25 +454,13 @@ func (n *NiriProvider) buildActionNode(action string) *document.Node {
|
|||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
node.AddArgument(arg.value, "")
|
node.AddArgument(arg, "")
|
||||||
}
|
}
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *NiriProvider) isNiriActionPropertyToken(part niriActionPart) bool {
|
func (n *NiriProvider) parseActionParts(action string) []string {
|
||||||
if part.quoted || !strings.Contains(part.value, "=") {
|
var parts []string
|
||||||
return false
|
|
||||||
}
|
|
||||||
key, _, ok := strings.Cut(part.value, "=")
|
|
||||||
if !ok {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
_, ok = niriActionProperties[key]
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *NiriProvider) parseActionParts(action string) []niriActionPart {
|
|
||||||
var parts []niriActionPart
|
|
||||||
var current strings.Builder
|
var current strings.Builder
|
||||||
var inQuote, escaped, wasQuoted bool
|
var inQuote, escaped, wasQuoted bool
|
||||||
|
|
||||||
@@ -503,7 +476,7 @@ func (n *NiriProvider) parseActionParts(action string) []niriActionPart {
|
|||||||
inQuote = !inQuote
|
inQuote = !inQuote
|
||||||
case r == ' ' && !inQuote:
|
case r == ' ' && !inQuote:
|
||||||
if current.Len() > 0 || wasQuoted {
|
if current.Len() > 0 || wasQuoted {
|
||||||
parts = append(parts, niriActionPart{value: current.String(), quoted: wasQuoted})
|
parts = append(parts, current.String())
|
||||||
current.Reset()
|
current.Reset()
|
||||||
wasQuoted = false
|
wasQuoted = false
|
||||||
}
|
}
|
||||||
@@ -512,7 +485,7 @@ func (n *NiriProvider) parseActionParts(action string) []niriActionPart {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if current.Len() > 0 || wasQuoted {
|
if current.Len() > 0 || wasQuoted {
|
||||||
parts = append(parts, niriActionPart{value: current.String(), quoted: wasQuoted})
|
parts = append(parts, current.String())
|
||||||
}
|
}
|
||||||
return parts
|
return parts
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ type NiriSection struct {
|
|||||||
|
|
||||||
type NiriParser struct {
|
type NiriParser struct {
|
||||||
configDir string
|
configDir string
|
||||||
modKey string
|
|
||||||
processedFiles map[string]bool
|
processedFiles map[string]bool
|
||||||
bindMap map[string]*NiriKeyBinding
|
bindMap map[string]*NiriKeyBinding
|
||||||
bindOrder []string
|
bindOrder []string
|
||||||
@@ -52,7 +51,7 @@ type NiriParser struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parseKDL(data []byte) (*document.Document, error) {
|
func parseKDL(data []byte) (*document.Document, error) {
|
||||||
return kdl.Parse(strings.NewReader(normalizeKDLBraces(quoteLeadingUnderscoreIdents(string(data)))))
|
return kdl.Parse(strings.NewReader(normalizeKDLBraces(string(data))))
|
||||||
}
|
}
|
||||||
|
|
||||||
func normalizeKDLBraces(input string) string {
|
func normalizeKDLBraces(input string) string {
|
||||||
@@ -95,93 +94,6 @@ func normalizeKDLBraces(input string) string {
|
|||||||
return sb.String()
|
return sb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// quoteLeadingUnderscoreIdents wraps bare KDL identifiers that begin with '_'
|
|
||||||
// in double quotes. kdl-go rejects '_' as the first character of a bare
|
|
||||||
// identifier (e.g. the common `_JAVA_AWT_WM_NONREPARENTING "1"` environment
|
|
||||||
// node), even though niri's own parser and the KDL spec accept it — so without
|
|
||||||
// this the whole config fails to parse and no keybinds load. Quoting lets
|
|
||||||
// kdl-go parse it; this is safe because the niri parser only dispatches on
|
|
||||||
// fixed node/section names (binds, recent-windows, include, ...) that never
|
|
||||||
// start with '_', so re-quoting such a name cannot change what DMS reads.
|
|
||||||
// Underscores elsewhere in an identifier (XDG_CURRENT_DESKTOP) are left
|
|
||||||
// untouched, and underscores inside strings or comments are skipped. Only a
|
|
||||||
// leading '_' is handled; other start characters kdl-go over-rejects (e.g. '.'
|
|
||||||
// or '?') do not occur in niri configs.
|
|
||||||
func quoteLeadingUnderscoreIdents(input string) string {
|
|
||||||
var sb strings.Builder
|
|
||||||
sb.Grow(len(input))
|
|
||||||
|
|
||||||
var prev byte
|
|
||||||
n := len(input)
|
|
||||||
for i := 0; i < n; {
|
|
||||||
c := input[i]
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case c == '"':
|
|
||||||
end := findStringEnd(input, i)
|
|
||||||
sb.WriteString(input[i:end])
|
|
||||||
prev = '"'
|
|
||||||
i = end
|
|
||||||
case c == '/' && i+1 < n && input[i+1] == '/':
|
|
||||||
end := findLineCommentEnd(input, i)
|
|
||||||
sb.WriteString(input[i:end])
|
|
||||||
prev = '\n'
|
|
||||||
i = end
|
|
||||||
case c == '/' && i+1 < n && input[i+1] == '*':
|
|
||||||
end := findBlockCommentEnd(input, i)
|
|
||||||
sb.WriteString(input[i:end])
|
|
||||||
prev = ' '
|
|
||||||
i = end
|
|
||||||
case c == '/' && i+1 < n && input[i+1] == '-':
|
|
||||||
// KDL slashdash: /- comments out the next node/value. Keep the
|
|
||||||
// marker but treat what follows as a fresh token start, so a
|
|
||||||
// slashdashed leading-underscore node (e.g. `/-_FOO "1"`) still
|
|
||||||
// gets quoted instead of crashing kdl-go.
|
|
||||||
sb.WriteByte('/')
|
|
||||||
sb.WriteByte('-')
|
|
||||||
prev = ' '
|
|
||||||
i += 2
|
|
||||||
case c == '_' && isIdentBoundary(prev):
|
|
||||||
end := scanBareIdent(input, i)
|
|
||||||
sb.WriteByte('"')
|
|
||||||
sb.WriteString(input[i:end])
|
|
||||||
sb.WriteByte('"')
|
|
||||||
prev = '"'
|
|
||||||
i = end
|
|
||||||
default:
|
|
||||||
sb.WriteByte(c)
|
|
||||||
prev = c
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// isIdentBoundary reports whether the previously emitted byte ends a token, so
|
|
||||||
// that a following '_' starts a fresh bare identifier rather than sitting in
|
|
||||||
// the middle of one.
|
|
||||||
func isIdentBoundary(prev byte) bool {
|
|
||||||
switch prev {
|
|
||||||
case 0, ' ', '\t', '\n', '\r', '{', '}', ';', '=', '(', ')', ',':
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// scanBareIdent returns the index just past the bare identifier starting at
|
|
||||||
// start, stopping at whitespace or any KDL delimiter.
|
|
||||||
func scanBareIdent(s string, start int) int {
|
|
||||||
n := len(s)
|
|
||||||
for i := start; i < n; i++ {
|
|
||||||
switch s[i] {
|
|
||||||
case ' ', '\t', '\n', '\r', '"', '{', '}', '(', ')', ';', '=', ',', '/', '\\', '<', '>', '[', ']':
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func findStringEnd(s string, start int) int {
|
func findStringEnd(s string, start int) int {
|
||||||
n := len(s)
|
n := len(s)
|
||||||
for i := start + 1; i < n; {
|
for i := start + 1; i < n; {
|
||||||
@@ -238,7 +150,6 @@ func isBraceAdjacentSpace(b byte) bool {
|
|||||||
func NewNiriParser(configDir string) *NiriParser {
|
func NewNiriParser(configDir string) *NiriParser {
|
||||||
return &NiriParser{
|
return &NiriParser{
|
||||||
configDir: configDir,
|
configDir: configDir,
|
||||||
modKey: "Super",
|
|
||||||
processedFiles: make(map[string]bool),
|
processedFiles: make(map[string]bool),
|
||||||
bindMap: make(map[string]*NiriKeyBinding),
|
bindMap: make(map[string]*NiriKeyBinding),
|
||||||
bindOrder: []string{},
|
bindOrder: []string{},
|
||||||
@@ -379,8 +290,6 @@ func (p *NiriParser) processNodes(nodes []*document.Node, section *NiriSection,
|
|||||||
switch name {
|
switch name {
|
||||||
case "include":
|
case "include":
|
||||||
p.handleInclude(node, section, baseDir)
|
p.handleInclude(node, section, baseDir)
|
||||||
case "input":
|
|
||||||
p.handleInput(node)
|
|
||||||
case "binds":
|
case "binds":
|
||||||
p.extractBinds(node, section, "")
|
p.extractBinds(node, section, "")
|
||||||
case "recent-windows":
|
case "recent-windows":
|
||||||
@@ -389,19 +298,6 @@ func (p *NiriParser) processNodes(nodes []*document.Node, section *NiriSection,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *NiriParser) handleInput(node *document.Node) {
|
|
||||||
for _, child := range node.Children {
|
|
||||||
if child.Name.String() != "mod-key" || len(child.Arguments) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
modKey := strings.Trim(strings.TrimSpace(child.Arguments[0].String()), "\"")
|
|
||||||
if modKey != "" {
|
|
||||||
p.modKey = modKey
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *NiriParser) handleInclude(node *document.Node, section *NiriSection, baseDir string) {
|
func (p *NiriParser) handleInclude(node *document.Node, section *NiriSection, baseDir string) {
|
||||||
if len(node.Arguments) == 0 {
|
if len(node.Arguments) == 0 {
|
||||||
return
|
return
|
||||||
@@ -551,7 +447,6 @@ func (p *NiriParser) parseKeyCombo(combo string) ([]string, string) {
|
|||||||
|
|
||||||
type NiriParseResult struct {
|
type NiriParseResult struct {
|
||||||
Section *NiriSection
|
Section *NiriSection
|
||||||
ModKey string
|
|
||||||
DMSBindsIncluded bool
|
DMSBindsIncluded bool
|
||||||
DMSStatus *DMSBindsStatusInfo
|
DMSStatus *DMSBindsStatusInfo
|
||||||
ConflictingConfigs map[string]*NiriKeyBinding
|
ConflictingConfigs map[string]*NiriKeyBinding
|
||||||
@@ -604,7 +499,6 @@ func ParseNiriKeys(configDir string) (*NiriParseResult, error) {
|
|||||||
}
|
}
|
||||||
return &NiriParseResult{
|
return &NiriParseResult{
|
||||||
Section: section,
|
Section: section,
|
||||||
ModKey: parser.modKey,
|
|
||||||
DMSBindsIncluded: parser.HasDMSBindsIncluded(),
|
DMSBindsIncluded: parser.HasDMSBindsIncluded(),
|
||||||
DMSStatus: parser.buildDMSStatus(),
|
DMSStatus: parser.buildDMSStatus(),
|
||||||
ConflictingConfigs: parser.conflictingConfigs,
|
ConflictingConfigs: parser.conflictingConfigs,
|
||||||
|
|||||||
@@ -7,28 +7,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNiriParseModKey(t *testing.T) {
|
|
||||||
config := `input {
|
|
||||||
mod-key "Alt"
|
|
||||||
}
|
|
||||||
binds {
|
|
||||||
Mod+T { spawn "kitty"; }
|
|
||||||
}
|
|
||||||
`
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
if err := os.WriteFile(filepath.Join(tmpDir, "config.kdl"), []byte(config), 0o644); err != nil {
|
|
||||||
t.Fatalf("Failed to write test config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := ParseNiriKeys(tmpDir)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ParseNiriKeys failed: %v", err)
|
|
||||||
}
|
|
||||||
if result.ModKey != "Alt" {
|
|
||||||
t.Errorf("ModKey = %q, want %q", result.ModKey, "Alt")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNiriParse_NoSpaceBeforeBrace(t *testing.T) {
|
func TestNiriParse_NoSpaceBeforeBrace(t *testing.T) {
|
||||||
config := `recent-windows {
|
config := `recent-windows {
|
||||||
binds {
|
binds {
|
||||||
@@ -93,101 +71,6 @@ func TestNormalizeKDLBraces(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQuoteLeadingUnderscoreIdents(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
in string
|
|
||||||
out string
|
|
||||||
}{
|
|
||||||
{"leading underscore node", `_JAVA_AWT_WM_NONREPARENTING "1"`, `"_JAVA_AWT_WM_NONREPARENTING" "1"`},
|
|
||||||
{"mid underscore untouched", `XDG_CURRENT_DESKTOP "niri"`, `XDG_CURRENT_DESKTOP "niri"`},
|
|
||||||
{"indented node", "environment {\n _FOO \"1\"\n}", "environment {\n \"_FOO\" \"1\"\n}"},
|
|
||||||
{"underscore in string", `spawn "_not_a_node"`, `spawn "_not_a_node"`},
|
|
||||||
{"underscore in line comment", "// _comment\n_FOO \"1\"", "// _comment\n\"_FOO\" \"1\""},
|
|
||||||
{"underscore in block comment", "/* _x */ _FOO \"1\"", "/* _x */ \"_FOO\" \"1\""},
|
|
||||||
{"block comment abuts node", `/* x */_FOO "1"`, `/* x */"_FOO" "1"`},
|
|
||||||
{"slashdash before node", `/-_FOO "1"`, `/-"_FOO" "1"`},
|
|
||||||
{"node after closing paren", "node (u8)_v", `node (u8)"_v"`},
|
|
||||||
{"node before brace without space", "_FOO{ }", `"_FOO"{ }`},
|
|
||||||
{"lone underscore", `_ "x"`, `"_" "x"`},
|
|
||||||
{"property value", "node key=_val", `node key="_val"`},
|
|
||||||
{"no underscores", "node child", "node child"},
|
|
||||||
}
|
|
||||||
for _, tc := range tests {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
got := quoteLeadingUnderscoreIdents(tc.in)
|
|
||||||
if got != tc.out {
|
|
||||||
t.Errorf("quoteLeadingUnderscoreIdents(%q) = %q, want %q", tc.in, got, tc.out)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNiriParseLeadingUnderscoreEnvironment(t *testing.T) {
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
configFile := filepath.Join(tmpDir, "config.kdl")
|
|
||||||
|
|
||||||
// A leading-underscore environment node (a common Java/tiling-WM fix) must
|
|
||||||
// not abort parsing of the rest of the config — keybinds still have to load.
|
|
||||||
content := `environment {
|
|
||||||
XDG_CURRENT_DESKTOP "niri"
|
|
||||||
_JAVA_AWT_WM_NONREPARENTING "1"
|
|
||||||
}
|
|
||||||
binds {
|
|
||||||
Mod+Q { close-window; }
|
|
||||||
Mod+KP_Home { focus-workspace 1; }
|
|
||||||
}
|
|
||||||
`
|
|
||||||
if err := os.WriteFile(configFile, []byte(content), 0o644); err != nil {
|
|
||||||
t.Fatalf("Failed to write test config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := ParseNiriKeys(tmpDir)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ParseNiriKeys failed on config with leading-underscore env node: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result.Section.Keybinds) != 2 {
|
|
||||||
t.Errorf("Expected 2 keybinds, got %d", len(result.Section.Keybinds))
|
|
||||||
}
|
|
||||||
|
|
||||||
foundClose := false
|
|
||||||
for _, kb := range result.Section.Keybinds {
|
|
||||||
if kb.Action == "close-window" {
|
|
||||||
foundClose = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !foundClose {
|
|
||||||
t.Error("close-window keybind not found — leading-underscore env node broke parsing")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNiriParseSlashdashLeadingUnderscore(t *testing.T) {
|
|
||||||
tmpDir := t.TempDir()
|
|
||||||
configFile := filepath.Join(tmpDir, "config.kdl")
|
|
||||||
|
|
||||||
// A slashdashed leading-underscore node must not abort parsing either.
|
|
||||||
content := `environment {
|
|
||||||
/-_JAVA_AWT_WM_NONREPARENTING "1"
|
|
||||||
}
|
|
||||||
binds {
|
|
||||||
Mod+Q { close-window; }
|
|
||||||
}
|
|
||||||
`
|
|
||||||
if err := os.WriteFile(configFile, []byte(content), 0o644); err != nil {
|
|
||||||
t.Fatalf("Failed to write test config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := ParseNiriKeys(tmpDir)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ParseNiriKeys failed on config with slashdashed leading-underscore node: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result.Section.Keybinds) != 1 {
|
|
||||||
t.Errorf("Expected 1 keybind, got %d", len(result.Section.Keybinds))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNiriParseKeyCombo(t *testing.T) {
|
func TestNiriParseKeyCombo(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
combo string
|
combo string
|
||||||
|
|||||||
@@ -17,10 +17,7 @@ func TestNiriProviderGetCheatSheet(t *testing.T) {
|
|||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
configFile := filepath.Join(tmpDir, "config.kdl")
|
configFile := filepath.Join(tmpDir, "config.kdl")
|
||||||
|
|
||||||
content := `input {
|
content := `binds {
|
||||||
mod-key "Alt"
|
|
||||||
}
|
|
||||||
binds {
|
|
||||||
Mod+Q { close-window; }
|
Mod+Q { close-window; }
|
||||||
Mod+F { fullscreen-window; }
|
Mod+F { fullscreen-window; }
|
||||||
Mod+T hotkey-overlay-title="Open Terminal" { spawn "kitty"; }
|
Mod+T hotkey-overlay-title="Open Terminal" { spawn "kitty"; }
|
||||||
@@ -48,10 +45,6 @@ binds {
|
|||||||
t.Errorf("Provider = %q, want %q", cheatSheet.Provider, "niri")
|
t.Errorf("Provider = %q, want %q", cheatSheet.Provider, "niri")
|
||||||
}
|
}
|
||||||
|
|
||||||
if cheatSheet.ModKey != "Alt" {
|
|
||||||
t.Errorf("ModKey = %q, want %q", cheatSheet.ModKey, "Alt")
|
|
||||||
}
|
|
||||||
|
|
||||||
windowBinds := cheatSheet.Binds["Window"]
|
windowBinds := cheatSheet.Binds["Window"]
|
||||||
if len(windowBinds) < 2 {
|
if len(windowBinds) < 2 {
|
||||||
t.Errorf("Expected at least 2 Window binds, got %d", len(windowBinds))
|
t.Errorf("Expected at least 2 Window binds, got %d", len(windowBinds))
|
||||||
@@ -234,58 +227,6 @@ func TestNiriGenerateBindsContent(t *testing.T) {
|
|||||||
expected: `binds {
|
expected: `binds {
|
||||||
Mod+Space hotkey-overlay-title="Application Launcher" { spawn "dms" "ipc" "call" "spotlight" "toggle"; }
|
Mod+Space hotkey-overlay-title="Application Launcher" { spawn "dms" "ipc" "call" "spotlight" "toggle"; }
|
||||||
}
|
}
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "spawn with equals arg",
|
|
||||||
binds: map[string]*overrideBind{
|
|
||||||
"Mod+B": {
|
|
||||||
Key: "Mod+B",
|
|
||||||
Action: `spawn /opt/browser --profile-directory=Default`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
expected: `binds {
|
|
||||||
Mod+B { spawn "/opt/browser" "--profile-directory=Default"; }
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "spawn shell command with quoted equals args",
|
|
||||||
binds: map[string]*overrideBind{
|
|
||||||
"Mod+C": {
|
|
||||||
Key: "Mod+C",
|
|
||||||
Action: `spawn sh -c "chrome --profile-directory=Default --app=x"`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
expected: `binds {
|
|
||||||
Mod+C { spawn "sh" "-c" "chrome --profile-directory=Default --app=x"; }
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "spawn env assignment stays arg",
|
|
||||||
binds: map[string]*overrideBind{
|
|
||||||
"Mod+E": {
|
|
||||||
Key: "Mod+E",
|
|
||||||
Action: `spawn env FOO=bar mycmd`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
expected: `binds {
|
|
||||||
Mod+E { spawn "env" "FOO=bar" "mycmd"; }
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "niri action property remains property",
|
|
||||||
binds: map[string]*overrideBind{
|
|
||||||
"Print": {
|
|
||||||
Key: "Print",
|
|
||||||
Action: `screenshot show-pointer=false`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
expected: `binds {
|
|
||||||
Print { screenshot show-pointer=false; }
|
|
||||||
}
|
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
package providers
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
// Scroll-wheel binds are captured by the shell as niri's keysym names
|
|
||||||
// (WheelScrollUp/Down/Left/Right) regardless of the active compositor. Niri
|
|
||||||
// consumes them natively; every other provider speaks a different dialect, so the
|
|
||||||
// raw niri token must be translated on write and back again on read. Without this
|
|
||||||
// the token is emitted verbatim and the compositor rejects the bind (issue #2683).
|
|
||||||
|
|
||||||
var canonicalScrollKeys = map[string]string{
|
|
||||||
"wheelscrollup": "WheelScrollUp",
|
|
||||||
"wheelscrolldown": "WheelScrollDown",
|
|
||||||
"wheelscrollleft": "WheelScrollLeft",
|
|
||||||
"wheelscrollright": "WheelScrollRight",
|
|
||||||
}
|
|
||||||
|
|
||||||
func isScrollKey(token string) bool {
|
|
||||||
_, ok := canonicalScrollKeys[strings.ToLower(token)]
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hyprland binds the wheel inside a regular bind using mouse_up/down/left/right.
|
|
||||||
var hyprlandScrollNative = map[string]string{
|
|
||||||
"wheelscrollup": "mouse_up",
|
|
||||||
"wheelscrolldown": "mouse_down",
|
|
||||||
"wheelscrollleft": "mouse_left",
|
|
||||||
"wheelscrollright": "mouse_right",
|
|
||||||
}
|
|
||||||
|
|
||||||
var hyprlandScrollCanonical = map[string]string{
|
|
||||||
"mouse_up": "WheelScrollUp",
|
|
||||||
"mouse_down": "WheelScrollDown",
|
|
||||||
"mouse_left": "WheelScrollLeft",
|
|
||||||
"mouse_right": "WheelScrollRight",
|
|
||||||
}
|
|
||||||
|
|
||||||
func hyprlandScrollToNative(token string) (string, bool) {
|
|
||||||
v, ok := hyprlandScrollNative[strings.ToLower(token)]
|
|
||||||
return v, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func hyprlandScrollToCanonical(token string) (string, bool) {
|
|
||||||
v, ok := hyprlandScrollCanonical[strings.ToLower(token)]
|
|
||||||
return v, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// MangoWC binds the wheel through a dedicated axisbind directive whose key field
|
|
||||||
// is a direction (UP/DOWN/LEFT/RIGHT) rather than a keysym.
|
|
||||||
const mangowcAxisBindPrefix = "axisbind"
|
|
||||||
|
|
||||||
var mangowcScrollDirection = map[string]string{
|
|
||||||
"wheelscrollup": "UP",
|
|
||||||
"wheelscrolldown": "DOWN",
|
|
||||||
"wheelscrollleft": "LEFT",
|
|
||||||
"wheelscrollright": "RIGHT",
|
|
||||||
}
|
|
||||||
|
|
||||||
var mangowcScrollCanonical = map[string]string{
|
|
||||||
"up": "WheelScrollUp",
|
|
||||||
"down": "WheelScrollDown",
|
|
||||||
"left": "WheelScrollLeft",
|
|
||||||
"right": "WheelScrollRight",
|
|
||||||
}
|
|
||||||
|
|
||||||
func mangowcScrollToDirection(token string) (string, bool) {
|
|
||||||
v, ok := mangowcScrollDirection[strings.ToLower(token)]
|
|
||||||
return v, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func mangowcDirectionToScroll(direction string) (string, bool) {
|
|
||||||
v, ok := mangowcScrollCanonical[strings.ToLower(direction)]
|
|
||||||
return v, ok
|
|
||||||
}
|
|
||||||
@@ -32,7 +32,6 @@ type DMSBindsStatus struct {
|
|||||||
type CheatSheet struct {
|
type CheatSheet struct {
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Provider string `json:"provider"`
|
Provider string `json:"provider"`
|
||||||
ModKey string `json:"modKey,omitempty"`
|
|
||||||
Binds map[string][]Keybind `json:"binds"`
|
Binds map[string][]Keybind `json:"binds"`
|
||||||
DMSBindsIncluded bool `json:"dmsBindsIncluded"`
|
DMSBindsIncluded bool `json:"dmsBindsIncluded"`
|
||||||
DMSStatus *DMSBindsStatus `json:"dmsStatus,omitempty"`
|
DMSStatus *DMSBindsStatus `json:"dmsStatus,omitempty"`
|
||||||
|
|||||||
@@ -68,8 +68,6 @@ func GetQtLoggingRules() string {
|
|||||||
level = "info"
|
level = "info"
|
||||||
}
|
}
|
||||||
|
|
||||||
// scene carries QML engine warnings (e.g. QQuickImage "Cannot open" cache
|
|
||||||
// probes); suppressed except at debug level
|
|
||||||
var rules []string
|
var rules []string
|
||||||
switch strings.ToLower(level) {
|
switch strings.ToLower(level) {
|
||||||
case "fatal":
|
case "fatal":
|
||||||
@@ -77,13 +75,13 @@ func GetQtLoggingRules() string {
|
|||||||
case "error":
|
case "error":
|
||||||
rules = []string{"*.debug=false", "*.info=false", "*.warning=false"}
|
rules = []string{"*.debug=false", "*.info=false", "*.warning=false"}
|
||||||
case "warn", "warning":
|
case "warn", "warning":
|
||||||
rules = []string{"*.debug=false", "*.info=false", "scene.warning=false"}
|
rules = []string{"*.debug=false", "*.info=false"}
|
||||||
case "info":
|
case "info":
|
||||||
rules = []string{"*.debug=false", "scene.warning=false"}
|
rules = []string{"*.debug=false"}
|
||||||
case "debug":
|
case "debug":
|
||||||
return ""
|
return ""
|
||||||
default:
|
default:
|
||||||
rules = []string{"*.debug=false", "scene.warning=false"}
|
rules = []string{"*.debug=false"}
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.Join(rules, ";")
|
return strings.Join(rules, ";")
|
||||||
|
|||||||
@@ -47,14 +47,13 @@ type TemplateDef struct {
|
|||||||
ConfigFile string
|
ConfigFile string
|
||||||
Kind TemplateKind
|
Kind TemplateKind
|
||||||
RunUnconditionally bool
|
RunUnconditionally bool
|
||||||
RequiredEnv string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var templateRegistry = []TemplateDef{
|
var templateRegistry = []TemplateDef{
|
||||||
{ID: "gtk", Kind: TemplateKindGTK, RunUnconditionally: true},
|
{ID: "gtk", Kind: TemplateKindGTK, RunUnconditionally: true},
|
||||||
{ID: "niri", Commands: []string{"niri"}, ConfigFile: "niri.toml"},
|
{ID: "niri", Commands: []string{"niri"}, ConfigFile: "niri.toml"},
|
||||||
{ID: "hyprland", Commands: []string{"Hyprland"}, ConfigFile: "hyprland.toml"},
|
{ID: "hyprland", Commands: []string{"Hyprland"}, ConfigFile: "hyprland.toml"},
|
||||||
{ID: "mangowc", Commands: []string{"mango"}, ConfigFile: "mangowc.toml", RequiredEnv: "MANGO_INSTANCE_SIGNATURE"},
|
{ID: "mangowc", Commands: []string{"mango"}, ConfigFile: "mangowc.toml"},
|
||||||
{ID: "qt5ct", Commands: []string{"qt5ct"}, ConfigFile: "qt5ct.toml"},
|
{ID: "qt5ct", Commands: []string{"qt5ct"}, ConfigFile: "qt5ct.toml"},
|
||||||
{ID: "qt6ct", Commands: []string{"qt6ct"}, ConfigFile: "qt6ct.toml"},
|
{ID: "qt6ct", Commands: []string{"qt6ct"}, ConfigFile: "qt6ct.toml"},
|
||||||
{ID: "firefox", Commands: []string{"firefox"}, ConfigFile: "firefox.toml"},
|
{ID: "firefox", Commands: []string{"firefox"}, ConfigFile: "firefox.toml"},
|
||||||
@@ -118,58 +117,10 @@ type ColorsOutput struct {
|
|||||||
} `json:"colors"`
|
} `json:"colors"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SchemePreview struct {
|
|
||||||
Dark string `json:"dark"`
|
|
||||||
Light string `json:"light"`
|
|
||||||
}
|
|
||||||
|
|
||||||
var previewSchemeTypes = []string{
|
|
||||||
"scheme-tonal-spot",
|
|
||||||
"scheme-vibrant",
|
|
||||||
"scheme-content",
|
|
||||||
"scheme-expressive",
|
|
||||||
"scheme-fidelity",
|
|
||||||
"scheme-fruit-salad",
|
|
||||||
"scheme-monochrome",
|
|
||||||
"scheme-neutral",
|
|
||||||
"scheme-rainbow",
|
|
||||||
}
|
|
||||||
|
|
||||||
func PreviewSchemes(sourceColor string, contrast float64) (map[string]SchemePreview, error) {
|
|
||||||
if sourceColor == "" {
|
|
||||||
return nil, fmt.Errorf("source color is required")
|
|
||||||
}
|
|
||||||
|
|
||||||
previews := make(map[string]SchemePreview, len(previewSchemeTypes))
|
|
||||||
for _, schemeType := range previewSchemeTypes {
|
|
||||||
output, err := runMatugenDryRun(&Options{
|
|
||||||
Kind: "hex",
|
|
||||||
Value: sourceColor,
|
|
||||||
MatugenType: schemeType,
|
|
||||||
Contrast: contrast,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("preview %s: %w", schemeType, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
dark := extractMatugenColor(output, "primary", "dark")
|
|
||||||
light := extractMatugenColor(output, "primary", "light")
|
|
||||||
if dark == "" || light == "" {
|
|
||||||
return nil, fmt.Errorf("preview %s: primary colors missing from matugen output", schemeType)
|
|
||||||
}
|
|
||||||
previews[schemeType] = SchemePreview{Dark: dark, Light: light}
|
|
||||||
}
|
|
||||||
return previews, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *Options) ColorsOutput() string {
|
func (o *Options) ColorsOutput() string {
|
||||||
return filepath.Join(o.StateDir, "dms-colors.json")
|
return filepath.Join(o.StateDir, "dms-colors.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Options) colorsStaging() string {
|
|
||||||
return o.ColorsOutput() + ".tmp"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *Options) ShouldSkipTemplate(name string) bool {
|
func (o *Options) ShouldSkipTemplate(name string) bool {
|
||||||
if o.SkipTemplates == "" {
|
if o.SkipTemplates == "" {
|
||||||
return false
|
return false
|
||||||
@@ -182,38 +133,6 @@ func (o *Options) ShouldSkipTemplate(name string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func acquireMatugenLock(stateDir string) (*os.File, error) {
|
|
||||||
f, err := os.OpenFile(filepath.Join(stateDir, "matugen.lock"), os.O_CREATE|os.O_RDWR, 0o644)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to open matugen lock: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
deadline := time.Now().Add(45 * time.Second)
|
|
||||||
for {
|
|
||||||
switch err := syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err {
|
|
||||||
case nil:
|
|
||||||
return f, nil
|
|
||||||
case syscall.EWOULDBLOCK:
|
|
||||||
if time.Now().After(deadline) {
|
|
||||||
f.Close()
|
|
||||||
return nil, fmt.Errorf("timed out waiting for matugen lock")
|
|
||||||
}
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
default:
|
|
||||||
f.Close()
|
|
||||||
return nil, fmt.Errorf("failed to lock matugen: %w", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func releaseMatugenLock(f *os.File) {
|
|
||||||
if f == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_ = syscall.Flock(int(f.Fd()), syscall.LOCK_UN)
|
|
||||||
f.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Run(opts Options) error {
|
func Run(opts Options) error {
|
||||||
if opts.StateDir == "" {
|
if opts.StateDir == "" {
|
||||||
return fmt.Errorf("state-dir is required")
|
return fmt.Errorf("state-dir is required")
|
||||||
@@ -247,12 +166,6 @@ func Run(opts Options) error {
|
|||||||
return fmt.Errorf("failed to create state dir: %w", err)
|
return fmt.Errorf("failed to create state dir: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
lock, err := acquireMatugenLock(opts.StateDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer releaseMatugenLock(lock)
|
|
||||||
|
|
||||||
log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode)
|
log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode)
|
||||||
|
|
||||||
changed, buildErr := buildOnce(&opts)
|
changed, buildErr := buildOnce(&opts)
|
||||||
@@ -274,8 +187,6 @@ func Run(opts Options) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildOnce(opts *Options) (bool, error) {
|
func buildOnce(opts *Options) (bool, error) {
|
||||||
defer os.Remove(opts.colorsStaging())
|
|
||||||
|
|
||||||
cfgFile, err := os.CreateTemp("", "matugen-config-*.toml")
|
cfgFile, err := os.CreateTemp("", "matugen-config-*.toml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to create temp config: %w", err)
|
return false, fmt.Errorf("failed to create temp config: %w", err)
|
||||||
@@ -363,16 +274,10 @@ func buildOnce(opts *Options) (bool, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
newColors, err := os.ReadFile(opts.colorsStaging())
|
newColors, _ := os.ReadFile(opts.ColorsOutput())
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Errorf("matugen did not produce colors output: %w", err)
|
|
||||||
}
|
|
||||||
if bytes.Equal(oldColors, newColors) && len(oldColors) > 0 {
|
if bytes.Equal(oldColors, newColors) && len(oldColors) > 0 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
if err := os.Rename(opts.colorsStaging(), opts.ColorsOutput()); err != nil {
|
|
||||||
return false, fmt.Errorf("failed to commit colors output: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts.ColorsOnly {
|
if opts.ColorsOnly {
|
||||||
return true, nil
|
return true, nil
|
||||||
@@ -440,7 +345,7 @@ func buildMergedConfig(opts *Options, cfgFile *os.File, tmpDir string) error {
|
|||||||
input_path = '%s/matugen/templates/dank.json'
|
input_path = '%s/matugen/templates/dank.json'
|
||||||
output_path = '%s'
|
output_path = '%s'
|
||||||
|
|
||||||
`, opts.ShellDir, opts.colorsStaging())
|
`, opts.ShellDir, opts.ColorsOutput())
|
||||||
|
|
||||||
if opts.ColorsOnly {
|
if opts.ColorsOnly {
|
||||||
return nil
|
return nil
|
||||||
@@ -451,9 +356,6 @@ output_path = '%s'
|
|||||||
if opts.ShouldSkipTemplate(tmpl.ID) {
|
if opts.ShouldSkipTemplate(tmpl.ID) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if !templateSessionActive(tmpl) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
switch tmpl.Kind {
|
switch tmpl.Kind {
|
||||||
case TemplateKindGTK:
|
case TemplateKindGTK:
|
||||||
@@ -587,18 +489,6 @@ func appendTerminalConfig(opts *Options, cfgFile *os.File, tmpDir string, checkC
|
|||||||
cfgFile.WriteString("\n")
|
cfgFile.WriteString("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func templateSessionActive(tmpl TemplateDef) bool {
|
|
||||||
if tmpl.RequiredEnv == "" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
socket := os.Getenv(tmpl.RequiredEnv)
|
|
||||||
if socket == "" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
_, err := os.Stat(socket)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func appExists(checker utils.AppChecker, checkCmd []string, checkFlatpaks []string) bool {
|
func appExists(checker utils.AppChecker, checkCmd []string, checkFlatpaks []string) bool {
|
||||||
// Both nil is treated as "skip check" / unconditionally run
|
// Both nil is treated as "skip check" / unconditionally run
|
||||||
if checkCmd == nil && checkFlatpaks == nil {
|
if checkCmd == nil && checkFlatpaks == nil {
|
||||||
@@ -699,7 +589,6 @@ func redetectMatugenVersion(old matugenFlags) (matugenFlags, bool) {
|
|||||||
|
|
||||||
func detectMatugenVersionLocked() (matugenFlags, error) {
|
func detectMatugenVersionLocked() (matugenFlags, error) {
|
||||||
cmd := exec.Command("matugen", "--version")
|
cmd := exec.Command("matugen", "--version")
|
||||||
cmd.Env = utils.EnvWithUserBinPath(nil)
|
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return matugenFlags{}, fmt.Errorf("failed to get matugen version: %w", err)
|
return matugenFlags{}, fmt.Errorf("failed to get matugen version: %w", err)
|
||||||
@@ -756,7 +645,6 @@ func runMatugen(baseArgs []string) error {
|
|||||||
|
|
||||||
args := buildMatugenArgs(baseArgs, flags)
|
args := buildMatugenArgs(baseArgs, flags)
|
||||||
cmd := exec.Command("matugen", args...)
|
cmd := exec.Command("matugen", args...)
|
||||||
cmd.Env = utils.EnvWithUserBinPath(nil)
|
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
runErr := cmd.Run()
|
runErr := cmd.Run()
|
||||||
@@ -774,7 +662,6 @@ func runMatugen(baseArgs []string) error {
|
|||||||
log.Warnf("Matugen version changed (v4: %v -> %v), retrying", flags.isV4, newFlags.isV4)
|
log.Warnf("Matugen version changed (v4: %v -> %v), retrying", flags.isV4, newFlags.isV4)
|
||||||
args = buildMatugenArgs(baseArgs, newFlags)
|
args = buildMatugenArgs(baseArgs, newFlags)
|
||||||
retryCmd := exec.Command("matugen", args...)
|
retryCmd := exec.Command("matugen", args...)
|
||||||
retryCmd.Env = utils.EnvWithUserBinPath(nil)
|
|
||||||
retryCmd.Stdout = os.Stdout
|
retryCmd.Stdout = os.Stdout
|
||||||
retryCmd.Stderr = os.Stderr
|
retryCmd.Stderr = os.Stderr
|
||||||
return retryCmd.Run()
|
return retryCmd.Run()
|
||||||
@@ -817,7 +704,6 @@ func execDryRun(opts *Options, flags matugenFlags) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command("matugen", baseArgs...)
|
cmd := exec.Command("matugen", baseArgs...)
|
||||||
cmd.Env = utils.EnvWithUserBinPath(nil)
|
|
||||||
var stderr strings.Builder
|
var stderr strings.Builder
|
||||||
cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
@@ -916,26 +802,7 @@ func refreshGTK(mode ColorMode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var colorSchemeEchoHook func(scheme string)
|
|
||||||
|
|
||||||
func SetColorSchemeEchoHook(hook func(scheme string)) {
|
|
||||||
colorSchemeEchoHook = hook
|
|
||||||
}
|
|
||||||
|
|
||||||
func expectColorSchemeEcho(scheme string) {
|
|
||||||
if colorSchemeEchoHook != nil {
|
|
||||||
colorSchemeEchoHook(scheme)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The color-scheme round trip is the only mechanism that makes running GTK4
|
|
||||||
// apps reload ~/.config/gtk-4.0 CSS (a gtk-theme flip does not). But apps
|
|
||||||
// following the portal color-scheme (Chromium) can drop the restore signal
|
|
||||||
// mid-repaint and latch the wrong mode, so this is opt-in.
|
|
||||||
func refreshGTK4() {
|
func refreshGTK4() {
|
||||||
if os.Getenv("DMS_ENABLE_GTK4_REFRESH") != "1" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
output, err := utils.GsettingsGet("org.gnome.desktop.interface", "color-scheme")
|
output, err := utils.GsettingsGet("org.gnome.desktop.interface", "color-scheme")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -949,13 +816,11 @@ func refreshGTK4() {
|
|||||||
toggle = "prefer-dark"
|
toggle = "prefer-dark"
|
||||||
}
|
}
|
||||||
|
|
||||||
expectColorSchemeEcho(toggle)
|
|
||||||
if err := utils.GsettingsSet("org.gnome.desktop.interface", "color-scheme", toggle); err != nil {
|
if err := utils.GsettingsSet("org.gnome.desktop.interface", "color-scheme", toggle); err != nil {
|
||||||
log.Warnf("Failed to toggle color-scheme for GTK4 refresh: %v", err)
|
log.Warnf("Failed to toggle color-scheme for GTK4 refresh: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
time.Sleep(400 * time.Millisecond)
|
time.Sleep(50 * time.Millisecond)
|
||||||
expectColorSchemeEcho(current)
|
|
||||||
if err := utils.GsettingsSet("org.gnome.desktop.interface", "color-scheme", current); err != nil {
|
if err := utils.GsettingsSet("org.gnome.desktop.interface", "color-scheme", current); err != nil {
|
||||||
log.Warnf("Failed to restore color-scheme for GTK4 refresh: %v", err)
|
log.Warnf("Failed to restore color-scheme for GTK4 refresh: %v", err)
|
||||||
}
|
}
|
||||||
@@ -1056,9 +921,6 @@ func closestAdwaitaAccent(primaryHex string) string {
|
|||||||
|
|
||||||
func syncAccentColor(primaryHex string) {
|
func syncAccentColor(primaryHex string) {
|
||||||
accent := closestAdwaitaAccent(primaryHex)
|
accent := closestAdwaitaAccent(primaryHex)
|
||||||
if cur, err := utils.GsettingsGet("org.gnome.desktop.interface", "accent-color"); err == nil && strings.Trim(cur, "'") == accent {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.Infof("Setting GNOME accent color: %s", accent)
|
log.Infof("Setting GNOME accent color: %s", accent)
|
||||||
if err := utils.GsettingsSet("org.gnome.desktop.interface", "accent-color", accent); err != nil {
|
if err := utils.GsettingsSet("org.gnome.desktop.interface", "accent-color", accent); err != nil {
|
||||||
log.Warnf("Failed to set accent-color: %v", err)
|
log.Warnf("Failed to set accent-color: %v", err)
|
||||||
@@ -1089,7 +951,7 @@ func CheckTemplates(checker utils.AppChecker) []TemplateCheck {
|
|||||||
case tmpl.Kind == TemplateKindEmacs:
|
case tmpl.Kind == TemplateKindEmacs:
|
||||||
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks) && utils.EmacsConfigDir() != ""
|
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks) && utils.EmacsConfigDir() != ""
|
||||||
default:
|
default:
|
||||||
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks) && templateSessionActive(tmpl)
|
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks)
|
||||||
}
|
}
|
||||||
|
|
||||||
checks = append(checks, TemplateCheck{ID: tmpl.ID, Detected: detected})
|
checks = append(checks, TemplateCheck{ID: tmpl.ID, Detected: detected})
|
||||||
|
|||||||
@@ -437,53 +437,7 @@ func TestBuildMergedConfigColorsOnly(t *testing.T) {
|
|||||||
|
|
||||||
content := string(output)
|
content := string(output)
|
||||||
assert.Contains(t, content, "[templates.dank]")
|
assert.Contains(t, content, "[templates.dank]")
|
||||||
assert.Contains(t, content, "output_path = '"+opts.colorsStaging()+"'")
|
assert.Contains(t, content, "output_path = '"+filepath.Join(opts.StateDir, "dms-colors.json")+"'")
|
||||||
assert.NotContains(t, content, "[templates.gtk]")
|
assert.NotContains(t, content, "[templates.gtk]")
|
||||||
assert.False(t, strings.Contains(content, "output_path = 'CONFIG_DIR/"), "colors-only config should not emit app template outputs")
|
assert.False(t, strings.Contains(content, "output_path = 'CONFIG_DIR/"), "colors-only config should not emit app template outputs")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildMergedConfigSkipsMangowcWithoutActiveSession(t *testing.T) {
|
|
||||||
t.Setenv("MANGO_INSTANCE_SIGNATURE", "")
|
|
||||||
|
|
||||||
tempDir := t.TempDir()
|
|
||||||
shellDir := filepath.Join(tempDir, "shell")
|
|
||||||
configsDir := filepath.Join(shellDir, "matugen", "configs")
|
|
||||||
if err := os.MkdirAll(configsDir, 0o755); err != nil {
|
|
||||||
t.Fatalf("failed to create configs dir: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.WriteFile(filepath.Join(configsDir, "base.toml"), []byte("[config]\n"), 0o644); err != nil {
|
|
||||||
t.Fatalf("failed to write base config: %v", err)
|
|
||||||
}
|
|
||||||
mangowcConfig := "[templates.dmsmango]\ninput_path = 'in'\noutput_path = 'out'\n"
|
|
||||||
if err := os.WriteFile(filepath.Join(configsDir, "mangowc.toml"), []byte(mangowcConfig), 0o644); err != nil {
|
|
||||||
t.Fatalf("failed to write mangowc config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cfgFile, err := os.CreateTemp(tempDir, "merged-*.toml")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("failed to create temp config: %v", err)
|
|
||||||
}
|
|
||||||
defer os.Remove(cfgFile.Name())
|
|
||||||
defer cfgFile.Close()
|
|
||||||
|
|
||||||
opts := &Options{
|
|
||||||
ShellDir: shellDir,
|
|
||||||
ConfigDir: filepath.Join(tempDir, "config"),
|
|
||||||
StateDir: filepath.Join(tempDir, "state"),
|
|
||||||
SkipTemplates: "gtk,niri,hyprland,qt5ct,qt6ct,firefox,pywalfox,zenbrowser,vesktop,vencord,equibop,ghostty,kitty,foot,alacritty,wezterm,nvim,dgop,kcolorscheme,vscode,emacs,zed",
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := buildMergedConfig(opts, cfgFile, filepath.Join(tempDir, "templates")); err != nil {
|
|
||||||
t.Fatalf("buildMergedConfig failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := cfgFile.Close(); err != nil {
|
|
||||||
t.Fatalf("failed to close merged config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
output, err := os.ReadFile(cfgFile.Name())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("failed to read merged config: %v", err)
|
|
||||||
}
|
|
||||||
assert.NotContains(t, string(output), "[templates.dmsmango]")
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_brightness
|
package mocks_brightness
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/godbus/dbus/v5"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockDBusConn creates a new instance of MockDBusConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockDBusConn(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockDBusConn {
|
|
||||||
mock := &MockDBusConn{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockDBusConn is an autogenerated mock type for the DBusConn type
|
// MockDBusConn is an autogenerated mock type for the DBusConn type
|
||||||
type MockDBusConn struct {
|
type MockDBusConn struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,20 +20,21 @@ func (_m *MockDBusConn) EXPECT() *MockDBusConn_Expecter {
|
|||||||
return &MockDBusConn_Expecter{mock: &_m.Mock}
|
return &MockDBusConn_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close provides a mock function for the type MockDBusConn
|
// Close provides a mock function with no fields
|
||||||
func (_mock *MockDBusConn) Close() error {
|
func (_m *MockDBusConn) Close() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Close")
|
panic("no return value specified for Close")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +55,8 @@ func (_c *MockDBusConn_Close_Call) Run(run func()) *MockDBusConn_Close_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockDBusConn_Close_Call) Return(err error) *MockDBusConn_Close_Call {
|
func (_c *MockDBusConn_Close_Call) Return(_a0 error) *MockDBusConn_Close_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,22 +65,23 @@ func (_c *MockDBusConn_Close_Call) RunAndReturn(run func() error) *MockDBusConn_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Object provides a mock function for the type MockDBusConn
|
// Object provides a mock function with given fields: dest, path
|
||||||
func (_mock *MockDBusConn) Object(dest string, path dbus.ObjectPath) dbus.BusObject {
|
func (_m *MockDBusConn) Object(dest string, path dbus.ObjectPath) dbus.BusObject {
|
||||||
ret := _mock.Called(dest, path)
|
ret := _m.Called(dest, path)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Object")
|
panic("no return value specified for Object")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 dbus.BusObject
|
var r0 dbus.BusObject
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, dbus.ObjectPath) dbus.BusObject); ok {
|
if rf, ok := ret.Get(0).(func(string, dbus.ObjectPath) dbus.BusObject); ok {
|
||||||
r0 = returnFunc(dest, path)
|
r0 = rf(dest, path)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(dbus.BusObject)
|
r0 = ret.Get(0).(dbus.BusObject)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,28 +99,32 @@ func (_e *MockDBusConn_Expecter) Object(dest any, path any) *MockDBusConn_Object
|
|||||||
|
|
||||||
func (_c *MockDBusConn_Object_Call) Run(run func(dest string, path dbus.ObjectPath)) *MockDBusConn_Object_Call {
|
func (_c *MockDBusConn_Object_Call) Run(run func(dest string, path dbus.ObjectPath)) *MockDBusConn_Object_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(dbus.ObjectPath))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 dbus.ObjectPath
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(dbus.ObjectPath)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockDBusConn_Object_Call) Return(busObject dbus.BusObject) *MockDBusConn_Object_Call {
|
func (_c *MockDBusConn_Object_Call) Return(_a0 dbus.BusObject) *MockDBusConn_Object_Call {
|
||||||
_c.Call.Return(busObject)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockDBusConn_Object_Call) RunAndReturn(run func(dest string, path dbus.ObjectPath) dbus.BusObject) *MockDBusConn_Object_Call {
|
func (_c *MockDBusConn_Object_Call) RunAndReturn(run func(string, dbus.ObjectPath) dbus.BusObject) *MockDBusConn_Object_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockDBusConn creates a new instance of MockDBusConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockDBusConn(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
},
|
||||||
|
) *MockDBusConn {
|
||||||
|
mock := &MockDBusConn{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_cups_pkhelper
|
package mocks_cups_pkhelper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups"
|
cups "github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockPkHelper creates a new instance of MockPkHelper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockPkHelper(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockPkHelper {
|
|
||||||
mock := &MockPkHelper{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockPkHelper is an autogenerated mock type for the PkHelper type
|
// MockPkHelper is an autogenerated mock type for the PkHelper type
|
||||||
type MockPkHelper struct {
|
type MockPkHelper struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,20 +20,21 @@ func (_m *MockPkHelper) EXPECT() *MockPkHelper_Expecter {
|
|||||||
return &MockPkHelper_Expecter{mock: &_m.Mock}
|
return &MockPkHelper_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClassAddPrinter provides a mock function for the type MockPkHelper
|
// ClassAddPrinter provides a mock function with given fields: className, printerName
|
||||||
func (_mock *MockPkHelper) ClassAddPrinter(className string, printerName string) error {
|
func (_m *MockPkHelper) ClassAddPrinter(className string, printerName string) error {
|
||||||
ret := _mock.Called(className, printerName)
|
ret := _m.Called(className, printerName)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ClassAddPrinter")
|
panic("no return value specified for ClassAddPrinter")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||||
r0 = returnFunc(className, printerName)
|
r0 = rf(className, printerName)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,52 +46,42 @@ type MockPkHelper_ClassAddPrinter_Call struct {
|
|||||||
// ClassAddPrinter is a helper method to define mock.On call
|
// ClassAddPrinter is a helper method to define mock.On call
|
||||||
// - className string
|
// - className string
|
||||||
// - printerName string
|
// - printerName string
|
||||||
func (_e *MockPkHelper_Expecter) ClassAddPrinter(className any, printerName any) *MockPkHelper_ClassAddPrinter_Call {
|
func (_e *MockPkHelper_Expecter) ClassAddPrinter(className interface{}, printerName interface{}) *MockPkHelper_ClassAddPrinter_Call {
|
||||||
return &MockPkHelper_ClassAddPrinter_Call{Call: _e.mock.On("ClassAddPrinter", className, printerName)}
|
return &MockPkHelper_ClassAddPrinter_Call{Call: _e.mock.On("ClassAddPrinter", className, printerName)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassAddPrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassAddPrinter_Call {
|
func (_c *MockPkHelper_ClassAddPrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassAddPrinter_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassAddPrinter_Call) Return(err error) *MockPkHelper_ClassAddPrinter_Call {
|
func (_c *MockPkHelper_ClassAddPrinter_Call) Return(_a0 error) *MockPkHelper_ClassAddPrinter_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassAddPrinter_Call) RunAndReturn(run func(className string, printerName string) error) *MockPkHelper_ClassAddPrinter_Call {
|
func (_c *MockPkHelper_ClassAddPrinter_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_ClassAddPrinter_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClassDelete provides a mock function for the type MockPkHelper
|
// ClassDelete provides a mock function with given fields: className
|
||||||
func (_mock *MockPkHelper) ClassDelete(className string) error {
|
func (_m *MockPkHelper) ClassDelete(className string) error {
|
||||||
ret := _mock.Called(className)
|
ret := _m.Called(className)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ClassDelete")
|
panic("no return value specified for ClassDelete")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
|
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||||
r0 = returnFunc(className)
|
r0 = rf(className)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,47 +92,42 @@ type MockPkHelper_ClassDelete_Call struct {
|
|||||||
|
|
||||||
// ClassDelete is a helper method to define mock.On call
|
// ClassDelete is a helper method to define mock.On call
|
||||||
// - className string
|
// - className string
|
||||||
func (_e *MockPkHelper_Expecter) ClassDelete(className any) *MockPkHelper_ClassDelete_Call {
|
func (_e *MockPkHelper_Expecter) ClassDelete(className interface{}) *MockPkHelper_ClassDelete_Call {
|
||||||
return &MockPkHelper_ClassDelete_Call{Call: _e.mock.On("ClassDelete", className)}
|
return &MockPkHelper_ClassDelete_Call{Call: _e.mock.On("ClassDelete", className)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDelete_Call) Run(run func(className string)) *MockPkHelper_ClassDelete_Call {
|
func (_c *MockPkHelper_ClassDelete_Call) Run(run func(className string)) *MockPkHelper_ClassDelete_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDelete_Call) Return(err error) *MockPkHelper_ClassDelete_Call {
|
func (_c *MockPkHelper_ClassDelete_Call) Return(_a0 error) *MockPkHelper_ClassDelete_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDelete_Call) RunAndReturn(run func(className string) error) *MockPkHelper_ClassDelete_Call {
|
func (_c *MockPkHelper_ClassDelete_Call) RunAndReturn(run func(string) error) *MockPkHelper_ClassDelete_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClassDeletePrinter provides a mock function for the type MockPkHelper
|
// ClassDeletePrinter provides a mock function with given fields: className, printerName
|
||||||
func (_mock *MockPkHelper) ClassDeletePrinter(className string, printerName string) error {
|
func (_m *MockPkHelper) ClassDeletePrinter(className string, printerName string) error {
|
||||||
ret := _mock.Called(className, printerName)
|
ret := _m.Called(className, printerName)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ClassDeletePrinter")
|
panic("no return value specified for ClassDeletePrinter")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||||
r0 = returnFunc(className, printerName)
|
r0 = rf(className, printerName)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,41 +139,30 @@ type MockPkHelper_ClassDeletePrinter_Call struct {
|
|||||||
// ClassDeletePrinter is a helper method to define mock.On call
|
// ClassDeletePrinter is a helper method to define mock.On call
|
||||||
// - className string
|
// - className string
|
||||||
// - printerName string
|
// - printerName string
|
||||||
func (_e *MockPkHelper_Expecter) ClassDeletePrinter(className any, printerName any) *MockPkHelper_ClassDeletePrinter_Call {
|
func (_e *MockPkHelper_Expecter) ClassDeletePrinter(className interface{}, printerName interface{}) *MockPkHelper_ClassDeletePrinter_Call {
|
||||||
return &MockPkHelper_ClassDeletePrinter_Call{Call: _e.mock.On("ClassDeletePrinter", className, printerName)}
|
return &MockPkHelper_ClassDeletePrinter_Call{Call: _e.mock.On("ClassDeletePrinter", className, printerName)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDeletePrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassDeletePrinter_Call {
|
func (_c *MockPkHelper_ClassDeletePrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassDeletePrinter_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDeletePrinter_Call) Return(err error) *MockPkHelper_ClassDeletePrinter_Call {
|
func (_c *MockPkHelper_ClassDeletePrinter_Call) Return(_a0 error) *MockPkHelper_ClassDeletePrinter_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_ClassDeletePrinter_Call) RunAndReturn(run func(className string, printerName string) error) *MockPkHelper_ClassDeletePrinter_Call {
|
func (_c *MockPkHelper_ClassDeletePrinter_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_ClassDeletePrinter_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// DevicesGet provides a mock function for the type MockPkHelper
|
// DevicesGet provides a mock function with given fields: timeout, limit, includeSchemes, excludeSchemes
|
||||||
func (_mock *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error) {
|
func (_m *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error) {
|
||||||
ret := _mock.Called(timeout, limit, includeSchemes, excludeSchemes)
|
ret := _m.Called(timeout, limit, includeSchemes, excludeSchemes)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for DevicesGet")
|
panic("no return value specified for DevicesGet")
|
||||||
@@ -211,21 +170,23 @@ func (_mock *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []s
|
|||||||
|
|
||||||
var r0 []cups.Device
|
var r0 []cups.Device
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(int, int, []string, []string) ([]cups.Device, error)); ok {
|
if rf, ok := ret.Get(0).(func(int, int, []string, []string) ([]cups.Device, error)); ok {
|
||||||
return returnFunc(timeout, limit, includeSchemes, excludeSchemes)
|
return rf(timeout, limit, includeSchemes, excludeSchemes)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(int, int, []string, []string) []cups.Device); ok {
|
if rf, ok := ret.Get(0).(func(int, int, []string, []string) []cups.Device); ok {
|
||||||
r0 = returnFunc(timeout, limit, includeSchemes, excludeSchemes)
|
r0 = rf(timeout, limit, includeSchemes, excludeSchemes)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]cups.Device)
|
r0 = ret.Get(0).([]cups.Device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(int, int, []string, []string) error); ok {
|
|
||||||
r1 = returnFunc(timeout, limit, includeSchemes, excludeSchemes)
|
if rf, ok := ret.Get(1).(func(int, int, []string, []string) error); ok {
|
||||||
|
r1 = rf(timeout, limit, includeSchemes, excludeSchemes)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,62 +200,42 @@ type MockPkHelper_DevicesGet_Call struct {
|
|||||||
// - limit int
|
// - limit int
|
||||||
// - includeSchemes []string
|
// - includeSchemes []string
|
||||||
// - excludeSchemes []string
|
// - excludeSchemes []string
|
||||||
func (_e *MockPkHelper_Expecter) DevicesGet(timeout any, limit any, includeSchemes any, excludeSchemes any) *MockPkHelper_DevicesGet_Call {
|
func (_e *MockPkHelper_Expecter) DevicesGet(timeout interface{}, limit interface{}, includeSchemes interface{}, excludeSchemes interface{}) *MockPkHelper_DevicesGet_Call {
|
||||||
return &MockPkHelper_DevicesGet_Call{Call: _e.mock.On("DevicesGet", timeout, limit, includeSchemes, excludeSchemes)}
|
return &MockPkHelper_DevicesGet_Call{Call: _e.mock.On("DevicesGet", timeout, limit, includeSchemes, excludeSchemes)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_DevicesGet_Call) Run(run func(timeout int, limit int, includeSchemes []string, excludeSchemes []string)) *MockPkHelper_DevicesGet_Call {
|
func (_c *MockPkHelper_DevicesGet_Call) Run(run func(timeout int, limit int, includeSchemes []string, excludeSchemes []string)) *MockPkHelper_DevicesGet_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 int
|
run(args[0].(int), args[1].(int), args[2].([]string), args[3].([]string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(int)
|
|
||||||
}
|
|
||||||
var arg1 int
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(int)
|
|
||||||
}
|
|
||||||
var arg2 []string
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].([]string)
|
|
||||||
}
|
|
||||||
var arg3 []string
|
|
||||||
if args[3] != nil {
|
|
||||||
arg3 = args[3].([]string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
arg3,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_DevicesGet_Call) Return(devices []cups.Device, err error) *MockPkHelper_DevicesGet_Call {
|
func (_c *MockPkHelper_DevicesGet_Call) Return(_a0 []cups.Device, _a1 error) *MockPkHelper_DevicesGet_Call {
|
||||||
_c.Call.Return(devices, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_DevicesGet_Call) RunAndReturn(run func(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error)) *MockPkHelper_DevicesGet_Call {
|
func (_c *MockPkHelper_DevicesGet_Call) RunAndReturn(run func(int, int, []string, []string) ([]cups.Device, error)) *MockPkHelper_DevicesGet_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// JobCancelPurge provides a mock function for the type MockPkHelper
|
// JobCancelPurge provides a mock function with given fields: jobID, purge
|
||||||
func (_mock *MockPkHelper) JobCancelPurge(jobID int, purge bool) error {
|
func (_m *MockPkHelper) JobCancelPurge(jobID int, purge bool) error {
|
||||||
ret := _mock.Called(jobID, purge)
|
ret := _m.Called(jobID, purge)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for JobCancelPurge")
|
panic("no return value specified for JobCancelPurge")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(int, bool) error); ok {
|
if rf, ok := ret.Get(0).(func(int, bool) error); ok {
|
||||||
r0 = returnFunc(jobID, purge)
|
r0 = rf(jobID, purge)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,52 +247,42 @@ type MockPkHelper_JobCancelPurge_Call struct {
|
|||||||
// JobCancelPurge is a helper method to define mock.On call
|
// JobCancelPurge is a helper method to define mock.On call
|
||||||
// - jobID int
|
// - jobID int
|
||||||
// - purge bool
|
// - purge bool
|
||||||
func (_e *MockPkHelper_Expecter) JobCancelPurge(jobID any, purge any) *MockPkHelper_JobCancelPurge_Call {
|
func (_e *MockPkHelper_Expecter) JobCancelPurge(jobID interface{}, purge interface{}) *MockPkHelper_JobCancelPurge_Call {
|
||||||
return &MockPkHelper_JobCancelPurge_Call{Call: _e.mock.On("JobCancelPurge", jobID, purge)}
|
return &MockPkHelper_JobCancelPurge_Call{Call: _e.mock.On("JobCancelPurge", jobID, purge)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobCancelPurge_Call) Run(run func(jobID int, purge bool)) *MockPkHelper_JobCancelPurge_Call {
|
func (_c *MockPkHelper_JobCancelPurge_Call) Run(run func(jobID int, purge bool)) *MockPkHelper_JobCancelPurge_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 int
|
run(args[0].(int), args[1].(bool))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(int)
|
|
||||||
}
|
|
||||||
var arg1 bool
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(bool)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobCancelPurge_Call) Return(err error) *MockPkHelper_JobCancelPurge_Call {
|
func (_c *MockPkHelper_JobCancelPurge_Call) Return(_a0 error) *MockPkHelper_JobCancelPurge_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobCancelPurge_Call) RunAndReturn(run func(jobID int, purge bool) error) *MockPkHelper_JobCancelPurge_Call {
|
func (_c *MockPkHelper_JobCancelPurge_Call) RunAndReturn(run func(int, bool) error) *MockPkHelper_JobCancelPurge_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// JobRestart provides a mock function for the type MockPkHelper
|
// JobRestart provides a mock function with given fields: jobID
|
||||||
func (_mock *MockPkHelper) JobRestart(jobID int) error {
|
func (_m *MockPkHelper) JobRestart(jobID int) error {
|
||||||
ret := _mock.Called(jobID)
|
ret := _m.Called(jobID)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for JobRestart")
|
panic("no return value specified for JobRestart")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(int) error); ok {
|
if rf, ok := ret.Get(0).(func(int) error); ok {
|
||||||
r0 = returnFunc(jobID)
|
r0 = rf(jobID)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,47 +293,42 @@ type MockPkHelper_JobRestart_Call struct {
|
|||||||
|
|
||||||
// JobRestart is a helper method to define mock.On call
|
// JobRestart is a helper method to define mock.On call
|
||||||
// - jobID int
|
// - jobID int
|
||||||
func (_e *MockPkHelper_Expecter) JobRestart(jobID any) *MockPkHelper_JobRestart_Call {
|
func (_e *MockPkHelper_Expecter) JobRestart(jobID interface{}) *MockPkHelper_JobRestart_Call {
|
||||||
return &MockPkHelper_JobRestart_Call{Call: _e.mock.On("JobRestart", jobID)}
|
return &MockPkHelper_JobRestart_Call{Call: _e.mock.On("JobRestart", jobID)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobRestart_Call) Run(run func(jobID int)) *MockPkHelper_JobRestart_Call {
|
func (_c *MockPkHelper_JobRestart_Call) Run(run func(jobID int)) *MockPkHelper_JobRestart_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 int
|
run(args[0].(int))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(int)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobRestart_Call) Return(err error) *MockPkHelper_JobRestart_Call {
|
func (_c *MockPkHelper_JobRestart_Call) Return(_a0 error) *MockPkHelper_JobRestart_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobRestart_Call) RunAndReturn(run func(jobID int) error) *MockPkHelper_JobRestart_Call {
|
func (_c *MockPkHelper_JobRestart_Call) RunAndReturn(run func(int) error) *MockPkHelper_JobRestart_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// JobSetHoldUntil provides a mock function for the type MockPkHelper
|
// JobSetHoldUntil provides a mock function with given fields: jobID, holdUntil
|
||||||
func (_mock *MockPkHelper) JobSetHoldUntil(jobID int, holdUntil string) error {
|
func (_m *MockPkHelper) JobSetHoldUntil(jobID int, holdUntil string) error {
|
||||||
ret := _mock.Called(jobID, holdUntil)
|
ret := _m.Called(jobID, holdUntil)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for JobSetHoldUntil")
|
panic("no return value specified for JobSetHoldUntil")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(int, string) error); ok {
|
if rf, ok := ret.Get(0).(func(int, string) error); ok {
|
||||||
r0 = returnFunc(jobID, holdUntil)
|
r0 = rf(jobID, holdUntil)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,52 +340,42 @@ type MockPkHelper_JobSetHoldUntil_Call struct {
|
|||||||
// JobSetHoldUntil is a helper method to define mock.On call
|
// JobSetHoldUntil is a helper method to define mock.On call
|
||||||
// - jobID int
|
// - jobID int
|
||||||
// - holdUntil string
|
// - holdUntil string
|
||||||
func (_e *MockPkHelper_Expecter) JobSetHoldUntil(jobID any, holdUntil any) *MockPkHelper_JobSetHoldUntil_Call {
|
func (_e *MockPkHelper_Expecter) JobSetHoldUntil(jobID interface{}, holdUntil interface{}) *MockPkHelper_JobSetHoldUntil_Call {
|
||||||
return &MockPkHelper_JobSetHoldUntil_Call{Call: _e.mock.On("JobSetHoldUntil", jobID, holdUntil)}
|
return &MockPkHelper_JobSetHoldUntil_Call{Call: _e.mock.On("JobSetHoldUntil", jobID, holdUntil)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobSetHoldUntil_Call) Run(run func(jobID int, holdUntil string)) *MockPkHelper_JobSetHoldUntil_Call {
|
func (_c *MockPkHelper_JobSetHoldUntil_Call) Run(run func(jobID int, holdUntil string)) *MockPkHelper_JobSetHoldUntil_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 int
|
run(args[0].(int), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(int)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobSetHoldUntil_Call) Return(err error) *MockPkHelper_JobSetHoldUntil_Call {
|
func (_c *MockPkHelper_JobSetHoldUntil_Call) Return(_a0 error) *MockPkHelper_JobSetHoldUntil_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_JobSetHoldUntil_Call) RunAndReturn(run func(jobID int, holdUntil string) error) *MockPkHelper_JobSetHoldUntil_Call {
|
func (_c *MockPkHelper_JobSetHoldUntil_Call) RunAndReturn(run func(int, string) error) *MockPkHelper_JobSetHoldUntil_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterAdd provides a mock function for the type MockPkHelper
|
// PrinterAdd provides a mock function with given fields: name, uri, ppd, info, location
|
||||||
func (_mock *MockPkHelper) PrinterAdd(name string, uri string, ppd string, info string, location string) error {
|
func (_m *MockPkHelper) PrinterAdd(name string, uri string, ppd string, info string, location string) error {
|
||||||
ret := _mock.Called(name, uri, ppd, info, location)
|
ret := _m.Called(name, uri, ppd, info, location)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterAdd")
|
panic("no return value specified for PrinterAdd")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string, string, string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string, string, string, string) error); ok {
|
||||||
r0 = returnFunc(name, uri, ppd, info, location)
|
r0 = rf(name, uri, ppd, info, location)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,67 +390,42 @@ type MockPkHelper_PrinterAdd_Call struct {
|
|||||||
// - ppd string
|
// - ppd string
|
||||||
// - info string
|
// - info string
|
||||||
// - location string
|
// - location string
|
||||||
func (_e *MockPkHelper_Expecter) PrinterAdd(name any, uri any, ppd any, info any, location any) *MockPkHelper_PrinterAdd_Call {
|
func (_e *MockPkHelper_Expecter) PrinterAdd(name interface{}, uri interface{}, ppd interface{}, info interface{}, location interface{}) *MockPkHelper_PrinterAdd_Call {
|
||||||
return &MockPkHelper_PrinterAdd_Call{Call: _e.mock.On("PrinterAdd", name, uri, ppd, info, location)}
|
return &MockPkHelper_PrinterAdd_Call{Call: _e.mock.On("PrinterAdd", name, uri, ppd, info, location)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterAdd_Call) Run(run func(name string, uri string, ppd string, info string, location string)) *MockPkHelper_PrinterAdd_Call {
|
func (_c *MockPkHelper_PrinterAdd_Call) Run(run func(name string, uri string, ppd string, info string, location string)) *MockPkHelper_PrinterAdd_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string), args[2].(string), args[3].(string), args[4].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
var arg2 string
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].(string)
|
|
||||||
}
|
|
||||||
var arg3 string
|
|
||||||
if args[3] != nil {
|
|
||||||
arg3 = args[3].(string)
|
|
||||||
}
|
|
||||||
var arg4 string
|
|
||||||
if args[4] != nil {
|
|
||||||
arg4 = args[4].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
arg3,
|
|
||||||
arg4,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterAdd_Call) Return(err error) *MockPkHelper_PrinterAdd_Call {
|
func (_c *MockPkHelper_PrinterAdd_Call) Return(_a0 error) *MockPkHelper_PrinterAdd_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterAdd_Call) RunAndReturn(run func(name string, uri string, ppd string, info string, location string) error) *MockPkHelper_PrinterAdd_Call {
|
func (_c *MockPkHelper_PrinterAdd_Call) RunAndReturn(run func(string, string, string, string, string) error) *MockPkHelper_PrinterAdd_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterDelete provides a mock function for the type MockPkHelper
|
// PrinterDelete provides a mock function with given fields: name
|
||||||
func (_mock *MockPkHelper) PrinterDelete(name string) error {
|
func (_m *MockPkHelper) PrinterDelete(name string) error {
|
||||||
ret := _mock.Called(name)
|
ret := _m.Called(name)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterDelete")
|
panic("no return value specified for PrinterDelete")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
|
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||||
r0 = returnFunc(name)
|
r0 = rf(name)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,47 +436,42 @@ type MockPkHelper_PrinterDelete_Call struct {
|
|||||||
|
|
||||||
// PrinterDelete is a helper method to define mock.On call
|
// PrinterDelete is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
func (_e *MockPkHelper_Expecter) PrinterDelete(name any) *MockPkHelper_PrinterDelete_Call {
|
func (_e *MockPkHelper_Expecter) PrinterDelete(name interface{}) *MockPkHelper_PrinterDelete_Call {
|
||||||
return &MockPkHelper_PrinterDelete_Call{Call: _e.mock.On("PrinterDelete", name)}
|
return &MockPkHelper_PrinterDelete_Call{Call: _e.mock.On("PrinterDelete", name)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterDelete_Call) Run(run func(name string)) *MockPkHelper_PrinterDelete_Call {
|
func (_c *MockPkHelper_PrinterDelete_Call) Run(run func(name string)) *MockPkHelper_PrinterDelete_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterDelete_Call) Return(err error) *MockPkHelper_PrinterDelete_Call {
|
func (_c *MockPkHelper_PrinterDelete_Call) Return(_a0 error) *MockPkHelper_PrinterDelete_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterDelete_Call) RunAndReturn(run func(name string) error) *MockPkHelper_PrinterDelete_Call {
|
func (_c *MockPkHelper_PrinterDelete_Call) RunAndReturn(run func(string) error) *MockPkHelper_PrinterDelete_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterSetAcceptJobs provides a mock function for the type MockPkHelper
|
// PrinterSetAcceptJobs provides a mock function with given fields: name, enabled, reason
|
||||||
func (_mock *MockPkHelper) PrinterSetAcceptJobs(name string, enabled bool, reason string) error {
|
func (_m *MockPkHelper) PrinterSetAcceptJobs(name string, enabled bool, reason string) error {
|
||||||
ret := _mock.Called(name, enabled, reason)
|
ret := _m.Called(name, enabled, reason)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterSetAcceptJobs")
|
panic("no return value specified for PrinterSetAcceptJobs")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, bool, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, bool, string) error); ok {
|
||||||
r0 = returnFunc(name, enabled, reason)
|
r0 = rf(name, enabled, reason)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -598,57 +484,42 @@ type MockPkHelper_PrinterSetAcceptJobs_Call struct {
|
|||||||
// - name string
|
// - name string
|
||||||
// - enabled bool
|
// - enabled bool
|
||||||
// - reason string
|
// - reason string
|
||||||
func (_e *MockPkHelper_Expecter) PrinterSetAcceptJobs(name any, enabled any, reason any) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
func (_e *MockPkHelper_Expecter) PrinterSetAcceptJobs(name interface{}, enabled interface{}, reason interface{}) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
||||||
return &MockPkHelper_PrinterSetAcceptJobs_Call{Call: _e.mock.On("PrinterSetAcceptJobs", name, enabled, reason)}
|
return &MockPkHelper_PrinterSetAcceptJobs_Call{Call: _e.mock.On("PrinterSetAcceptJobs", name, enabled, reason)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Run(run func(name string, enabled bool, reason string)) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Run(run func(name string, enabled bool, reason string)) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(bool), args[2].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 bool
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(bool)
|
|
||||||
}
|
|
||||||
var arg2 string
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Return(err error) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Return(_a0 error) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) RunAndReturn(run func(name string, enabled bool, reason string) error) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) RunAndReturn(run func(string, bool, string) error) *MockPkHelper_PrinterSetAcceptJobs_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterSetEnabled provides a mock function for the type MockPkHelper
|
// PrinterSetEnabled provides a mock function with given fields: name, enabled
|
||||||
func (_mock *MockPkHelper) PrinterSetEnabled(name string, enabled bool) error {
|
func (_m *MockPkHelper) PrinterSetEnabled(name string, enabled bool) error {
|
||||||
ret := _mock.Called(name, enabled)
|
ret := _m.Called(name, enabled)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterSetEnabled")
|
panic("no return value specified for PrinterSetEnabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, bool) error); ok {
|
if rf, ok := ret.Get(0).(func(string, bool) error); ok {
|
||||||
r0 = returnFunc(name, enabled)
|
r0 = rf(name, enabled)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -660,52 +531,42 @@ type MockPkHelper_PrinterSetEnabled_Call struct {
|
|||||||
// PrinterSetEnabled is a helper method to define mock.On call
|
// PrinterSetEnabled is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
// - enabled bool
|
// - enabled bool
|
||||||
func (_e *MockPkHelper_Expecter) PrinterSetEnabled(name any, enabled any) *MockPkHelper_PrinterSetEnabled_Call {
|
func (_e *MockPkHelper_Expecter) PrinterSetEnabled(name interface{}, enabled interface{}) *MockPkHelper_PrinterSetEnabled_Call {
|
||||||
return &MockPkHelper_PrinterSetEnabled_Call{Call: _e.mock.On("PrinterSetEnabled", name, enabled)}
|
return &MockPkHelper_PrinterSetEnabled_Call{Call: _e.mock.On("PrinterSetEnabled", name, enabled)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetEnabled_Call) Run(run func(name string, enabled bool)) *MockPkHelper_PrinterSetEnabled_Call {
|
func (_c *MockPkHelper_PrinterSetEnabled_Call) Run(run func(name string, enabled bool)) *MockPkHelper_PrinterSetEnabled_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(bool))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 bool
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(bool)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetEnabled_Call) Return(err error) *MockPkHelper_PrinterSetEnabled_Call {
|
func (_c *MockPkHelper_PrinterSetEnabled_Call) Return(_a0 error) *MockPkHelper_PrinterSetEnabled_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetEnabled_Call) RunAndReturn(run func(name string, enabled bool) error) *MockPkHelper_PrinterSetEnabled_Call {
|
func (_c *MockPkHelper_PrinterSetEnabled_Call) RunAndReturn(run func(string, bool) error) *MockPkHelper_PrinterSetEnabled_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterSetInfo provides a mock function for the type MockPkHelper
|
// PrinterSetInfo provides a mock function with given fields: name, info
|
||||||
func (_mock *MockPkHelper) PrinterSetInfo(name string, info string) error {
|
func (_m *MockPkHelper) PrinterSetInfo(name string, info string) error {
|
||||||
ret := _mock.Called(name, info)
|
ret := _m.Called(name, info)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterSetInfo")
|
panic("no return value specified for PrinterSetInfo")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||||
r0 = returnFunc(name, info)
|
r0 = rf(name, info)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -717,52 +578,42 @@ type MockPkHelper_PrinterSetInfo_Call struct {
|
|||||||
// PrinterSetInfo is a helper method to define mock.On call
|
// PrinterSetInfo is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
// - info string
|
// - info string
|
||||||
func (_e *MockPkHelper_Expecter) PrinterSetInfo(name any, info any) *MockPkHelper_PrinterSetInfo_Call {
|
func (_e *MockPkHelper_Expecter) PrinterSetInfo(name interface{}, info interface{}) *MockPkHelper_PrinterSetInfo_Call {
|
||||||
return &MockPkHelper_PrinterSetInfo_Call{Call: _e.mock.On("PrinterSetInfo", name, info)}
|
return &MockPkHelper_PrinterSetInfo_Call{Call: _e.mock.On("PrinterSetInfo", name, info)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetInfo_Call) Run(run func(name string, info string)) *MockPkHelper_PrinterSetInfo_Call {
|
func (_c *MockPkHelper_PrinterSetInfo_Call) Run(run func(name string, info string)) *MockPkHelper_PrinterSetInfo_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetInfo_Call) Return(err error) *MockPkHelper_PrinterSetInfo_Call {
|
func (_c *MockPkHelper_PrinterSetInfo_Call) Return(_a0 error) *MockPkHelper_PrinterSetInfo_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetInfo_Call) RunAndReturn(run func(name string, info string) error) *MockPkHelper_PrinterSetInfo_Call {
|
func (_c *MockPkHelper_PrinterSetInfo_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_PrinterSetInfo_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterSetLocation provides a mock function for the type MockPkHelper
|
// PrinterSetLocation provides a mock function with given fields: name, location
|
||||||
func (_mock *MockPkHelper) PrinterSetLocation(name string, location string) error {
|
func (_m *MockPkHelper) PrinterSetLocation(name string, location string) error {
|
||||||
ret := _mock.Called(name, location)
|
ret := _m.Called(name, location)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterSetLocation")
|
panic("no return value specified for PrinterSetLocation")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||||
r0 = returnFunc(name, location)
|
r0 = rf(name, location)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -774,52 +625,42 @@ type MockPkHelper_PrinterSetLocation_Call struct {
|
|||||||
// PrinterSetLocation is a helper method to define mock.On call
|
// PrinterSetLocation is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
// - location string
|
// - location string
|
||||||
func (_e *MockPkHelper_Expecter) PrinterSetLocation(name any, location any) *MockPkHelper_PrinterSetLocation_Call {
|
func (_e *MockPkHelper_Expecter) PrinterSetLocation(name interface{}, location interface{}) *MockPkHelper_PrinterSetLocation_Call {
|
||||||
return &MockPkHelper_PrinterSetLocation_Call{Call: _e.mock.On("PrinterSetLocation", name, location)}
|
return &MockPkHelper_PrinterSetLocation_Call{Call: _e.mock.On("PrinterSetLocation", name, location)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetLocation_Call) Run(run func(name string, location string)) *MockPkHelper_PrinterSetLocation_Call {
|
func (_c *MockPkHelper_PrinterSetLocation_Call) Run(run func(name string, location string)) *MockPkHelper_PrinterSetLocation_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetLocation_Call) Return(err error) *MockPkHelper_PrinterSetLocation_Call {
|
func (_c *MockPkHelper_PrinterSetLocation_Call) Return(_a0 error) *MockPkHelper_PrinterSetLocation_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetLocation_Call) RunAndReturn(run func(name string, location string) error) *MockPkHelper_PrinterSetLocation_Call {
|
func (_c *MockPkHelper_PrinterSetLocation_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_PrinterSetLocation_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrinterSetShared provides a mock function for the type MockPkHelper
|
// PrinterSetShared provides a mock function with given fields: name, shared
|
||||||
func (_mock *MockPkHelper) PrinterSetShared(name string, shared bool) error {
|
func (_m *MockPkHelper) PrinterSetShared(name string, shared bool) error {
|
||||||
ret := _mock.Called(name, shared)
|
ret := _m.Called(name, shared)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PrinterSetShared")
|
panic("no return value specified for PrinterSetShared")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, bool) error); ok {
|
if rf, ok := ret.Get(0).(func(string, bool) error); ok {
|
||||||
r0 = returnFunc(name, shared)
|
r0 = rf(name, shared)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -831,34 +672,37 @@ type MockPkHelper_PrinterSetShared_Call struct {
|
|||||||
// PrinterSetShared is a helper method to define mock.On call
|
// PrinterSetShared is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
// - shared bool
|
// - shared bool
|
||||||
func (_e *MockPkHelper_Expecter) PrinterSetShared(name any, shared any) *MockPkHelper_PrinterSetShared_Call {
|
func (_e *MockPkHelper_Expecter) PrinterSetShared(name interface{}, shared interface{}) *MockPkHelper_PrinterSetShared_Call {
|
||||||
return &MockPkHelper_PrinterSetShared_Call{Call: _e.mock.On("PrinterSetShared", name, shared)}
|
return &MockPkHelper_PrinterSetShared_Call{Call: _e.mock.On("PrinterSetShared", name, shared)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetShared_Call) Run(run func(name string, shared bool)) *MockPkHelper_PrinterSetShared_Call {
|
func (_c *MockPkHelper_PrinterSetShared_Call) Run(run func(name string, shared bool)) *MockPkHelper_PrinterSetShared_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(bool))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 bool
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(bool)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetShared_Call) Return(err error) *MockPkHelper_PrinterSetShared_Call {
|
func (_c *MockPkHelper_PrinterSetShared_Call) Return(_a0 error) *MockPkHelper_PrinterSetShared_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockPkHelper_PrinterSetShared_Call) RunAndReturn(run func(name string, shared bool) error) *MockPkHelper_PrinterSetShared_Call {
|
func (_c *MockPkHelper_PrinterSetShared_Call) RunAndReturn(run func(string, bool) error) *MockPkHelper_PrinterSetShared_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockPkHelper creates a new instance of MockPkHelper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockPkHelper(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockPkHelper {
|
||||||
|
mock := &MockPkHelper{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_evdev
|
package mocks_evdev
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/holoplot/go-evdev"
|
go_evdev "github.com/holoplot/go-evdev"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockEvdevDevice creates a new instance of MockEvdevDevice. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockEvdevDevice(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockEvdevDevice {
|
|
||||||
mock := &MockEvdevDevice{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockEvdevDevice is an autogenerated mock type for the EvdevDevice type
|
// MockEvdevDevice is an autogenerated mock type for the EvdevDevice type
|
||||||
type MockEvdevDevice struct {
|
type MockEvdevDevice struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,20 +20,21 @@ func (_m *MockEvdevDevice) EXPECT() *MockEvdevDevice_Expecter {
|
|||||||
return &MockEvdevDevice_Expecter{mock: &_m.Mock}
|
return &MockEvdevDevice_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close provides a mock function for the type MockEvdevDevice
|
// Close provides a mock function with no fields
|
||||||
func (_mock *MockEvdevDevice) Close() error {
|
func (_m *MockEvdevDevice) Close() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Close")
|
panic("no return value specified for Close")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +55,8 @@ func (_c *MockEvdevDevice_Close_Call) Run(run func()) *MockEvdevDevice_Close_Cal
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_Close_Call) Return(err error) *MockEvdevDevice_Close_Call {
|
func (_c *MockEvdevDevice_Close_Call) Return(_a0 error) *MockEvdevDevice_Close_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,9 +65,9 @@ func (_c *MockEvdevDevice_Close_Call) RunAndReturn(run func() error) *MockEvdevD
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name provides a mock function for the type MockEvdevDevice
|
// Name provides a mock function with no fields
|
||||||
func (_mock *MockEvdevDevice) Name() (string, error) {
|
func (_m *MockEvdevDevice) Name() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Name")
|
panic("no return value specified for Name")
|
||||||
@@ -90,19 +75,21 @@ func (_mock *MockEvdevDevice) Name() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,8 +110,8 @@ func (_c *MockEvdevDevice_Name_Call) Run(run func()) *MockEvdevDevice_Name_Call
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_Name_Call) Return(s string, err error) *MockEvdevDevice_Name_Call {
|
func (_c *MockEvdevDevice_Name_Call) Return(_a0 string, _a1 error) *MockEvdevDevice_Name_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,20 +120,21 @@ func (_c *MockEvdevDevice_Name_Call) RunAndReturn(run func() (string, error)) *M
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path provides a mock function for the type MockEvdevDevice
|
// Path provides a mock function with no fields
|
||||||
func (_mock *MockEvdevDevice) Path() string {
|
func (_m *MockEvdevDevice) Path() string {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Path")
|
panic("no return value specified for Path")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,8 +155,8 @@ func (_c *MockEvdevDevice_Path_Call) Run(run func()) *MockEvdevDevice_Path_Call
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_Path_Call) Return(s string) *MockEvdevDevice_Path_Call {
|
func (_c *MockEvdevDevice_Path_Call) Return(_a0 string) *MockEvdevDevice_Path_Call {
|
||||||
_c.Call.Return(s)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,31 +165,33 @@ func (_c *MockEvdevDevice_Path_Call) RunAndReturn(run func() string) *MockEvdevD
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadOne provides a mock function for the type MockEvdevDevice
|
// ReadOne provides a mock function with no fields
|
||||||
func (_mock *MockEvdevDevice) ReadOne() (*evdev.InputEvent, error) {
|
func (_m *MockEvdevDevice) ReadOne() (*go_evdev.InputEvent, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ReadOne")
|
panic("no return value specified for ReadOne")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *evdev.InputEvent
|
var r0 *go_evdev.InputEvent
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (*evdev.InputEvent, error)); ok {
|
if rf, ok := ret.Get(0).(func() (*go_evdev.InputEvent, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() *evdev.InputEvent); ok {
|
if rf, ok := ret.Get(0).(func() *go_evdev.InputEvent); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*evdev.InputEvent)
|
r0 = ret.Get(0).(*go_evdev.InputEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,41 +212,43 @@ func (_c *MockEvdevDevice_ReadOne_Call) Run(run func()) *MockEvdevDevice_ReadOne
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_ReadOne_Call) Return(inputEvent *evdev.InputEvent, err error) *MockEvdevDevice_ReadOne_Call {
|
func (_c *MockEvdevDevice_ReadOne_Call) Return(_a0 *go_evdev.InputEvent, _a1 error) *MockEvdevDevice_ReadOne_Call {
|
||||||
_c.Call.Return(inputEvent, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_ReadOne_Call) RunAndReturn(run func() (*evdev.InputEvent, error)) *MockEvdevDevice_ReadOne_Call {
|
func (_c *MockEvdevDevice_ReadOne_Call) RunAndReturn(run func() (*go_evdev.InputEvent, error)) *MockEvdevDevice_ReadOne_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// State provides a mock function for the type MockEvdevDevice
|
// State provides a mock function with given fields: t
|
||||||
func (_mock *MockEvdevDevice) State(t evdev.EvType) (evdev.StateMap, error) {
|
func (_m *MockEvdevDevice) State(t go_evdev.EvType) (go_evdev.StateMap, error) {
|
||||||
ret := _mock.Called(t)
|
ret := _m.Called(t)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for State")
|
panic("no return value specified for State")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 evdev.StateMap
|
var r0 go_evdev.StateMap
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(evdev.EvType) (evdev.StateMap, error)); ok {
|
if rf, ok := ret.Get(0).(func(go_evdev.EvType) (go_evdev.StateMap, error)); ok {
|
||||||
return returnFunc(t)
|
return rf(t)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(evdev.EvType) evdev.StateMap); ok {
|
if rf, ok := ret.Get(0).(func(go_evdev.EvType) go_evdev.StateMap); ok {
|
||||||
r0 = returnFunc(t)
|
r0 = rf(t)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(evdev.StateMap)
|
r0 = ret.Get(0).(go_evdev.StateMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(evdev.EvType) error); ok {
|
|
||||||
r1 = returnFunc(t)
|
if rf, ok := ret.Get(1).(func(go_evdev.EvType) error); ok {
|
||||||
|
r1 = rf(t)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,30 +258,38 @@ type MockEvdevDevice_State_Call struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// State is a helper method to define mock.On call
|
// State is a helper method to define mock.On call
|
||||||
// - t evdev.EvType
|
// - t go_evdev.EvType
|
||||||
func (_e *MockEvdevDevice_Expecter) State(t any) *MockEvdevDevice_State_Call {
|
func (_e *MockEvdevDevice_Expecter) State(t interface{}) *MockEvdevDevice_State_Call {
|
||||||
return &MockEvdevDevice_State_Call{Call: _e.mock.On("State", t)}
|
return &MockEvdevDevice_State_Call{Call: _e.mock.On("State", t)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_State_Call) Run(run func(t evdev.EvType)) *MockEvdevDevice_State_Call {
|
func (_c *MockEvdevDevice_State_Call) Run(run func(t go_evdev.EvType)) *MockEvdevDevice_State_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 evdev.EvType
|
run(args[0].(go_evdev.EvType))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(evdev.EvType)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_State_Call) Return(stateMap evdev.StateMap, err error) *MockEvdevDevice_State_Call {
|
func (_c *MockEvdevDevice_State_Call) Return(_a0 go_evdev.StateMap, _a1 error) *MockEvdevDevice_State_Call {
|
||||||
_c.Call.Return(stateMap, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockEvdevDevice_State_Call) RunAndReturn(run func(t evdev.EvType) (evdev.StateMap, error)) *MockEvdevDevice_State_Call {
|
func (_c *MockEvdevDevice_State_Call) RunAndReturn(run func(go_evdev.EvType) (go_evdev.StateMap, error)) *MockEvdevDevice_State_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockEvdevDevice creates a new instance of MockEvdevDevice. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockEvdevDevice(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockEvdevDevice {
|
||||||
|
mock := &MockEvdevDevice{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_geolocation
|
package mocks_geolocation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation"
|
geolocation "github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockClient(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockClient {
|
|
||||||
mock := &MockClient{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockClient is an autogenerated mock type for the Client type
|
// MockClient is an autogenerated mock type for the Client type
|
||||||
type MockClient struct {
|
type MockClient struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,10 +20,9 @@ func (_m *MockClient) EXPECT() *MockClient_Expecter {
|
|||||||
return &MockClient_Expecter{mock: &_m.Mock}
|
return &MockClient_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close provides a mock function for the type MockClient
|
// Close provides a mock function with no fields
|
||||||
func (_mock *MockClient) Close() {
|
func (_m *MockClient) Close() {
|
||||||
_mock.Called()
|
_m.Called()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockClient_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
|
// MockClient_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
|
||||||
@@ -69,9 +52,9 @@ func (_c *MockClient_Close_Call) RunAndReturn(run func()) *MockClient_Close_Call
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLocation provides a mock function for the type MockClient
|
// GetLocation provides a mock function with no fields
|
||||||
func (_mock *MockClient) GetLocation() (geolocation.Location, error) {
|
func (_m *MockClient) GetLocation() (geolocation.Location, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetLocation")
|
panic("no return value specified for GetLocation")
|
||||||
@@ -79,19 +62,21 @@ func (_mock *MockClient) GetLocation() (geolocation.Location, error) {
|
|||||||
|
|
||||||
var r0 geolocation.Location
|
var r0 geolocation.Location
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (geolocation.Location, error)); ok {
|
if rf, ok := ret.Get(0).(func() (geolocation.Location, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() geolocation.Location); ok {
|
if rf, ok := ret.Get(0).(func() geolocation.Location); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(geolocation.Location)
|
r0 = ret.Get(0).(geolocation.Location)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,8 +97,8 @@ func (_c *MockClient_GetLocation_Call) Run(run func()) *MockClient_GetLocation_C
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_GetLocation_Call) Return(location geolocation.Location, err error) *MockClient_GetLocation_Call {
|
func (_c *MockClient_GetLocation_Call) Return(_a0 geolocation.Location, _a1 error) *MockClient_GetLocation_Call {
|
||||||
_c.Call.Return(location, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,22 +107,23 @@ func (_c *MockClient_GetLocation_Call) RunAndReturn(run func() (geolocation.Loca
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscribe provides a mock function for the type MockClient
|
// Subscribe provides a mock function with given fields: id
|
||||||
func (_mock *MockClient) Subscribe(id string) chan geolocation.Location {
|
func (_m *MockClient) Subscribe(id string) chan geolocation.Location {
|
||||||
ret := _mock.Called(id)
|
ret := _m.Called(id)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Subscribe")
|
panic("no return value specified for Subscribe")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 chan geolocation.Location
|
var r0 chan geolocation.Location
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) chan geolocation.Location); ok {
|
if rf, ok := ret.Get(0).(func(string) chan geolocation.Location); ok {
|
||||||
r0 = returnFunc(id)
|
r0 = rf(id)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(chan geolocation.Location)
|
r0 = ret.Get(0).(chan geolocation.Location)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,37 +134,30 @@ type MockClient_Subscribe_Call struct {
|
|||||||
|
|
||||||
// Subscribe is a helper method to define mock.On call
|
// Subscribe is a helper method to define mock.On call
|
||||||
// - id string
|
// - id string
|
||||||
func (_e *MockClient_Expecter) Subscribe(id any) *MockClient_Subscribe_Call {
|
func (_e *MockClient_Expecter) Subscribe(id interface{}) *MockClient_Subscribe_Call {
|
||||||
return &MockClient_Subscribe_Call{Call: _e.mock.On("Subscribe", id)}
|
return &MockClient_Subscribe_Call{Call: _e.mock.On("Subscribe", id)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_Subscribe_Call) Run(run func(id string)) *MockClient_Subscribe_Call {
|
func (_c *MockClient_Subscribe_Call) Run(run func(id string)) *MockClient_Subscribe_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_Subscribe_Call) Return(locationCh chan geolocation.Location) *MockClient_Subscribe_Call {
|
func (_c *MockClient_Subscribe_Call) Return(_a0 chan geolocation.Location) *MockClient_Subscribe_Call {
|
||||||
_c.Call.Return(locationCh)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_Subscribe_Call) RunAndReturn(run func(id string) chan geolocation.Location) *MockClient_Subscribe_Call {
|
func (_c *MockClient_Subscribe_Call) RunAndReturn(run func(string) chan geolocation.Location) *MockClient_Subscribe_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unsubscribe provides a mock function for the type MockClient
|
// Unsubscribe provides a mock function with given fields: id
|
||||||
func (_mock *MockClient) Unsubscribe(id string) {
|
func (_m *MockClient) Unsubscribe(id string) {
|
||||||
_mock.Called(id)
|
_m.Called(id)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockClient_Unsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Unsubscribe'
|
// MockClient_Unsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Unsubscribe'
|
||||||
@@ -188,19 +167,13 @@ type MockClient_Unsubscribe_Call struct {
|
|||||||
|
|
||||||
// Unsubscribe is a helper method to define mock.On call
|
// Unsubscribe is a helper method to define mock.On call
|
||||||
// - id string
|
// - id string
|
||||||
func (_e *MockClient_Expecter) Unsubscribe(id any) *MockClient_Unsubscribe_Call {
|
func (_e *MockClient_Expecter) Unsubscribe(id interface{}) *MockClient_Unsubscribe_Call {
|
||||||
return &MockClient_Unsubscribe_Call{Call: _e.mock.On("Unsubscribe", id)}
|
return &MockClient_Unsubscribe_Call{Call: _e.mock.On("Unsubscribe", id)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_Unsubscribe_Call) Run(run func(id string)) *MockClient_Unsubscribe_Call {
|
func (_c *MockClient_Unsubscribe_Call) Run(run func(id string)) *MockClient_Unsubscribe_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
@@ -210,7 +183,21 @@ func (_c *MockClient_Unsubscribe_Call) Return() *MockClient_Unsubscribe_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockClient_Unsubscribe_Call) RunAndReturn(run func(id string)) *MockClient_Unsubscribe_Call {
|
func (_c *MockClient_Unsubscribe_Call) RunAndReturn(run func(string)) *MockClient_Unsubscribe_Call {
|
||||||
_c.Run(run)
|
_c.Run(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockClient(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockClient {
|
||||||
|
mock := &MockClient{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,29 +1,14 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package gonetworkmanager
|
package gonetworkmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Wifx/gonetworkmanager/v2"
|
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
|
||||||
"github.com/godbus/dbus/v5"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
|
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockAccessPoint creates a new instance of MockAccessPoint. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockAccessPoint(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockAccessPoint {
|
|
||||||
mock := &MockAccessPoint{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockAccessPoint is an autogenerated mock type for the AccessPoint type
|
// MockAccessPoint is an autogenerated mock type for the AccessPoint type
|
||||||
type MockAccessPoint struct {
|
type MockAccessPoint struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -37,20 +22,21 @@ func (_m *MockAccessPoint) EXPECT() *MockAccessPoint_Expecter {
|
|||||||
return &MockAccessPoint_Expecter{mock: &_m.Mock}
|
return &MockAccessPoint_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPath provides a mock function for the type MockAccessPoint
|
// GetPath provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPath() dbus.ObjectPath {
|
func (_m *MockAccessPoint) GetPath() dbus.ObjectPath {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPath")
|
panic("no return value specified for GetPath")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 dbus.ObjectPath
|
var r0 dbus.ObjectPath
|
||||||
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(dbus.ObjectPath)
|
r0 = ret.Get(0).(dbus.ObjectPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,8 +57,8 @@ func (_c *MockAccessPoint_GetPath_Call) Run(run func()) *MockAccessPoint_GetPath
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockAccessPoint_GetPath_Call {
|
func (_c *MockAccessPoint_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockAccessPoint_GetPath_Call {
|
||||||
_c.Call.Return(objectPath)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,9 +67,9 @@ func (_c *MockAccessPoint_GetPath_Call) RunAndReturn(run func() dbus.ObjectPath)
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyFlags provides a mock function for the type MockAccessPoint
|
// GetPropertyFlags provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyFlags() (uint32, error) {
|
func (_m *MockAccessPoint) GetPropertyFlags() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyFlags")
|
panic("no return value specified for GetPropertyFlags")
|
||||||
@@ -91,19 +77,21 @@ func (_mock *MockAccessPoint) GetPropertyFlags() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,8 +112,8 @@ func (_c *MockAccessPoint_GetPropertyFlags_Call) Run(run func()) *MockAccessPoin
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyFlags_Call {
|
func (_c *MockAccessPoint_GetPropertyFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyFlags_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,9 +122,9 @@ func (_c *MockAccessPoint_GetPropertyFlags_Call) RunAndReturn(run func() (uint32
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyFrequency provides a mock function for the type MockAccessPoint
|
// GetPropertyFrequency provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
|
func (_m *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyFrequency")
|
panic("no return value specified for GetPropertyFrequency")
|
||||||
@@ -144,19 +132,21 @@ func (_mock *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,8 +167,8 @@ func (_c *MockAccessPoint_GetPropertyFrequency_Call) Run(run func()) *MockAccess
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyFrequency_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyFrequency_Call {
|
func (_c *MockAccessPoint_GetPropertyFrequency_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyFrequency_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,9 +177,9 @@ func (_c *MockAccessPoint_GetPropertyFrequency_Call) RunAndReturn(run func() (ui
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyHWAddress provides a mock function for the type MockAccessPoint
|
// GetPropertyHWAddress provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyHWAddress() (string, error) {
|
func (_m *MockAccessPoint) GetPropertyHWAddress() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyHWAddress")
|
panic("no return value specified for GetPropertyHWAddress")
|
||||||
@@ -197,19 +187,21 @@ func (_mock *MockAccessPoint) GetPropertyHWAddress() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,8 +222,8 @@ func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Run(run func()) *MockAccess
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Return(s string, err error) *MockAccessPoint_GetPropertyHWAddress_Call {
|
func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Return(_a0 string, _a1 error) *MockAccessPoint_GetPropertyHWAddress_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,9 +232,9 @@ func (_c *MockAccessPoint_GetPropertyHWAddress_Call) RunAndReturn(run func() (st
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyLastSeen provides a mock function for the type MockAccessPoint
|
// GetPropertyLastSeen provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
|
func (_m *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyLastSeen")
|
panic("no return value specified for GetPropertyLastSeen")
|
||||||
@@ -250,19 +242,21 @@ func (_mock *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
|
|||||||
|
|
||||||
var r0 int32
|
var r0 int32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (int32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (int32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() int32); ok {
|
if rf, ok := ret.Get(0).(func() int32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(int32)
|
r0 = ret.Get(0).(int32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,8 +277,8 @@ func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Run(run func()) *MockAccessP
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Return(n int32, err error) *MockAccessPoint_GetPropertyLastSeen_Call {
|
func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Return(_a0 int32, _a1 error) *MockAccessPoint_GetPropertyLastSeen_Call {
|
||||||
_c.Call.Return(n, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,9 +287,9 @@ func (_c *MockAccessPoint_GetPropertyLastSeen_Call) RunAndReturn(run func() (int
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyMaxBitrate provides a mock function for the type MockAccessPoint
|
// GetPropertyMaxBitrate provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
|
func (_m *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyMaxBitrate")
|
panic("no return value specified for GetPropertyMaxBitrate")
|
||||||
@@ -303,19 +297,21 @@ func (_mock *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,8 +332,8 @@ func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Run(run func()) *MockAcces
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyMaxBitrate_Call {
|
func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyMaxBitrate_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,9 +342,9 @@ func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) RunAndReturn(run func() (u
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyMode provides a mock function for the type MockAccessPoint
|
// GetPropertyMode provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, error) {
|
func (_m *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyMode")
|
panic("no return value specified for GetPropertyMode")
|
||||||
@@ -356,19 +352,21 @@ func (_mock *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, e
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Nm80211Mode
|
var r0 gonetworkmanager.Nm80211Mode
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Nm80211Mode, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Nm80211Mode, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Nm80211Mode); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.Nm80211Mode); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Nm80211Mode)
|
r0 = ret.Get(0).(gonetworkmanager.Nm80211Mode)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,8 +387,8 @@ func (_c *MockAccessPoint_GetPropertyMode_Call) Run(run func()) *MockAccessPoint
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyMode_Call) Return(nm80211Mode gonetworkmanager.Nm80211Mode, err error) *MockAccessPoint_GetPropertyMode_Call {
|
func (_c *MockAccessPoint_GetPropertyMode_Call) Return(_a0 gonetworkmanager.Nm80211Mode, _a1 error) *MockAccessPoint_GetPropertyMode_Call {
|
||||||
_c.Call.Return(nm80211Mode, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,9 +397,9 @@ func (_c *MockAccessPoint_GetPropertyMode_Call) RunAndReturn(run func() (gonetwo
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyRSNFlags provides a mock function for the type MockAccessPoint
|
// GetPropertyRSNFlags provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
|
func (_m *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyRSNFlags")
|
panic("no return value specified for GetPropertyRSNFlags")
|
||||||
@@ -409,19 +407,21 @@ func (_mock *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,8 +442,8 @@ func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Run(run func()) *MockAccessP
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyRSNFlags_Call {
|
func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyRSNFlags_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,9 +452,9 @@ func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) RunAndReturn(run func() (uin
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertySSID provides a mock function for the type MockAccessPoint
|
// GetPropertySSID provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertySSID() (string, error) {
|
func (_m *MockAccessPoint) GetPropertySSID() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertySSID")
|
panic("no return value specified for GetPropertySSID")
|
||||||
@@ -462,19 +462,21 @@ func (_mock *MockAccessPoint) GetPropertySSID() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,8 +497,8 @@ func (_c *MockAccessPoint_GetPropertySSID_Call) Run(run func()) *MockAccessPoint
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertySSID_Call) Return(s string, err error) *MockAccessPoint_GetPropertySSID_Call {
|
func (_c *MockAccessPoint_GetPropertySSID_Call) Return(_a0 string, _a1 error) *MockAccessPoint_GetPropertySSID_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,9 +507,9 @@ func (_c *MockAccessPoint_GetPropertySSID_Call) RunAndReturn(run func() (string,
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyStrength provides a mock function for the type MockAccessPoint
|
// GetPropertyStrength provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyStrength() (uint8, error) {
|
func (_m *MockAccessPoint) GetPropertyStrength() (uint8, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyStrength")
|
panic("no return value specified for GetPropertyStrength")
|
||||||
@@ -515,19 +517,21 @@ func (_mock *MockAccessPoint) GetPropertyStrength() (uint8, error) {
|
|||||||
|
|
||||||
var r0 uint8
|
var r0 uint8
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint8, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint8, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint8); ok {
|
if rf, ok := ret.Get(0).(func() uint8); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint8)
|
r0 = ret.Get(0).(uint8)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,8 +552,8 @@ func (_c *MockAccessPoint_GetPropertyStrength_Call) Run(run func()) *MockAccessP
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyStrength_Call) Return(v uint8, err error) *MockAccessPoint_GetPropertyStrength_Call {
|
func (_c *MockAccessPoint_GetPropertyStrength_Call) Return(_a0 uint8, _a1 error) *MockAccessPoint_GetPropertyStrength_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,9 +562,9 @@ func (_c *MockAccessPoint_GetPropertyStrength_Call) RunAndReturn(run func() (uin
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyWPAFlags provides a mock function for the type MockAccessPoint
|
// GetPropertyWPAFlags provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
|
func (_m *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyWPAFlags")
|
panic("no return value specified for GetPropertyWPAFlags")
|
||||||
@@ -568,19 +572,21 @@ func (_mock *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,8 +607,8 @@ func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Run(run func()) *MockAccessP
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyWPAFlags_Call {
|
func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyWPAFlags_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -611,9 +617,9 @@ func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) RunAndReturn(run func() (uin
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON provides a mock function for the type MockAccessPoint
|
// MarshalJSON provides a mock function with no fields
|
||||||
func (_mock *MockAccessPoint) MarshalJSON() ([]byte, error) {
|
func (_m *MockAccessPoint) MarshalJSON() ([]byte, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for MarshalJSON")
|
panic("no return value specified for MarshalJSON")
|
||||||
@@ -621,21 +627,23 @@ func (_mock *MockAccessPoint) MarshalJSON() ([]byte, error) {
|
|||||||
|
|
||||||
var r0 []byte
|
var r0 []byte
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
|
if rf, ok := ret.Get(0).(func() []byte); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]byte)
|
r0 = ret.Get(0).([]byte)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -656,8 +664,8 @@ func (_c *MockAccessPoint_MarshalJSON_Call) Run(run func()) *MockAccessPoint_Mar
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAccessPoint_MarshalJSON_Call) Return(bytes []byte, err error) *MockAccessPoint_MarshalJSON_Call {
|
func (_c *MockAccessPoint_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockAccessPoint_MarshalJSON_Call {
|
||||||
_c.Call.Return(bytes, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,3 +673,17 @@ func (_c *MockAccessPoint_MarshalJSON_Call) RunAndReturn(run func() ([]byte, err
|
|||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockAccessPoint creates a new instance of MockAccessPoint. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockAccessPoint(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockAccessPoint {
|
||||||
|
mock := &MockAccessPoint{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
+243
-221
@@ -1,29 +1,14 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package gonetworkmanager
|
package gonetworkmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Wifx/gonetworkmanager/v2"
|
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
|
||||||
"github.com/godbus/dbus/v5"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
|
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockActiveConnection creates a new instance of MockActiveConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockActiveConnection(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockActiveConnection {
|
|
||||||
mock := &MockActiveConnection{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockActiveConnection is an autogenerated mock type for the ActiveConnection type
|
// MockActiveConnection is an autogenerated mock type for the ActiveConnection type
|
||||||
type MockActiveConnection struct {
|
type MockActiveConnection struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -37,20 +22,21 @@ func (_m *MockActiveConnection) EXPECT() *MockActiveConnection_Expecter {
|
|||||||
return &MockActiveConnection_Expecter{mock: &_m.Mock}
|
return &MockActiveConnection_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPath provides a mock function for the type MockActiveConnection
|
// GetPath provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPath() dbus.ObjectPath {
|
func (_m *MockActiveConnection) GetPath() dbus.ObjectPath {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPath")
|
panic("no return value specified for GetPath")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 dbus.ObjectPath
|
var r0 dbus.ObjectPath
|
||||||
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(dbus.ObjectPath)
|
r0 = ret.Get(0).(dbus.ObjectPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,8 +57,8 @@ func (_c *MockActiveConnection_GetPath_Call) Run(run func()) *MockActiveConnecti
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockActiveConnection_GetPath_Call {
|
func (_c *MockActiveConnection_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockActiveConnection_GetPath_Call {
|
||||||
_c.Call.Return(objectPath)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,9 +67,9 @@ func (_c *MockActiveConnection_GetPath_Call) RunAndReturn(run func() dbus.Object
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyConnection provides a mock function for the type MockActiveConnection
|
// GetPropertyConnection provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Connection, error) {
|
func (_m *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Connection, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyConnection")
|
panic("no return value specified for GetPropertyConnection")
|
||||||
@@ -91,21 +77,23 @@ func (_mock *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Con
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Connection
|
var r0 gonetworkmanager.Connection
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Connection, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Connection, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Connection); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.Connection); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,8 +114,8 @@ func (_c *MockActiveConnection_GetPropertyConnection_Call) Run(run func()) *Mock
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyConnection_Call) Return(connection gonetworkmanager.Connection, err error) *MockActiveConnection_GetPropertyConnection_Call {
|
func (_c *MockActiveConnection_GetPropertyConnection_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockActiveConnection_GetPropertyConnection_Call {
|
||||||
_c.Call.Return(connection, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,9 +124,9 @@ func (_c *MockActiveConnection_GetPropertyConnection_Call) RunAndReturn(run func
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDHCP4Config provides a mock function for the type MockActiveConnection
|
// GetPropertyDHCP4Config provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DHCP4Config, error) {
|
func (_m *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DHCP4Config, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDHCP4Config")
|
panic("no return value specified for GetPropertyDHCP4Config")
|
||||||
@@ -146,21 +134,23 @@ func (_mock *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DH
|
|||||||
|
|
||||||
var r0 gonetworkmanager.DHCP4Config
|
var r0 gonetworkmanager.DHCP4Config
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.DHCP4Config, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.DHCP4Config, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.DHCP4Config); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.DHCP4Config); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.DHCP4Config)
|
r0 = ret.Get(0).(gonetworkmanager.DHCP4Config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,8 +171,8 @@ func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Run(run func()) *Moc
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Return(dHCP4Config gonetworkmanager.DHCP4Config, err error) *MockActiveConnection_GetPropertyDHCP4Config_Call {
|
func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Return(_a0 gonetworkmanager.DHCP4Config, _a1 error) *MockActiveConnection_GetPropertyDHCP4Config_Call {
|
||||||
_c.Call.Return(dHCP4Config, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,9 +181,9 @@ func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) RunAndReturn(run fun
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDHCP6Config provides a mock function for the type MockActiveConnection
|
// GetPropertyDHCP6Config provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DHCP6Config, error) {
|
func (_m *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DHCP6Config, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDHCP6Config")
|
panic("no return value specified for GetPropertyDHCP6Config")
|
||||||
@@ -201,21 +191,23 @@ func (_mock *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DH
|
|||||||
|
|
||||||
var r0 gonetworkmanager.DHCP6Config
|
var r0 gonetworkmanager.DHCP6Config
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.DHCP6Config, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.DHCP6Config, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.DHCP6Config); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.DHCP6Config); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.DHCP6Config)
|
r0 = ret.Get(0).(gonetworkmanager.DHCP6Config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,8 +228,8 @@ func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Run(run func()) *Moc
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Return(dHCP6Config gonetworkmanager.DHCP6Config, err error) *MockActiveConnection_GetPropertyDHCP6Config_Call {
|
func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Return(_a0 gonetworkmanager.DHCP6Config, _a1 error) *MockActiveConnection_GetPropertyDHCP6Config_Call {
|
||||||
_c.Call.Return(dHCP6Config, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,9 +238,9 @@ func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) RunAndReturn(run fun
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDefault provides a mock function for the type MockActiveConnection
|
// GetPropertyDefault provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyDefault() (bool, error) {
|
func (_m *MockActiveConnection) GetPropertyDefault() (bool, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDefault")
|
panic("no return value specified for GetPropertyDefault")
|
||||||
@@ -256,19 +248,21 @@ func (_mock *MockActiveConnection) GetPropertyDefault() (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() bool); ok {
|
if rf, ok := ret.Get(0).(func() bool); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,8 +283,8 @@ func (_c *MockActiveConnection_GetPropertyDefault_Call) Run(run func()) *MockAct
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyDefault_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyDefault_Call {
|
func (_c *MockActiveConnection_GetPropertyDefault_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyDefault_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,9 +293,9 @@ func (_c *MockActiveConnection_GetPropertyDefault_Call) RunAndReturn(run func()
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDefault6 provides a mock function for the type MockActiveConnection
|
// GetPropertyDefault6 provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyDefault6() (bool, error) {
|
func (_m *MockActiveConnection) GetPropertyDefault6() (bool, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDefault6")
|
panic("no return value specified for GetPropertyDefault6")
|
||||||
@@ -309,19 +303,21 @@ func (_mock *MockActiveConnection) GetPropertyDefault6() (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() bool); ok {
|
if rf, ok := ret.Get(0).(func() bool); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,8 +338,8 @@ func (_c *MockActiveConnection_GetPropertyDefault6_Call) Run(run func()) *MockAc
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyDefault6_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyDefault6_Call {
|
func (_c *MockActiveConnection_GetPropertyDefault6_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyDefault6_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,9 +348,9 @@ func (_c *MockActiveConnection_GetPropertyDefault6_Call) RunAndReturn(run func()
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDevices provides a mock function for the type MockActiveConnection
|
// GetPropertyDevices provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Device, error) {
|
func (_m *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Device, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDevices")
|
panic("no return value specified for GetPropertyDevices")
|
||||||
@@ -362,21 +358,23 @@ func (_mock *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Devi
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.Device
|
var r0 []gonetworkmanager.Device
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.Device, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.Device, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.Device); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.Device); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.Device)
|
r0 = ret.Get(0).([]gonetworkmanager.Device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,8 +395,8 @@ func (_c *MockActiveConnection_GetPropertyDevices_Call) Run(run func()) *MockAct
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyDevices_Call) Return(devices []gonetworkmanager.Device, err error) *MockActiveConnection_GetPropertyDevices_Call {
|
func (_c *MockActiveConnection_GetPropertyDevices_Call) Return(_a0 []gonetworkmanager.Device, _a1 error) *MockActiveConnection_GetPropertyDevices_Call {
|
||||||
_c.Call.Return(devices, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,9 +405,9 @@ func (_c *MockActiveConnection_GetPropertyDevices_Call) RunAndReturn(run func()
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyID provides a mock function for the type MockActiveConnection
|
// GetPropertyID provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyID() (string, error) {
|
func (_m *MockActiveConnection) GetPropertyID() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyID")
|
panic("no return value specified for GetPropertyID")
|
||||||
@@ -417,19 +415,21 @@ func (_mock *MockActiveConnection) GetPropertyID() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -450,8 +450,8 @@ func (_c *MockActiveConnection_GetPropertyID_Call) Run(run func()) *MockActiveCo
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyID_Call) Return(s string, err error) *MockActiveConnection_GetPropertyID_Call {
|
func (_c *MockActiveConnection_GetPropertyID_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyID_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,9 +460,9 @@ func (_c *MockActiveConnection_GetPropertyID_Call) RunAndReturn(run func() (stri
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyIP4Config provides a mock function for the type MockActiveConnection
|
// GetPropertyIP4Config provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4Config, error) {
|
func (_m *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4Config, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyIP4Config")
|
panic("no return value specified for GetPropertyIP4Config")
|
||||||
@@ -470,21 +470,23 @@ func (_mock *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4C
|
|||||||
|
|
||||||
var r0 gonetworkmanager.IP4Config
|
var r0 gonetworkmanager.IP4Config
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.IP4Config, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.IP4Config, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.IP4Config); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.IP4Config); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.IP4Config)
|
r0 = ret.Get(0).(gonetworkmanager.IP4Config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,8 +507,8 @@ func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Run(run func()) *MockA
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Return(iP4Config gonetworkmanager.IP4Config, err error) *MockActiveConnection_GetPropertyIP4Config_Call {
|
func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Return(_a0 gonetworkmanager.IP4Config, _a1 error) *MockActiveConnection_GetPropertyIP4Config_Call {
|
||||||
_c.Call.Return(iP4Config, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,9 +517,9 @@ func (_c *MockActiveConnection_GetPropertyIP4Config_Call) RunAndReturn(run func(
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyIP6Config provides a mock function for the type MockActiveConnection
|
// GetPropertyIP6Config provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6Config, error) {
|
func (_m *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6Config, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyIP6Config")
|
panic("no return value specified for GetPropertyIP6Config")
|
||||||
@@ -525,21 +527,23 @@ func (_mock *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6C
|
|||||||
|
|
||||||
var r0 gonetworkmanager.IP6Config
|
var r0 gonetworkmanager.IP6Config
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.IP6Config, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.IP6Config, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.IP6Config); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.IP6Config); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.IP6Config)
|
r0 = ret.Get(0).(gonetworkmanager.IP6Config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,8 +564,8 @@ func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Run(run func()) *MockA
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Return(iP6Config gonetworkmanager.IP6Config, err error) *MockActiveConnection_GetPropertyIP6Config_Call {
|
func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Return(_a0 gonetworkmanager.IP6Config, _a1 error) *MockActiveConnection_GetPropertyIP6Config_Call {
|
||||||
_c.Call.Return(iP6Config, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,9 +574,9 @@ func (_c *MockActiveConnection_GetPropertyIP6Config_Call) RunAndReturn(run func(
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyMaster provides a mock function for the type MockActiveConnection
|
// GetPropertyMaster provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device, error) {
|
func (_m *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyMaster")
|
panic("no return value specified for GetPropertyMaster")
|
||||||
@@ -580,21 +584,23 @@ func (_mock *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device,
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Device
|
var r0 gonetworkmanager.Device
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Device, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Device, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Device); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.Device); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Device)
|
r0 = ret.Get(0).(gonetworkmanager.Device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,8 +621,8 @@ func (_c *MockActiveConnection_GetPropertyMaster_Call) Run(run func()) *MockActi
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyMaster_Call) Return(device gonetworkmanager.Device, err error) *MockActiveConnection_GetPropertyMaster_Call {
|
func (_c *MockActiveConnection_GetPropertyMaster_Call) Return(_a0 gonetworkmanager.Device, _a1 error) *MockActiveConnection_GetPropertyMaster_Call {
|
||||||
_c.Call.Return(device, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,9 +631,9 @@ func (_c *MockActiveConnection_GetPropertyMaster_Call) RunAndReturn(run func() (
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertySpecificObject provides a mock function for the type MockActiveConnection
|
// GetPropertySpecificObject provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager.AccessPoint, error) {
|
func (_m *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager.AccessPoint, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertySpecificObject")
|
panic("no return value specified for GetPropertySpecificObject")
|
||||||
@@ -635,21 +641,23 @@ func (_mock *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager
|
|||||||
|
|
||||||
var r0 gonetworkmanager.AccessPoint
|
var r0 gonetworkmanager.AccessPoint
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.AccessPoint, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.AccessPoint, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.AccessPoint); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.AccessPoint); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.AccessPoint)
|
r0 = ret.Get(0).(gonetworkmanager.AccessPoint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,8 +678,8 @@ func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Run(run func()) *
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Return(accessPoint gonetworkmanager.AccessPoint, err error) *MockActiveConnection_GetPropertySpecificObject_Call {
|
func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Return(_a0 gonetworkmanager.AccessPoint, _a1 error) *MockActiveConnection_GetPropertySpecificObject_Call {
|
||||||
_c.Call.Return(accessPoint, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -680,9 +688,9 @@ func (_c *MockActiveConnection_GetPropertySpecificObject_Call) RunAndReturn(run
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyState provides a mock function for the type MockActiveConnection
|
// GetPropertyState provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActiveConnectionState, error) {
|
func (_m *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActiveConnectionState, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyState")
|
panic("no return value specified for GetPropertyState")
|
||||||
@@ -690,19 +698,21 @@ func (_mock *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActive
|
|||||||
|
|
||||||
var r0 gonetworkmanager.NmActiveConnectionState
|
var r0 gonetworkmanager.NmActiveConnectionState
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.NmActiveConnectionState, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.NmActiveConnectionState, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.NmActiveConnectionState); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.NmActiveConnectionState); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.NmActiveConnectionState)
|
r0 = ret.Get(0).(gonetworkmanager.NmActiveConnectionState)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -723,8 +733,8 @@ func (_c *MockActiveConnection_GetPropertyState_Call) Run(run func()) *MockActiv
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyState_Call) Return(nmActiveConnectionState gonetworkmanager.NmActiveConnectionState, err error) *MockActiveConnection_GetPropertyState_Call {
|
func (_c *MockActiveConnection_GetPropertyState_Call) Return(_a0 gonetworkmanager.NmActiveConnectionState, _a1 error) *MockActiveConnection_GetPropertyState_Call {
|
||||||
_c.Call.Return(nmActiveConnectionState, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,9 +743,9 @@ func (_c *MockActiveConnection_GetPropertyState_Call) RunAndReturn(run func() (g
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyStateFlags provides a mock function for the type MockActiveConnection
|
// GetPropertyStateFlags provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
|
func (_m *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyStateFlags")
|
panic("no return value specified for GetPropertyStateFlags")
|
||||||
@@ -743,19 +753,21 @@ func (_mock *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -776,8 +788,8 @@ func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Run(run func()) *Mock
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Return(v uint32, err error) *MockActiveConnection_GetPropertyStateFlags_Call {
|
func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Return(_a0 uint32, _a1 error) *MockActiveConnection_GetPropertyStateFlags_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,9 +798,9 @@ func (_c *MockActiveConnection_GetPropertyStateFlags_Call) RunAndReturn(run func
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyType provides a mock function for the type MockActiveConnection
|
// GetPropertyType provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyType() (string, error) {
|
func (_m *MockActiveConnection) GetPropertyType() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyType")
|
panic("no return value specified for GetPropertyType")
|
||||||
@@ -796,19 +808,21 @@ func (_mock *MockActiveConnection) GetPropertyType() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,8 +843,8 @@ func (_c *MockActiveConnection_GetPropertyType_Call) Run(run func()) *MockActive
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyType_Call) Return(s string, err error) *MockActiveConnection_GetPropertyType_Call {
|
func (_c *MockActiveConnection_GetPropertyType_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyType_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -839,9 +853,9 @@ func (_c *MockActiveConnection_GetPropertyType_Call) RunAndReturn(run func() (st
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyUUID provides a mock function for the type MockActiveConnection
|
// GetPropertyUUID provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyUUID() (string, error) {
|
func (_m *MockActiveConnection) GetPropertyUUID() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyUUID")
|
panic("no return value specified for GetPropertyUUID")
|
||||||
@@ -849,19 +863,21 @@ func (_mock *MockActiveConnection) GetPropertyUUID() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -882,8 +898,8 @@ func (_c *MockActiveConnection_GetPropertyUUID_Call) Run(run func()) *MockActive
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyUUID_Call) Return(s string, err error) *MockActiveConnection_GetPropertyUUID_Call {
|
func (_c *MockActiveConnection_GetPropertyUUID_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyUUID_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -892,9 +908,9 @@ func (_c *MockActiveConnection_GetPropertyUUID_Call) RunAndReturn(run func() (st
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyVPN provides a mock function for the type MockActiveConnection
|
// GetPropertyVPN provides a mock function with no fields
|
||||||
func (_mock *MockActiveConnection) GetPropertyVPN() (bool, error) {
|
func (_m *MockActiveConnection) GetPropertyVPN() (bool, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyVPN")
|
panic("no return value specified for GetPropertyVPN")
|
||||||
@@ -902,19 +918,21 @@ func (_mock *MockActiveConnection) GetPropertyVPN() (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() bool); ok {
|
if rf, ok := ret.Get(0).(func() bool); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -935,8 +953,8 @@ func (_c *MockActiveConnection_GetPropertyVPN_Call) Run(run func()) *MockActiveC
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_GetPropertyVPN_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyVPN_Call {
|
func (_c *MockActiveConnection_GetPropertyVPN_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyVPN_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -945,20 +963,21 @@ func (_c *MockActiveConnection_GetPropertyVPN_Call) RunAndReturn(run func() (boo
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubscribeState provides a mock function for the type MockActiveConnection
|
// SubscribeState provides a mock function with given fields: receiver, exit
|
||||||
func (_mock *MockActiveConnection) SubscribeState(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error {
|
func (_m *MockActiveConnection) SubscribeState(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error {
|
||||||
ret := _mock.Called(receiver, exit)
|
ret := _m.Called(receiver, exit)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SubscribeState")
|
panic("no return value specified for SubscribeState")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(chan gonetworkmanager.StateChange, chan struct{}) error); ok {
|
if rf, ok := ret.Get(0).(func(chan gonetworkmanager.StateChange, chan struct{}) error); ok {
|
||||||
r0 = returnFunc(receiver, exit)
|
r0 = rf(receiver, exit)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,24 +989,13 @@ type MockActiveConnection_SubscribeState_Call struct {
|
|||||||
// SubscribeState is a helper method to define mock.On call
|
// SubscribeState is a helper method to define mock.On call
|
||||||
// - receiver chan gonetworkmanager.StateChange
|
// - receiver chan gonetworkmanager.StateChange
|
||||||
// - exit chan struct{}
|
// - exit chan struct{}
|
||||||
func (_e *MockActiveConnection_Expecter) SubscribeState(receiver any, exit any) *MockActiveConnection_SubscribeState_Call {
|
func (_e *MockActiveConnection_Expecter) SubscribeState(receiver interface{}, exit interface{}) *MockActiveConnection_SubscribeState_Call {
|
||||||
return &MockActiveConnection_SubscribeState_Call{Call: _e.mock.On("SubscribeState", receiver, exit)}
|
return &MockActiveConnection_SubscribeState_Call{Call: _e.mock.On("SubscribeState", receiver, exit)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_SubscribeState_Call) Run(run func(receiver chan gonetworkmanager.StateChange, exit chan struct{})) *MockActiveConnection_SubscribeState_Call {
|
func (_c *MockActiveConnection_SubscribeState_Call) Run(run func(receiver chan gonetworkmanager.StateChange, exit chan struct{})) *MockActiveConnection_SubscribeState_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 chan gonetworkmanager.StateChange
|
run(args[0].(chan gonetworkmanager.StateChange), args[1].(chan struct{}))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(chan gonetworkmanager.StateChange)
|
|
||||||
}
|
|
||||||
var arg1 chan struct{}
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(chan struct{})
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
@@ -997,7 +1005,21 @@ func (_c *MockActiveConnection_SubscribeState_Call) Return(err error) *MockActiv
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockActiveConnection_SubscribeState_Call) RunAndReturn(run func(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error) *MockActiveConnection_SubscribeState_Call {
|
func (_c *MockActiveConnection_SubscribeState_Call) RunAndReturn(run func(chan gonetworkmanager.StateChange, chan struct{}) error) *MockActiveConnection_SubscribeState_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockActiveConnection creates a new instance of MockActiveConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockActiveConnection(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockActiveConnection {
|
||||||
|
mock := &MockActiveConnection{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,29 +1,14 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package gonetworkmanager
|
package gonetworkmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Wifx/gonetworkmanager/v2"
|
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
|
||||||
"github.com/godbus/dbus/v5"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
|
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockConnection creates a new instance of MockConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockConnection(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockConnection {
|
|
||||||
mock := &MockConnection{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockConnection is an autogenerated mock type for the Connection type
|
// MockConnection is an autogenerated mock type for the Connection type
|
||||||
type MockConnection struct {
|
type MockConnection struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -37,20 +22,21 @@ func (_m *MockConnection) EXPECT() *MockConnection_Expecter {
|
|||||||
return &MockConnection_Expecter{mock: &_m.Mock}
|
return &MockConnection_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearSecrets provides a mock function for the type MockConnection
|
// ClearSecrets provides a mock function with no fields
|
||||||
func (_mock *MockConnection) ClearSecrets() error {
|
func (_m *MockConnection) ClearSecrets() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ClearSecrets")
|
panic("no return value specified for ClearSecrets")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,8 +57,8 @@ func (_c *MockConnection_ClearSecrets_Call) Run(run func()) *MockConnection_Clea
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_ClearSecrets_Call) Return(err error) *MockConnection_ClearSecrets_Call {
|
func (_c *MockConnection_ClearSecrets_Call) Return(_a0 error) *MockConnection_ClearSecrets_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,20 +67,21 @@ func (_c *MockConnection_ClearSecrets_Call) RunAndReturn(run func() error) *Mock
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete provides a mock function for the type MockConnection
|
// Delete provides a mock function with no fields
|
||||||
func (_mock *MockConnection) Delete() error {
|
func (_m *MockConnection) Delete() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Delete")
|
panic("no return value specified for Delete")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,8 +102,8 @@ func (_c *MockConnection_Delete_Call) Run(run func()) *MockConnection_Delete_Cal
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_Delete_Call) Return(err error) *MockConnection_Delete_Call {
|
func (_c *MockConnection_Delete_Call) Return(_a0 error) *MockConnection_Delete_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,20 +112,21 @@ func (_c *MockConnection_Delete_Call) RunAndReturn(run func() error) *MockConnec
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPath provides a mock function for the type MockConnection
|
// GetPath provides a mock function with no fields
|
||||||
func (_mock *MockConnection) GetPath() dbus.ObjectPath {
|
func (_m *MockConnection) GetPath() dbus.ObjectPath {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPath")
|
panic("no return value specified for GetPath")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 dbus.ObjectPath
|
var r0 dbus.ObjectPath
|
||||||
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(dbus.ObjectPath)
|
r0 = ret.Get(0).(dbus.ObjectPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +147,8 @@ func (_c *MockConnection_GetPath_Call) Run(run func()) *MockConnection_GetPath_C
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockConnection_GetPath_Call {
|
func (_c *MockConnection_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockConnection_GetPath_Call {
|
||||||
_c.Call.Return(objectPath)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,9 +157,9 @@ func (_c *MockConnection_GetPath_Call) RunAndReturn(run func() dbus.ObjectPath)
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyFilename provides a mock function for the type MockConnection
|
// GetPropertyFilename provides a mock function with no fields
|
||||||
func (_mock *MockConnection) GetPropertyFilename() (string, error) {
|
func (_m *MockConnection) GetPropertyFilename() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyFilename")
|
panic("no return value specified for GetPropertyFilename")
|
||||||
@@ -179,19 +167,21 @@ func (_mock *MockConnection) GetPropertyFilename() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,8 +202,8 @@ func (_c *MockConnection_GetPropertyFilename_Call) Run(run func()) *MockConnecti
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetPropertyFilename_Call) Return(s string, err error) *MockConnection_GetPropertyFilename_Call {
|
func (_c *MockConnection_GetPropertyFilename_Call) Return(_a0 string, _a1 error) *MockConnection_GetPropertyFilename_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,9 +212,9 @@ func (_c *MockConnection_GetPropertyFilename_Call) RunAndReturn(run func() (stri
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyFlags provides a mock function for the type MockConnection
|
// GetPropertyFlags provides a mock function with no fields
|
||||||
func (_mock *MockConnection) GetPropertyFlags() (uint32, error) {
|
func (_m *MockConnection) GetPropertyFlags() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyFlags")
|
panic("no return value specified for GetPropertyFlags")
|
||||||
@@ -232,19 +222,21 @@ func (_mock *MockConnection) GetPropertyFlags() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,8 +257,8 @@ func (_c *MockConnection_GetPropertyFlags_Call) Run(run func()) *MockConnection_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetPropertyFlags_Call) Return(v uint32, err error) *MockConnection_GetPropertyFlags_Call {
|
func (_c *MockConnection_GetPropertyFlags_Call) Return(_a0 uint32, _a1 error) *MockConnection_GetPropertyFlags_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,9 +267,9 @@ func (_c *MockConnection_GetPropertyFlags_Call) RunAndReturn(run func() (uint32,
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyUnsaved provides a mock function for the type MockConnection
|
// GetPropertyUnsaved provides a mock function with no fields
|
||||||
func (_mock *MockConnection) GetPropertyUnsaved() (bool, error) {
|
func (_m *MockConnection) GetPropertyUnsaved() (bool, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyUnsaved")
|
panic("no return value specified for GetPropertyUnsaved")
|
||||||
@@ -285,19 +277,21 @@ func (_mock *MockConnection) GetPropertyUnsaved() (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() bool); ok {
|
if rf, ok := ret.Get(0).(func() bool); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,8 +312,8 @@ func (_c *MockConnection_GetPropertyUnsaved_Call) Run(run func()) *MockConnectio
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetPropertyUnsaved_Call) Return(b bool, err error) *MockConnection_GetPropertyUnsaved_Call {
|
func (_c *MockConnection_GetPropertyUnsaved_Call) Return(_a0 bool, _a1 error) *MockConnection_GetPropertyUnsaved_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,9 +322,9 @@ func (_c *MockConnection_GetPropertyUnsaved_Call) RunAndReturn(run func() (bool,
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSecrets provides a mock function for the type MockConnection
|
// GetSecrets provides a mock function with given fields: settingName
|
||||||
func (_mock *MockConnection) GetSecrets(settingName string) (gonetworkmanager.ConnectionSettings, error) {
|
func (_m *MockConnection) GetSecrets(settingName string) (gonetworkmanager.ConnectionSettings, error) {
|
||||||
ret := _mock.Called(settingName)
|
ret := _m.Called(settingName)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetSecrets")
|
panic("no return value specified for GetSecrets")
|
||||||
@@ -338,21 +332,23 @@ func (_mock *MockConnection) GetSecrets(settingName string) (gonetworkmanager.Co
|
|||||||
|
|
||||||
var r0 gonetworkmanager.ConnectionSettings
|
var r0 gonetworkmanager.ConnectionSettings
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (gonetworkmanager.ConnectionSettings, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (gonetworkmanager.ConnectionSettings, error)); ok {
|
||||||
return returnFunc(settingName)
|
return rf(settingName)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) gonetworkmanager.ConnectionSettings); ok {
|
if rf, ok := ret.Get(0).(func(string) gonetworkmanager.ConnectionSettings); ok {
|
||||||
r0 = returnFunc(settingName)
|
r0 = rf(settingName)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
|
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(settingName)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(settingName)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,36 +359,30 @@ type MockConnection_GetSecrets_Call struct {
|
|||||||
|
|
||||||
// GetSecrets is a helper method to define mock.On call
|
// GetSecrets is a helper method to define mock.On call
|
||||||
// - settingName string
|
// - settingName string
|
||||||
func (_e *MockConnection_Expecter) GetSecrets(settingName any) *MockConnection_GetSecrets_Call {
|
func (_e *MockConnection_Expecter) GetSecrets(settingName interface{}) *MockConnection_GetSecrets_Call {
|
||||||
return &MockConnection_GetSecrets_Call{Call: _e.mock.On("GetSecrets", settingName)}
|
return &MockConnection_GetSecrets_Call{Call: _e.mock.On("GetSecrets", settingName)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetSecrets_Call) Run(run func(settingName string)) *MockConnection_GetSecrets_Call {
|
func (_c *MockConnection_GetSecrets_Call) Run(run func(settingName string)) *MockConnection_GetSecrets_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetSecrets_Call) Return(connectionSettings gonetworkmanager.ConnectionSettings, err error) *MockConnection_GetSecrets_Call {
|
func (_c *MockConnection_GetSecrets_Call) Return(_a0 gonetworkmanager.ConnectionSettings, _a1 error) *MockConnection_GetSecrets_Call {
|
||||||
_c.Call.Return(connectionSettings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetSecrets_Call) RunAndReturn(run func(settingName string) (gonetworkmanager.ConnectionSettings, error)) *MockConnection_GetSecrets_Call {
|
func (_c *MockConnection_GetSecrets_Call) RunAndReturn(run func(string) (gonetworkmanager.ConnectionSettings, error)) *MockConnection_GetSecrets_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSettings provides a mock function for the type MockConnection
|
// GetSettings provides a mock function with no fields
|
||||||
func (_mock *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings, error) {
|
func (_m *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetSettings")
|
panic("no return value specified for GetSettings")
|
||||||
@@ -400,21 +390,23 @@ func (_mock *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings,
|
|||||||
|
|
||||||
var r0 gonetworkmanager.ConnectionSettings
|
var r0 gonetworkmanager.ConnectionSettings
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.ConnectionSettings, error)); ok {
|
if rf, ok := ret.Get(0).(func() (gonetworkmanager.ConnectionSettings, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.ConnectionSettings); ok {
|
if rf, ok := ret.Get(0).(func() gonetworkmanager.ConnectionSettings); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
|
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,8 +427,8 @@ func (_c *MockConnection_GetSettings_Call) Run(run func()) *MockConnection_GetSe
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_GetSettings_Call) Return(connectionSettings gonetworkmanager.ConnectionSettings, err error) *MockConnection_GetSettings_Call {
|
func (_c *MockConnection_GetSettings_Call) Return(_a0 gonetworkmanager.ConnectionSettings, _a1 error) *MockConnection_GetSettings_Call {
|
||||||
_c.Call.Return(connectionSettings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,9 +437,9 @@ func (_c *MockConnection_GetSettings_Call) RunAndReturn(run func() (gonetworkman
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON provides a mock function for the type MockConnection
|
// MarshalJSON provides a mock function with no fields
|
||||||
func (_mock *MockConnection) MarshalJSON() ([]byte, error) {
|
func (_m *MockConnection) MarshalJSON() ([]byte, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for MarshalJSON")
|
panic("no return value specified for MarshalJSON")
|
||||||
@@ -455,21 +447,23 @@ func (_mock *MockConnection) MarshalJSON() ([]byte, error) {
|
|||||||
|
|
||||||
var r0 []byte
|
var r0 []byte
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
|
if rf, ok := ret.Get(0).(func() []byte); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]byte)
|
r0 = ret.Get(0).([]byte)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,8 +484,8 @@ func (_c *MockConnection_MarshalJSON_Call) Run(run func()) *MockConnection_Marsh
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_MarshalJSON_Call) Return(bytes []byte, err error) *MockConnection_MarshalJSON_Call {
|
func (_c *MockConnection_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockConnection_MarshalJSON_Call {
|
||||||
_c.Call.Return(bytes, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,20 +494,21 @@ func (_c *MockConnection_MarshalJSON_Call) RunAndReturn(run func() ([]byte, erro
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save provides a mock function for the type MockConnection
|
// Save provides a mock function with no fields
|
||||||
func (_mock *MockConnection) Save() error {
|
func (_m *MockConnection) Save() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Save")
|
panic("no return value specified for Save")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,8 +529,8 @@ func (_c *MockConnection_Save_Call) Run(run func()) *MockConnection_Save_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_Save_Call) Return(err error) *MockConnection_Save_Call {
|
func (_c *MockConnection_Save_Call) Return(_a0 error) *MockConnection_Save_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,20 +539,21 @@ func (_c *MockConnection_Save_Call) RunAndReturn(run func() error) *MockConnecti
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update provides a mock function for the type MockConnection
|
// Update provides a mock function with given fields: settings
|
||||||
func (_mock *MockConnection) Update(settings gonetworkmanager.ConnectionSettings) error {
|
func (_m *MockConnection) Update(settings gonetworkmanager.ConnectionSettings) error {
|
||||||
ret := _mock.Called(settings)
|
ret := _m.Called(settings)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Update")
|
panic("no return value specified for Update")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
||||||
r0 = returnFunc(settings)
|
r0 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,47 +564,42 @@ type MockConnection_Update_Call struct {
|
|||||||
|
|
||||||
// Update is a helper method to define mock.On call
|
// Update is a helper method to define mock.On call
|
||||||
// - settings gonetworkmanager.ConnectionSettings
|
// - settings gonetworkmanager.ConnectionSettings
|
||||||
func (_e *MockConnection_Expecter) Update(settings any) *MockConnection_Update_Call {
|
func (_e *MockConnection_Expecter) Update(settings interface{}) *MockConnection_Update_Call {
|
||||||
return &MockConnection_Update_Call{Call: _e.mock.On("Update", settings)}
|
return &MockConnection_Update_Call{Call: _e.mock.On("Update", settings)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_Update_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_Update_Call {
|
func (_c *MockConnection_Update_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_Update_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 gonetworkmanager.ConnectionSettings
|
run(args[0].(gonetworkmanager.ConnectionSettings))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_Update_Call) Return(err error) *MockConnection_Update_Call {
|
func (_c *MockConnection_Update_Call) Return(_a0 error) *MockConnection_Update_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_Update_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) error) *MockConnection_Update_Call {
|
func (_c *MockConnection_Update_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) error) *MockConnection_Update_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateUnsaved provides a mock function for the type MockConnection
|
// UpdateUnsaved provides a mock function with given fields: settings
|
||||||
func (_mock *MockConnection) UpdateUnsaved(settings gonetworkmanager.ConnectionSettings) error {
|
func (_m *MockConnection) UpdateUnsaved(settings gonetworkmanager.ConnectionSettings) error {
|
||||||
ret := _mock.Called(settings)
|
ret := _m.Called(settings)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for UpdateUnsaved")
|
panic("no return value specified for UpdateUnsaved")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
||||||
r0 = returnFunc(settings)
|
r0 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -619,29 +610,37 @@ type MockConnection_UpdateUnsaved_Call struct {
|
|||||||
|
|
||||||
// UpdateUnsaved is a helper method to define mock.On call
|
// UpdateUnsaved is a helper method to define mock.On call
|
||||||
// - settings gonetworkmanager.ConnectionSettings
|
// - settings gonetworkmanager.ConnectionSettings
|
||||||
func (_e *MockConnection_Expecter) UpdateUnsaved(settings any) *MockConnection_UpdateUnsaved_Call {
|
func (_e *MockConnection_Expecter) UpdateUnsaved(settings interface{}) *MockConnection_UpdateUnsaved_Call {
|
||||||
return &MockConnection_UpdateUnsaved_Call{Call: _e.mock.On("UpdateUnsaved", settings)}
|
return &MockConnection_UpdateUnsaved_Call{Call: _e.mock.On("UpdateUnsaved", settings)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_UpdateUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_UpdateUnsaved_Call {
|
func (_c *MockConnection_UpdateUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_UpdateUnsaved_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 gonetworkmanager.ConnectionSettings
|
run(args[0].(gonetworkmanager.ConnectionSettings))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_UpdateUnsaved_Call) Return(err error) *MockConnection_UpdateUnsaved_Call {
|
func (_c *MockConnection_UpdateUnsaved_Call) Return(_a0 error) *MockConnection_UpdateUnsaved_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConnection_UpdateUnsaved_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) error) *MockConnection_UpdateUnsaved_Call {
|
func (_c *MockConnection_UpdateUnsaved_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) error) *MockConnection_UpdateUnsaved_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockConnection creates a new instance of MockConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockConnection(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockConnection {
|
||||||
|
mock := &MockConnection{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package gonetworkmanager
|
package gonetworkmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Wifx/gonetworkmanager/v2"
|
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockIP4Config creates a new instance of MockIP4Config. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockIP4Config(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockIP4Config {
|
|
||||||
mock := &MockIP4Config{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockIP4Config is an autogenerated mock type for the IP4Config type
|
// MockIP4Config is an autogenerated mock type for the IP4Config type
|
||||||
type MockIP4Config struct {
|
type MockIP4Config struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,9 +20,9 @@ func (_m *MockIP4Config) EXPECT() *MockIP4Config_Expecter {
|
|||||||
return &MockIP4Config_Expecter{mock: &_m.Mock}
|
return &MockIP4Config_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyAddressData provides a mock function for the type MockIP4Config
|
// GetPropertyAddressData provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4AddressData, error) {
|
func (_m *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4AddressData, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyAddressData")
|
panic("no return value specified for GetPropertyAddressData")
|
||||||
@@ -46,21 +30,23 @@ func (_mock *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4Addr
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.IP4AddressData
|
var r0 []gonetworkmanager.IP4AddressData
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4AddressData, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4AddressData, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4AddressData); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4AddressData); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.IP4AddressData)
|
r0 = ret.Get(0).([]gonetworkmanager.IP4AddressData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,8 +67,8 @@ func (_c *MockIP4Config_GetPropertyAddressData_Call) Run(run func()) *MockIP4Con
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyAddressData_Call) Return(iP4AddressDatas []gonetworkmanager.IP4AddressData, err error) *MockIP4Config_GetPropertyAddressData_Call {
|
func (_c *MockIP4Config_GetPropertyAddressData_Call) Return(_a0 []gonetworkmanager.IP4AddressData, _a1 error) *MockIP4Config_GetPropertyAddressData_Call {
|
||||||
_c.Call.Return(iP4AddressDatas, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,9 +77,9 @@ func (_c *MockIP4Config_GetPropertyAddressData_Call) RunAndReturn(run func() ([]
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyAddresses provides a mock function for the type MockIP4Config
|
// GetPropertyAddresses provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Address, error) {
|
func (_m *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Address, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyAddresses")
|
panic("no return value specified for GetPropertyAddresses")
|
||||||
@@ -101,21 +87,23 @@ func (_mock *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Addres
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.IP4Address
|
var r0 []gonetworkmanager.IP4Address
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Address, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Address, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4Address); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4Address); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.IP4Address)
|
r0 = ret.Get(0).([]gonetworkmanager.IP4Address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,8 +124,8 @@ func (_c *MockIP4Config_GetPropertyAddresses_Call) Run(run func()) *MockIP4Confi
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyAddresses_Call) Return(iP4Addresss []gonetworkmanager.IP4Address, err error) *MockIP4Config_GetPropertyAddresses_Call {
|
func (_c *MockIP4Config_GetPropertyAddresses_Call) Return(_a0 []gonetworkmanager.IP4Address, _a1 error) *MockIP4Config_GetPropertyAddresses_Call {
|
||||||
_c.Call.Return(iP4Addresss, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,9 +134,9 @@ func (_c *MockIP4Config_GetPropertyAddresses_Call) RunAndReturn(run func() ([]go
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDnsOptions provides a mock function for the type MockIP4Config
|
// GetPropertyDnsOptions provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
|
func (_m *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDnsOptions")
|
panic("no return value specified for GetPropertyDnsOptions")
|
||||||
@@ -156,21 +144,23 @@ func (_mock *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
|
|||||||
|
|
||||||
var r0 []string
|
var r0 []string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []string); ok {
|
if rf, ok := ret.Get(0).(func() []string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]string)
|
r0 = ret.Get(0).([]string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,8 +181,8 @@ func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Run(run func()) *MockIP4Conf
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyDnsOptions_Call {
|
func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyDnsOptions_Call {
|
||||||
_c.Call.Return(strings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,9 +191,9 @@ func (_c *MockIP4Config_GetPropertyDnsOptions_Call) RunAndReturn(run func() ([]s
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDnsPriority provides a mock function for the type MockIP4Config
|
// GetPropertyDnsPriority provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
|
func (_m *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDnsPriority")
|
panic("no return value specified for GetPropertyDnsPriority")
|
||||||
@@ -211,19 +201,21 @@ func (_mock *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
|
|||||||
|
|
||||||
var r0 uint32
|
var r0 uint32
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
|
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
|
if rf, ok := ret.Get(0).(func() uint32); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(uint32)
|
r0 = ret.Get(0).(uint32)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,8 +236,8 @@ func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Run(run func()) *MockIP4Con
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Return(v uint32, err error) *MockIP4Config_GetPropertyDnsPriority_Call {
|
func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Return(_a0 uint32, _a1 error) *MockIP4Config_GetPropertyDnsPriority_Call {
|
||||||
_c.Call.Return(v, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,9 +246,9 @@ func (_c *MockIP4Config_GetPropertyDnsPriority_Call) RunAndReturn(run func() (ui
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyDomains provides a mock function for the type MockIP4Config
|
// GetPropertyDomains provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyDomains() ([]string, error) {
|
func (_m *MockIP4Config) GetPropertyDomains() ([]string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyDomains")
|
panic("no return value specified for GetPropertyDomains")
|
||||||
@@ -264,21 +256,23 @@ func (_mock *MockIP4Config) GetPropertyDomains() ([]string, error) {
|
|||||||
|
|
||||||
var r0 []string
|
var r0 []string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []string); ok {
|
if rf, ok := ret.Get(0).(func() []string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]string)
|
r0 = ret.Get(0).([]string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,8 +293,8 @@ func (_c *MockIP4Config_GetPropertyDomains_Call) Run(run func()) *MockIP4Config_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyDomains_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyDomains_Call {
|
func (_c *MockIP4Config_GetPropertyDomains_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyDomains_Call {
|
||||||
_c.Call.Return(strings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,9 +303,9 @@ func (_c *MockIP4Config_GetPropertyDomains_Call) RunAndReturn(run func() ([]stri
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyGateway provides a mock function for the type MockIP4Config
|
// GetPropertyGateway provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyGateway() (string, error) {
|
func (_m *MockIP4Config) GetPropertyGateway() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyGateway")
|
panic("no return value specified for GetPropertyGateway")
|
||||||
@@ -319,19 +313,21 @@ func (_mock *MockIP4Config) GetPropertyGateway() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,8 +348,8 @@ func (_c *MockIP4Config_GetPropertyGateway_Call) Run(run func()) *MockIP4Config_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyGateway_Call) Return(s string, err error) *MockIP4Config_GetPropertyGateway_Call {
|
func (_c *MockIP4Config_GetPropertyGateway_Call) Return(_a0 string, _a1 error) *MockIP4Config_GetPropertyGateway_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,9 +358,9 @@ func (_c *MockIP4Config_GetPropertyGateway_Call) RunAndReturn(run func() (string
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyNameserverData provides a mock function for the type MockIP4Config
|
// GetPropertyNameserverData provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4NameserverData, error) {
|
func (_m *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4NameserverData, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyNameserverData")
|
panic("no return value specified for GetPropertyNameserverData")
|
||||||
@@ -372,21 +368,23 @@ func (_mock *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4N
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.IP4NameserverData
|
var r0 []gonetworkmanager.IP4NameserverData
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4NameserverData, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4NameserverData, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4NameserverData); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4NameserverData); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.IP4NameserverData)
|
r0 = ret.Get(0).([]gonetworkmanager.IP4NameserverData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,8 +405,8 @@ func (_c *MockIP4Config_GetPropertyNameserverData_Call) Run(run func()) *MockIP4
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyNameserverData_Call) Return(iP4NameserverDatas []gonetworkmanager.IP4NameserverData, err error) *MockIP4Config_GetPropertyNameserverData_Call {
|
func (_c *MockIP4Config_GetPropertyNameserverData_Call) Return(_a0 []gonetworkmanager.IP4NameserverData, _a1 error) *MockIP4Config_GetPropertyNameserverData_Call {
|
||||||
_c.Call.Return(iP4NameserverDatas, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,9 +415,9 @@ func (_c *MockIP4Config_GetPropertyNameserverData_Call) RunAndReturn(run func()
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyNameservers provides a mock function for the type MockIP4Config
|
// GetPropertyNameservers provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyNameservers() ([]string, error) {
|
func (_m *MockIP4Config) GetPropertyNameservers() ([]string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyNameservers")
|
panic("no return value specified for GetPropertyNameservers")
|
||||||
@@ -427,21 +425,23 @@ func (_mock *MockIP4Config) GetPropertyNameservers() ([]string, error) {
|
|||||||
|
|
||||||
var r0 []string
|
var r0 []string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []string); ok {
|
if rf, ok := ret.Get(0).(func() []string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]string)
|
r0 = ret.Get(0).([]string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,8 +462,8 @@ func (_c *MockIP4Config_GetPropertyNameservers_Call) Run(run func()) *MockIP4Con
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyNameservers_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyNameservers_Call {
|
func (_c *MockIP4Config_GetPropertyNameservers_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyNameservers_Call {
|
||||||
_c.Call.Return(strings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,9 +472,9 @@ func (_c *MockIP4Config_GetPropertyNameservers_Call) RunAndReturn(run func() ([]
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyRouteData provides a mock function for the type MockIP4Config
|
// GetPropertyRouteData provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteData, error) {
|
func (_m *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteData, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyRouteData")
|
panic("no return value specified for GetPropertyRouteData")
|
||||||
@@ -482,21 +482,23 @@ func (_mock *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteD
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.IP4RouteData
|
var r0 []gonetworkmanager.IP4RouteData
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4RouteData, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4RouteData, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4RouteData); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4RouteData); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.IP4RouteData)
|
r0 = ret.Get(0).([]gonetworkmanager.IP4RouteData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,8 +519,8 @@ func (_c *MockIP4Config_GetPropertyRouteData_Call) Run(run func()) *MockIP4Confi
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyRouteData_Call) Return(iP4RouteDatas []gonetworkmanager.IP4RouteData, err error) *MockIP4Config_GetPropertyRouteData_Call {
|
func (_c *MockIP4Config_GetPropertyRouteData_Call) Return(_a0 []gonetworkmanager.IP4RouteData, _a1 error) *MockIP4Config_GetPropertyRouteData_Call {
|
||||||
_c.Call.Return(iP4RouteDatas, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -527,9 +529,9 @@ func (_c *MockIP4Config_GetPropertyRouteData_Call) RunAndReturn(run func() ([]go
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyRoutes provides a mock function for the type MockIP4Config
|
// GetPropertyRoutes provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, error) {
|
func (_m *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyRoutes")
|
panic("no return value specified for GetPropertyRoutes")
|
||||||
@@ -537,21 +539,23 @@ func (_mock *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, er
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.IP4Route
|
var r0 []gonetworkmanager.IP4Route
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Route, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Route, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4Route); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4Route); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.IP4Route)
|
r0 = ret.Get(0).([]gonetworkmanager.IP4Route)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -572,8 +576,8 @@ func (_c *MockIP4Config_GetPropertyRoutes_Call) Run(run func()) *MockIP4Config_G
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyRoutes_Call) Return(iP4Routes []gonetworkmanager.IP4Route, err error) *MockIP4Config_GetPropertyRoutes_Call {
|
func (_c *MockIP4Config_GetPropertyRoutes_Call) Return(_a0 []gonetworkmanager.IP4Route, _a1 error) *MockIP4Config_GetPropertyRoutes_Call {
|
||||||
_c.Call.Return(iP4Routes, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,9 +586,9 @@ func (_c *MockIP4Config_GetPropertyRoutes_Call) RunAndReturn(run func() ([]gonet
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertySearches provides a mock function for the type MockIP4Config
|
// GetPropertySearches provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertySearches() ([]string, error) {
|
func (_m *MockIP4Config) GetPropertySearches() ([]string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertySearches")
|
panic("no return value specified for GetPropertySearches")
|
||||||
@@ -592,21 +596,23 @@ func (_mock *MockIP4Config) GetPropertySearches() ([]string, error) {
|
|||||||
|
|
||||||
var r0 []string
|
var r0 []string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []string); ok {
|
if rf, ok := ret.Get(0).(func() []string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]string)
|
r0 = ret.Get(0).([]string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,8 +633,8 @@ func (_c *MockIP4Config_GetPropertySearches_Call) Run(run func()) *MockIP4Config
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertySearches_Call) Return(strings []string, err error) *MockIP4Config_GetPropertySearches_Call {
|
func (_c *MockIP4Config_GetPropertySearches_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertySearches_Call {
|
||||||
_c.Call.Return(strings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,9 +643,9 @@ func (_c *MockIP4Config_GetPropertySearches_Call) RunAndReturn(run func() ([]str
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyWinsServerData provides a mock function for the type MockIP4Config
|
// GetPropertyWinsServerData provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
|
func (_m *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyWinsServerData")
|
panic("no return value specified for GetPropertyWinsServerData")
|
||||||
@@ -647,21 +653,23 @@ func (_mock *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
|
|||||||
|
|
||||||
var r0 []string
|
var r0 []string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []string); ok {
|
if rf, ok := ret.Get(0).(func() []string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]string)
|
r0 = ret.Get(0).([]string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,8 +690,8 @@ func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Run(run func()) *MockIP4
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyWinsServerData_Call {
|
func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyWinsServerData_Call {
|
||||||
_c.Call.Return(strings, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,9 +700,9 @@ func (_c *MockIP4Config_GetPropertyWinsServerData_Call) RunAndReturn(run func()
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON provides a mock function for the type MockIP4Config
|
// MarshalJSON provides a mock function with no fields
|
||||||
func (_mock *MockIP4Config) MarshalJSON() ([]byte, error) {
|
func (_m *MockIP4Config) MarshalJSON() ([]byte, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for MarshalJSON")
|
panic("no return value specified for MarshalJSON")
|
||||||
@@ -702,21 +710,23 @@ func (_mock *MockIP4Config) MarshalJSON() ([]byte, error) {
|
|||||||
|
|
||||||
var r0 []byte
|
var r0 []byte
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
|
if rf, ok := ret.Get(0).(func() []byte); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]byte)
|
r0 = ret.Get(0).([]byte)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -737,8 +747,8 @@ func (_c *MockIP4Config_MarshalJSON_Call) Run(run func()) *MockIP4Config_Marshal
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockIP4Config_MarshalJSON_Call) Return(bytes []byte, err error) *MockIP4Config_MarshalJSON_Call {
|
func (_c *MockIP4Config_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockIP4Config_MarshalJSON_Call {
|
||||||
_c.Call.Return(bytes, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -746,3 +756,17 @@ func (_c *MockIP4Config_MarshalJSON_Call) RunAndReturn(run func() ([]byte, error
|
|||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockIP4Config creates a new instance of MockIP4Config. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockIP4Config(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockIP4Config {
|
||||||
|
mock := &MockIP4Config{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package gonetworkmanager
|
package gonetworkmanager
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Wifx/gonetworkmanager/v2"
|
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockSettings creates a new instance of MockSettings. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockSettings(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockSettings {
|
|
||||||
mock := &MockSettings{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockSettings is an autogenerated mock type for the Settings type
|
// MockSettings is an autogenerated mock type for the Settings type
|
||||||
type MockSettings struct {
|
type MockSettings struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,9 +20,9 @@ func (_m *MockSettings) EXPECT() *MockSettings_Expecter {
|
|||||||
return &MockSettings_Expecter{mock: &_m.Mock}
|
return &MockSettings_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddConnection provides a mock function for the type MockSettings
|
// AddConnection provides a mock function with given fields: settings
|
||||||
func (_mock *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
|
func (_m *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
|
||||||
ret := _mock.Called(settings)
|
ret := _m.Called(settings)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for AddConnection")
|
panic("no return value specified for AddConnection")
|
||||||
@@ -46,21 +30,23 @@ func (_mock *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSet
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Connection
|
var r0 gonetworkmanager.Connection
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
|
||||||
return returnFunc(settings)
|
return rf(settings)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
|
||||||
r0 = returnFunc(settings)
|
r0 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
|
||||||
r1 = returnFunc(settings)
|
if rf, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
||||||
|
r1 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,36 +57,30 @@ type MockSettings_AddConnection_Call struct {
|
|||||||
|
|
||||||
// AddConnection is a helper method to define mock.On call
|
// AddConnection is a helper method to define mock.On call
|
||||||
// - settings gonetworkmanager.ConnectionSettings
|
// - settings gonetworkmanager.ConnectionSettings
|
||||||
func (_e *MockSettings_Expecter) AddConnection(settings any) *MockSettings_AddConnection_Call {
|
func (_e *MockSettings_Expecter) AddConnection(settings interface{}) *MockSettings_AddConnection_Call {
|
||||||
return &MockSettings_AddConnection_Call{Call: _e.mock.On("AddConnection", settings)}
|
return &MockSettings_AddConnection_Call{Call: _e.mock.On("AddConnection", settings)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnection_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnection_Call {
|
func (_c *MockSettings_AddConnection_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnection_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 gonetworkmanager.ConnectionSettings
|
run(args[0].(gonetworkmanager.ConnectionSettings))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnection_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_AddConnection_Call {
|
func (_c *MockSettings_AddConnection_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_AddConnection_Call {
|
||||||
_c.Call.Return(connection, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnection_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnection_Call {
|
func (_c *MockSettings_AddConnection_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnection_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddConnectionUnsaved provides a mock function for the type MockSettings
|
// AddConnectionUnsaved provides a mock function with given fields: settings
|
||||||
func (_mock *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
|
func (_m *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
|
||||||
ret := _mock.Called(settings)
|
ret := _m.Called(settings)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for AddConnectionUnsaved")
|
panic("no return value specified for AddConnectionUnsaved")
|
||||||
@@ -108,21 +88,23 @@ func (_mock *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.Connec
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Connection
|
var r0 gonetworkmanager.Connection
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
|
||||||
return returnFunc(settings)
|
return rf(settings)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
|
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
|
||||||
r0 = returnFunc(settings)
|
r0 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
|
||||||
r1 = returnFunc(settings)
|
if rf, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
|
||||||
|
r1 = rf(settings)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,36 +115,30 @@ type MockSettings_AddConnectionUnsaved_Call struct {
|
|||||||
|
|
||||||
// AddConnectionUnsaved is a helper method to define mock.On call
|
// AddConnectionUnsaved is a helper method to define mock.On call
|
||||||
// - settings gonetworkmanager.ConnectionSettings
|
// - settings gonetworkmanager.ConnectionSettings
|
||||||
func (_e *MockSettings_Expecter) AddConnectionUnsaved(settings any) *MockSettings_AddConnectionUnsaved_Call {
|
func (_e *MockSettings_Expecter) AddConnectionUnsaved(settings interface{}) *MockSettings_AddConnectionUnsaved_Call {
|
||||||
return &MockSettings_AddConnectionUnsaved_Call{Call: _e.mock.On("AddConnectionUnsaved", settings)}
|
return &MockSettings_AddConnectionUnsaved_Call{Call: _e.mock.On("AddConnectionUnsaved", settings)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnectionUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnectionUnsaved_Call {
|
func (_c *MockSettings_AddConnectionUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnectionUnsaved_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 gonetworkmanager.ConnectionSettings
|
run(args[0].(gonetworkmanager.ConnectionSettings))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnectionUnsaved_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_AddConnectionUnsaved_Call {
|
func (_c *MockSettings_AddConnectionUnsaved_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_AddConnectionUnsaved_Call {
|
||||||
_c.Call.Return(connection, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_AddConnectionUnsaved_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnectionUnsaved_Call {
|
func (_c *MockSettings_AddConnectionUnsaved_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnectionUnsaved_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConnectionByUUID provides a mock function for the type MockSettings
|
// GetConnectionByUUID provides a mock function with given fields: uuid
|
||||||
func (_mock *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Connection, error) {
|
func (_m *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Connection, error) {
|
||||||
ret := _mock.Called(uuid)
|
ret := _m.Called(uuid)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetConnectionByUUID")
|
panic("no return value specified for GetConnectionByUUID")
|
||||||
@@ -170,21 +146,23 @@ func (_mock *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Co
|
|||||||
|
|
||||||
var r0 gonetworkmanager.Connection
|
var r0 gonetworkmanager.Connection
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (gonetworkmanager.Connection, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (gonetworkmanager.Connection, error)); ok {
|
||||||
return returnFunc(uuid)
|
return rf(uuid)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) gonetworkmanager.Connection); ok {
|
if rf, ok := ret.Get(0).(func(string) gonetworkmanager.Connection); ok {
|
||||||
r0 = returnFunc(uuid)
|
r0 = rf(uuid)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
r0 = ret.Get(0).(gonetworkmanager.Connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(uuid)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(uuid)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,36 +173,30 @@ type MockSettings_GetConnectionByUUID_Call struct {
|
|||||||
|
|
||||||
// GetConnectionByUUID is a helper method to define mock.On call
|
// GetConnectionByUUID is a helper method to define mock.On call
|
||||||
// - uuid string
|
// - uuid string
|
||||||
func (_e *MockSettings_Expecter) GetConnectionByUUID(uuid any) *MockSettings_GetConnectionByUUID_Call {
|
func (_e *MockSettings_Expecter) GetConnectionByUUID(uuid interface{}) *MockSettings_GetConnectionByUUID_Call {
|
||||||
return &MockSettings_GetConnectionByUUID_Call{Call: _e.mock.On("GetConnectionByUUID", uuid)}
|
return &MockSettings_GetConnectionByUUID_Call{Call: _e.mock.On("GetConnectionByUUID", uuid)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_GetConnectionByUUID_Call) Run(run func(uuid string)) *MockSettings_GetConnectionByUUID_Call {
|
func (_c *MockSettings_GetConnectionByUUID_Call) Run(run func(uuid string)) *MockSettings_GetConnectionByUUID_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_GetConnectionByUUID_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_GetConnectionByUUID_Call {
|
func (_c *MockSettings_GetConnectionByUUID_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_GetConnectionByUUID_Call {
|
||||||
_c.Call.Return(connection, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_GetConnectionByUUID_Call) RunAndReturn(run func(uuid string) (gonetworkmanager.Connection, error)) *MockSettings_GetConnectionByUUID_Call {
|
func (_c *MockSettings_GetConnectionByUUID_Call) RunAndReturn(run func(string) (gonetworkmanager.Connection, error)) *MockSettings_GetConnectionByUUID_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyCanModify provides a mock function for the type MockSettings
|
// GetPropertyCanModify provides a mock function with no fields
|
||||||
func (_mock *MockSettings) GetPropertyCanModify() (bool, error) {
|
func (_m *MockSettings) GetPropertyCanModify() (bool, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyCanModify")
|
panic("no return value specified for GetPropertyCanModify")
|
||||||
@@ -232,19 +204,21 @@ func (_mock *MockSettings) GetPropertyCanModify() (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() bool); ok {
|
if rf, ok := ret.Get(0).(func() bool); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,8 +239,8 @@ func (_c *MockSettings_GetPropertyCanModify_Call) Run(run func()) *MockSettings_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_GetPropertyCanModify_Call) Return(b bool, err error) *MockSettings_GetPropertyCanModify_Call {
|
func (_c *MockSettings_GetPropertyCanModify_Call) Return(_a0 bool, _a1 error) *MockSettings_GetPropertyCanModify_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,9 +249,9 @@ func (_c *MockSettings_GetPropertyCanModify_Call) RunAndReturn(run func() (bool,
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPropertyHostname provides a mock function for the type MockSettings
|
// GetPropertyHostname provides a mock function with no fields
|
||||||
func (_mock *MockSettings) GetPropertyHostname() (string, error) {
|
func (_m *MockSettings) GetPropertyHostname() (string, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetPropertyHostname")
|
panic("no return value specified for GetPropertyHostname")
|
||||||
@@ -285,19 +259,21 @@ func (_mock *MockSettings) GetPropertyHostname() (string, error) {
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
|
if rf, ok := ret.Get(0).(func() (string, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,8 +294,8 @@ func (_c *MockSettings_GetPropertyHostname_Call) Run(run func()) *MockSettings_G
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_GetPropertyHostname_Call) Return(s string, err error) *MockSettings_GetPropertyHostname_Call {
|
func (_c *MockSettings_GetPropertyHostname_Call) Return(_a0 string, _a1 error) *MockSettings_GetPropertyHostname_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,9 +304,9 @@ func (_c *MockSettings_GetPropertyHostname_Call) RunAndReturn(run func() (string
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListConnections provides a mock function for the type MockSettings
|
// ListConnections provides a mock function with no fields
|
||||||
func (_mock *MockSettings) ListConnections() ([]gonetworkmanager.Connection, error) {
|
func (_m *MockSettings) ListConnections() ([]gonetworkmanager.Connection, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ListConnections")
|
panic("no return value specified for ListConnections")
|
||||||
@@ -338,21 +314,23 @@ func (_mock *MockSettings) ListConnections() ([]gonetworkmanager.Connection, err
|
|||||||
|
|
||||||
var r0 []gonetworkmanager.Connection
|
var r0 []gonetworkmanager.Connection
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.Connection, error)); ok {
|
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.Connection, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.Connection); ok {
|
if rf, ok := ret.Get(0).(func() []gonetworkmanager.Connection); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]gonetworkmanager.Connection)
|
r0 = ret.Get(0).([]gonetworkmanager.Connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,8 +351,8 @@ func (_c *MockSettings_ListConnections_Call) Run(run func()) *MockSettings_ListC
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_ListConnections_Call) Return(connections []gonetworkmanager.Connection, err error) *MockSettings_ListConnections_Call {
|
func (_c *MockSettings_ListConnections_Call) Return(_a0 []gonetworkmanager.Connection, _a1 error) *MockSettings_ListConnections_Call {
|
||||||
_c.Call.Return(connections, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,20 +361,21 @@ func (_c *MockSettings_ListConnections_Call) RunAndReturn(run func() ([]gonetwor
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReloadConnections provides a mock function for the type MockSettings
|
// ReloadConnections provides a mock function with no fields
|
||||||
func (_mock *MockSettings) ReloadConnections() error {
|
func (_m *MockSettings) ReloadConnections() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for ReloadConnections")
|
panic("no return value specified for ReloadConnections")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,8 +396,8 @@ func (_c *MockSettings_ReloadConnections_Call) Run(run func()) *MockSettings_Rel
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_ReloadConnections_Call) Return(err error) *MockSettings_ReloadConnections_Call {
|
func (_c *MockSettings_ReloadConnections_Call) Return(_a0 error) *MockSettings_ReloadConnections_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,20 +406,21 @@ func (_c *MockSettings_ReloadConnections_Call) RunAndReturn(run func() error) *M
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SaveHostname provides a mock function for the type MockSettings
|
// SaveHostname provides a mock function with given fields: hostname
|
||||||
func (_mock *MockSettings) SaveHostname(hostname string) error {
|
func (_m *MockSettings) SaveHostname(hostname string) error {
|
||||||
ret := _mock.Called(hostname)
|
ret := _m.Called(hostname)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SaveHostname")
|
panic("no return value specified for SaveHostname")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
|
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||||
r0 = returnFunc(hostname)
|
r0 = rf(hostname)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,29 +431,37 @@ type MockSettings_SaveHostname_Call struct {
|
|||||||
|
|
||||||
// SaveHostname is a helper method to define mock.On call
|
// SaveHostname is a helper method to define mock.On call
|
||||||
// - hostname string
|
// - hostname string
|
||||||
func (_e *MockSettings_Expecter) SaveHostname(hostname any) *MockSettings_SaveHostname_Call {
|
func (_e *MockSettings_Expecter) SaveHostname(hostname interface{}) *MockSettings_SaveHostname_Call {
|
||||||
return &MockSettings_SaveHostname_Call{Call: _e.mock.On("SaveHostname", hostname)}
|
return &MockSettings_SaveHostname_Call{Call: _e.mock.On("SaveHostname", hostname)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_SaveHostname_Call) Run(run func(hostname string)) *MockSettings_SaveHostname_Call {
|
func (_c *MockSettings_SaveHostname_Call) Run(run func(hostname string)) *MockSettings_SaveHostname_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_SaveHostname_Call) Return(err error) *MockSettings_SaveHostname_Call {
|
func (_c *MockSettings_SaveHostname_Call) Return(_a0 error) *MockSettings_SaveHostname_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockSettings_SaveHostname_Call) RunAndReturn(run func(hostname string) error) *MockSettings_SaveHostname_Call {
|
func (_c *MockSettings_SaveHostname_Call) RunAndReturn(run func(string) error) *MockSettings_SaveHostname_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockSettings creates a new instance of MockSettings. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockSettings(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockSettings {
|
||||||
|
mock := &MockSettings{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,30 +1,14 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package dbus
|
package dbus
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
context "context"
|
||||||
|
|
||||||
"github.com/godbus/dbus/v5"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockBusObject creates a new instance of MockBusObject. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockBusObject(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockBusObject {
|
|
||||||
mock := &MockBusObject{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockBusObject is an autogenerated mock type for the BusObject type
|
// MockBusObject is an autogenerated mock type for the BusObject type
|
||||||
type MockBusObject struct {
|
type MockBusObject struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -38,30 +22,30 @@ func (_m *MockBusObject) EXPECT() *MockBusObject_Expecter {
|
|||||||
return &MockBusObject_Expecter{mock: &_m.Mock}
|
return &MockBusObject_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddMatchSignal provides a mock function for the type MockBusObject
|
// AddMatchSignal provides a mock function with given fields: iface, member, options
|
||||||
func (_mock *MockBusObject) AddMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
|
func (_m *MockBusObject) AddMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
|
||||||
// dbus.MatchOption
|
_va := make([]interface{}, len(options))
|
||||||
_va := make([]any, len(options))
|
|
||||||
for _i := range options {
|
for _i := range options {
|
||||||
_va[_i] = options[_i]
|
_va[_i] = options[_i]
|
||||||
}
|
}
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, iface, member)
|
_ca = append(_ca, iface, member)
|
||||||
_ca = append(_ca, _va...)
|
_ca = append(_ca, _va...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for AddMatchSignal")
|
panic("no return value specified for AddMatchSignal")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
|
||||||
r0 = returnFunc(iface, member, options...)
|
r0 = rf(iface, member, options...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,67 +58,54 @@ type MockBusObject_AddMatchSignal_Call struct {
|
|||||||
// - iface string
|
// - iface string
|
||||||
// - member string
|
// - member string
|
||||||
// - options ...dbus.MatchOption
|
// - options ...dbus.MatchOption
|
||||||
func (_e *MockBusObject_Expecter) AddMatchSignal(iface any, member any, options ...any) *MockBusObject_AddMatchSignal_Call {
|
func (_e *MockBusObject_Expecter) AddMatchSignal(iface interface{}, member interface{}, options ...interface{}) *MockBusObject_AddMatchSignal_Call {
|
||||||
return &MockBusObject_AddMatchSignal_Call{Call: _e.mock.On("AddMatchSignal",
|
return &MockBusObject_AddMatchSignal_Call{Call: _e.mock.On("AddMatchSignal",
|
||||||
append([]any{iface, member}, options...)...)}
|
append([]interface{}{iface, member}, options...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_AddMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_AddMatchSignal_Call {
|
func (_c *MockBusObject_AddMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_AddMatchSignal_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
var arg2 []dbus.MatchOption
|
|
||||||
variadicArgs := make([]dbus.MatchOption, len(args)-2)
|
variadicArgs := make([]dbus.MatchOption, len(args)-2)
|
||||||
for i, a := range args[2:] {
|
for i, a := range args[2:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(dbus.MatchOption)
|
variadicArgs[i] = a.(dbus.MatchOption)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg2 = variadicArgs
|
run(args[0].(string), args[1].(string), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_AddMatchSignal_Call) Return(call *dbus.Call) *MockBusObject_AddMatchSignal_Call {
|
func (_c *MockBusObject_AddMatchSignal_Call) Return(_a0 *dbus.Call) *MockBusObject_AddMatchSignal_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_AddMatchSignal_Call) RunAndReturn(run func(iface string, member string, options ...dbus.MatchOption) *dbus.Call) *MockBusObject_AddMatchSignal_Call {
|
func (_c *MockBusObject_AddMatchSignal_Call) RunAndReturn(run func(string, string, ...dbus.MatchOption) *dbus.Call) *MockBusObject_AddMatchSignal_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call provides a mock function for the type MockBusObject
|
// Call provides a mock function with given fields: method, flags, args
|
||||||
func (_mock *MockBusObject) Call(method string, flags dbus.Flags, args ...any) *dbus.Call {
|
func (_m *MockBusObject) Call(method string, flags dbus.Flags, args ...interface{}) *dbus.Call {
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, method, flags)
|
_ca = append(_ca, method, flags)
|
||||||
_ca = append(_ca, args...)
|
_ca = append(_ca, args...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Call")
|
panic("no return value specified for Call")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, dbus.Flags, ...any) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(string, dbus.Flags, ...interface{}) *dbus.Call); ok {
|
||||||
r0 = returnFunc(method, flags, args...)
|
r0 = rf(method, flags, args...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,68 +117,55 @@ type MockBusObject_Call_Call struct {
|
|||||||
// Call is a helper method to define mock.On call
|
// Call is a helper method to define mock.On call
|
||||||
// - method string
|
// - method string
|
||||||
// - flags dbus.Flags
|
// - flags dbus.Flags
|
||||||
// - args ...any
|
// - args ...interface{}
|
||||||
func (_e *MockBusObject_Expecter) Call(method any, flags any, args ...any) *MockBusObject_Call_Call {
|
func (_e *MockBusObject_Expecter) Call(method interface{}, flags interface{}, args ...interface{}) *MockBusObject_Call_Call {
|
||||||
return &MockBusObject_Call_Call{Call: _e.mock.On("Call",
|
return &MockBusObject_Call_Call{Call: _e.mock.On("Call",
|
||||||
append([]any{method, flags}, args...)...)}
|
append([]interface{}{method, flags}, args...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Call_Call) Run(run func(method string, flags dbus.Flags, args ...any)) *MockBusObject_Call_Call {
|
func (_c *MockBusObject_Call_Call) Run(run func(method string, flags dbus.Flags, args ...interface{})) *MockBusObject_Call_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
variadicArgs := make([]interface{}, len(args)-2)
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 dbus.Flags
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(dbus.Flags)
|
|
||||||
}
|
|
||||||
var arg2 []any
|
|
||||||
variadicArgs := make([]any, len(args)-2)
|
|
||||||
for i, a := range args[2:] {
|
for i, a := range args[2:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(any)
|
variadicArgs[i] = a.(interface{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg2 = variadicArgs
|
run(args[0].(string), args[1].(dbus.Flags), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Call_Call) Return(call *dbus.Call) *MockBusObject_Call_Call {
|
func (_c *MockBusObject_Call_Call) Return(_a0 *dbus.Call) *MockBusObject_Call_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Call_Call) RunAndReturn(run func(method string, flags dbus.Flags, args ...any) *dbus.Call) *MockBusObject_Call_Call {
|
func (_c *MockBusObject_Call_Call) RunAndReturn(run func(string, dbus.Flags, ...interface{}) *dbus.Call) *MockBusObject_Call_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// CallWithContext provides a mock function for the type MockBusObject
|
// CallWithContext provides a mock function with given fields: ctx, method, flags, args
|
||||||
func (_mock *MockBusObject) CallWithContext(ctx context.Context, method string, flags dbus.Flags, args ...any) *dbus.Call {
|
func (_m *MockBusObject) CallWithContext(ctx context.Context, method string, flags dbus.Flags, args ...interface{}) *dbus.Call {
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, ctx, method, flags)
|
_ca = append(_ca, ctx, method, flags)
|
||||||
_ca = append(_ca, args...)
|
_ca = append(_ca, args...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for CallWithContext")
|
panic("no return value specified for CallWithContext")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, ...any) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, ...interface{}) *dbus.Call); ok {
|
||||||
r0 = returnFunc(ctx, method, flags, args...)
|
r0 = rf(ctx, method, flags, args...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,68 +178,50 @@ type MockBusObject_CallWithContext_Call struct {
|
|||||||
// - ctx context.Context
|
// - ctx context.Context
|
||||||
// - method string
|
// - method string
|
||||||
// - flags dbus.Flags
|
// - flags dbus.Flags
|
||||||
// - args ...any
|
// - args ...interface{}
|
||||||
func (_e *MockBusObject_Expecter) CallWithContext(ctx any, method any, flags any, args ...any) *MockBusObject_CallWithContext_Call {
|
func (_e *MockBusObject_Expecter) CallWithContext(ctx interface{}, method interface{}, flags interface{}, args ...interface{}) *MockBusObject_CallWithContext_Call {
|
||||||
return &MockBusObject_CallWithContext_Call{Call: _e.mock.On("CallWithContext",
|
return &MockBusObject_CallWithContext_Call{Call: _e.mock.On("CallWithContext",
|
||||||
append([]any{ctx, method, flags}, args...)...)}
|
append([]interface{}{ctx, method, flags}, args...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_CallWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, args ...any)) *MockBusObject_CallWithContext_Call {
|
func (_c *MockBusObject_CallWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, args ...interface{})) *MockBusObject_CallWithContext_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 context.Context
|
variadicArgs := make([]interface{}, len(args)-3)
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(context.Context)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
var arg2 dbus.Flags
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].(dbus.Flags)
|
|
||||||
}
|
|
||||||
var arg3 []any
|
|
||||||
variadicArgs := make([]any, len(args)-3)
|
|
||||||
for i, a := range args[3:] {
|
for i, a := range args[3:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(any)
|
variadicArgs[i] = a.(interface{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg3 = variadicArgs
|
run(args[0].(context.Context), args[1].(string), args[2].(dbus.Flags), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
arg3...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_CallWithContext_Call) Return(call *dbus.Call) *MockBusObject_CallWithContext_Call {
|
func (_c *MockBusObject_CallWithContext_Call) Return(_a0 *dbus.Call) *MockBusObject_CallWithContext_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_CallWithContext_Call) RunAndReturn(run func(ctx context.Context, method string, flags dbus.Flags, args ...any) *dbus.Call) *MockBusObject_CallWithContext_Call {
|
func (_c *MockBusObject_CallWithContext_Call) RunAndReturn(run func(context.Context, string, dbus.Flags, ...interface{}) *dbus.Call) *MockBusObject_CallWithContext_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destination provides a mock function for the type MockBusObject
|
// Destination provides a mock function with no fields
|
||||||
func (_mock *MockBusObject) Destination() string {
|
func (_m *MockBusObject) Destination() string {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Destination")
|
panic("no return value specified for Destination")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
if returnFunc, ok := ret.Get(0).(func() string); ok {
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,8 +242,8 @@ func (_c *MockBusObject_Destination_Call) Run(run func()) *MockBusObject_Destina
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Destination_Call) Return(s string) *MockBusObject_Destination_Call {
|
func (_c *MockBusObject_Destination_Call) Return(_a0 string) *MockBusObject_Destination_Call {
|
||||||
_c.Call.Return(s)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,9 +252,9 @@ func (_c *MockBusObject_Destination_Call) RunAndReturn(run func() string) *MockB
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetProperty provides a mock function for the type MockBusObject
|
// GetProperty provides a mock function with given fields: p
|
||||||
func (_mock *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
|
func (_m *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
|
||||||
ret := _mock.Called(p)
|
ret := _m.Called(p)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetProperty")
|
panic("no return value specified for GetProperty")
|
||||||
@@ -322,19 +262,21 @@ func (_mock *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
|
|||||||
|
|
||||||
var r0 dbus.Variant
|
var r0 dbus.Variant
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (dbus.Variant, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (dbus.Variant, error)); ok {
|
||||||
return returnFunc(p)
|
return rf(p)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) dbus.Variant); ok {
|
if rf, ok := ret.Get(0).(func(string) dbus.Variant); ok {
|
||||||
r0 = returnFunc(p)
|
r0 = rf(p)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(dbus.Variant)
|
r0 = ret.Get(0).(dbus.Variant)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(p)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(p)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,52 +287,47 @@ type MockBusObject_GetProperty_Call struct {
|
|||||||
|
|
||||||
// GetProperty is a helper method to define mock.On call
|
// GetProperty is a helper method to define mock.On call
|
||||||
// - p string
|
// - p string
|
||||||
func (_e *MockBusObject_Expecter) GetProperty(p any) *MockBusObject_GetProperty_Call {
|
func (_e *MockBusObject_Expecter) GetProperty(p interface{}) *MockBusObject_GetProperty_Call {
|
||||||
return &MockBusObject_GetProperty_Call{Call: _e.mock.On("GetProperty", p)}
|
return &MockBusObject_GetProperty_Call{Call: _e.mock.On("GetProperty", p)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GetProperty_Call) Run(run func(p string)) *MockBusObject_GetProperty_Call {
|
func (_c *MockBusObject_GetProperty_Call) Run(run func(p string)) *MockBusObject_GetProperty_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GetProperty_Call) Return(variant dbus.Variant, err error) *MockBusObject_GetProperty_Call {
|
func (_c *MockBusObject_GetProperty_Call) Return(_a0 dbus.Variant, _a1 error) *MockBusObject_GetProperty_Call {
|
||||||
_c.Call.Return(variant, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GetProperty_Call) RunAndReturn(run func(p string) (dbus.Variant, error)) *MockBusObject_GetProperty_Call {
|
func (_c *MockBusObject_GetProperty_Call) RunAndReturn(run func(string) (dbus.Variant, error)) *MockBusObject_GetProperty_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go provides a mock function for the type MockBusObject
|
// Go provides a mock function with given fields: method, flags, ch, args
|
||||||
func (_mock *MockBusObject) Go(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call {
|
func (_m *MockBusObject) Go(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call {
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, method, flags, ch)
|
_ca = append(_ca, method, flags, ch)
|
||||||
_ca = append(_ca, args...)
|
_ca = append(_ca, args...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Go")
|
panic("no return value specified for Go")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, dbus.Flags, chan *dbus.Call, ...any) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call); ok {
|
||||||
r0 = returnFunc(method, flags, ch, args...)
|
r0 = rf(method, flags, ch, args...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -403,73 +340,55 @@ type MockBusObject_Go_Call struct {
|
|||||||
// - method string
|
// - method string
|
||||||
// - flags dbus.Flags
|
// - flags dbus.Flags
|
||||||
// - ch chan *dbus.Call
|
// - ch chan *dbus.Call
|
||||||
// - args ...any
|
// - args ...interface{}
|
||||||
func (_e *MockBusObject_Expecter) Go(method any, flags any, ch any, args ...any) *MockBusObject_Go_Call {
|
func (_e *MockBusObject_Expecter) Go(method interface{}, flags interface{}, ch interface{}, args ...interface{}) *MockBusObject_Go_Call {
|
||||||
return &MockBusObject_Go_Call{Call: _e.mock.On("Go",
|
return &MockBusObject_Go_Call{Call: _e.mock.On("Go",
|
||||||
append([]any{method, flags, ch}, args...)...)}
|
append([]interface{}{method, flags, ch}, args...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Go_Call) Run(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any)) *MockBusObject_Go_Call {
|
func (_c *MockBusObject_Go_Call) Run(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{})) *MockBusObject_Go_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
variadicArgs := make([]interface{}, len(args)-3)
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 dbus.Flags
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(dbus.Flags)
|
|
||||||
}
|
|
||||||
var arg2 chan *dbus.Call
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].(chan *dbus.Call)
|
|
||||||
}
|
|
||||||
var arg3 []any
|
|
||||||
variadicArgs := make([]any, len(args)-3)
|
|
||||||
for i, a := range args[3:] {
|
for i, a := range args[3:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(any)
|
variadicArgs[i] = a.(interface{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg3 = variadicArgs
|
run(args[0].(string), args[1].(dbus.Flags), args[2].(chan *dbus.Call), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
arg3...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Go_Call) Return(call *dbus.Call) *MockBusObject_Go_Call {
|
func (_c *MockBusObject_Go_Call) Return(_a0 *dbus.Call) *MockBusObject_Go_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Go_Call) RunAndReturn(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call) *MockBusObject_Go_Call {
|
func (_c *MockBusObject_Go_Call) RunAndReturn(run func(string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call) *MockBusObject_Go_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoWithContext provides a mock function for the type MockBusObject
|
// GoWithContext provides a mock function with given fields: ctx, method, flags, ch, args
|
||||||
func (_mock *MockBusObject) GoWithContext(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call {
|
func (_m *MockBusObject) GoWithContext(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call {
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, ctx, method, flags, ch)
|
_ca = append(_ca, ctx, method, flags, ch)
|
||||||
_ca = append(_ca, args...)
|
_ca = append(_ca, args...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GoWithContext")
|
panic("no return value specified for GoWithContext")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, chan *dbus.Call, ...any) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call); ok {
|
||||||
r0 = returnFunc(ctx, method, flags, ch, args...)
|
r0 = rf(ctx, method, flags, ch, args...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,73 +402,50 @@ type MockBusObject_GoWithContext_Call struct {
|
|||||||
// - method string
|
// - method string
|
||||||
// - flags dbus.Flags
|
// - flags dbus.Flags
|
||||||
// - ch chan *dbus.Call
|
// - ch chan *dbus.Call
|
||||||
// - args ...any
|
// - args ...interface{}
|
||||||
func (_e *MockBusObject_Expecter) GoWithContext(ctx any, method any, flags any, ch any, args ...any) *MockBusObject_GoWithContext_Call {
|
func (_e *MockBusObject_Expecter) GoWithContext(ctx interface{}, method interface{}, flags interface{}, ch interface{}, args ...interface{}) *MockBusObject_GoWithContext_Call {
|
||||||
return &MockBusObject_GoWithContext_Call{Call: _e.mock.On("GoWithContext",
|
return &MockBusObject_GoWithContext_Call{Call: _e.mock.On("GoWithContext",
|
||||||
append([]any{ctx, method, flags, ch}, args...)...)}
|
append([]interface{}{ctx, method, flags, ch}, args...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GoWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any)) *MockBusObject_GoWithContext_Call {
|
func (_c *MockBusObject_GoWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{})) *MockBusObject_GoWithContext_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 context.Context
|
variadicArgs := make([]interface{}, len(args)-4)
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(context.Context)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
var arg2 dbus.Flags
|
|
||||||
if args[2] != nil {
|
|
||||||
arg2 = args[2].(dbus.Flags)
|
|
||||||
}
|
|
||||||
var arg3 chan *dbus.Call
|
|
||||||
if args[3] != nil {
|
|
||||||
arg3 = args[3].(chan *dbus.Call)
|
|
||||||
}
|
|
||||||
var arg4 []any
|
|
||||||
variadicArgs := make([]any, len(args)-4)
|
|
||||||
for i, a := range args[4:] {
|
for i, a := range args[4:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(any)
|
variadicArgs[i] = a.(interface{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg4 = variadicArgs
|
run(args[0].(context.Context), args[1].(string), args[2].(dbus.Flags), args[3].(chan *dbus.Call), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
arg3,
|
|
||||||
arg4...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GoWithContext_Call) Return(call *dbus.Call) *MockBusObject_GoWithContext_Call {
|
func (_c *MockBusObject_GoWithContext_Call) Return(_a0 *dbus.Call) *MockBusObject_GoWithContext_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_GoWithContext_Call) RunAndReturn(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call) *MockBusObject_GoWithContext_Call {
|
func (_c *MockBusObject_GoWithContext_Call) RunAndReturn(run func(context.Context, string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call) *MockBusObject_GoWithContext_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path provides a mock function for the type MockBusObject
|
// Path provides a mock function with no fields
|
||||||
func (_mock *MockBusObject) Path() dbus.ObjectPath {
|
func (_m *MockBusObject) Path() dbus.ObjectPath {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Path")
|
panic("no return value specified for Path")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 dbus.ObjectPath
|
var r0 dbus.ObjectPath
|
||||||
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(dbus.ObjectPath)
|
r0 = ret.Get(0).(dbus.ObjectPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,8 +466,8 @@ func (_c *MockBusObject_Path_Call) Run(run func()) *MockBusObject_Path_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_Path_Call) Return(objectPath dbus.ObjectPath) *MockBusObject_Path_Call {
|
func (_c *MockBusObject_Path_Call) Return(_a0 dbus.ObjectPath) *MockBusObject_Path_Call {
|
||||||
_c.Call.Return(objectPath)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -580,30 +476,30 @@ func (_c *MockBusObject_Path_Call) RunAndReturn(run func() dbus.ObjectPath) *Moc
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveMatchSignal provides a mock function for the type MockBusObject
|
// RemoveMatchSignal provides a mock function with given fields: iface, member, options
|
||||||
func (_mock *MockBusObject) RemoveMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
|
func (_m *MockBusObject) RemoveMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
|
||||||
// dbus.MatchOption
|
_va := make([]interface{}, len(options))
|
||||||
_va := make([]any, len(options))
|
|
||||||
for _i := range options {
|
for _i := range options {
|
||||||
_va[_i] = options[_i]
|
_va[_i] = options[_i]
|
||||||
}
|
}
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, iface, member)
|
_ca = append(_ca, iface, member)
|
||||||
_ca = append(_ca, _va...)
|
_ca = append(_ca, _va...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for RemoveMatchSignal")
|
panic("no return value specified for RemoveMatchSignal")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *dbus.Call
|
var r0 *dbus.Call
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
|
if rf, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
|
||||||
r0 = returnFunc(iface, member, options...)
|
r0 = rf(iface, member, options...)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*dbus.Call)
|
r0 = ret.Get(0).(*dbus.Call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -616,62 +512,49 @@ type MockBusObject_RemoveMatchSignal_Call struct {
|
|||||||
// - iface string
|
// - iface string
|
||||||
// - member string
|
// - member string
|
||||||
// - options ...dbus.MatchOption
|
// - options ...dbus.MatchOption
|
||||||
func (_e *MockBusObject_Expecter) RemoveMatchSignal(iface any, member any, options ...any) *MockBusObject_RemoveMatchSignal_Call {
|
func (_e *MockBusObject_Expecter) RemoveMatchSignal(iface interface{}, member interface{}, options ...interface{}) *MockBusObject_RemoveMatchSignal_Call {
|
||||||
return &MockBusObject_RemoveMatchSignal_Call{Call: _e.mock.On("RemoveMatchSignal",
|
return &MockBusObject_RemoveMatchSignal_Call{Call: _e.mock.On("RemoveMatchSignal",
|
||||||
append([]any{iface, member}, options...)...)}
|
append([]interface{}{iface, member}, options...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_RemoveMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_RemoveMatchSignal_Call {
|
func (_c *MockBusObject_RemoveMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_RemoveMatchSignal_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
var arg2 []dbus.MatchOption
|
|
||||||
variadicArgs := make([]dbus.MatchOption, len(args)-2)
|
variadicArgs := make([]dbus.MatchOption, len(args)-2)
|
||||||
for i, a := range args[2:] {
|
for i, a := range args[2:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(dbus.MatchOption)
|
variadicArgs[i] = a.(dbus.MatchOption)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg2 = variadicArgs
|
run(args[0].(string), args[1].(string), variadicArgs...)
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
arg2...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_RemoveMatchSignal_Call) Return(call *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
|
func (_c *MockBusObject_RemoveMatchSignal_Call) Return(_a0 *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
|
||||||
_c.Call.Return(call)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_RemoveMatchSignal_Call) RunAndReturn(run func(iface string, member string, options ...dbus.MatchOption) *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
|
func (_c *MockBusObject_RemoveMatchSignal_Call) RunAndReturn(run func(string, string, ...dbus.MatchOption) *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetProperty provides a mock function for the type MockBusObject
|
// SetProperty provides a mock function with given fields: p, v
|
||||||
func (_mock *MockBusObject) SetProperty(p string, v any) error {
|
func (_m *MockBusObject) SetProperty(p string, v interface{}) error {
|
||||||
ret := _mock.Called(p, v)
|
ret := _m.Called(p, v)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SetProperty")
|
panic("no return value specified for SetProperty")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, any) error); ok {
|
if rf, ok := ret.Get(0).(func(string, interface{}) error); ok {
|
||||||
r0 = returnFunc(p, v)
|
r0 = rf(p, v)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,53 +565,43 @@ type MockBusObject_SetProperty_Call struct {
|
|||||||
|
|
||||||
// SetProperty is a helper method to define mock.On call
|
// SetProperty is a helper method to define mock.On call
|
||||||
// - p string
|
// - p string
|
||||||
// - v any
|
// - v interface{}
|
||||||
func (_e *MockBusObject_Expecter) SetProperty(p any, v any) *MockBusObject_SetProperty_Call {
|
func (_e *MockBusObject_Expecter) SetProperty(p interface{}, v interface{}) *MockBusObject_SetProperty_Call {
|
||||||
return &MockBusObject_SetProperty_Call{Call: _e.mock.On("SetProperty", p, v)}
|
return &MockBusObject_SetProperty_Call{Call: _e.mock.On("SetProperty", p, v)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_SetProperty_Call) Run(run func(p string, v any)) *MockBusObject_SetProperty_Call {
|
func (_c *MockBusObject_SetProperty_Call) Run(run func(p string, v interface{})) *MockBusObject_SetProperty_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(interface{}))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 any
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(any)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_SetProperty_Call) Return(err error) *MockBusObject_SetProperty_Call {
|
func (_c *MockBusObject_SetProperty_Call) Return(_a0 error) *MockBusObject_SetProperty_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_SetProperty_Call) RunAndReturn(run func(p string, v any) error) *MockBusObject_SetProperty_Call {
|
func (_c *MockBusObject_SetProperty_Call) RunAndReturn(run func(string, interface{}) error) *MockBusObject_SetProperty_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// StoreProperty provides a mock function for the type MockBusObject
|
// StoreProperty provides a mock function with given fields: p, value
|
||||||
func (_mock *MockBusObject) StoreProperty(p string, value any) error {
|
func (_m *MockBusObject) StoreProperty(p string, value interface{}) error {
|
||||||
ret := _mock.Called(p, value)
|
ret := _m.Called(p, value)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for StoreProperty")
|
panic("no return value specified for StoreProperty")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, any) error); ok {
|
if rf, ok := ret.Get(0).(func(string, interface{}) error); ok {
|
||||||
r0 = returnFunc(p, value)
|
r0 = rf(p, value)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -739,35 +612,38 @@ type MockBusObject_StoreProperty_Call struct {
|
|||||||
|
|
||||||
// StoreProperty is a helper method to define mock.On call
|
// StoreProperty is a helper method to define mock.On call
|
||||||
// - p string
|
// - p string
|
||||||
// - value any
|
// - value interface{}
|
||||||
func (_e *MockBusObject_Expecter) StoreProperty(p any, value any) *MockBusObject_StoreProperty_Call {
|
func (_e *MockBusObject_Expecter) StoreProperty(p interface{}, value interface{}) *MockBusObject_StoreProperty_Call {
|
||||||
return &MockBusObject_StoreProperty_Call{Call: _e.mock.On("StoreProperty", p, value)}
|
return &MockBusObject_StoreProperty_Call{Call: _e.mock.On("StoreProperty", p, value)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_StoreProperty_Call) Run(run func(p string, value any)) *MockBusObject_StoreProperty_Call {
|
func (_c *MockBusObject_StoreProperty_Call) Run(run func(p string, value interface{})) *MockBusObject_StoreProperty_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(interface{}))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 any
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(any)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_StoreProperty_Call) Return(err error) *MockBusObject_StoreProperty_Call {
|
func (_c *MockBusObject_StoreProperty_Call) Return(_a0 error) *MockBusObject_StoreProperty_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockBusObject_StoreProperty_Call) RunAndReturn(run func(p string, value any) error) *MockBusObject_StoreProperty_Call {
|
func (_c *MockBusObject_StoreProperty_Call) RunAndReturn(run func(string, interface{}) error) *MockBusObject_StoreProperty_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockBusObject creates a new instance of MockBusObject. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockBusObject(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockBusObject {
|
||||||
|
mock := &MockBusObject{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,26 +1,8 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import mock "github.com/stretchr/testify/mock"
|
||||||
mock "github.com/stretchr/testify/mock"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewMockGitClient creates a new instance of MockGitClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockGitClient(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockGitClient {
|
|
||||||
mock := &MockGitClient{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockGitClient is an autogenerated mock type for the GitClient type
|
// MockGitClient is an autogenerated mock type for the GitClient type
|
||||||
type MockGitClient struct {
|
type MockGitClient struct {
|
||||||
@@ -35,9 +17,9 @@ func (_m *MockGitClient) EXPECT() *MockGitClient_Expecter {
|
|||||||
return &MockGitClient_Expecter{mock: &_m.Mock}
|
return &MockGitClient_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasUpdates provides a mock function for the type MockGitClient
|
// HasUpdates provides a mock function with given fields: path
|
||||||
func (_mock *MockGitClient) HasUpdates(path string) (bool, error) {
|
func (_m *MockGitClient) HasUpdates(path string) (bool, error) {
|
||||||
ret := _mock.Called(path)
|
ret := _m.Called(path)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for HasUpdates")
|
panic("no return value specified for HasUpdates")
|
||||||
@@ -45,19 +27,21 @@ func (_mock *MockGitClient) HasUpdates(path string) (bool, error) {
|
|||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (bool, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (bool, error)); ok {
|
||||||
return returnFunc(path)
|
return rf(path)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
|
if rf, ok := ret.Get(0).(func(string) bool); ok {
|
||||||
r0 = returnFunc(path)
|
r0 = rf(path)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(path)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(path)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,41 +58,36 @@ func (_e *MockGitClient_Expecter) HasUpdates(path any) *MockGitClient_HasUpdates
|
|||||||
|
|
||||||
func (_c *MockGitClient_HasUpdates_Call) Run(run func(path string)) *MockGitClient_HasUpdates_Call {
|
func (_c *MockGitClient_HasUpdates_Call) Run(run func(path string)) *MockGitClient_HasUpdates_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_HasUpdates_Call) Return(b bool, err error) *MockGitClient_HasUpdates_Call {
|
func (_c *MockGitClient_HasUpdates_Call) Return(_a0 bool, _a1 error) *MockGitClient_HasUpdates_Call {
|
||||||
_c.Call.Return(b, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_HasUpdates_Call) RunAndReturn(run func(path string) (bool, error)) *MockGitClient_HasUpdates_Call {
|
func (_c *MockGitClient_HasUpdates_Call) RunAndReturn(run func(string) (bool, error)) *MockGitClient_HasUpdates_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// PlainClone provides a mock function for the type MockGitClient
|
// PlainClone provides a mock function with given fields: path, url
|
||||||
func (_mock *MockGitClient) PlainClone(path string, url string) error {
|
func (_m *MockGitClient) PlainClone(path string, url string) error {
|
||||||
ret := _mock.Called(path, url)
|
ret := _m.Called(path, url)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for PlainClone")
|
panic("no return value specified for PlainClone")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
|
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||||
r0 = returnFunc(path, url)
|
r0 = rf(path, url)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,46 +105,36 @@ func (_e *MockGitClient_Expecter) PlainClone(path any, url any) *MockGitClient_P
|
|||||||
|
|
||||||
func (_c *MockGitClient_PlainClone_Call) Run(run func(path string, url string)) *MockGitClient_PlainClone_Call {
|
func (_c *MockGitClient_PlainClone_Call) Run(run func(path string, url string)) *MockGitClient_PlainClone_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string), args[1].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
var arg1 string
|
|
||||||
if args[1] != nil {
|
|
||||||
arg1 = args[1].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
arg1,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_PlainClone_Call) Return(err error) *MockGitClient_PlainClone_Call {
|
func (_c *MockGitClient_PlainClone_Call) Return(_a0 error) *MockGitClient_PlainClone_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_PlainClone_Call) RunAndReturn(run func(path string, url string) error) *MockGitClient_PlainClone_Call {
|
func (_c *MockGitClient_PlainClone_Call) RunAndReturn(run func(string, string) error) *MockGitClient_PlainClone_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pull provides a mock function for the type MockGitClient
|
// Pull provides a mock function with given fields: path
|
||||||
func (_mock *MockGitClient) Pull(path string) error {
|
func (_m *MockGitClient) Pull(path string) error {
|
||||||
ret := _mock.Called(path)
|
ret := _m.Called(path)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Pull")
|
panic("no return value specified for Pull")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
|
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||||
r0 = returnFunc(path)
|
r0 = rf(path)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,23 +151,31 @@ func (_e *MockGitClient_Expecter) Pull(path any) *MockGitClient_Pull_Call {
|
|||||||
|
|
||||||
func (_c *MockGitClient_Pull_Call) Run(run func(path string)) *MockGitClient_Pull_Call {
|
func (_c *MockGitClient_Pull_Call) Run(run func(path string)) *MockGitClient_Pull_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_Pull_Call) Return(err error) *MockGitClient_Pull_Call {
|
func (_c *MockGitClient_Pull_Call) Return(_a0 error) *MockGitClient_Pull_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockGitClient_Pull_Call) RunAndReturn(run func(path string) error) *MockGitClient_Pull_Call {
|
func (_c *MockGitClient_Pull_Call) RunAndReturn(run func(string) error) *MockGitClient_Pull_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockGitClient creates a new instance of MockGitClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockGitClient(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockGitClient {
|
||||||
|
mock := &MockGitClient{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,30 +1,15 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
net "net"
|
||||||
"time"
|
|
||||||
|
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
|
|
||||||
|
time "time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockConn creates a new instance of MockConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockConn(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockConn {
|
|
||||||
mock := &MockConn{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockConn is an autogenerated mock type for the Conn type
|
// MockConn is an autogenerated mock type for the Conn type
|
||||||
type MockConn struct {
|
type MockConn struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -38,20 +23,21 @@ func (_m *MockConn) EXPECT() *MockConn_Expecter {
|
|||||||
return &MockConn_Expecter{mock: &_m.Mock}
|
return &MockConn_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close provides a mock function for the type MockConn
|
// Close provides a mock function with no fields
|
||||||
func (_mock *MockConn) Close() error {
|
func (_m *MockConn) Close() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Close")
|
panic("no return value specified for Close")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,8 +58,8 @@ func (_c *MockConn_Close_Call) Run(run func()) *MockConn_Close_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_Close_Call) Return(err error) *MockConn_Close_Call {
|
func (_c *MockConn_Close_Call) Return(_a0 error) *MockConn_Close_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,22 +68,23 @@ func (_c *MockConn_Close_Call) RunAndReturn(run func() error) *MockConn_Close_Ca
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// LocalAddr provides a mock function for the type MockConn
|
// LocalAddr provides a mock function with no fields
|
||||||
func (_mock *MockConn) LocalAddr() net.Addr {
|
func (_m *MockConn) LocalAddr() net.Addr {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for LocalAddr")
|
panic("no return value specified for LocalAddr")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 net.Addr
|
var r0 net.Addr
|
||||||
if returnFunc, ok := ret.Get(0).(func() net.Addr); ok {
|
if rf, ok := ret.Get(0).(func() net.Addr); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(net.Addr)
|
r0 = ret.Get(0).(net.Addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,8 +105,8 @@ func (_c *MockConn_LocalAddr_Call) Run(run func()) *MockConn_LocalAddr_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_LocalAddr_Call) Return(addr net.Addr) *MockConn_LocalAddr_Call {
|
func (_c *MockConn_LocalAddr_Call) Return(_a0 net.Addr) *MockConn_LocalAddr_Call {
|
||||||
_c.Call.Return(addr)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,9 +115,9 @@ func (_c *MockConn_LocalAddr_Call) RunAndReturn(run func() net.Addr) *MockConn_L
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read provides a mock function for the type MockConn
|
// Read provides a mock function with given fields: b
|
||||||
func (_mock *MockConn) Read(b []byte) (int, error) {
|
func (_m *MockConn) Read(b []byte) (int, error) {
|
||||||
ret := _mock.Called(b)
|
ret := _m.Called(b)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Read")
|
panic("no return value specified for Read")
|
||||||
@@ -138,19 +125,21 @@ func (_mock *MockConn) Read(b []byte) (int, error) {
|
|||||||
|
|
||||||
var r0 int
|
var r0 int
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func([]byte) (int, error)); ok {
|
if rf, ok := ret.Get(0).(func([]byte) (int, error)); ok {
|
||||||
return returnFunc(b)
|
return rf(b)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func([]byte) int); ok {
|
if rf, ok := ret.Get(0).(func([]byte) int); ok {
|
||||||
r0 = returnFunc(b)
|
r0 = rf(b)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(int)
|
r0 = ret.Get(0).(int)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func([]byte) error); ok {
|
|
||||||
r1 = returnFunc(b)
|
if rf, ok := ret.Get(1).(func([]byte) error); ok {
|
||||||
|
r1 = rf(b)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,19 +150,13 @@ type MockConn_Read_Call struct {
|
|||||||
|
|
||||||
// Read is a helper method to define mock.On call
|
// Read is a helper method to define mock.On call
|
||||||
// - b []byte
|
// - b []byte
|
||||||
func (_e *MockConn_Expecter) Read(b any) *MockConn_Read_Call {
|
func (_e *MockConn_Expecter) Read(b interface{}) *MockConn_Read_Call {
|
||||||
return &MockConn_Read_Call{Call: _e.mock.On("Read", b)}
|
return &MockConn_Read_Call{Call: _e.mock.On("Read", b)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_Read_Call) Run(run func(b []byte)) *MockConn_Read_Call {
|
func (_c *MockConn_Read_Call) Run(run func(b []byte)) *MockConn_Read_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 []byte
|
run(args[0].([]byte))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].([]byte)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
@@ -183,27 +166,28 @@ func (_c *MockConn_Read_Call) Return(n int, err error) *MockConn_Read_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_Read_Call) RunAndReturn(run func(b []byte) (int, error)) *MockConn_Read_Call {
|
func (_c *MockConn_Read_Call) RunAndReturn(run func([]byte) (int, error)) *MockConn_Read_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoteAddr provides a mock function for the type MockConn
|
// RemoteAddr provides a mock function with no fields
|
||||||
func (_mock *MockConn) RemoteAddr() net.Addr {
|
func (_m *MockConn) RemoteAddr() net.Addr {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for RemoteAddr")
|
panic("no return value specified for RemoteAddr")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 net.Addr
|
var r0 net.Addr
|
||||||
if returnFunc, ok := ret.Get(0).(func() net.Addr); ok {
|
if rf, ok := ret.Get(0).(func() net.Addr); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(net.Addr)
|
r0 = ret.Get(0).(net.Addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,8 +208,8 @@ func (_c *MockConn_RemoteAddr_Call) Run(run func()) *MockConn_RemoteAddr_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_RemoteAddr_Call) Return(addr net.Addr) *MockConn_RemoteAddr_Call {
|
func (_c *MockConn_RemoteAddr_Call) Return(_a0 net.Addr) *MockConn_RemoteAddr_Call {
|
||||||
_c.Call.Return(addr)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,20 +218,21 @@ func (_c *MockConn_RemoteAddr_Call) RunAndReturn(run func() net.Addr) *MockConn_
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDeadline provides a mock function for the type MockConn
|
// SetDeadline provides a mock function with given fields: t
|
||||||
func (_mock *MockConn) SetDeadline(t time.Time) error {
|
func (_m *MockConn) SetDeadline(t time.Time) error {
|
||||||
ret := _mock.Called(t)
|
ret := _m.Called(t)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SetDeadline")
|
panic("no return value specified for SetDeadline")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
|
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
|
||||||
r0 = returnFunc(t)
|
r0 = rf(t)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,47 +243,42 @@ type MockConn_SetDeadline_Call struct {
|
|||||||
|
|
||||||
// SetDeadline is a helper method to define mock.On call
|
// SetDeadline is a helper method to define mock.On call
|
||||||
// - t time.Time
|
// - t time.Time
|
||||||
func (_e *MockConn_Expecter) SetDeadline(t any) *MockConn_SetDeadline_Call {
|
func (_e *MockConn_Expecter) SetDeadline(t interface{}) *MockConn_SetDeadline_Call {
|
||||||
return &MockConn_SetDeadline_Call{Call: _e.mock.On("SetDeadline", t)}
|
return &MockConn_SetDeadline_Call{Call: _e.mock.On("SetDeadline", t)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetDeadline_Call) Run(run func(t time.Time)) *MockConn_SetDeadline_Call {
|
func (_c *MockConn_SetDeadline_Call) Run(run func(t time.Time)) *MockConn_SetDeadline_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 time.Time
|
run(args[0].(time.Time))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(time.Time)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetDeadline_Call) Return(err error) *MockConn_SetDeadline_Call {
|
func (_c *MockConn_SetDeadline_Call) Return(_a0 error) *MockConn_SetDeadline_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetDeadline_Call {
|
func (_c *MockConn_SetDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetDeadline_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetReadDeadline provides a mock function for the type MockConn
|
// SetReadDeadline provides a mock function with given fields: t
|
||||||
func (_mock *MockConn) SetReadDeadline(t time.Time) error {
|
func (_m *MockConn) SetReadDeadline(t time.Time) error {
|
||||||
ret := _mock.Called(t)
|
ret := _m.Called(t)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SetReadDeadline")
|
panic("no return value specified for SetReadDeadline")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
|
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
|
||||||
r0 = returnFunc(t)
|
r0 = rf(t)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,47 +289,42 @@ type MockConn_SetReadDeadline_Call struct {
|
|||||||
|
|
||||||
// SetReadDeadline is a helper method to define mock.On call
|
// SetReadDeadline is a helper method to define mock.On call
|
||||||
// - t time.Time
|
// - t time.Time
|
||||||
func (_e *MockConn_Expecter) SetReadDeadline(t any) *MockConn_SetReadDeadline_Call {
|
func (_e *MockConn_Expecter) SetReadDeadline(t interface{}) *MockConn_SetReadDeadline_Call {
|
||||||
return &MockConn_SetReadDeadline_Call{Call: _e.mock.On("SetReadDeadline", t)}
|
return &MockConn_SetReadDeadline_Call{Call: _e.mock.On("SetReadDeadline", t)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetReadDeadline_Call) Run(run func(t time.Time)) *MockConn_SetReadDeadline_Call {
|
func (_c *MockConn_SetReadDeadline_Call) Run(run func(t time.Time)) *MockConn_SetReadDeadline_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 time.Time
|
run(args[0].(time.Time))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(time.Time)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetReadDeadline_Call) Return(err error) *MockConn_SetReadDeadline_Call {
|
func (_c *MockConn_SetReadDeadline_Call) Return(_a0 error) *MockConn_SetReadDeadline_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetReadDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetReadDeadline_Call {
|
func (_c *MockConn_SetReadDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetReadDeadline_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetWriteDeadline provides a mock function for the type MockConn
|
// SetWriteDeadline provides a mock function with given fields: t
|
||||||
func (_mock *MockConn) SetWriteDeadline(t time.Time) error {
|
func (_m *MockConn) SetWriteDeadline(t time.Time) error {
|
||||||
ret := _mock.Called(t)
|
ret := _m.Called(t)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for SetWriteDeadline")
|
panic("no return value specified for SetWriteDeadline")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
|
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
|
||||||
r0 = returnFunc(t)
|
r0 = rf(t)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,36 +335,30 @@ type MockConn_SetWriteDeadline_Call struct {
|
|||||||
|
|
||||||
// SetWriteDeadline is a helper method to define mock.On call
|
// SetWriteDeadline is a helper method to define mock.On call
|
||||||
// - t time.Time
|
// - t time.Time
|
||||||
func (_e *MockConn_Expecter) SetWriteDeadline(t any) *MockConn_SetWriteDeadline_Call {
|
func (_e *MockConn_Expecter) SetWriteDeadline(t interface{}) *MockConn_SetWriteDeadline_Call {
|
||||||
return &MockConn_SetWriteDeadline_Call{Call: _e.mock.On("SetWriteDeadline", t)}
|
return &MockConn_SetWriteDeadline_Call{Call: _e.mock.On("SetWriteDeadline", t)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetWriteDeadline_Call) Run(run func(t time.Time)) *MockConn_SetWriteDeadline_Call {
|
func (_c *MockConn_SetWriteDeadline_Call) Run(run func(t time.Time)) *MockConn_SetWriteDeadline_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 time.Time
|
run(args[0].(time.Time))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(time.Time)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetWriteDeadline_Call) Return(err error) *MockConn_SetWriteDeadline_Call {
|
func (_c *MockConn_SetWriteDeadline_Call) Return(_a0 error) *MockConn_SetWriteDeadline_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_SetWriteDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetWriteDeadline_Call {
|
func (_c *MockConn_SetWriteDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetWriteDeadline_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write provides a mock function for the type MockConn
|
// Write provides a mock function with given fields: b
|
||||||
func (_mock *MockConn) Write(b []byte) (int, error) {
|
func (_m *MockConn) Write(b []byte) (int, error) {
|
||||||
ret := _mock.Called(b)
|
ret := _m.Called(b)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Write")
|
panic("no return value specified for Write")
|
||||||
@@ -397,19 +366,21 @@ func (_mock *MockConn) Write(b []byte) (int, error) {
|
|||||||
|
|
||||||
var r0 int
|
var r0 int
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func([]byte) (int, error)); ok {
|
if rf, ok := ret.Get(0).(func([]byte) (int, error)); ok {
|
||||||
return returnFunc(b)
|
return rf(b)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func([]byte) int); ok {
|
if rf, ok := ret.Get(0).(func([]byte) int); ok {
|
||||||
r0 = returnFunc(b)
|
r0 = rf(b)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(int)
|
r0 = ret.Get(0).(int)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func([]byte) error); ok {
|
|
||||||
r1 = returnFunc(b)
|
if rf, ok := ret.Get(1).(func([]byte) error); ok {
|
||||||
|
r1 = rf(b)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,19 +391,13 @@ type MockConn_Write_Call struct {
|
|||||||
|
|
||||||
// Write is a helper method to define mock.On call
|
// Write is a helper method to define mock.On call
|
||||||
// - b []byte
|
// - b []byte
|
||||||
func (_e *MockConn_Expecter) Write(b any) *MockConn_Write_Call {
|
func (_e *MockConn_Expecter) Write(b interface{}) *MockConn_Write_Call {
|
||||||
return &MockConn_Write_Call{Call: _e.mock.On("Write", b)}
|
return &MockConn_Write_Call{Call: _e.mock.On("Write", b)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_Write_Call) Run(run func(b []byte)) *MockConn_Write_Call {
|
func (_c *MockConn_Write_Call) Run(run func(b []byte)) *MockConn_Write_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 []byte
|
run(args[0].([]byte))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].([]byte)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
@@ -442,7 +407,21 @@ func (_c *MockConn_Write_Call) Return(n int, err error) *MockConn_Write_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockConn_Write_Call) RunAndReturn(run func(b []byte) (int, error)) *MockConn_Write_Call {
|
func (_c *MockConn_Write_Call) RunAndReturn(run func([]byte) (int, error)) *MockConn_Write_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockConn creates a new instance of MockConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockConn(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockConn {
|
||||||
|
mock := &MockConn{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,26 +1,8 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_utils
|
package mocks_utils
|
||||||
|
|
||||||
import (
|
import mock "github.com/stretchr/testify/mock"
|
||||||
mock "github.com/stretchr/testify/mock"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewMockAppChecker creates a new instance of MockAppChecker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockAppChecker(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockAppChecker {
|
|
||||||
mock := &MockAppChecker{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockAppChecker is an autogenerated mock type for the AppChecker type
|
// MockAppChecker is an autogenerated mock type for the AppChecker type
|
||||||
type MockAppChecker struct {
|
type MockAppChecker struct {
|
||||||
@@ -35,27 +17,27 @@ func (_m *MockAppChecker) EXPECT() *MockAppChecker_Expecter {
|
|||||||
return &MockAppChecker_Expecter{mock: &_m.Mock}
|
return &MockAppChecker_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AnyCommandExists provides a mock function for the type MockAppChecker
|
// AnyCommandExists provides a mock function with given fields: cmds
|
||||||
func (_mock *MockAppChecker) AnyCommandExists(cmds ...string) bool {
|
func (_m *MockAppChecker) AnyCommandExists(cmds ...string) bool {
|
||||||
// string
|
_va := make([]interface{}, len(cmds))
|
||||||
_va := make([]any, len(cmds))
|
|
||||||
for _i := range cmds {
|
for _i := range cmds {
|
||||||
_va[_i] = cmds[_i]
|
_va[_i] = cmds[_i]
|
||||||
}
|
}
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, _va...)
|
_ca = append(_ca, _va...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for AnyCommandExists")
|
panic("no return value specified for AnyCommandExists")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
if returnFunc, ok := ret.Get(0).(func(...string) bool); ok {
|
if rf, ok := ret.Get(0).(func(...string) bool); ok {
|
||||||
r0 = returnFunc(cmds...)
|
r0 = rf(cmds...)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,59 +48,55 @@ type MockAppChecker_AnyCommandExists_Call struct {
|
|||||||
|
|
||||||
// AnyCommandExists is a helper method to define mock.On call
|
// AnyCommandExists is a helper method to define mock.On call
|
||||||
// - cmds ...string
|
// - cmds ...string
|
||||||
func (_e *MockAppChecker_Expecter) AnyCommandExists(cmds ...any) *MockAppChecker_AnyCommandExists_Call {
|
func (_e *MockAppChecker_Expecter) AnyCommandExists(cmds ...interface{}) *MockAppChecker_AnyCommandExists_Call {
|
||||||
return &MockAppChecker_AnyCommandExists_Call{Call: _e.mock.On("AnyCommandExists",
|
return &MockAppChecker_AnyCommandExists_Call{Call: _e.mock.On("AnyCommandExists",
|
||||||
append([]any{}, cmds...)...)}
|
append([]interface{}{}, cmds...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyCommandExists_Call) Run(run func(cmds ...string)) *MockAppChecker_AnyCommandExists_Call {
|
func (_c *MockAppChecker_AnyCommandExists_Call) Run(run func(cmds ...string)) *MockAppChecker_AnyCommandExists_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 []string
|
|
||||||
variadicArgs := make([]string, len(args)-0)
|
variadicArgs := make([]string, len(args)-0)
|
||||||
for i, a := range args[0:] {
|
for i, a := range args[0:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(string)
|
variadicArgs[i] = a.(string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg0 = variadicArgs
|
run(variadicArgs...)
|
||||||
run(
|
|
||||||
arg0...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyCommandExists_Call) Return(b bool) *MockAppChecker_AnyCommandExists_Call {
|
func (_c *MockAppChecker_AnyCommandExists_Call) Return(_a0 bool) *MockAppChecker_AnyCommandExists_Call {
|
||||||
_c.Call.Return(b)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyCommandExists_Call) RunAndReturn(run func(cmds ...string) bool) *MockAppChecker_AnyCommandExists_Call {
|
func (_c *MockAppChecker_AnyCommandExists_Call) RunAndReturn(run func(...string) bool) *MockAppChecker_AnyCommandExists_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// AnyFlatpakExists provides a mock function for the type MockAppChecker
|
// AnyFlatpakExists provides a mock function with given fields: flatpaks
|
||||||
func (_mock *MockAppChecker) AnyFlatpakExists(flatpaks ...string) bool {
|
func (_m *MockAppChecker) AnyFlatpakExists(flatpaks ...string) bool {
|
||||||
// string
|
_va := make([]interface{}, len(flatpaks))
|
||||||
_va := make([]any, len(flatpaks))
|
|
||||||
for _i := range flatpaks {
|
for _i := range flatpaks {
|
||||||
_va[_i] = flatpaks[_i]
|
_va[_i] = flatpaks[_i]
|
||||||
}
|
}
|
||||||
var _ca []any
|
var _ca []interface{}
|
||||||
_ca = append(_ca, _va...)
|
_ca = append(_ca, _va...)
|
||||||
ret := _mock.Called(_ca...)
|
ret := _m.Called(_ca...)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for AnyFlatpakExists")
|
panic("no return value specified for AnyFlatpakExists")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
if returnFunc, ok := ret.Get(0).(func(...string) bool); ok {
|
if rf, ok := ret.Get(0).(func(...string) bool); ok {
|
||||||
r0 = returnFunc(flatpaks...)
|
r0 = rf(flatpaks...)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,52 +107,49 @@ type MockAppChecker_AnyFlatpakExists_Call struct {
|
|||||||
|
|
||||||
// AnyFlatpakExists is a helper method to define mock.On call
|
// AnyFlatpakExists is a helper method to define mock.On call
|
||||||
// - flatpaks ...string
|
// - flatpaks ...string
|
||||||
func (_e *MockAppChecker_Expecter) AnyFlatpakExists(flatpaks ...any) *MockAppChecker_AnyFlatpakExists_Call {
|
func (_e *MockAppChecker_Expecter) AnyFlatpakExists(flatpaks ...interface{}) *MockAppChecker_AnyFlatpakExists_Call {
|
||||||
return &MockAppChecker_AnyFlatpakExists_Call{Call: _e.mock.On("AnyFlatpakExists",
|
return &MockAppChecker_AnyFlatpakExists_Call{Call: _e.mock.On("AnyFlatpakExists",
|
||||||
append([]any{}, flatpaks...)...)}
|
append([]interface{}{}, flatpaks...)...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyFlatpakExists_Call) Run(run func(flatpaks ...string)) *MockAppChecker_AnyFlatpakExists_Call {
|
func (_c *MockAppChecker_AnyFlatpakExists_Call) Run(run func(flatpaks ...string)) *MockAppChecker_AnyFlatpakExists_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 []string
|
|
||||||
variadicArgs := make([]string, len(args)-0)
|
variadicArgs := make([]string, len(args)-0)
|
||||||
for i, a := range args[0:] {
|
for i, a := range args[0:] {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
variadicArgs[i] = a.(string)
|
variadicArgs[i] = a.(string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg0 = variadicArgs
|
run(variadicArgs...)
|
||||||
run(
|
|
||||||
arg0...,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyFlatpakExists_Call) Return(b bool) *MockAppChecker_AnyFlatpakExists_Call {
|
func (_c *MockAppChecker_AnyFlatpakExists_Call) Return(_a0 bool) *MockAppChecker_AnyFlatpakExists_Call {
|
||||||
_c.Call.Return(b)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_AnyFlatpakExists_Call) RunAndReturn(run func(flatpaks ...string) bool) *MockAppChecker_AnyFlatpakExists_Call {
|
func (_c *MockAppChecker_AnyFlatpakExists_Call) RunAndReturn(run func(...string) bool) *MockAppChecker_AnyFlatpakExists_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommandExists provides a mock function for the type MockAppChecker
|
// CommandExists provides a mock function with given fields: cmd
|
||||||
func (_mock *MockAppChecker) CommandExists(cmd string) bool {
|
func (_m *MockAppChecker) CommandExists(cmd string) bool {
|
||||||
ret := _mock.Called(cmd)
|
ret := _m.Called(cmd)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for CommandExists")
|
panic("no return value specified for CommandExists")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
|
if rf, ok := ret.Get(0).(func(string) bool); ok {
|
||||||
r0 = returnFunc(cmd)
|
r0 = rf(cmd)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,47 +160,42 @@ type MockAppChecker_CommandExists_Call struct {
|
|||||||
|
|
||||||
// CommandExists is a helper method to define mock.On call
|
// CommandExists is a helper method to define mock.On call
|
||||||
// - cmd string
|
// - cmd string
|
||||||
func (_e *MockAppChecker_Expecter) CommandExists(cmd any) *MockAppChecker_CommandExists_Call {
|
func (_e *MockAppChecker_Expecter) CommandExists(cmd interface{}) *MockAppChecker_CommandExists_Call {
|
||||||
return &MockAppChecker_CommandExists_Call{Call: _e.mock.On("CommandExists", cmd)}
|
return &MockAppChecker_CommandExists_Call{Call: _e.mock.On("CommandExists", cmd)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_CommandExists_Call) Run(run func(cmd string)) *MockAppChecker_CommandExists_Call {
|
func (_c *MockAppChecker_CommandExists_Call) Run(run func(cmd string)) *MockAppChecker_CommandExists_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_CommandExists_Call) Return(b bool) *MockAppChecker_CommandExists_Call {
|
func (_c *MockAppChecker_CommandExists_Call) Return(_a0 bool) *MockAppChecker_CommandExists_Call {
|
||||||
_c.Call.Return(b)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_CommandExists_Call) RunAndReturn(run func(cmd string) bool) *MockAppChecker_CommandExists_Call {
|
func (_c *MockAppChecker_CommandExists_Call) RunAndReturn(run func(string) bool) *MockAppChecker_CommandExists_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatpakExists provides a mock function for the type MockAppChecker
|
// FlatpakExists provides a mock function with given fields: name
|
||||||
func (_mock *MockAppChecker) FlatpakExists(name string) bool {
|
func (_m *MockAppChecker) FlatpakExists(name string) bool {
|
||||||
ret := _mock.Called(name)
|
ret := _m.Called(name)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for FlatpakExists")
|
panic("no return value specified for FlatpakExists")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 bool
|
var r0 bool
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
|
if rf, ok := ret.Get(0).(func(string) bool); ok {
|
||||||
r0 = returnFunc(name)
|
r0 = rf(name)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(bool)
|
r0 = ret.Get(0).(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,29 +206,37 @@ type MockAppChecker_FlatpakExists_Call struct {
|
|||||||
|
|
||||||
// FlatpakExists is a helper method to define mock.On call
|
// FlatpakExists is a helper method to define mock.On call
|
||||||
// - name string
|
// - name string
|
||||||
func (_e *MockAppChecker_Expecter) FlatpakExists(name any) *MockAppChecker_FlatpakExists_Call {
|
func (_e *MockAppChecker_Expecter) FlatpakExists(name interface{}) *MockAppChecker_FlatpakExists_Call {
|
||||||
return &MockAppChecker_FlatpakExists_Call{Call: _e.mock.On("FlatpakExists", name)}
|
return &MockAppChecker_FlatpakExists_Call{Call: _e.mock.On("FlatpakExists", name)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_FlatpakExists_Call) Run(run func(name string)) *MockAppChecker_FlatpakExists_Call {
|
func (_c *MockAppChecker_FlatpakExists_Call) Run(run func(name string)) *MockAppChecker_FlatpakExists_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_FlatpakExists_Call) Return(b bool) *MockAppChecker_FlatpakExists_Call {
|
func (_c *MockAppChecker_FlatpakExists_Call) Return(_a0 bool) *MockAppChecker_FlatpakExists_Call {
|
||||||
_c.Call.Return(b)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockAppChecker_FlatpakExists_Call) RunAndReturn(run func(name string) bool) *MockAppChecker_FlatpakExists_Call {
|
func (_c *MockAppChecker_FlatpakExists_Call) RunAndReturn(run func(string) bool) *MockAppChecker_FlatpakExists_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockAppChecker creates a new instance of MockAppChecker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockAppChecker(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockAppChecker {
|
||||||
|
mock := &MockAppChecker{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,26 +1,8 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_version
|
package mocks_version
|
||||||
|
|
||||||
import (
|
import mock "github.com/stretchr/testify/mock"
|
||||||
mock "github.com/stretchr/testify/mock"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewMockVersionFetcher creates a new instance of MockVersionFetcher. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockVersionFetcher(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockVersionFetcher {
|
|
||||||
mock := &MockVersionFetcher{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockVersionFetcher is an autogenerated mock type for the VersionFetcher type
|
// MockVersionFetcher is an autogenerated mock type for the VersionFetcher type
|
||||||
type MockVersionFetcher struct {
|
type MockVersionFetcher struct {
|
||||||
@@ -35,9 +17,9 @@ func (_m *MockVersionFetcher) EXPECT() *MockVersionFetcher_Expecter {
|
|||||||
return &MockVersionFetcher_Expecter{mock: &_m.Mock}
|
return &MockVersionFetcher_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCurrentVersion provides a mock function for the type MockVersionFetcher
|
// GetCurrentVersion provides a mock function with given fields: dmsPath
|
||||||
func (_mock *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, error) {
|
func (_m *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, error) {
|
||||||
ret := _mock.Called(dmsPath)
|
ret := _m.Called(dmsPath)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetCurrentVersion")
|
panic("no return value specified for GetCurrentVersion")
|
||||||
@@ -45,19 +27,21 @@ func (_mock *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, erro
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (string, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
|
||||||
return returnFunc(dmsPath)
|
return rf(dmsPath)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) string); ok {
|
if rf, ok := ret.Get(0).(func(string) string); ok {
|
||||||
r0 = returnFunc(dmsPath)
|
r0 = rf(dmsPath)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(dmsPath)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(dmsPath)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,36 +52,30 @@ type MockVersionFetcher_GetCurrentVersion_Call struct {
|
|||||||
|
|
||||||
// GetCurrentVersion is a helper method to define mock.On call
|
// GetCurrentVersion is a helper method to define mock.On call
|
||||||
// - dmsPath string
|
// - dmsPath string
|
||||||
func (_e *MockVersionFetcher_Expecter) GetCurrentVersion(dmsPath any) *MockVersionFetcher_GetCurrentVersion_Call {
|
func (_e *MockVersionFetcher_Expecter) GetCurrentVersion(dmsPath interface{}) *MockVersionFetcher_GetCurrentVersion_Call {
|
||||||
return &MockVersionFetcher_GetCurrentVersion_Call{Call: _e.mock.On("GetCurrentVersion", dmsPath)}
|
return &MockVersionFetcher_GetCurrentVersion_Call{Call: _e.mock.On("GetCurrentVersion", dmsPath)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetCurrentVersion_Call {
|
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetCurrentVersion_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Return(s string, err error) *MockVersionFetcher_GetCurrentVersion_Call {
|
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Return(_a0 string, _a1 error) *MockVersionFetcher_GetCurrentVersion_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetCurrentVersion_Call) RunAndReturn(run func(dmsPath string) (string, error)) *MockVersionFetcher_GetCurrentVersion_Call {
|
func (_c *MockVersionFetcher_GetCurrentVersion_Call) RunAndReturn(run func(string) (string, error)) *MockVersionFetcher_GetCurrentVersion_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLatestVersion provides a mock function for the type MockVersionFetcher
|
// GetLatestVersion provides a mock function with given fields: dmsPath
|
||||||
func (_mock *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error) {
|
func (_m *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error) {
|
||||||
ret := _mock.Called(dmsPath)
|
ret := _m.Called(dmsPath)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetLatestVersion")
|
panic("no return value specified for GetLatestVersion")
|
||||||
@@ -105,19 +83,21 @@ func (_mock *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error
|
|||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) (string, error)); ok {
|
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
|
||||||
return returnFunc(dmsPath)
|
return rf(dmsPath)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func(string) string); ok {
|
if rf, ok := ret.Get(0).(func(string) string); ok {
|
||||||
r0 = returnFunc(dmsPath)
|
r0 = rf(dmsPath)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
|
|
||||||
r1 = returnFunc(dmsPath)
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||||
|
r1 = rf(dmsPath)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,29 +108,37 @@ type MockVersionFetcher_GetLatestVersion_Call struct {
|
|||||||
|
|
||||||
// GetLatestVersion is a helper method to define mock.On call
|
// GetLatestVersion is a helper method to define mock.On call
|
||||||
// - dmsPath string
|
// - dmsPath string
|
||||||
func (_e *MockVersionFetcher_Expecter) GetLatestVersion(dmsPath any) *MockVersionFetcher_GetLatestVersion_Call {
|
func (_e *MockVersionFetcher_Expecter) GetLatestVersion(dmsPath interface{}) *MockVersionFetcher_GetLatestVersion_Call {
|
||||||
return &MockVersionFetcher_GetLatestVersion_Call{Call: _e.mock.On("GetLatestVersion", dmsPath)}
|
return &MockVersionFetcher_GetLatestVersion_Call{Call: _e.mock.On("GetLatestVersion", dmsPath)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetLatestVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetLatestVersion_Call {
|
func (_c *MockVersionFetcher_GetLatestVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetLatestVersion_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 string
|
run(args[0].(string))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(string)
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetLatestVersion_Call) Return(s string, err error) *MockVersionFetcher_GetLatestVersion_Call {
|
func (_c *MockVersionFetcher_GetLatestVersion_Call) Return(_a0 string, _a1 error) *MockVersionFetcher_GetLatestVersion_Call {
|
||||||
_c.Call.Return(s, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockVersionFetcher_GetLatestVersion_Call) RunAndReturn(run func(dmsPath string) (string, error)) *MockVersionFetcher_GetLatestVersion_Call {
|
func (_c *MockVersionFetcher_GetLatestVersion_Call) RunAndReturn(run func(string) (string, error)) *MockVersionFetcher_GetLatestVersion_Call {
|
||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockVersionFetcher creates a new instance of MockVersionFetcher. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockVersionFetcher(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockVersionFetcher {
|
||||||
|
mock := &MockVersionFetcher{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_wlclient
|
package mocks_wlclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
client "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockWaylandDisplay creates a new instance of MockWaylandDisplay. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockWaylandDisplay(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockWaylandDisplay {
|
|
||||||
mock := &MockWaylandDisplay{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockWaylandDisplay is an autogenerated mock type for the WaylandDisplay type
|
// MockWaylandDisplay is an autogenerated mock type for the WaylandDisplay type
|
||||||
type MockWaylandDisplay struct {
|
type MockWaylandDisplay struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,22 +20,23 @@ func (_m *MockWaylandDisplay) EXPECT() *MockWaylandDisplay_Expecter {
|
|||||||
return &MockWaylandDisplay_Expecter{mock: &_m.Mock}
|
return &MockWaylandDisplay_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Context provides a mock function for the type MockWaylandDisplay
|
// Context provides a mock function with no fields
|
||||||
func (_mock *MockWaylandDisplay) Context() *client.Context {
|
func (_m *MockWaylandDisplay) Context() *client.Context {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Context")
|
panic("no return value specified for Context")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *client.Context
|
var r0 *client.Context
|
||||||
if returnFunc, ok := ret.Get(0).(func() *client.Context); ok {
|
if rf, ok := ret.Get(0).(func() *client.Context); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*client.Context)
|
r0 = ret.Get(0).(*client.Context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,8 +57,8 @@ func (_c *MockWaylandDisplay_Context_Call) Run(run func()) *MockWaylandDisplay_C
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandDisplay_Context_Call) Return(context *client.Context) *MockWaylandDisplay_Context_Call {
|
func (_c *MockWaylandDisplay_Context_Call) Return(_a0 *client.Context) *MockWaylandDisplay_Context_Call {
|
||||||
_c.Call.Return(context)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,20 +67,21 @@ func (_c *MockWaylandDisplay_Context_Call) RunAndReturn(run func() *client.Conte
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destroy provides a mock function for the type MockWaylandDisplay
|
// Destroy provides a mock function with no fields
|
||||||
func (_mock *MockWaylandDisplay) Destroy() error {
|
func (_m *MockWaylandDisplay) Destroy() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Destroy")
|
panic("no return value specified for Destroy")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,8 +102,8 @@ func (_c *MockWaylandDisplay_Destroy_Call) Run(run func()) *MockWaylandDisplay_D
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandDisplay_Destroy_Call) Return(err error) *MockWaylandDisplay_Destroy_Call {
|
func (_c *MockWaylandDisplay_Destroy_Call) Return(_a0 error) *MockWaylandDisplay_Destroy_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,9 +112,9 @@ func (_c *MockWaylandDisplay_Destroy_Call) RunAndReturn(run func() error) *MockW
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRegistry provides a mock function for the type MockWaylandDisplay
|
// GetRegistry provides a mock function with no fields
|
||||||
func (_mock *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
|
func (_m *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for GetRegistry")
|
panic("no return value specified for GetRegistry")
|
||||||
@@ -136,21 +122,23 @@ func (_mock *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
|
|||||||
|
|
||||||
var r0 *client.Registry
|
var r0 *client.Registry
|
||||||
var r1 error
|
var r1 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() (*client.Registry, error)); ok {
|
if rf, ok := ret.Get(0).(func() (*client.Registry, error)); ok {
|
||||||
return returnFunc()
|
return rf()
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(0).(func() *client.Registry); ok {
|
if rf, ok := ret.Get(0).(func() *client.Registry); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*client.Registry)
|
r0 = ret.Get(0).(*client.Registry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if returnFunc, ok := ret.Get(1).(func() error); ok {
|
|
||||||
r1 = returnFunc()
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,8 +159,8 @@ func (_c *MockWaylandDisplay_GetRegistry_Call) Run(run func()) *MockWaylandDispl
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandDisplay_GetRegistry_Call) Return(registry *client.Registry, err error) *MockWaylandDisplay_GetRegistry_Call {
|
func (_c *MockWaylandDisplay_GetRegistry_Call) Return(_a0 *client.Registry, _a1 error) *MockWaylandDisplay_GetRegistry_Call {
|
||||||
_c.Call.Return(registry, err)
|
_c.Call.Return(_a0, _a1)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,20 +169,21 @@ func (_c *MockWaylandDisplay_GetRegistry_Call) RunAndReturn(run func() (*client.
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Roundtrip provides a mock function for the type MockWaylandDisplay
|
// Roundtrip provides a mock function with no fields
|
||||||
func (_mock *MockWaylandDisplay) Roundtrip() error {
|
func (_m *MockWaylandDisplay) Roundtrip() error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Roundtrip")
|
panic("no return value specified for Roundtrip")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 error
|
var r0 error
|
||||||
if returnFunc, ok := ret.Get(0).(func() error); ok {
|
if rf, ok := ret.Get(0).(func() error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Error(0)
|
r0 = ret.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,8 +204,8 @@ func (_c *MockWaylandDisplay_Roundtrip_Call) Run(run func()) *MockWaylandDisplay
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandDisplay_Roundtrip_Call) Return(err error) *MockWaylandDisplay_Roundtrip_Call {
|
func (_c *MockWaylandDisplay_Roundtrip_Call) Return(_a0 error) *MockWaylandDisplay_Roundtrip_Call {
|
||||||
_c.Call.Return(err)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,3 +213,17 @@ func (_c *MockWaylandDisplay_Roundtrip_Call) RunAndReturn(run func() error) *Moc
|
|||||||
_c.Call.Return(run)
|
_c.Call.Return(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockWaylandDisplay creates a new instance of MockWaylandDisplay. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockWaylandDisplay(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockWaylandDisplay {
|
||||||
|
mock := &MockWaylandDisplay{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
// Code generated by mockery; DO NOT EDIT.
|
// Code generated by mockery v2.53.5. DO NOT EDIT.
|
||||||
// github.com/vektra/mockery
|
|
||||||
// template: testify
|
|
||||||
|
|
||||||
package mocks_wlcontext
|
package mocks_wlcontext
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
client "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMockWaylandContext creates a new instance of MockWaylandContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
|
||||||
// The first argument is typically a *testing.T value.
|
|
||||||
func NewMockWaylandContext(t interface {
|
|
||||||
mock.TestingT
|
|
||||||
Cleanup(func())
|
|
||||||
}) *MockWaylandContext {
|
|
||||||
mock := &MockWaylandContext{}
|
|
||||||
mock.Mock.Test(t)
|
|
||||||
|
|
||||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
|
||||||
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockWaylandContext is an autogenerated mock type for the WaylandContext type
|
// MockWaylandContext is an autogenerated mock type for the WaylandContext type
|
||||||
type MockWaylandContext struct {
|
type MockWaylandContext struct {
|
||||||
mock.Mock
|
mock.Mock
|
||||||
@@ -36,10 +20,9 @@ func (_m *MockWaylandContext) EXPECT() *MockWaylandContext_Expecter {
|
|||||||
return &MockWaylandContext_Expecter{mock: &_m.Mock}
|
return &MockWaylandContext_Expecter{mock: &_m.Mock}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close provides a mock function for the type MockWaylandContext
|
// Close provides a mock function with no fields
|
||||||
func (_mock *MockWaylandContext) Close() {
|
func (_m *MockWaylandContext) Close() {
|
||||||
_mock.Called()
|
_m.Called()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockWaylandContext_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
|
// MockWaylandContext_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
|
||||||
@@ -69,22 +52,23 @@ func (_c *MockWaylandContext_Close_Call) RunAndReturn(run func()) *MockWaylandCo
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display provides a mock function for the type MockWaylandContext
|
// Display provides a mock function with no fields
|
||||||
func (_mock *MockWaylandContext) Display() *client.Display {
|
func (_m *MockWaylandContext) Display() *client.Display {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for Display")
|
panic("no return value specified for Display")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 *client.Display
|
var r0 *client.Display
|
||||||
if returnFunc, ok := ret.Get(0).(func() *client.Display); ok {
|
if rf, ok := ret.Get(0).(func() *client.Display); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*client.Display)
|
r0 = ret.Get(0).(*client.Display)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +89,8 @@ func (_c *MockWaylandContext_Display_Call) Run(run func()) *MockWaylandContext_D
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandContext_Display_Call) Return(display *client.Display) *MockWaylandContext_Display_Call {
|
func (_c *MockWaylandContext_Display_Call) Return(_a0 *client.Display) *MockWaylandContext_Display_Call {
|
||||||
_c.Call.Return(display)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,22 +99,23 @@ func (_c *MockWaylandContext_Display_Call) RunAndReturn(run func() *client.Displ
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// FatalError provides a mock function for the type MockWaylandContext
|
// FatalError provides a mock function with no fields
|
||||||
func (_mock *MockWaylandContext) FatalError() <-chan error {
|
func (_m *MockWaylandContext) FatalError() <-chan error {
|
||||||
ret := _mock.Called()
|
ret := _m.Called()
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for FatalError")
|
panic("no return value specified for FatalError")
|
||||||
}
|
}
|
||||||
|
|
||||||
var r0 <-chan error
|
var r0 <-chan error
|
||||||
if returnFunc, ok := ret.Get(0).(func() <-chan error); ok {
|
if rf, ok := ret.Get(0).(func() <-chan error); ok {
|
||||||
r0 = returnFunc()
|
r0 = rf()
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(<-chan error)
|
r0 = ret.Get(0).(<-chan error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r0
|
return r0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,8 +136,8 @@ func (_c *MockWaylandContext_FatalError_Call) Run(run func()) *MockWaylandContex
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandContext_FatalError_Call) Return(errCh <-chan error) *MockWaylandContext_FatalError_Call {
|
func (_c *MockWaylandContext_FatalError_Call) Return(_a0 <-chan error) *MockWaylandContext_FatalError_Call {
|
||||||
_c.Call.Return(errCh)
|
_c.Call.Return(_a0)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,10 +146,9 @@ func (_c *MockWaylandContext_FatalError_Call) RunAndReturn(run func() <-chan err
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post provides a mock function for the type MockWaylandContext
|
// Post provides a mock function with given fields: fn
|
||||||
func (_mock *MockWaylandContext) Post(fn func()) {
|
func (_m *MockWaylandContext) Post(fn func()) {
|
||||||
_mock.Called(fn)
|
_m.Called(fn)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockWaylandContext_Post_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Post'
|
// MockWaylandContext_Post_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Post'
|
||||||
@@ -174,19 +158,13 @@ type MockWaylandContext_Post_Call struct {
|
|||||||
|
|
||||||
// Post is a helper method to define mock.On call
|
// Post is a helper method to define mock.On call
|
||||||
// - fn func()
|
// - fn func()
|
||||||
func (_e *MockWaylandContext_Expecter) Post(fn any) *MockWaylandContext_Post_Call {
|
func (_e *MockWaylandContext_Expecter) Post(fn interface{}) *MockWaylandContext_Post_Call {
|
||||||
return &MockWaylandContext_Post_Call{Call: _e.mock.On("Post", fn)}
|
return &MockWaylandContext_Post_Call{Call: _e.mock.On("Post", fn)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandContext_Post_Call) Run(run func(fn func())) *MockWaylandContext_Post_Call {
|
func (_c *MockWaylandContext_Post_Call) Run(run func(fn func())) *MockWaylandContext_Post_Call {
|
||||||
_c.Call.Run(func(args mock.Arguments) {
|
_c.Call.Run(func(args mock.Arguments) {
|
||||||
var arg0 func()
|
run(args[0].(func()))
|
||||||
if args[0] != nil {
|
|
||||||
arg0 = args[0].(func())
|
|
||||||
}
|
|
||||||
run(
|
|
||||||
arg0,
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
@@ -196,15 +174,14 @@ func (_c *MockWaylandContext_Post_Call) Return() *MockWaylandContext_Post_Call {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_c *MockWaylandContext_Post_Call) RunAndReturn(run func(fn func())) *MockWaylandContext_Post_Call {
|
func (_c *MockWaylandContext_Post_Call) RunAndReturn(run func(func())) *MockWaylandContext_Post_Call {
|
||||||
_c.Run(run)
|
_c.Run(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start provides a mock function for the type MockWaylandContext
|
// Start provides a mock function with no fields
|
||||||
func (_mock *MockWaylandContext) Start() {
|
func (_m *MockWaylandContext) Start() {
|
||||||
_mock.Called()
|
_m.Called()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockWaylandContext_Start_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Start'
|
// MockWaylandContext_Start_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Start'
|
||||||
@@ -233,3 +210,17 @@ func (_c *MockWaylandContext_Start_Call) RunAndReturn(run func()) *MockWaylandCo
|
|||||||
_c.Run(run)
|
_c.Run(run)
|
||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMockWaylandContext creates a new instance of MockWaylandContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||||
|
// The first argument is typically a *testing.T value.
|
||||||
|
func NewMockWaylandContext(t interface {
|
||||||
|
mock.TestingT
|
||||||
|
Cleanup(func())
|
||||||
|
}) *MockWaylandContext {
|
||||||
|
mock := &MockWaylandContext{}
|
||||||
|
mock.Mock.Test(t)
|
||||||
|
|
||||||
|
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user