GetOutputs implemented

This commit is contained in:
milarin 2024-02-14 15:26:04 +01:00
parent 8bb43a4263
commit f2690ddf0b
2 changed files with 96 additions and 0 deletions

47
get_outputs.go Normal file
View File

@ -0,0 +1,47 @@
package sway
import (
"context"
"encoding/binary"
"encoding/json"
"fmt"
"io"
)
func (c *Client) GetOutputs(ctx context.Context) ([]Output, error) {
c.Lock()
defer c.Unlock()
if _, err := fmt.Fprint(c.conn, "i3-ipc"); err != nil {
return nil, err
}
if err := binary.Write(c.conn, binary.LittleEndian, uint32(0)); err != nil {
return nil, err
}
if err := binary.Write(c.conn, binary.LittleEndian, uint32(3)); err != nil {
return nil, err
}
if _, err := c.conn.Read(make([]byte, 6)); err != nil {
return nil, err
}
var length uint32
if err := binary.Read(c.conn, binary.LittleEndian, &length); err != nil {
return nil, err
}
var messageType uint32
if err := binary.Read(c.conn, binary.LittleEndian, &messageType); err != nil {
return nil, err
}
results := []Output{}
if err := json.NewDecoder(io.LimitReader(c.conn, int64(length))).Decode(&results); err != nil {
return nil, err
}
return results, nil
}

View File

@ -34,6 +34,28 @@ func (w Workspace) String() string {
return string(data) return string(data)
} }
type Output struct {
Name string `json:"name"`
Make string `json:"make"`
Model string `json:"model"`
Serial string `json:"serial"`
Active bool `json:"active"`
DPMS bool `json:"dpms"`
Power bool `json:"power"`
Scale float64 `json:"scale"`
SubPixelHinting SubPixelHinting `json:"subpixel_hinting"`
Transform Transform `json:"transform"`
CurrentWorkspace string `json:"current_workspace"`
Modes []Mode `json:"modes"`
CurrentMode Mode `json:"current_mode"`
Rect Rectangle `json:"rect"`
}
func (o Output) String() string {
data, _ := json.MarshalIndent(o, "", "\t")
return string(data)
}
type WindowProperties struct { type WindowProperties struct {
Title string `json:"title"` Title string `json:"title"`
Instance string `json:"instance"` Instance string `json:"instance"`
@ -175,6 +197,27 @@ const (
InputTypeMouse InputType = "mouse" InputTypeMouse InputType = "mouse"
) )
type SubPixelHinting = string
const (
SubPixelHintingRGB SubPixelHinting = "rgb"
SubPixelHintingBGR SubPixelHinting = "bgr"
SubPixelHintingVRGB SubPixelHinting = "vrgb"
SubPixelHintingVBGR SubPixelHinting = "vbgr"
SubPixelHintingNone SubPixelHinting = "none"
)
type Transform = string
const (
Transform90 Transform = "90"
Transform180 Transform = "180"
Transform270 Transform = "270"
TransformFlipped90 Transform = "flipped-90"
TransformFlipped180 Transform = "flipped-180"
TransformFlipped270 Transform = "flipped-270"
)
type commandResult struct { type commandResult struct {
Success bool `json:"success"` Success bool `json:"success"`
ParseError bool `json:"parse_error"` ParseError bool `json:"parse_error"`
@ -193,3 +236,9 @@ func (r commandResult) GetError() error {
func (r commandResult) HasError() bool { func (r commandResult) HasError() bool {
return !r.Success return !r.Success
} }
type Mode struct {
Width int `json:"width"`
Height int `json:"height"`
Refresh int `json:"refresh"`
}