shithub: hell

Download patch

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{}
--