Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/main.go
365 views
1
package main
2
3
import (
4
"context"
5
"embed"
6
"io/fs"
7
8
"github.com/diamondburned/adaptive"
9
"github.com/diamondburned/gotk4-adwaita/pkg/adw"
10
"github.com/diamondburned/gotk4/pkg/glib/v2"
11
"github.com/diamondburned/gotkit/app"
12
"github.com/diamondburned/gotkit/app/locale"
13
"github.com/diamondburned/gotkit/app/prefs"
14
"github.com/diamondburned/gotkit/components/logui"
15
"github.com/diamondburned/gotkit/components/prefui"
16
"github.com/diamondburned/gotkit/gtkutil"
17
"github.com/diamondburned/gotkit/gtkutil/cssutil"
18
"libdb.so/dissent/internal/gtkcord"
19
"libdb.so/dissent/internal/window"
20
"libdb.so/dissent/internal/window/about"
21
22
_ "github.com/diamondburned/gotkit/gtkutil/aggressivegc"
23
_ "libdb.so/dissent/internal/icons"
24
)
25
26
//go:embed po/*
27
var po embed.FS
28
29
func init() {
30
po, _ := fs.Sub(po, "po")
31
locale.LoadLocale(po)
32
}
33
34
// Version is connected to about.SetVersion.
35
var Version string
36
37
func init() { about.SetVersion(Version) }
38
39
var _ = cssutil.WriteCSS(`
40
window.background,
41
window.background.solid-csd {
42
background-color: @theme_bg_color;
43
}
44
45
avatar > image {
46
background: none;
47
}
48
avatar > label {
49
background: @borders;
50
}
51
52
.md-textblock {
53
line-height: 1.35em;
54
}
55
`)
56
57
func init() {
58
app.Hook(func(*app.Application) {
59
adw.Init()
60
adaptive.Init()
61
})
62
}
63
64
func main() {
65
m := manager{}
66
m.app = app.New(context.Background(), "so.libdb.dissent", "Dissent")
67
m.app.AddJSONActions(map[string]interface{}{
68
"app.preferences": func() { prefui.ShowDialog(m.win.Context()) },
69
"app.about": func() { about.New(m.win.Context()).Present(m.win) },
70
"app.logs": func() { logui.ShowDefaultViewer(m.win.Context()) },
71
"app.quit": func() { m.app.Quit() },
72
})
73
m.app.AddActionCallbacks(map[string]gtkutil.ActionCallback{
74
"app.open-channel": m.forwardSignalToWindow("open-channel", gtkcord.SnowflakeVariant),
75
"app.open-guild": m.forwardSignalToWindow("open-guild", gtkcord.SnowflakeVariant),
76
})
77
m.app.AddActionShortcuts(map[string]string{
78
"<Ctrl>Q": "app.quit",
79
})
80
m.app.ConnectActivate(func() { m.activate(m.app.Context()) })
81
m.app.RunMain()
82
}
83
84
type manager struct {
85
app *app.Application
86
win *window.Window
87
}
88
89
func (m *manager) forwardSignalToWindow(name string, t *glib.VariantType) gtkutil.ActionCallback {
90
return gtkutil.ActionCallback{
91
ArgType: t,
92
Func: func(args *glib.Variant) { m.win.ActivateAction(name, args) },
93
}
94
}
95
96
func (m *manager) activate(ctx context.Context) {
97
if m.win != nil {
98
m.win.Present()
99
return
100
}
101
102
m.win = window.NewWindow(ctx)
103
m.win.Present()
104
105
prefs.AsyncLoadSaved(ctx, func(err error) {
106
if err != nil {
107
app.Error(ctx, err)
108
}
109
})
110
}
111
112