ref: f1cb9ed4a5302ab898dddcf9f87cf9664fc948a6
parent: 0a2550e6d1e9b8a4f49e5a12d9757e3d17339024
author: penny <penny@limitedideas.org>
date: Sat Nov 1 14:54:03 EDT 2025
port several more commands
--- a/commands.go
+++ b/commands.go
@@ -3,6 +3,8 @@
import (
"fmt"
"strings"
+ "time"
+ "runtime/debug"
mastodon "codeberg.org/penny64/hellclient-go-mastodon"
)
@@ -400,6 +402,111 @@
return ""
}
+type statscmd struct {+ *Hellclient
+}
+
+func (cmd *statscmd) flags() cmdflag {+ return free
+}
+
+func (cmd *statscmd) name() string {+ return "stats"
+}
+
+func (cmd *statscmd) result(data *cmddata) string {+ hc := cmd.Hellclient
+ hc.stats.slock.Lock()
+ var sb strings.Builder
+ sb.WriteString(fmt.Sprintf("API Calls: %d\n", hc.stats.APICalls))+ sb.WriteString(fmt.Sprintf("Statuses Received: %d\n", hc.stats.IncomingStatuses))+ sb.WriteString("Statuses per hour:")+ sb.WriteString(fmt.Sprintf("%.2f\n", float32(hc.stats.IncomingStatuses)/(float32(time.Since(hc.stats.StartedTime))/float32(time.Hour))))+ sb.WriteString(fmt.Sprintf("Started At: %s\n", hc.stats.StartedTime))+ timeSince := time.Since(hc.stats.StartedTime)
+ timeSince = timeSince.Round(time.Second)
+ sb.WriteString(fmt.Sprintf("Runtime: %s\n", timeSince.String()))+ hc.stats.slock.Unlock()
+ return sb.String()
+}
+
+type basiccmd struct {+ hc *Hellclient
+ bname string
+ bflags cmdflag
+ doer func(*cmddata) string
+}
+
+func (cmd *basiccmd) flags() cmdflag {+ return cmd.bflags
+}
+
+func (cmd *basiccmd) name() string {+ return cmd.bname
+}
+
+func (cmd *basiccmd) result(data *cmddata) string {+ return cmd.doer(data)
+}
+
+func (hc *Hellclient) versioncmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "version"
+ cmd.bflags = free
+ cmd.doer = func(data *cmddata) string {+ if buildInfo, ok := debug.ReadBuildInfo(); ok {+ return fmt.Sprintf("%+v\n", buildInfo)+ }
+ return fmt.Sprintf("No version information available.")+ }
+ return cmd
+}
+
+func (hc *Hellclient) prevcmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "prev"
+ cmd.bflags = free
+ cmd.doer = func(data *cmddata) string {+ if hc.page != nil {+ hc.page.Prev()
+ return fmt.Sprint(hc.page.String())
+ }
+ return fmt.Sprintf("No page loaded")+ }
+ return cmd
+}
+
+func (hc *Hellclient) nextcmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "next"
+ cmd.bflags = free
+ cmd.doer = func(data *cmddata) string {+ if hc.page != nil {+ hc.page.Next()
+ return fmt.Sprint(hc.page.String())
+ }
+ return fmt.Sprintf("No page loaded")+ }
+ return cmd
+}
+
+func (hc *Hellclient) pagecmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "page"
+ cmd.bflags = free
+ cmd.doer = func(data *cmddata) string {+ if hc.page != nil {+ return fmt.Sprint(hc.page.String())
+ }
+ return fmt.Sprintf("No page loaded")+ }
+ return cmd
+}
+
func (hc *Hellclient) newCmdArray() ([]cmder) { cmdarray := []cmder{ &profilecmd{hc, hc.cmdload},@@ -408,6 +515,11 @@
&reloadcmd{hc}, &detachcmd{hc}, &attachcmd{hc},+ &statscmd{hc},+ hc.versioncmd(),
+ hc.prevcmd(),
+ hc.nextcmd(),
+ hc.pagecmd(),
}
return cmdarray
}
--- a/main.go
+++ b/main.go
@@ -3,10 +3,9 @@
import (
"context"
"fmt"
- "runtime/debug"
+
"strconv"
"strings"
- "time"
mastodon "codeberg.org/penny64/hellclient-go-mastodon"
"github.com/k3a/html2text"
@@ -125,59 +124,6 @@
//Contextual commands that need to handle their own requirements
switch command {- case "attach":
- if arguments == "" {- arguments, err = pickFilename(hc.preferences.FilePicker)
- }
- if err != nil {- fmt.Printf("File picking error: %s\n", err)- return
- }
- err := hc.attacher.uploadAttachment(arguments)
- if err != nil {- fmt.Printf("Upload error: %s\n", err)- return
- }
- hc.prompt.UpdatePrompt()
- return
- case "stats":
- hc.stats.slock.Lock()
- var sb strings.Builder
- sb.WriteString(fmt.Sprintf("API Calls: %d\n", hc.stats.APICalls))- sb.WriteString(fmt.Sprintf("Statuses Received: %d\n", hc.stats.IncomingStatuses))- sb.WriteString("Statuses per hour:")- sb.WriteString(fmt.Sprintf("%.2f\n", float32(hc.stats.IncomingStatuses)/(float32(time.Since(hc.stats.StartedTime))/float32(time.Hour))))- sb.WriteString(fmt.Sprintf("Started At: %s\n", hc.stats.StartedTime))- timeSince := time.Since(hc.stats.StartedTime)
- timeSince = timeSince.Round(time.Second)
- sb.WriteString(fmt.Sprintf("Runtime: %s\n", timeSince.String()))- fmt.Print(sb.String())
- hc.stats.slock.Unlock()
- return
- case "version":
- if buildInfo, ok := debug.ReadBuildInfo(); ok {- fmt.Printf("%+v\n", buildInfo)- return
- }
- fmt.Printf("No version information available.")- return
- case "prev":
- if hc.page != nil {- hc.page.Prev()
- fmt.Print(hc.page.String())
- }
- return
- case "next":
- if hc.page != nil {- hc.page.Next()
- fmt.Print(hc.page.String())
- }
- return
- case "page":
- if hc.page != nil {- fmt.Print(hc.page.String())
- }
- return
case "bookmarks":
hc.pause(true)
hc.page = &Page{}--
⑨