piwigo-api 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/gempush.yml +10 -11
- data/.github/workflows/ruby.yml +17 -11
- data/.gitignore +2 -1
- data/CHANGELOG.md +19 -4
- data/Gemfile.lock +36 -36
- data/examples/Different_Port.md +42 -0
- data/examples/Syncronize_Folder.md +3 -3
- data/examples/Upload_Image.md +6 -2
- data/lib/piwigo/albums.rb +5 -5
- data/lib/piwigo/folder_sync.rb +5 -5
- data/lib/piwigo/image_uploader.rb +8 -7
- data/lib/piwigo/images.rb +8 -7
- data/lib/piwigo/session.rb +13 -9
- data/lib/piwigo/version.rb +1 -1
- data/piwigo-api.gemspec +7 -7
- metadata +18 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7fc5b8141101c1b604876f7d5bf09effc43bbb016fc1a41b46541e8d3b743553
|
|
4
|
+
data.tar.gz: bde9f990a5d2dc96577094a89677fdc5d013edd75d77be152dd51e1cb8eeab82
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e073d758652e9f9bba60b7de66d1025b22c03cbf5b051692c4187b9ea9c3b88fe1c308d449bc2df047960604ec0e6d507f68a316024acc0fd7e9cf4fc0fe7e58
|
|
7
|
+
data.tar.gz: 3b0375000c48966b96d67a51b79f49e3958493390087854eaa1b629c6438c4587e1a3b08ba0d0d838e272a8d77f46d91a245de62487219467da3da8c0ced6b2e
|
|
@@ -1,36 +1,35 @@
|
|
|
1
1
|
name: Ruby Gem
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
branches:
|
|
6
|
-
- master
|
|
7
4
|
push:
|
|
8
|
-
branches:
|
|
9
|
-
- master
|
|
5
|
+
branches: [ master ]
|
|
10
6
|
|
|
11
7
|
jobs:
|
|
12
8
|
build:
|
|
13
9
|
name: Build + Publish
|
|
14
10
|
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
packages: write
|
|
15
14
|
|
|
16
15
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@v2
|
|
18
17
|
- name: Set up Ruby 2.6
|
|
19
18
|
uses: actions/setup-ruby@v1
|
|
20
19
|
with:
|
|
21
|
-
version: 2.6.x
|
|
20
|
+
ruby-version: 2.6.x
|
|
22
21
|
|
|
23
22
|
- name: Publish to GPR
|
|
24
23
|
run: |
|
|
25
24
|
mkdir -p $HOME/.gem
|
|
26
25
|
touch $HOME/.gem/credentials
|
|
27
26
|
chmod 0600 $HOME/.gem/credentials
|
|
28
|
-
printf -- "---\n:github:
|
|
27
|
+
printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
|
29
28
|
gem build *.gemspec
|
|
30
29
|
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
|
|
31
30
|
env:
|
|
32
|
-
GEM_HOST_API_KEY: ${{secrets.
|
|
33
|
-
OWNER:
|
|
31
|
+
GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
|
|
32
|
+
OWNER: ${{ github.repository_owner }}
|
|
34
33
|
|
|
35
34
|
- name: Publish to RubyGems
|
|
36
35
|
run: |
|
|
@@ -41,4 +40,4 @@ jobs:
|
|
|
41
40
|
gem build *.gemspec
|
|
42
41
|
gem push *.gem
|
|
43
42
|
env:
|
|
44
|
-
GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
|
|
43
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
data/.github/workflows/ruby.yml
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
|
+
|
|
1
2
|
name: Ruby
|
|
2
3
|
|
|
3
|
-
on:
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [ master ]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [ master ]
|
|
4
9
|
|
|
5
10
|
jobs:
|
|
6
|
-
|
|
11
|
+
test:
|
|
7
12
|
|
|
8
13
|
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
|
9
17
|
|
|
10
18
|
steps:
|
|
11
|
-
- uses: actions/checkout@
|
|
12
|
-
- name: Set up Ruby
|
|
13
|
-
uses:
|
|
19
|
+
- uses: actions/checkout@v2
|
|
20
|
+
- name: Set up Ruby
|
|
21
|
+
uses: ruby/setup-ruby@v1
|
|
14
22
|
with:
|
|
15
|
-
ruby-version:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
bundle install --jobs 4 --retry 3
|
|
20
|
-
bundle exec rake
|
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
24
|
+
bundler-cache: true
|
|
25
|
+
- name: Run tests
|
|
26
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
0.6.0 - 2022-01-17
|
|
8
|
+
- Added support for specifying the port to connect to Piwigo on, and added an example
|
|
9
|
+
- Fixed a regression bug from updating EXITF gem
|
|
10
|
+
- Additional spelling fixes
|
|
11
|
+
|
|
12
|
+
0.5.10 - 2022-01-16
|
|
13
|
+
- Update Gemfile dependencies
|
|
14
|
+
- Code and documentation cleanups
|
|
15
|
+
|
|
16
|
+
0.5.9 - 2021-07-13
|
|
17
|
+
- Update version to fix github actions
|
|
18
|
+
|
|
19
|
+
0.5.8 - 2021-07-13
|
|
20
|
+
- Update dependencies address CVE-2021-32740
|
|
21
|
+
|
|
7
22
|
0.5.7 - 2020-03-01
|
|
8
23
|
- Fixed open-ended dependency on codecov
|
|
9
24
|
|
|
@@ -14,8 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
14
29
|
- Fix another encoding issue when synchronizing folder with accented characters.
|
|
15
30
|
|
|
16
31
|
0.5.4 - 2019-11-26
|
|
17
|
-
- Fix crash in sniff_attributes when the image
|
|
18
|
-
- Fix parent albums when
|
|
32
|
+
- Fix crash in sniff_attributes when the image doesn't contain a valid EXIF data
|
|
33
|
+
- Fix parent albums when synchronizing a folder-tree of albums into Piwigo
|
|
19
34
|
|
|
20
35
|
0.5.3 - 2019-11-25
|
|
21
36
|
- Fixed to coverage reports
|
|
@@ -28,10 +43,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
28
43
|
|
|
29
44
|
0.5.0 - 2019-11-23
|
|
30
45
|
- Added a directory of example scripts
|
|
31
|
-
- Added a folder-album
|
|
46
|
+
- Added a folder-album synchronization methods
|
|
32
47
|
|
|
33
48
|
0.4.0 - 2019-11-20
|
|
34
|
-
- Add methods to check for the
|
|
49
|
+
- Add methods to check for the existence of a specific image and to upload images
|
|
35
50
|
|
|
36
51
|
0.3.1 - 2019-11-20
|
|
37
52
|
- Add a codecov.yaml for coverage reports
|
data/Gemfile.lock
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
piwigo-api (0.
|
|
4
|
+
piwigo-api (0.6.0)
|
|
5
5
|
exifr (~> 1.3)
|
|
6
|
-
http (~>
|
|
7
|
-
logger (~> 1.
|
|
6
|
+
http (~> 5.0)
|
|
7
|
+
logger (~> 1.5)
|
|
8
8
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
addressable (2.
|
|
12
|
+
addressable (2.8.0)
|
|
13
13
|
public_suffix (>= 2.0.2, < 5.0)
|
|
14
14
|
ansi (1.5.0)
|
|
15
15
|
builder (3.2.4)
|
|
16
|
-
codecov (0.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
url
|
|
20
|
-
docile (1.3.2)
|
|
16
|
+
codecov (0.6.0)
|
|
17
|
+
simplecov (>= 0.15, < 0.22)
|
|
18
|
+
docile (1.4.0)
|
|
21
19
|
domain_name (0.5.20190701)
|
|
22
20
|
unf (>= 0.0.5, < 1.0.0)
|
|
23
|
-
exifr (1.3.
|
|
24
|
-
ffi (1.
|
|
25
|
-
ffi (1.
|
|
21
|
+
exifr (1.3.9)
|
|
22
|
+
ffi (1.15.5)
|
|
23
|
+
ffi (1.15.5-x64-mingw32)
|
|
26
24
|
ffi-compiler (1.0.1)
|
|
27
25
|
ffi (>= 1.0.0)
|
|
28
26
|
rake
|
|
29
|
-
http (
|
|
30
|
-
addressable (~> 2.
|
|
27
|
+
http (5.0.4)
|
|
28
|
+
addressable (~> 2.8)
|
|
31
29
|
http-cookie (~> 1.0)
|
|
32
30
|
http-form_data (~> 2.2)
|
|
33
|
-
|
|
34
|
-
http-cookie (1.0.
|
|
31
|
+
llhttp-ffi (~> 0.4.0)
|
|
32
|
+
http-cookie (1.0.4)
|
|
35
33
|
domain_name (~> 0.5)
|
|
36
|
-
http-form_data (2.
|
|
37
|
-
|
|
38
|
-
ffi-compiler (
|
|
39
|
-
|
|
40
|
-
logger (1.
|
|
41
|
-
minitest (5.
|
|
42
|
-
minitest-reporters (1.
|
|
34
|
+
http-form_data (2.3.0)
|
|
35
|
+
llhttp-ffi (0.4.0)
|
|
36
|
+
ffi-compiler (~> 1.0)
|
|
37
|
+
rake (~> 13.0)
|
|
38
|
+
logger (1.5.0)
|
|
39
|
+
minitest (5.15.0)
|
|
40
|
+
minitest-reporters (1.5.0)
|
|
43
41
|
ansi
|
|
44
42
|
builder
|
|
45
43
|
minitest (>= 5.0)
|
|
46
44
|
ruby-progressbar
|
|
47
|
-
public_suffix (4.0.
|
|
48
|
-
rake (13.0.
|
|
49
|
-
ruby-progressbar (1.
|
|
50
|
-
simplecov (0.
|
|
45
|
+
public_suffix (4.0.6)
|
|
46
|
+
rake (13.0.6)
|
|
47
|
+
ruby-progressbar (1.11.0)
|
|
48
|
+
simplecov (0.21.2)
|
|
51
49
|
docile (~> 1.1)
|
|
52
50
|
simplecov-html (~> 0.11)
|
|
53
|
-
|
|
51
|
+
simplecov_json_formatter (~> 0.1)
|
|
52
|
+
simplecov-html (0.12.3)
|
|
53
|
+
simplecov_json_formatter (0.1.3)
|
|
54
54
|
unf (0.1.4)
|
|
55
55
|
unf_ext
|
|
56
|
-
unf_ext (0.0.
|
|
57
|
-
|
|
56
|
+
unf_ext (0.0.8)
|
|
57
|
+
unf_ext (0.0.8-x64-mingw32)
|
|
58
58
|
|
|
59
59
|
PLATFORMS
|
|
60
60
|
ruby
|
|
61
61
|
x64-mingw32
|
|
62
62
|
|
|
63
63
|
DEPENDENCIES
|
|
64
|
-
bundler (~> 2.
|
|
65
|
-
codecov (~> 0.
|
|
66
|
-
minitest (~> 5.
|
|
67
|
-
minitest-reporters (~> 1.
|
|
64
|
+
bundler (~> 2.3)
|
|
65
|
+
codecov (~> 0.6)
|
|
66
|
+
minitest (~> 5.15)
|
|
67
|
+
minitest-reporters (~> 1.5)
|
|
68
68
|
piwigo-api!
|
|
69
69
|
rake (~> 13.0)
|
|
70
|
-
simplecov (~> 0.
|
|
70
|
+
simplecov (~> 0.21)
|
|
71
71
|
|
|
72
72
|
BUNDLED WITH
|
|
73
|
-
2.
|
|
73
|
+
2.3.5
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## Specify a URL with a port
|
|
2
|
+
|
|
3
|
+
If you are running Piwigo on a non-standard port in docker, you can specify the port when connecting:
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
require 'piwigo/session'
|
|
7
|
+
require 'piwigo/images'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
session = Piwigo::Session.login('localhost', 'root', 'piwigo', port: 8083, https: false)
|
|
11
|
+
unless session.nil?
|
|
12
|
+
require 'piwigo/session'
|
|
13
|
+
require 'piwigo/albums'
|
|
14
|
+
|
|
15
|
+
album = Piwigo::Albums::Album.new
|
|
16
|
+
album.name = "Chippy"
|
|
17
|
+
album = Piwigo::Albums.add(session, album)
|
|
18
|
+
|
|
19
|
+
filename = 'C:\Photos\chippy.jpg'
|
|
20
|
+
if Piwigo::Images.lookup(session, filename).nil?
|
|
21
|
+
Piwigo::Images.upload(session, filename, album, 'apple-pie-bars')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Example output:
|
|
27
|
+
~~~
|
|
28
|
+
$ ruby main.rb
|
|
29
|
+
I, [2022-01-16T20:40:27.437987 #13428] INFO -- : Login succeeded: {"stat":"ok","result":true}
|
|
30
|
+
I, [2022-01-16T20:40:27.471733 #13428] INFO -- : Status succeeded
|
|
31
|
+
I, [2022-01-16T20:40:27.475731 #13428] INFO -- : Encoding: Chippy - UTF-8
|
|
32
|
+
I, [2022-01-16T20:40:27.534389 #13428] INFO -- : Album Add succeeded: Chippy(1) created.
|
|
33
|
+
I, [2022-01-16T20:40:27.589282 #13428] INFO -- : Image lookup succeeded: {"e49804192ae97cd09460e09fddb8187a"=>nil}
|
|
34
|
+
I, [2022-01-16T20:40:27.702908 #13428] INFO -- : Image AddChunk #0 succeeded: {"stat"=>"ok", "result"=>nil}
|
|
35
|
+
I, [2022-01-16T20:40:27.817544 #13428] INFO -- : Image AddChunk #1 succeeded: {"stat"=>"ok", "result"=>nil}
|
|
36
|
+
I, [2022-01-16T20:40:27.901301 #13428] INFO -- : Image AddChunk #2 succeeded: {"stat"=>"ok", "result"=>nil}
|
|
37
|
+
I, [2022-01-16T20:40:27.902947 #13428] INFO -- : --> GPS: 45.33110277777778, -75.79546111111111
|
|
38
|
+
I, [2022-01-16T20:40:27.903224 #13428] INFO -- : {:date_creation=>"2022-01-16", :categories=>1}
|
|
39
|
+
{"stat"=>"ok", "result"=>{"image_id"=>1, "url"=>"http://localhost:8083:8000/picture.php?/1/category/1"}}
|
|
40
|
+
I, [2022-01-16T20:40:27.980021 #13428] INFO -- : Image Add succeeded.
|
|
41
|
+
|
|
42
|
+
~~~
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Synchronize a Directory with Piwigo
|
|
2
2
|
|
|
3
|
-
To
|
|
3
|
+
To synchronize a folder-tree of im ages with Piwigo:
|
|
4
4
|
|
|
5
5
|
```ruby
|
|
6
6
|
require 'piwigo/session'
|
|
@@ -14,7 +14,7 @@ unless session.nil?
|
|
|
14
14
|
end
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Call the script with the directory to
|
|
17
|
+
Call the script with the directory to synchronize. Eg:
|
|
18
18
|
|
|
19
19
|
```ruby
|
|
20
20
|
ruby main.rb //DISKSTATION/photos/
|
data/examples/Upload_Image.md
CHANGED
|
@@ -9,9 +9,13 @@ require 'piwigo/images'
|
|
|
9
9
|
|
|
10
10
|
session = Piwigo::Session.login('10.100.230.78', 'Adrian', 'mypassword', https: false)
|
|
11
11
|
unless session.nil?
|
|
12
|
+
album = Piwigo::Albums::Album.new
|
|
13
|
+
album.name = "Recipes"
|
|
14
|
+
album = Piwigo::Albums.add(session, album)
|
|
15
|
+
|
|
12
16
|
filename = 'C:\photos\apple-pie-bars-articleLarge.jpg'
|
|
13
|
-
if Piwigo::Images.
|
|
14
|
-
Piwigo::Images.
|
|
17
|
+
if Piwigo::Images.lookup(session, filename).nil?
|
|
18
|
+
Piwigo::Images.upload(session, filename, album, 'apple-pie-bars')
|
|
15
19
|
end
|
|
16
20
|
end
|
|
17
21
|
```
|
data/lib/piwigo/albums.rb
CHANGED
|
@@ -3,8 +3,8 @@ require 'uri'
|
|
|
3
3
|
require 'json'
|
|
4
4
|
require 'logger'
|
|
5
5
|
|
|
6
|
-
# Piwigo organizes images by albums. The album tree has
|
|
7
|
-
# refers to a Album as a Category.
|
|
6
|
+
# Piwigo organizes images by albums. The album tree has unlimited depth and each photo can belong to multiple albums.
|
|
7
|
+
# The Piwigo API refers to a Album as a Category.
|
|
8
8
|
module Piwigo
|
|
9
9
|
class Albums
|
|
10
10
|
class Album
|
|
@@ -59,7 +59,7 @@ module Piwigo
|
|
|
59
59
|
def initialize(hash: nil)
|
|
60
60
|
hash&.each do |key, value|
|
|
61
61
|
# Bug: If the encoding is Windows-1252, then Piwigo will blowup when creating the album
|
|
62
|
-
value = value.encode('UTF-8', 'Windows-1252') if value.
|
|
62
|
+
value = value.encode('UTF-8', 'Windows-1252') if value.instance_of?(String) && value.encoding.to_s == 'Windows-1252'
|
|
63
63
|
send("#{key}=", value)
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -73,10 +73,10 @@ module Piwigo
|
|
|
73
73
|
#
|
|
74
74
|
# @param [Session] session - Session
|
|
75
75
|
# @param [Number] album_id - Album to fetch, Optional
|
|
76
|
-
# @param [Boolean] recursive - Include
|
|
76
|
+
# @param [Boolean] recursive - Include sub albums, Optional
|
|
77
77
|
# @param [Boolean] public - Only include public albums, Optional
|
|
78
78
|
# @param [Boolean] fullname - ???, Optional
|
|
79
|
-
# @param [String] thumbnail_size - Size of
|
|
79
|
+
# @param [String] thumbnail_size - Size of thumbnail to return, One of: square, thumb, 2small, xsmall, small, medium, large, xlarge, xxlarge. Optional
|
|
80
80
|
# @param [Logger] logger logger to output debug messages to (Optional)
|
|
81
81
|
#
|
|
82
82
|
# @return [Array<Album>] All albums that match the criteria, or nil there were no matches
|
data/lib/piwigo/folder_sync.rb
CHANGED
|
@@ -5,7 +5,7 @@ require_relative 'albums'
|
|
|
5
5
|
require_relative 'image_uploader'
|
|
6
6
|
|
|
7
7
|
module Piwigo
|
|
8
|
-
#
|
|
8
|
+
# Synchronize a folder with Piwigo
|
|
9
9
|
# - Album name will be the same as the folder name
|
|
10
10
|
# - Will be created as a top-level folder unless specified
|
|
11
11
|
class FolderSync
|
|
@@ -27,11 +27,11 @@ module Piwigo
|
|
|
27
27
|
FolderSync.new(session, logger: logger).synchronize(directory)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
#
|
|
30
|
+
# Synchronize a folder with Piwigo
|
|
31
31
|
#
|
|
32
|
-
# @param [String] directory - directory to
|
|
32
|
+
# @param [String] directory - directory to synchronize.
|
|
33
33
|
def synchronize(directory)
|
|
34
|
-
if [
|
|
34
|
+
if %w[originals .picasaoriginals].include? File.basename(directory.downcase)
|
|
35
35
|
@logger.info "Skipping special directory: #{directory}"
|
|
36
36
|
return
|
|
37
37
|
else
|
|
@@ -75,7 +75,7 @@ module Piwigo
|
|
|
75
75
|
|
|
76
76
|
def process_file(directory_entry)
|
|
77
77
|
# Only attempt to import images
|
|
78
|
-
return unless [
|
|
78
|
+
return unless %w[.jpg .png .gif].include? File.extname(directory_entry).downcase
|
|
79
79
|
|
|
80
80
|
@logger.info "Processing Image: '#{directory_entry}' in album '#{@current_album}'"
|
|
81
81
|
image = Piwigo::Images.lookup(@session, directory_entry)
|
|
@@ -4,10 +4,11 @@ require 'json'
|
|
|
4
4
|
require 'logger'
|
|
5
5
|
require 'digest'
|
|
6
6
|
require 'base64'
|
|
7
|
+
require 'exifr/jpeg'
|
|
7
8
|
|
|
8
9
|
# Add a photo.
|
|
9
10
|
#
|
|
10
|
-
# To avoid limitations on HTTP POST maximum size, the piwigo requires the image to be splitted into several calls to pwg.images.addChunk
|
|
11
|
+
# To avoid limitations on HTTP POST maximum size, the piwigo requires the image to be splitted into several calls to pwg.images.addChunk
|
|
11
12
|
# and then a single call to pwg.images.add.
|
|
12
13
|
#
|
|
13
14
|
# Reference: https://piwigo.org/doc/doku.php?id=dev:webapi:pwg.images.add
|
|
@@ -17,8 +18,6 @@ module Piwigo
|
|
|
17
18
|
MEGABYTE = 1024 * 1024
|
|
18
19
|
|
|
19
20
|
# Create a new ImageUploader
|
|
20
|
-
#
|
|
21
|
-
# @param [Session] session - session to a piwigo instance
|
|
22
21
|
def initialize(logger: nil)
|
|
23
22
|
@logger = logger || Logger.new(STDOUT)
|
|
24
23
|
end
|
|
@@ -30,7 +29,7 @@ module Piwigo
|
|
|
30
29
|
# @param [<Type>] name of the image
|
|
31
30
|
#
|
|
32
31
|
# @return [Boolean] True if successful
|
|
33
|
-
def upload(session, filename, name, album:
|
|
32
|
+
def upload(session, filename, name, album: nil)
|
|
34
33
|
@session = session
|
|
35
34
|
raise 'Invalid session' if @session.uri.nil?
|
|
36
35
|
|
|
@@ -126,15 +125,17 @@ module Piwigo
|
|
|
126
125
|
request['Cookie'] = [@session.id]
|
|
127
126
|
|
|
128
127
|
response = http.request(request)
|
|
129
|
-
|
|
128
|
+
case response.code
|
|
129
|
+
when '500'
|
|
130
130
|
@logger.error "Image Add failed: #{response.message}"
|
|
131
131
|
false
|
|
132
|
-
|
|
132
|
+
when '200'
|
|
133
133
|
data = JSON.parse(response.body)
|
|
134
134
|
p data
|
|
135
135
|
@logger.info 'Image Add succeeded.'
|
|
136
136
|
true
|
|
137
137
|
else
|
|
138
|
+
@logger.error "Unexpected error: #{response.code}"
|
|
138
139
|
false
|
|
139
140
|
end
|
|
140
141
|
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
|
@@ -144,7 +145,7 @@ module Piwigo
|
|
|
144
145
|
|
|
145
146
|
def sniff_attributes(filename, album: nil)
|
|
146
147
|
attributes = {}
|
|
147
|
-
begin
|
|
148
|
+
begin
|
|
148
149
|
info = EXIFR::JPEG.new(filename)
|
|
149
150
|
@logger.info "--> GPS: #{info.gps.latitude}, #{info.gps.longitude}" unless info.gps.nil?
|
|
150
151
|
exif = info.exif.first.to_hash if info.exif?
|
data/lib/piwigo/images.rb
CHANGED
|
@@ -6,12 +6,12 @@ require 'logger'
|
|
|
6
6
|
require 'digest'
|
|
7
7
|
require_relative 'image_uploader'
|
|
8
8
|
|
|
9
|
-
# Piwigo organizes images by albums. The album tree has
|
|
9
|
+
# Piwigo organizes images by albums. The album tree has unlimited depth and each photo can belong to multiple albums. The Piwigo API
|
|
10
10
|
# refers to a Album as a Category.
|
|
11
11
|
module Piwigo
|
|
12
12
|
class Images
|
|
13
13
|
class Image
|
|
14
|
-
# @return [Number] Unique ID
|
|
14
|
+
# @return [Number] Unique ID identifying this ie
|
|
15
15
|
attr_accessor :id
|
|
16
16
|
|
|
17
17
|
# @return [Number] Width of the image in pixels
|
|
@@ -53,7 +53,7 @@ module Piwigo
|
|
|
53
53
|
def initialize(hash: nil)
|
|
54
54
|
hash&.each do |key, value|
|
|
55
55
|
# Bug: If the encoding is Windows-1252, then Piwigo will blowup when creating the album
|
|
56
|
-
value = value.encode('UTF-8', 'Windows-1252') if value.
|
|
56
|
+
value = value.encode('UTF-8', 'Windows-1252') if value.instance_of?(String) && value.encoding.to_s == 'Windows-1252'
|
|
57
57
|
send("#{key}=", value)
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -75,7 +75,7 @@ module Piwigo
|
|
|
75
75
|
def initialize(hash: nil)
|
|
76
76
|
hash&.each do |key, value|
|
|
77
77
|
# Bug: If the encoding is Windows-1252, then Piwigo will blowup when creating the album
|
|
78
|
-
value = value.encode('UTF-8', 'Windows-1252') if value.
|
|
78
|
+
value = value.encode('UTF-8', 'Windows-1252') if value.instance_of?(String) && value.encoding.to_s == 'Windows-1252'
|
|
79
79
|
send("#{key}=", value)
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -131,11 +131,12 @@ module Piwigo
|
|
|
131
131
|
#
|
|
132
132
|
# @param [<Type>] session
|
|
133
133
|
# @param [<Type>] filename of the file to upload
|
|
134
|
-
# @param [
|
|
134
|
+
# @param [Album] album to place tge image in
|
|
135
|
+
# @param [String] name of the image
|
|
135
136
|
#
|
|
136
137
|
# @return [Boolean] True if successful
|
|
137
|
-
def self.upload(session, file, name)
|
|
138
|
-
ImageUploader.new(session, file, name)
|
|
138
|
+
def self.upload(session, file, album, name)
|
|
139
|
+
ImageUploader.new.upload(session, file, name, album: album)
|
|
139
140
|
end
|
|
140
141
|
|
|
141
142
|
# Checks existence of images
|
data/lib/piwigo/session.rb
CHANGED
|
@@ -28,7 +28,7 @@ module Piwigo
|
|
|
28
28
|
# Gets information about the current session. Also provides a token useable with admin methods.
|
|
29
29
|
# @return [<Type>] <description>
|
|
30
30
|
def status
|
|
31
|
-
logger ||= Logger.new(
|
|
31
|
+
logger ||= Logger.new($stdout)
|
|
32
32
|
|
|
33
33
|
begin
|
|
34
34
|
# Create the HTTP objects
|
|
@@ -60,11 +60,11 @@ module Piwigo
|
|
|
60
60
|
def logout(logger: nil)
|
|
61
61
|
raise 'This session has already been logged out' if uri.nil?
|
|
62
62
|
|
|
63
|
-
logger ||= Logger.new(
|
|
63
|
+
logger ||= Logger.new($stdout)
|
|
64
64
|
|
|
65
65
|
# Create the HTTP objects
|
|
66
66
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
67
|
-
request = Net::HTTP::Get.new(uri.request_uri
|
|
67
|
+
request = Net::HTTP::Get.new("#{uri.request_uri}&method=pwg.session.logout")
|
|
68
68
|
request['Cookie'] = id
|
|
69
69
|
|
|
70
70
|
# Send the request
|
|
@@ -78,17 +78,21 @@ module Piwigo
|
|
|
78
78
|
# @param [string] piwigo - host to connect to. Can be fqdn or ip.
|
|
79
79
|
# @param [string] username - user to connect as
|
|
80
80
|
# @param [string] password - password for user
|
|
81
|
-
# @param [boolean] https -
|
|
81
|
+
# @param [boolean] https -
|
|
82
|
+
# @param [port] Optional port. If not specified, then http connections will use 80, https 443
|
|
82
83
|
# @param [Logger] logger logger to output debug messages to (Optional)
|
|
83
|
-
def self.login(host, username, password, https: true, logger: nil)
|
|
84
|
+
def self.login(host, username, password, https: true, port: nil, logger: nil)
|
|
84
85
|
raise 'host should not be nil' if host.nil?
|
|
85
86
|
raise 'username should not be nil' if username.nil?
|
|
86
87
|
|
|
87
|
-
logger ||= Logger.new(
|
|
88
|
+
logger ||= Logger.new($stdout)
|
|
88
89
|
|
|
89
90
|
begin
|
|
90
|
-
uri = https
|
|
91
|
-
|
|
91
|
+
uri = if https
|
|
92
|
+
URI::HTTPS.build(host: host, port: port.nil? ? 443 : port, path: '/ws.php', query: 'format=json')
|
|
93
|
+
else
|
|
94
|
+
URI::HTTP.build(host: host, port: port.nil? ? 80 : port, path: '/ws.php', query: 'format=json')
|
|
95
|
+
end
|
|
92
96
|
|
|
93
97
|
# Create the HTTP objects
|
|
94
98
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
@@ -105,7 +109,7 @@ module Piwigo
|
|
|
105
109
|
|
|
106
110
|
if response.code == '200'
|
|
107
111
|
logger.info "Login succeeded: #{response.body}"
|
|
108
|
-
pwg_id = response.response['set-cookie'].split(
|
|
112
|
+
pwg_id = response.response['set-cookie'].split(/[;,\,]/).select { |i| i.strip.start_with? 'pwg_id' }.first
|
|
109
113
|
return Session.new(pwg_id, uri)
|
|
110
114
|
else
|
|
111
115
|
logger.error "Login failed: #{response.body}"
|
data/lib/piwigo/version.rb
CHANGED
data/piwigo-api.gemspec
CHANGED
|
@@ -27,14 +27,14 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
28
|
spec.require_paths = ['lib']
|
|
29
29
|
|
|
30
|
-
spec.add_development_dependency 'bundler', '~> 2.
|
|
31
|
-
spec.add_development_dependency 'codecov', '~> 0.
|
|
32
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
|
33
|
-
spec.add_development_dependency 'minitest-reporters', '~>1.
|
|
30
|
+
spec.add_development_dependency 'bundler', '~> 2.3'
|
|
31
|
+
spec.add_development_dependency 'codecov', '~> 0.6'
|
|
32
|
+
spec.add_development_dependency 'minitest', '~> 5.15'
|
|
33
|
+
spec.add_development_dependency 'minitest-reporters', '~>1.5'
|
|
34
34
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
35
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
|
35
|
+
spec.add_development_dependency 'simplecov', '~> 0.21'
|
|
36
36
|
|
|
37
|
-
spec.add_runtime_dependency 'http', '~>
|
|
38
|
-
spec.add_runtime_dependency 'logger', '~>1.
|
|
37
|
+
spec.add_runtime_dependency 'http', '~>5.0'
|
|
38
|
+
spec.add_runtime_dependency 'logger', '~>1.5'
|
|
39
39
|
spec.add_runtime_dependency 'exifr', '~>1.3'
|
|
40
40
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: piwigo-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Adrian Gilbert
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -16,62 +16,56 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '2.
|
|
19
|
+
version: '2.3'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '2.
|
|
26
|
+
version: '2.3'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: codecov
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.
|
|
34
|
-
- - ">="
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.1.10
|
|
33
|
+
version: '0.6'
|
|
37
34
|
type: :development
|
|
38
35
|
prerelease: false
|
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
37
|
requirements:
|
|
41
38
|
- - "~>"
|
|
42
39
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '0.
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.1.10
|
|
40
|
+
version: '0.6'
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
42
|
name: minitest
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
|
50
44
|
requirements:
|
|
51
45
|
- - "~>"
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '5.
|
|
47
|
+
version: '5.15'
|
|
54
48
|
type: :development
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
51
|
requirements:
|
|
58
52
|
- - "~>"
|
|
59
53
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '5.
|
|
54
|
+
version: '5.15'
|
|
61
55
|
- !ruby/object:Gem::Dependency
|
|
62
56
|
name: minitest-reporters
|
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
|
64
58
|
requirements:
|
|
65
59
|
- - "~>"
|
|
66
60
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '1.
|
|
61
|
+
version: '1.5'
|
|
68
62
|
type: :development
|
|
69
63
|
prerelease: false
|
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
65
|
requirements:
|
|
72
66
|
- - "~>"
|
|
73
67
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '1.
|
|
68
|
+
version: '1.5'
|
|
75
69
|
- !ruby/object:Gem::Dependency
|
|
76
70
|
name: rake
|
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -92,42 +86,42 @@ dependencies:
|
|
|
92
86
|
requirements:
|
|
93
87
|
- - "~>"
|
|
94
88
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0.
|
|
89
|
+
version: '0.21'
|
|
96
90
|
type: :development
|
|
97
91
|
prerelease: false
|
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
93
|
requirements:
|
|
100
94
|
- - "~>"
|
|
101
95
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0.
|
|
96
|
+
version: '0.21'
|
|
103
97
|
- !ruby/object:Gem::Dependency
|
|
104
98
|
name: http
|
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
|
106
100
|
requirements:
|
|
107
101
|
- - "~>"
|
|
108
102
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '
|
|
103
|
+
version: '5.0'
|
|
110
104
|
type: :runtime
|
|
111
105
|
prerelease: false
|
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
107
|
requirements:
|
|
114
108
|
- - "~>"
|
|
115
109
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '
|
|
110
|
+
version: '5.0'
|
|
117
111
|
- !ruby/object:Gem::Dependency
|
|
118
112
|
name: logger
|
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
|
120
114
|
requirements:
|
|
121
115
|
- - "~>"
|
|
122
116
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: '1.
|
|
117
|
+
version: '1.5'
|
|
124
118
|
type: :runtime
|
|
125
119
|
prerelease: false
|
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
121
|
requirements:
|
|
128
122
|
- - "~>"
|
|
129
123
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: '1.
|
|
124
|
+
version: '1.5'
|
|
131
125
|
- !ruby/object:Gem::Dependency
|
|
132
126
|
name: exifr
|
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -166,6 +160,7 @@ files:
|
|
|
166
160
|
- bin/console
|
|
167
161
|
- bin/setup
|
|
168
162
|
- codecov.yml
|
|
163
|
+
- examples/Different_Port.md
|
|
169
164
|
- examples/Syncronize_Folder.md
|
|
170
165
|
- examples/Upload_Image.md
|
|
171
166
|
- lib/piwigo.rb
|
|
@@ -199,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
199
194
|
- !ruby/object:Gem::Version
|
|
200
195
|
version: '0'
|
|
201
196
|
requirements: []
|
|
202
|
-
rubygems_version: 3.0.3
|
|
197
|
+
rubygems_version: 3.0.3.1
|
|
203
198
|
signing_key:
|
|
204
199
|
specification_version: 4
|
|
205
200
|
summary: Gem to interact with the Piwigo API
|