Add support for editing room tags
This commit is contained in:
		@@ -111,6 +111,9 @@ func NewCommandProcessor(parent *MainView) *CommandProcessor {
 | 
			
		||||
			"rainbow":         cmdRainbow,
 | 
			
		||||
			"rainbowme":       cmdRainbowMe,
 | 
			
		||||
			"notice":          cmdNotice,
 | 
			
		||||
			"tags":            cmdTags,
 | 
			
		||||
			"tag":             cmdTag,
 | 
			
		||||
			"untag":           cmdUntag,
 | 
			
		||||
			"invite":          cmdInvite,
 | 
			
		||||
			"hprof":           cmdHeapProfile,
 | 
			
		||||
			"cprof":           cmdCPUProfile,
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"math"
 | 
			
		||||
	"os"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	dbg "runtime/debug"
 | 
			
		||||
@@ -105,6 +106,59 @@ func cmdNotice(cmd *Command) {
 | 
			
		||||
	cmd.UI.Render()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cmdTags(cmd *Command) {
 | 
			
		||||
	tags := cmd.Room.MxRoom().RawTags
 | 
			
		||||
	if len(tags) == 0 {
 | 
			
		||||
		if cmd.Room.MxRoom().IsDirect {
 | 
			
		||||
			cmd.Reply("This room has no tags, but it's marked as a direct chat.")
 | 
			
		||||
		} else {
 | 
			
		||||
			cmd.Reply("This room has no tags.")
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var resp strings.Builder
 | 
			
		||||
	resp.WriteString("Tags in this room:\n")
 | 
			
		||||
	for _, tag := range tags {
 | 
			
		||||
		if tag.Order != "" {
 | 
			
		||||
			_, _ = fmt.Fprintf(&resp, "%s (order: %s)\n", tag.Tag, tag.Order)
 | 
			
		||||
		} else {
 | 
			
		||||
			_, _ = fmt.Fprintf(&resp, "%s (no order)\n", tag.Tag)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	cmd.Reply(strings.TrimSpace(resp.String()))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cmdTag(cmd *Command) {
 | 
			
		||||
	if len(cmd.Args) == 0 {
 | 
			
		||||
		cmd.Reply("Usage: /tag <tag> [order]")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	order := math.NaN()
 | 
			
		||||
	if len(cmd.Args) > 1 {
 | 
			
		||||
		var err error
 | 
			
		||||
		order, err = strconv.ParseFloat(cmd.Args[1], 64)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			cmd.Reply("%s is not a valid order: %v", cmd.Args[1], err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	err := cmd.Matrix.Client().AddTag(cmd.Room.MxRoom().ID, cmd.Args[0], order)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		cmd.Reply("Failed to add tag:", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cmdUntag(cmd *Command) {
 | 
			
		||||
	if len(cmd.Args) == 0 {
 | 
			
		||||
		cmd.Reply("Usage: /untag <tag>")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err := cmd.Matrix.Client().RemoveTag(cmd.Room.MxRoom().ID, cmd.Args[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		cmd.Reply("Failed to remove tag:", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cmdRoomNick(cmd *Command) {
 | 
			
		||||
	room := cmd.Room.MxRoom()
 | 
			
		||||
	member := room.GetMember(room.SessionUserID)
 | 
			
		||||
 
 | 
			
		||||
@@ -370,8 +370,13 @@ func (view *MainView) UpdateTags(room *rooms.Room) {
 | 
			
		||||
	if !view.roomList.Contains(room.ID) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	reselect := view.roomList.selected == room
 | 
			
		||||
	view.roomList.Remove(room)
 | 
			
		||||
	view.roomList.Add(room)
 | 
			
		||||
	if reselect {
 | 
			
		||||
		view.roomList.SetSelected(room.Tags()[0].Tag, room)
 | 
			
		||||
	}
 | 
			
		||||
	view.parent.Render()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (view *MainView) SetTyping(roomID string, users []string) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user