Skip to content

Commit 86ece34

Browse files
committed
feat: refactor default-file-manager
use app manager to launch default-file-manager Log:
1 parent 035961f commit 86ece34

4 files changed

Lines changed: 110 additions & 40 deletions

File tree

Makefile

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ TEST = \
9191
${GOPKG_PREFIX}/systeminfo1 \
9292
${GOPKG_PREFIX}/timedate1 \
9393
${GOPKG_PREFIX}/trayicon1 \
94-
${GOPKG_PREFIX}/x_event_monitor1
94+
${GOPKG_PREFIX}/x_event_monitor1 \
95+
${GOPKG_PREFIX}/bin/default-file-manager
9596
#${GOPKG_PREFIX}/timedate1/zoneinfo \
9697
9798
BINARIES = \
@@ -105,7 +106,8 @@ BINARIES = \
105106
dde-lockservice \
106107
dde-authority \
107108
default-terminal \
108-
dde-greeter-setter
109+
dde-greeter-setter \
110+
default-file-manager
109111

110112
LANGUAGES = $(basename $(notdir $(wildcard misc/po/*.po)))
111113

@@ -121,9 +123,6 @@ prepare:
121123
out/bin/%: prepare
122124
env GOPATH="${CURDIR}/${GOPATH_DIR}:${GOPATH}" ${GOBUILD} -o $@ ${GOBUILD_OPTIONS} ${GOPKG_PREFIX}/bin/${@F}
123125

124-
out/bin/default-file-manager: bin/default-file-manager/main.c
125-
gcc $^ $(shell pkg-config --cflags --libs gio-unix-2.0) $(CFLAGS) -o $@
126-
127126
out/bin/desktop-toggle: bin/desktop-toggle/main.c
128127
gcc $^ $(shell pkg-config --cflags --libs x11) $(CFLAGS) -o $@
129128

bin/default-file-manager/main.c

Lines changed: 0 additions & 35 deletions
This file was deleted.

bin/default-file-manager/main.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
package main
6+
7+
import (
8+
"errors"
9+
"log"
10+
"os/user"
11+
"path/filepath"
12+
"strings"
13+
14+
dbus "github.com/godbus/dbus/v5"
15+
appmanager "github.com/linuxdeepin/go-dbus-factory/session/org.desktopspec.applicationmanager1"
16+
"github.com/linuxdeepin/go-gir/gio-2.0"
17+
"github.com/linuxdeepin/go-lib/appinfo/desktopappinfo"
18+
"github.com/linuxdeepin/go-lib/dbusutil"
19+
)
20+
21+
const (
22+
appManagerDBusServiceName = "org.desktopspec.ApplicationManager1"
23+
appManagerDBusPath = "/org/desktopspec/ApplicationManager1"
24+
)
25+
26+
const (
27+
fileManagerMimeType = "inode/directory"
28+
)
29+
30+
func init() {
31+
log.SetFlags(log.Lshortfile)
32+
}
33+
34+
func queryAppDesktopByMime() (string, error) {
35+
appInfo := gio.AppInfoGetDefaultForType(fileManagerMimeType, false)
36+
if appInfo == nil {
37+
return "", errors.New("failed to get appInfo")
38+
}
39+
40+
defer appInfo.Unref()
41+
42+
dAppInfo := gio.ToDesktopAppInfo(appInfo)
43+
44+
return strings.TrimSpace(filepath.Base(dAppInfo.GetFilename())), nil
45+
}
46+
47+
func main() {
48+
sessionBus, err := dbus.SessionBus()
49+
if err != nil {
50+
log.Fatal(err)
51+
}
52+
53+
session, err := dbusutil.NewSessionService()
54+
if err != nil {
55+
log.Fatal(err)
56+
}
57+
58+
has, err := session.NameHasOwner(appManagerDBusServiceName)
59+
if err != nil {
60+
log.Println("warning: call name has owner error:", err)
61+
}
62+
63+
if has {
64+
var dBusObjPath dbus.ObjectPath
65+
var mimeType string
66+
67+
mimeManagerAppObj := appmanager.NewMimeManager(sessionBus)
68+
69+
if mimeManagerAppObj != nil {
70+
cur, err := user.Current()
71+
if err != nil {
72+
log.Fatal(err)
73+
}
74+
75+
mimeType, dBusObjPath, err = mimeManagerAppObj.QueryDefaultApplication(0, cur.HomeDir)
76+
if err != nil {
77+
log.Println("warning: query default application error:", err)
78+
}
79+
}
80+
81+
if mimeType != fileManagerMimeType || dBusObjPath == "/" {
82+
log.Println("warning: can not get default file manager from AM, query from xdg-mime:", err)
83+
appDesktop, err := queryAppDesktopByMime()
84+
if err != nil {
85+
log.Fatal(err)
86+
}
87+
88+
dBusObjPath, err = desktopappinfo.GetDBusObjectFromAppDesktop(appDesktop, appManagerDBusServiceName, appManagerDBusPath)
89+
if err != nil {
90+
log.Println("warning: get dbus object path error:", err)
91+
log.Fatal(err)
92+
}
93+
}
94+
95+
appManagerAppObj, err := appmanager.NewApplication(sessionBus, dBusObjPath)
96+
if err != nil {
97+
log.Println("warning: new appManager error:", err)
98+
}
99+
100+
_, err = appManagerAppObj.Launch(0, "", []string{}, make(map[string]dbus.Variant))
101+
if err != nil {
102+
log.Println("warning: launch app error:", err)
103+
}
104+
}
105+
}

gen.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ package daemon
1515
//go:generate go build -o target/ github.com/linuxdeepin/dde-daemon/bin/dde-authority
1616
//go:generate go build -o target/ github.com/linuxdeepin/dde-daemon/bin/default-terminal
1717
//go:generate go build -o target/ github.com/linuxdeepin/dde-daemon/bin/dde-greeter-setter
18+
//go:generate go build -o target/ github.com/linuxdeepin/dde-daemon/bin/default-file-manager

0 commit comments

Comments
 (0)