Class: Piwigo::Albums

Inherits:
Object
  • Object
show all
Defined in:
lib/piwigo/albums.rb

Defined Under Namespace

Classes: Album

Class Method Summary collapse

Class Method Details

.add(session, album, logger: nil) ⇒ Album

Adds an album.

Parameters:

  • session (Session)

    to interact with Piwigo

  • album (Album)

    album to create

  • logger (Logger) (defaults to: nil)

    logger to output debug messages to (Optional)

Returns:

  • (Album)

    newly created album



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 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) ⇒ Boolean

Deletes album(s).

Parameters:

  • piwigo (Session)

    session

  • id (Number)

    of the album to remove

  • photo_deletion_mode (String) (defaults to: nil)

    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)

  • logger (Logger) (defaults to: nil)

    logger to output debug messages to (Optional)

Returns:

  • (Boolean)

    true if album was deleted



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# 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) ⇒ Array<Album>

Returns a list of albums

Parameters:

  • session (Session)
    • Session

  • album_id (Number) (defaults to: nil)
    • Album to fetch, Optional

  • recursive (Boolean) (defaults to: nil)
    • Include sub albums, Optional

  • public (Boolean) (defaults to: nil)
    • Only include public albums, Optional

  • fullname (Boolean) (defaults to: nil)
    • ???, Optional

  • thumbnail_size (String) (defaults to: nil)
    • Size of thumbnail to return, One of: square, thumb, 2small, xsmall, small, medium, large, xlarge, xxlarge. Optional

  • logger (Logger) (defaults to: nil)

    logger to output debug messages to (Optional)

Returns:

  • (Array<Album>)

    All albums that match the criteria, or nil there were no matches



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# 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) ⇒ <Type>

Lookup a specific Album from a list of albums

Parameters:

  • session (<Type>)
  • album_name (<Type>)
    • Name of the album to locate

  • logger (<Type>) (defaults to: nil)

    <description>

Returns:

  • (<Type>)

    Album if located, nil otherwise



123
124
125
126
127
128
129
# 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