diff --git a/cmd/cbconvert-gui/go.mod b/cmd/cbconvert-gui/go.mod index 0914a58..fd7ea37 100644 --- a/cmd/cbconvert-gui/go.mod +++ b/cmd/cbconvert-gui/go.mod @@ -5,7 +5,6 @@ go 1.26 require ( github.com/gen2brain/cbconvert v1.1.0 github.com/gen2brain/iup-go/iup v0.32.1-0.20260604112206-a19da6654449 - github.com/godbus/dbus/v5 v5.2.2 ) require ( diff --git a/cmd/cbconvert-gui/go.sum b/cmd/cbconvert-gui/go.sum index 3e37c29..51acec0 100644 --- a/cmd/cbconvert-gui/go.sum +++ b/cmd/cbconvert-gui/go.sum @@ -83,8 +83,6 @@ github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8b github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= -github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20260612074446-f1a45663b0f3 h1:UlucSQUu9SZdDRlMWv5N/T3Rig9gv615vWvHFKrXHWA= diff --git a/cmd/cbconvert-gui/main.go b/cmd/cbconvert-gui/main.go index efb5fc7..e11af0b 100644 --- a/cmd/cbconvert-gui/main.go +++ b/cmd/cbconvert-gui/main.go @@ -957,3 +957,52 @@ func onFilterChanged(ih iup.Ihandle) int { return iup.DEFAULT } + +func fileDlg(title string, multiple, directory bool) ([]string, error) { + ret := make([]string, 0) + + dlg := iup.FileDlg() + defer dlg.Destroy() + + if !directory { + mf := "YES" + if !multiple { + mf = "NO" + } + + dlg.SetAttributes(map[string]string{ + "DIALOGTYPE": "OPEN", + "MULTIPLEFILES": mf, + "EXTFILTER": "Comic Files|*.rar;*.zip;*.7z;*.tar;*.cbr;*.cbz;*.cb7;*.cbt;*.pdf;*.epub;*.mobi;*.docx;*.pptx|", + "FILTER": "*.cb*", // for Motif + "TITLE": title, + }) + } else { + dlg.SetAttributes(map[string]string{ + "DIALOGTYPE": "DIR", + "TITLE": title, + }) + } + + iup.Popup(dlg, iup.CENTERPARENT, iup.CENTERPARENT) + + if dlg.GetInt("STATUS") == 0 { + if !directory { + value := dlg.GetAttribute("VALUE") + sp := strings.Split(value, "|") + + if len(sp) > 1 { + for _, file := range sp[1 : len(sp)-1] { + ret = append(ret, filepath.Join(sp[0], file)) + } + } else { + ret = append(ret, value) + } + } else { + value := dlg.GetAttribute("VALUE") + ret = append(ret, value) + } + } + + return ret, nil +} diff --git a/cmd/cbconvert-gui/main_filedlg.go b/cmd/cbconvert-gui/main_filedlg.go deleted file mode 100644 index 5961d98..0000000 --- a/cmd/cbconvert-gui/main_filedlg.go +++ /dev/null @@ -1,65 +0,0 @@ -//go:build !portal - -package main - -import ( - "path/filepath" - "strings" - - "github.com/gen2brain/iup-go/iup" -) - -func fileDlg(title string, multiple, directory bool) ([]string, error) { - ret := make([]string, 0) - - dlg := iup.FileDlg() - defer dlg.Destroy() - - if !directory { - mf := "YES" - if !multiple { - mf = "NO" - } - - dlg.SetAttributes(map[string]string{ - "DIALOGTYPE": "OPEN", - "MULTIPLEFILES": mf, - "EXTFILTER": "Comic Files|*.rar;*.zip;*.7z;*.tar;*.cbr;*.cbz;*.cb7;*.cbt;*.pdf;*.epub;*.mobi;*.docx;*.pptx|", - "FILTER": "*.cb*", // for Motif - "TITLE": title, - }) - } else { - dlg.SetAttributes(map[string]string{ - "DIALOGTYPE": "DIR", - "TITLE": title, - }) - } - - iup.Popup(dlg, iup.CENTERPARENT, iup.CENTERPARENT) - - if dlg.GetInt("STATUS") == 0 { - if !directory { - value := dlg.GetAttribute("VALUE") - sp := strings.Split(value, "|") - - if strings.ToLower(iup.GetGlobal("DRIVER")) == "cocoa" { - for _, file := range sp { - ret = append(ret, file) - } - } else { - if len(sp) > 1 { - for _, file := range sp[1 : len(sp)-1] { - ret = append(ret, filepath.Join(sp[0], file)) - } - } else { - ret = append(ret, value) - } - } - } else { - value := dlg.GetAttribute("VALUE") - ret = append(ret, value) - } - } - - return ret, nil -} diff --git a/cmd/cbconvert-gui/main_filedlg_portal.go b/cmd/cbconvert-gui/main_filedlg_portal.go deleted file mode 100644 index 3a5c301..0000000 --- a/cmd/cbconvert-gui/main_filedlg_portal.go +++ /dev/null @@ -1,106 +0,0 @@ -//go:build portal - -package main - -import ( - "net/url" - - "github.com/godbus/dbus/v5" -) - -func fileDlg(title string, multiple, directory bool) ([]string, error) { - ret := make([]string, 0) - - conn, err := dbus.ConnectSessionBus() - if err != nil { - return ret, err - } - defer conn.Close() - - dest := "org.freedesktop.portal.Desktop" - path := "/org/freedesktop/portal/desktop" - resp := "org.freedesktop.portal.Request.Response" - - if err = conn.AddMatchSignal( - dbus.WithMatchInterface(dest), - dbus.WithMatchObjectPath(dbus.ObjectPath(path)), - dbus.WithMatchSender(conn.Names()[0]), - ); err != nil { - return ret, err - } - - c := make(chan *dbus.Signal, 10) - conn.Signal(c) - - type Item struct { - Index uint32 - Filter string - } - - type Filter struct { - Title string - Filters []Item - } - - filters := []Filter{ - { - "Comic Files", - []Item{ - Item{0, "*.rar"}, - Item{0, "*.zip"}, - Item{0, "*.7z"}, - Item{0, "*.tar"}, - Item{0, "*.cbr"}, - Item{0, "*.cbz"}, - Item{0, "*.cb7"}, - Item{0, "*.cbt"}, - Item{0, "*.pdf"}, - Item{0, "*.epub"}, - Item{0, "*.mobi"}, - Item{0, "*.docx"}, - Item{0, "*.pptx"}, - }, - }, - } - - opts := map[string]any{ - "multiple": multiple, - "directory": directory, - } - - if !directory { - opts["filters"] = filters - } - - obj := conn.Object(dest, dbus.ObjectPath(path)) - call := obj.Call("org.freedesktop.portal.FileChooser.OpenFile", 0, "", title, opts) - if call.Err != nil { - return ret, call.Err - } - - for v := range c { - if v.Name != resp { - continue - } - - status := v.Body[0].(uint32) - - if status == 0 { - m := v.Body[1].(map[string]dbus.Variant) - uris := m["uris"].Value().([]string) - - for _, uri := range uris { - u, err := url.ParseRequestURI(uri) - if err != nil { - return ret, err - } - - ret = append(ret, u.Path) - } - } - - break - } - - return ret, nil -}