-
Notifications
You must be signed in to change notification settings - Fork 80
/
install.go
82 lines (70 loc) · 2.48 KB
/
install.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package gui
import (
"io/ioutil"
"os"
"path/filepath"
"github.com/coyim/coyim/config"
"github.com/kardianos/osext"
)
func ensureInstalled() {
ensureIconsInstalled()
ensureDesktopFileInstalled()
}
func iconFileName() string {
return "coyim-" + coyimIcon.hash() + ".png"
}
func fileExists(filename string) bool {
_, err := os.Stat(filename)
return err == nil
}
func ensureIconsInstalled() {
dataHome := config.XdgDataHome()
if dataHome != "" && fileExists(dataHome) {
icon16, _ := coyimIcon.createPixBufWithSize(16, 16)
icon32, _ := coyimIcon.createPixBufWithSize(32, 32)
icon48, _ := coyimIcon.createPixBufWithSize(48, 48)
icon128, _ := coyimIcon.createPixBufWithSize(128, 128)
icon256, _ := coyimIcon.createPixBufWithSize(256, 256)
os.MkdirAll(filepath.Join(dataHome, "icons/hicolor/16x16/apps"), 0700)
os.MkdirAll(filepath.Join(dataHome, "icons/hicolor/32x32/apps"), 0700)
os.MkdirAll(filepath.Join(dataHome, "icons/hicolor/48x48/apps"), 0700)
os.MkdirAll(filepath.Join(dataHome, "icons/hicolor/128x128/apps"), 0700)
os.MkdirAll(filepath.Join(dataHome, "icons/hicolor/256x256/apps"), 0700)
fileName := iconFileName()
icon16.SavePNG(filepath.Join(dataHome, "icons/hicolor/16x16/apps", fileName), 9)
icon32.SavePNG(filepath.Join(dataHome, "icons/hicolor/32x32/apps", fileName), 9)
icon48.SavePNG(filepath.Join(dataHome, "icons/hicolor/48x48/apps", fileName), 9)
icon128.SavePNG(filepath.Join(dataHome, "icons/hicolor/128x128/apps", fileName), 9)
icon256.SavePNG(filepath.Join(dataHome, "icons/hicolor/256x256/apps", fileName), 9)
}
}
func ensureDesktopFileInstalled() {
dataHome := config.XdgDataHome()
if dataHome != "" && fileExists(dataHome) {
os.MkdirAll(filepath.Join(dataHome, "applications"), 0700)
ioutil.WriteFile(filepath.Join(dataHome, "applications", "coyim.desktop"), []byte(generateDesktopFile(false)), 0600)
ioutil.WriteFile(filepath.Join(dataHome, "applications", "coyim-debug.desktop"), []byte(generateDesktopFile(true)), 0600)
}
}
func generateDesktopFile(debug bool) string {
name := "CoyIM"
path, _ := osext.Executable()
icon := iconFileName()
revision := coyimVersion
if debug {
name = name + "-debug"
path = path + " -debug"
}
return "" +
"[Desktop Entry]\n" +
"Type=Application\n" +
"Version=1.0\n" +
"Encoding=UTF-8\n" +
"Name=" + name + "\n" +
"Comment=Secure Instant Messenger\n" +
"Exec=" + path + "\n" +
"Icon=" + icon + "\n" +
"Terminal=false\n" +
"Categories=Network;\n" +
"# CoyIMVersion=" + revision + "\n"
}