mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
237 lines
8.7 KiB
Text
237 lines
8.7 KiB
Text
# Dateizuordnung
|
|
|
|
Die Funktion zur Dateizuordnung ermöglicht es dir, bestimmte Dateitypen mit deiner App zu verknüpfen, sodass die App gestartet wird, wenn Benutzer diese Dateien öffnen. Dies kann besonders nützlich für Texteditoren, Bild Viewer oder beliebige Anwendungen sein, die mit spezifischen Dateiformaten arbeiten. In dieser Anleitung werden wir die Schritte zur Implementierung von Datei-Assoziationen in Wails App durchlaufen.
|
|
|
|
## Dateizuordnung einrichten:
|
|
|
|
Um eine Datei-Assoziation einzurichten, muss die wails.json Datei der Anwendung angepasst werden.
|
|
Füge im Abschnitt "info" einen Abschnitt mit dem Namen "fileAssociations" hinzu, in diesem werden die Dateien angegeben, die mit der App verknüpft werden sollen.
|
|
|
|
Zum Beispiel:
|
|
|
|
```json
|
|
{
|
|
"info": {
|
|
"fileAssociations": [
|
|
{
|
|
"ext": "wails",
|
|
"name": "Wails",
|
|
"description": "Wails Application File",
|
|
"iconName": "wailsFileIcon",
|
|
"role": "Editor"
|
|
},
|
|
{
|
|
"ext": "jpg",
|
|
"name": "JPEG",
|
|
"description": "Image File",
|
|
"iconName": "jpegFileIcon",
|
|
"role": "Editor"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
| Eigenschaft | Beschreibung |
|
|
| :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| ext | Die Dateiendung (ohne den Punkt). e.g. png |
|
|
| name | Der Name. z.B. PNG Datei |
|
|
| iconName | Der Symbolname ohne Erweiterung. Icons sollten sich im Build-Ordner befinden. Richtige Icons werden aus der .png-Datei sowohl für macOS als auch für Windows generiert |
|
|
| description | Nur für Windows. Die Beschreibung. Es wird in der Spalte `Type` im Windows Explorer angezeigt. |
|
|
| role | Nur für macOS. Die Rolle der App in Bezug auf den Typ. Entspricht CFBundleTypeRoll. |
|
|
|
|
## Plattformspezifisches:
|
|
|
|
### macOS
|
|
|
|
Wenn du die Datei (oder Dateien) mit deiner App öffnest, startet das System deine App und ruft die "OnFileOpen"-Funktion in deiner Wails App auf. Beispiel:
|
|
|
|
```go title="main.go"
|
|
func main() {
|
|
// Create application with options
|
|
err := wails.Run(&options.App{
|
|
Title: "wails-open-file",
|
|
Width: 1024,
|
|
Height: 768,
|
|
AssetServer: &assetserver.Options{
|
|
Assets: assets,
|
|
},
|
|
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
|
Mac: &mac.Options{
|
|
OnFileOpen: func(filePaths []string) { println(filestring) },
|
|
},
|
|
Bind: []interface{}{
|
|
app,
|
|
},
|
|
})
|
|
|
|
if err != nil {
|
|
println("Error:", err.Error())
|
|
}
|
|
}
|
|
```
|
|
|
|
### Windows
|
|
|
|
Unter Windows wird die Verknüpfung nur mit dem NSIS Installer unterstützt. Während der Installation wird der Installer einen Registrierungseintrag für deine Datei-Assoziation erstellen. Wenn eine Datei mit deiner App geöffnet wird, wird eine neue Instanz der App gestartet und der Dateipfad wird als Argument an deine App übergeben. Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
|
|
|
|
```go title="main.go"
|
|
func main() {
|
|
argsWithoutProg := os.Args[1:]
|
|
|
|
if len(argsWithoutProg) != 0 {
|
|
println("launchArgs", argsWithoutProg)
|
|
}
|
|
}
|
|
```
|
|
|
|
Du kannst auch Einzel-Instanzsperren für deine App aktivieren. In diesem Fall, wird, wenn die Datei mit deiner App geöffnet wird, keine neue Instanz der App gestartet und Argumente werden an die bereits laufende Instanz übergeben. Überprüfe die Einzel-Instanz sperren Anleitung für Details. Beispiel:
|
|
|
|
```go title="main.go"
|
|
func main() {
|
|
// Create application with options
|
|
err := wails.Run(&options.App{
|
|
Title: "wails-open-file",
|
|
Width: 1024,
|
|
Height: 768,
|
|
AssetServer: &assetserver.Options{
|
|
Assets: assets,
|
|
},
|
|
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
|
SingleInstanceLock: &options.SingleInstanceLock{
|
|
UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc",
|
|
OnSecondInstanceLaunch: app.onSecondInstanceLaunch,
|
|
},
|
|
Bind: []interface{}{
|
|
app,
|
|
},
|
|
})
|
|
}
|
|
```
|
|
|
|
### Linux
|
|
|
|
Derzeit unterstützt Wails kein Bundling für Linux. Dateiassoziationen müssen dem nach manuell erstellt werden.
|
|
Zum Beispiel, wenn du deine App als .deb-Paket verteilst, können Datei-Assoziationen erstellt werden, indem du benötigte Dateien in deinem Bundle hinzufügst.
|
|
Du kannst [nfpm](https://nfpm.goreleaser.com/) verwenden, um .deb-Paket für deine App zu erstellen.
|
|
|
|
1. Erstelle eine .desktop Datei für deine App und gib dort die Datei-Assoziationen an. Beispiel:
|
|
|
|
```ini
|
|
[Desktop Entry]
|
|
Categories=Office
|
|
Exec=/usr/bin/wails-open-file %u
|
|
Icon=wails-open-file.png
|
|
Name=wails-open-file
|
|
Terminal=false
|
|
Type=Application
|
|
MimeType=application/x-wails;application/x-test
|
|
```
|
|
|
|
2. Erstelle eine Datei für Mime-Typen. Beispiel:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
|
<mime-type type="application/x-wails">
|
|
<comment>Wails Application File</comment>
|
|
<glob pattern="*.wails"/>
|
|
</mime-type>
|
|
</mime-info>
|
|
```
|
|
|
|
3. Erstelle Icons für deine Dateitypen. SVG-Icons werden empfohlen.
|
|
4. Bereite PostInstall/PostRemove Skripte für dein Paket vor. Beispiel:
|
|
|
|
```sh
|
|
# Mime-Typen neu laden, um Dateizuordnungen zu registrieren
|
|
update-mime-database /usr/share/mime
|
|
# Desktop-Datenbank neu laden, um die App in der Liste der verfügbaren Apps anzuzeigen.
|
|
update-desktop-database /usr/share/applications
|
|
# Icons aktualisieren
|
|
update-icon-caches /usr/share/icons/*
|
|
```
|
|
|
|
5. Konfiguriere nfpm, um deine Skripte und Dateien zu verwenden. Beispiel:
|
|
|
|
```yaml
|
|
name: "wails-open-file"
|
|
arch: "arm64"
|
|
platform: "linux"
|
|
version: "1.0.0"
|
|
section: "default"
|
|
priority: "extra"
|
|
maintainer: "FooBarCorp <FooBarCorp@gmail.com>"
|
|
description: "Sample Package"
|
|
vendor: "FooBarCorp"
|
|
homepage: "http://example.com"
|
|
license: "MIT"
|
|
contents:
|
|
- src: ../bin/wails-open-file
|
|
dst: /usr/bin/wails-open-file
|
|
- src: ./main.desktop
|
|
dst: /usr/share/applications/wails-open-file.desktop
|
|
- src: ./application-wails-mime.xml
|
|
dst: /usr/share/mime/packages/application-x-wails.xml
|
|
- src: ./application-test-mime.xml
|
|
dst: /usr/share/mime/packages/application-x-test.xml
|
|
- src: ../appicon.svg
|
|
dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg
|
|
- src: ../wailsFileIcon.svg
|
|
dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg
|
|
- src: ../testFileIcon.svg
|
|
dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-test.svg
|
|
# Kopiere Symbole auch in das Yaru-Theme. Aus irgendeinem Grund hat Ubuntu die Datei-Icons aus dem hicolor-Theme nicht übernommen.
|
|
- src: ../appicon.svg
|
|
dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg
|
|
- src: ../wailsFileIcon.svg
|
|
dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg
|
|
- src: ../testFileIcon.svg
|
|
dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg
|
|
scripts:
|
|
postinstall: ./postInstall.sh
|
|
postremove: ./postRemove.sh
|
|
```
|
|
|
|
6. Erstelle dein .deb-Paket mit nfpm:
|
|
|
|
```sh
|
|
nfpm pkg --packager deb --target .
|
|
```
|
|
|
|
7. Nachdem dein Paket installiert ist, wird deine App den angegebenen Dateitypen zugeordnet. Wenn eine Datei mit deiner App geöffnet wird, wird eine neue Instanz der App gestartet und der Dateipfad wird als Argument an deine App übergeben.
|
|
Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
|
|
|
|
```go title="main.go"
|
|
func main() {
|
|
argsWithoutProg := os.Args[1:]
|
|
|
|
if len(argsWithoutProg) != 0 {
|
|
println("launchArgs", argsWithoutProg)
|
|
}
|
|
}
|
|
```
|
|
|
|
Du kannst auch Einzel-Instanzsperren für deine App aktivieren. In diesem Fall, wird, wenn die Datei mit deiner App geöffnet wird, keine neue Instanz der App gestartet und Argumente werden an die bereits laufende Instanz übergeben. Überprüfe die Einzel-Instanz sperren Anleitung für Details. Beispiel:
|
|
|
|
```go title="main.go"
|
|
func main() {
|
|
// Create application with options
|
|
err := wails.Run(&options.App{
|
|
Title: "wails-open-file",
|
|
Width: 1024,
|
|
Height: 768,
|
|
AssetServer: &assetserver.Options{
|
|
Assets: assets,
|
|
},
|
|
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
|
SingleInstanceLock: &options.SingleInstanceLock{
|
|
UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc",
|
|
OnSecondInstanceLaunch: app.onSecondInstanceLaunch,
|
|
},
|
|
Bind: []interface{}{
|
|
app,
|
|
},
|
|
})
|
|
}
|
|
```
|