// GetJobState gets the current state of the job indicated by jobID. func (c *CUPS) GetJobState(jobID uint32) (cdd.PrintJobStateDiff, error) { ja := C.newArrayOfStrings(C.int(len(jobAttributes))) defer C.freeStringArrayAndStrings(ja, C.int(len(jobAttributes))) for i, attribute := range jobAttributes { C.setStringArrayValue(ja, C.int(i), C.CString(attribute)) } response, err := c.cc.getJobAttributes(C.int(jobID), ja) if err != nil { return cdd.PrintJobStateDiff{}, err } // cupsDoRequest() returned ipp_t pointer needs explicit free. defer C.ippDelete(response) s := C.ippFindAttribute(response, C.JOB_STATE, C.IPP_TAG_ENUM) state := int32(C.ippGetInteger(s, C.int(0))) p := C.ippFindAttribute(response, C.JOB_MEDIA_SHEETS_COMPLETED, C.IPP_TAG_INTEGER) var pages int32 if p != nil { pages = int32(C.ippGetInteger(p, C.int(0))) } return convertJobState(state, pages), nil }
// GetJobState gets the current state of the job indicated by jobID. func (c *CUPS) GetJobState(_ string, jobID uint32) (*cdd.PrintJobStateDiff, error) { ja := C.newArrayOfStrings(C.int(len(jobAttributes))) defer C.freeStringArrayAndStrings(ja, C.int(len(jobAttributes))) for i, attribute := range jobAttributes { C.setStringArrayValue(ja, C.int(i), C.CString(attribute)) } response, err := c.cc.getJobAttributes(C.int(jobID), ja) if err != nil { return nil, err } // cupsDoRequest() returned ipp_t pointer needs explicit free. defer C.ippDelete(response) s := C.ippFindAttribute(response, C.JOB_STATE, C.IPP_TAG_ENUM) state := int32(C.getAttributeIntegerValue(s, C.int(0))) return convertJobState(state), nil }