Class: Piwigo::Images

Inherits:
Object
  • Object
show all
Defined in:
lib/piwigo/images.rb,
lib/piwigo/image_uploader.rb

Defined Under Namespace

Classes: Image, ImageUploader, Paging

Class Method Summary collapse

Class Method Details

.getImages(session, album_id: nil, recursive: nil, per_page: 100, page: 0, order: nil, logger: nil) ⇒ Hash

Returns elements for the corresponding categories. order comma separated fields for sorting

Parameters:

  • session (Session)
  • album_id (Number) (defaults to: nil)
    • Can be empty if recursive is true.

  • recursive (Boolean) (defaults to: nil)
    • Include images from child albums

  • per_page (Number) (defaults to: 100)
    • Number of items to include per page

  • page (Number) (defaults to: 0)
    • Page to retrieve

  • order (String) (defaults to: nil)
    • One or more of id, file, name, hit, rating_score, date_creation, date_available or random

  • logger (Logger) (defaults to: nil)

    logger to output debug messages to (Optional)

Returns:

  • (Hash)

    <description>



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/piwigo/images.rb', line 96

def self.getImages(session, album_id: nil, recursive: nil, per_page: 100, page: 0, order: nil, logger: nil)
  raise 'Invalid session' if session.uri.nil?

  logger ||= Logger.new(STDOUT)

  begin
    http = Net::HTTP.new(session.uri.host, session.uri.port)
    request = Net::HTTP::Post.new(session.uri.request_uri)
    form = {
      method: 'pwg.categories.getImages'
    }
    form[:cat_id] = album_id unless album_id.nil?
    form[:recursive] = recursive unless recursive.nil?
    form[:per_page] = per_page unless per_page.nil?
    form[:order] = order unless order.nil?
    form[:page] = page unless page.nil?
    request.set_form_data(form)
    request['Cookie'] = [session.id]

    # Send the request
    response = http.request(request)
    if response.code == '200'
      data = JSON.parse(response.body)
      paging = Paging.new hash: data['result']['paging']
      images = data['result']['images'].map { |hash| Image.new(hash: hash) }
      logger.info "Image List succeeded: #{images.size} images retrieved."
      { paging: paging, images: images }
    end
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    logger.error "Image List failed: #{e.message}"
    nil
  end
end

.lookup(session, file, logger: nil) ⇒ Number

Checks existence of images

Parameters:

  • session (Session)
  • file (String)

    to check

  • logger (Logger) (defaults to: nil)

Returns:

  • (Number)

    Piwigo image_id if matched, nil if not present



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/piwigo/images.rb', line 149

def self.lookup(session, file, logger: nil)
  raise 'Invalid session' if session.uri.nil?

  logger ||= Logger.new(STDOUT)
  image_content = File.binread(file)
  file_sum = Digest::MD5.hexdigest(image_content)

  begin
    http = Net::HTTP.new(session.uri.host, session.uri.port)
    request = Net::HTTP::Post.new(session.uri.request_uri)
    form = {
      method: 'pwg.images.exist',
      md5sum_list: file_sum,
      filename_list: file
    }
    request.set_form_data(form)
    request['Cookie'] = [session.id]

    # Send the request
    response = http.request(request)
    if response.code == '200'
      data = JSON.parse(response.body)
      logger.info "Image lookup succeeded: #{data['result']}"
      data['result'][file_sum]
    end
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    logger.error "Image lookup failed: #{e.message}"
    nil
  end
end

.upload(session, file, album, name) ⇒ Boolean

Add a photo to Piwigo

Parameters:

  • session (<Type>)
  • filename (<Type>)

    of the file to upload

  • album (Album)

    to place tge image in

  • name (String)

    of the image

Returns:

  • (Boolean)

    True if successful



138
139
140
# File 'lib/piwigo/images.rb', line 138

def self.upload(session, file, album, name)
  ImageUploader.new.upload(session, file, name, album: album)
end