summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go
diff options
context:
space:
mode:
authorAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
committerAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
commit70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch)
treeab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go
parent5d94c0a7d44a2255b81815a52a7056a94a39842d (diff)
downloadRaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz
RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go313
1 files changed, 313 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go
new file mode 100644
index 0000000..68d60ce
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/pkg/ipp/cups-client.go
@@ -0,0 +1,313 @@
+package ipp
+
+import (
+ "io"
+ "strings"
+)
+
+// CUPSClient implements a ipp client with specific cups operations
+type CUPSClient struct {
+ *IPPClient
+}
+
+// NewCUPSClient creates a new cups ipp client (used HttpAdapter internally)
+func NewCUPSClient(host string, port int, username, password string, useTLS bool) *CUPSClient {
+ ippClient := NewIPPClient(host, port, username, password, useTLS)
+ return &CUPSClient{ippClient}
+}
+
+// NewCUPSClientWithAdapter creates a new cups ipp client with given Adapter
+func NewCUPSClientWithAdapter(username string, adapter Adapter) *CUPSClient {
+ ippClient := NewIPPClientWithAdapter(username, adapter)
+ return &CUPSClient{ippClient}
+}
+
+// GetDevices returns a map of device uris and printer attributes
+func (c *CUPSClient) GetDevices() (map[string]Attributes, error) {
+ req := NewRequest(OperationCupsGetDevices, 1)
+
+ resp, err := c.SendRequest(c.adapter.GetHttpUri("", nil), req, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ printerNameMap := make(map[string]Attributes)
+
+ for _, printerAttributes := range resp.PrinterAttributes {
+ printerNameMap[printerAttributes[AttributeDeviceURI][0].Value.(string)] = printerAttributes
+ }
+
+ return printerNameMap, nil
+}
+
+// MoveJob moves a job to a other printer
+func (c *CUPSClient) MoveJob(jobID int, destPrinter string) error {
+ req := NewRequest(OperationCupsMoveJob, 1)
+ req.OperationAttributes[AttributeJobURI] = c.getJobUri(jobID)
+ req.PrinterAttributes[AttributeJobPrinterURI] = c.getPrinterUri(destPrinter)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("jobs", ""), req, nil)
+ return err
+}
+
+// MoveAllJob moves all job from a printer to a other printer
+func (c *CUPSClient) MoveAllJob(srcPrinter, destPrinter string) error {
+ req := NewRequest(OperationCupsMoveJob, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(srcPrinter)
+ req.PrinterAttributes[AttributeJobPrinterURI] = c.getPrinterUri(destPrinter)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("jobs", ""), req, nil)
+ return err
+}
+
+// GetPPDs returns a map of ppd names and attributes
+func (c *CUPSClient) GetPPDs() (map[string]Attributes, error) {
+ req := NewRequest(OperationCupsGetPPDs, 1)
+
+ resp, err := c.SendRequest(c.adapter.GetHttpUri("", nil), req, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ ppdNameMap := make(map[string]Attributes)
+
+ for _, printerAttributes := range resp.PrinterAttributes {
+ ppdNameMap[printerAttributes[AttributePPDName][0].Value.(string)] = printerAttributes
+ }
+
+ return ppdNameMap, nil
+}
+
+// AcceptJobs lets a printer accept jobs again
+func (c *CUPSClient) AcceptJobs(printer string) error {
+ req := NewRequest(OperationCupsAcceptJobs, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// RejectJobs does not let a printer accept jobs
+func (c *CUPSClient) RejectJobs(printer string) error {
+ req := NewRequest(OperationCupsRejectJobs, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// AddPrinterToClass adds a printer to a class, if the class does not exists it will be created
+func (c *CUPSClient) AddPrinterToClass(class, printer string) error {
+ attributes, err := c.GetPrinterAttributes(class, []string{AttributeMemberURIs})
+ if err != nil && !IsNotExistsError(err) {
+ return err
+ }
+
+ memberURIList := make([]string, 0)
+
+ if !IsNotExistsError(err) {
+ for _, member := range attributes[AttributeMemberURIs] {
+ memberString := strings.Split(member.Value.(string), "/")
+ printerName := memberString[len(memberString)-1]
+
+ if printerName == printer {
+ return nil
+ }
+
+ memberURIList = append(memberURIList, member.Value.(string))
+ }
+ }
+
+ memberURIList = append(memberURIList, c.getPrinterUri(printer))
+
+ req := NewRequest(OperationCupsAddModifyClass, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getClassUri(class)
+ req.PrinterAttributes[AttributeMemberURIs] = memberURIList
+
+ _, err = c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// DeletePrinterFromClass removes a printer from a class, if a class has no more printer it will be deleted
+func (c *CUPSClient) DeletePrinterFromClass(class, printer string) error {
+ attributes, err := c.GetPrinterAttributes(class, []string{AttributeMemberURIs})
+ if err != nil {
+ return err
+ }
+
+ memberURIList := make([]string, 0)
+
+ for _, member := range attributes[AttributeMemberURIs] {
+ memberString := strings.Split(member.Value.(string), "/")
+ printerName := memberString[len(memberString)-1]
+
+ if printerName != printer {
+ memberURIList = append(memberURIList, member.Value.(string))
+ }
+ }
+
+ if len(memberURIList) == 0 {
+ return c.DeleteClass(class)
+ }
+
+ req := NewRequest(OperationCupsAddModifyClass, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getClassUri(class)
+ req.PrinterAttributes[AttributeMemberURIs] = memberURIList
+
+ _, err = c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// DeleteClass deletes a class
+func (c *CUPSClient) DeleteClass(class string) error {
+ req := NewRequest(OperationCupsDeleteClass, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getClassUri(class)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// CreatePrinter creates a new printer
+func (c *CUPSClient) CreatePrinter(name, deviceURI, ppd string, shared bool, errorPolicy string, information, location string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(name)
+ req.OperationAttributes[AttributePPDName] = ppd
+ req.OperationAttributes[AttributePrinterIsShared] = shared
+ req.PrinterAttributes[AttributePrinterStateReasons] = "none"
+ req.PrinterAttributes[AttributeDeviceURI] = deviceURI
+ req.PrinterAttributes[AttributePrinterInfo] = information
+ req.PrinterAttributes[AttributePrinterLocation] = location
+ req.PrinterAttributes[AttributePrinterErrorPolicy] = errorPolicy
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterPPD sets the ppd for a printer
+func (c *CUPSClient) SetPrinterPPD(printer, ppd string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.OperationAttributes[AttributePPDName] = ppd
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterDeviceURI sets the device uri for a printer
+func (c *CUPSClient) SetPrinterDeviceURI(printer, deviceURI string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.PrinterAttributes[AttributeDeviceURI] = deviceURI
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterIsShared shares or unshares a printer in the network
+func (c *CUPSClient) SetPrinterIsShared(printer string, shared bool) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.OperationAttributes[AttributePrinterIsShared] = shared
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterErrorPolicy sets the error policy for a printer
+func (c *CUPSClient) SetPrinterErrorPolicy(printer string, errorPolicy string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.PrinterAttributes[AttributePrinterErrorPolicy] = errorPolicy
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterInformation sets general printer information
+func (c *CUPSClient) SetPrinterInformation(printer, information string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.PrinterAttributes[AttributePrinterInfo] = information
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// SetPrinterLocation sets the printer location
+func (c *CUPSClient) SetPrinterLocation(printer, location string) error {
+ req := NewRequest(OperationCupsAddModifyPrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+ req.PrinterAttributes[AttributePrinterLocation] = location
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// DeletePrinter deletes a printer
+func (c *CUPSClient) DeletePrinter(printer string) error {
+ req := NewRequest(OperationCupsDeletePrinter, 1)
+ req.OperationAttributes[AttributePrinterURI] = c.getPrinterUri(printer)
+
+ _, err := c.SendRequest(c.adapter.GetHttpUri("admin", ""), req, nil)
+ return err
+}
+
+// GetPrinters returns a map of printer names and attributes
+func (c *CUPSClient) GetPrinters(attributes []string) (map[string]Attributes, error) {
+ req := NewRequest(OperationCupsGetPrinters, 1)
+
+ if attributes == nil {
+ req.OperationAttributes[AttributeRequestedAttributes] = DefaultPrinterAttributes
+ } else {
+ req.OperationAttributes[AttributeRequestedAttributes] = append(attributes, AttributePrinterName)
+ }
+
+ resp, err := c.SendRequest(c.adapter.GetHttpUri("", nil), req, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ printerNameMap := make(map[string]Attributes)
+
+ for _, printerAttributes := range resp.PrinterAttributes {
+ printerNameMap[printerAttributes[AttributePrinterName][0].Value.(string)] = printerAttributes
+ }
+
+ return printerNameMap, nil
+}
+
+// GetClasses returns a map of class names and attributes
+func (c *CUPSClient) GetClasses(attributes []string) (map[string]Attributes, error) {
+ req := NewRequest(OperationCupsGetClasses, 1)
+
+ if attributes == nil {
+ req.OperationAttributes[AttributeRequestedAttributes] = DefaultClassAttributes
+ } else {
+ req.OperationAttributes[AttributeRequestedAttributes] = append(attributes, AttributePrinterName)
+ }
+
+ resp, err := c.SendRequest(c.adapter.GetHttpUri("", nil), req, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ printerNameMap := make(map[string]Attributes)
+
+ for _, printerAttributes := range resp.PrinterAttributes {
+ printerNameMap[printerAttributes[AttributePrinterName][0].Value.(string)] = printerAttributes
+ }
+
+ return printerNameMap, nil
+}
+
+// PrintTestPage prints a test page using the provided PDF data
+func (c *CUPSClient) PrintTestPage(printer string, testPageData io.Reader, size int) (int, error) {
+ return c.PrintJob(Document{
+ Document: testPageData,
+ Name: "Test Page",
+ Size: size,
+ MimeType: MimeTypePDF,
+ }, printer, map[string]any{
+ AttributeJobName: "Test Page",
+ })
+}