class Cups::Job

Attributes

completed_time[RW]
creation_time[RW]
format[RW]
id[RW]
printer[RW]
processing_time[RW]
size[RW]
state[RW]
title[RW]

Public Class Methods

get_job(id, name=nil, filter=-1, connection=nil) click to toggle source

Get job from id @param id [Integer] @param name [String] @param filter [Integer] see Constants @param connection [Cups::Connection] @return [Job] job object

# File lib/ffi-cups/job.rb, line 58
def self.get_job(id, name=nil, filter=-1, connection=nil)
  jobs = get_jobs(name, filter, connection)
  jobs.each do |j|
    return j if j.id == id
  end
  raise "Job with id: #{id} not found!"
end
get_jobs(name=nil, filter=-1, connection=nil) click to toggle source

Get jobs by filter or destination name @param name [String] @param filter [Integer] see Constants @param connection [Cups::Connection] @return [Array] jobs

# File lib/ffi-cups/job.rb, line 35
def self.get_jobs(name=nil, filter=-1, connection=nil)
  p_jobs = FFI::MemoryPointer.new :pointer
  cups_jobs = cupsGetJobs2(p_jobs, name, filter, connection)
  jobs = []
  cups_jobs.each do |j|
    job = Cups::Job.new(j[:id].dup, j[:title].dup, j[:dest].dup)
    job.format = j[:format]
    job.state = j[:state]
    job.size = j[:size]
    job.completed_time = Time.at(j[:completed_time])
    job.creation_time = Time.at(j[:creation_time])
    job.processing_time = Time.at(j[:processing_time])
    jobs.push(job)
  end
  return jobs
end
new(id, title, printer) click to toggle source
# File lib/ffi-cups/job.rb, line 7
def initialize(id, title, printer)
  @id = id
  @title = title
  @printer = printer
end

Private Class Methods

cupsGetJobs2(pointer, name=nil, filter=-1, connection=nil) click to toggle source

Wrapper {::FFI::Cups#cupsGetJobs2} @param pointer [Pointer] pointer to the jobs @param name [String] name of the destination or NULL @param filter [Integer] see Constants for more filters @param connection [Cups::Connection] @return [Array] array of job structs

# File lib/ffi-cups/job.rb, line 73
def self.cupsGetJobs2(pointer, name=nil, filter=-1, connection=nil)
  http = connection.nil? ? nil : connection.httpConnect2
  num_jobs = FFI::Cups.cupsGetJobs2(http, pointer, name, 0, filter)
  size = Cups::Struct::Job.size
  jobs = []
  
  num_jobs.times do |i|
    job = Cups::Struct::Job.new(pointer.get_pointer(0) + (size * i))
    jobs.push(job)
  end

  Cups::Connection.close(http) if http
  return jobs
end

Public Instance Methods

cancel(purge=0, connection=nil) click to toggle source

Cancel or purge a job @param connection [Cups::Connection]

# File lib/ffi-cups/job.rb, line 23
def cancel(purge=0, connection=nil)
  job = self.class.get_job(@id, @printer, -1, connection)
  r = FFI::Cups.cupsCancelJob2(connection, @printer, @id, purge)
  raise FFI::Cups.cupsLastErrorString() if r == 0
  return r
end
status(connection=nil) click to toggle source

get a updated job's state @param connection [Cups::Connection] @return [Symbol] job's state

# File lib/ffi-cups/job.rb, line 16
def status(connection=nil)
  job = self.class.get_job(@id, @printer, -1, connection)
  self.state = job.state if job
end