class Piwigo::Albums

Public Class Methods

add(session, album, logger: nil) click to toggle source

Adds an album.

@param [Session] session to interact with Piwigo @param [Album] album album to create @param [Logger] logger logger to output debug messages to (Optional)

@return [Album] newly created album

# File lib/piwigo/albums.rb, line 138
def self.add(session, album, logger: nil)
  raise 'Invalid session' if session.uri.nil?
  raise 'Invalid album' if album.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)
    logger.info "Encoding: #{album.name} - #{album.name.encoding}"
    form = {
      method: 'pwg.categories.add',
      name: album.name
    }
    form[:parent] = album.id_uppercat unless album.id_uppercat.nil?
    form[:comment] = album.comment unless album.comment.nil?
    form[:status] = album.status unless album.status.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)
      album.id = data['result']['id']
      logger.info "Album Add succeeded: #{album.name}(#{album.id}) created."
      album
    end
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    logger.error "Album Add failed: #{e.messages}"
    nil
  end
end
delete(session, id, photo_deletion_mode: nil, logger: nil) click to toggle source

Deletes album(s).

@param [Session] piwigo session @param [Number] id of the album to remove @param [String] photo_deletion_mode can be “no_delete” (may create orphan photos), “delete_orphans” (default mode, only deletes photos linked to no other album)

or "force_delete" (delete all photos, even those linked to other albums)

@param [Logger] logger logger to output debug messages to (Optional)

@return [Boolean] true if album was deleted

# File lib/piwigo/albums.rb, line 181
def self.delete(session, id, photo_deletion_mode: 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)
    request.body = "method=pwg.categories.delete&category_id=#{id}"
    request.body.concat "&photo_deletion_mode=#{photo_deletion_mode}" unless photo_deletion_mode.nil?
    request.body.concat "&pwg_token=#{session.pwg_token}"
    request['Cookie'] = [session.id]

    # Send the request
    response = http.request(request)
    if response.code == '200'
      data = JSON.parse(response.body)
      logger.info "Album Delete succeeded: Album #{id} removed - #{data}"
      true
    else
      p response.code
      p response.body
      false

    end
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    logger.error "Album delete: #{e.messages}"
    false
  end
end
list(session, album_id: nil, recursive: nil, public: nil, fullname: nil, thumbnail_size: nil, logger: nil) click to toggle source

Returns a list of albums

@param [Session] session - Session @param [Number] album_id - Album to fetch, Optional @param [Boolean] recursive - Include subalbums, Optional @param [Boolean] public - Only include public albums, Optional @param [Boolean] fullname - ???, Optional @param [String] thumbnail_size - Size of thumbname to return, One of: square, thumb, 2small, xsmall, small, medium, large, xlarge, xxlarge. Optional @param [Logger] logger logger to output debug messages to (Optional)

@return [Array<Album>] All albums that match the criteria, or nil there were no matches

# File lib/piwigo/albums.rb, line 83
def self.list(session, album_id: nil, recursive: nil, public: nil, fullname: nil, thumbnail_size: 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.getList'
    }
    form[:cat_id] = album_id unless album_id.nil?
    form[:recursive] = recursive unless recursive.nil?
    form[:public] = public unless public.nil?
    form[:fullname] = fullname unless fullname.nil?
    form[:thumbnail_size] = thumbnail_size unless thumbnail_size.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)
      albums = data['result']['categories'].map { |hash| Album.new(hash: hash) }
      logger.info "Album List succeeded: #{albums.size} albums retrieved."
      albums
    end
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    logger.error "Album List failed: #{e.messages}"
    nil
  end
end
lookup(session, album_name, logger: nil) click to toggle source

Lookup a specific Album from a list of albums

@param [<Type>] session @param [<Type>] album_name - Name of the album to locate @param [<Type>] logger <description>

@return [<Type>] Album if located, nil otherwise

# File lib/piwigo/albums.rb, line 123
def self.lookup(session, album_name, logger: nil)
  albums = list(session, recursive: true, fullname: false, logger: logger)
  filtered = albums.select do |album|
    album.name == album_name
  end
  filtered.size == 1 ? filtered[0] : nil
end