class Piwigo::Albums
Public Class Methods
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
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
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 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