photo-helper 0.2.9 → 0.2.10
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/Gemfile.lock +1 -1
- data/lib/helpers/file_helper.rb +1 -1
- data/lib/helpers/image_helper.rb +27 -3
- data/lib/helpers/smugmug.rb +84 -0
- data/lib/helpers/trash.rb +1 -1
- data/lib/photo-helper/delete.rb +8 -3
- data/lib/photo-helper/smugmug.rb +10 -29
- data/lib/photo-helper/version.rb +1 -1
- data/lib/photo_helper.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 72ceb15c03d99b057c67256c085549136c8ba316
|
|
4
|
+
data.tar.gz: 03e82ca1efe158858eab5c189705275a071215d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1f06f55c4a414864ba7436950322ce7538c2bff225b5cf3243d8c4a87ec67dd0d5a6f622a3331407530a89a54f4d5626ff9ca030a3032b4448b50d16c0d1ab07
|
|
7
|
+
data.tar.gz: f4dbfa2de0930a5a3dc361b1dfabe4759fc15f919c00bdce35338bda1c77162e03781703adf472d9655c85d6c83b139838db2badefc93eb7d7006105f2eca888
|
data/Gemfile.lock
CHANGED
data/lib/helpers/file_helper.rb
CHANGED
data/lib/helpers/image_helper.rb
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
class ImageHelper
|
|
2
2
|
IMAGE_CLASS_REGEX = %r{xmp:Label="(.+)"}
|
|
3
|
+
RATING_REGEX = %r{xmp:Rating="(.+)"}
|
|
3
4
|
|
|
4
|
-
def self.
|
|
5
|
+
def self.xmp(image)
|
|
5
6
|
xmp = File.join(File.dirname(image), File.basename(image, ".*") + ".XMP")
|
|
6
7
|
return unless File.exists?(xmp)
|
|
7
|
-
|
|
8
|
+
File.read(xmp)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.color_class(image)
|
|
12
|
+
contents = xmp(image)
|
|
8
13
|
matches = contents.match(IMAGE_CLASS_REGEX)
|
|
9
|
-
matches[1] if matches
|
|
14
|
+
matches[1] if matches
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.contains_color_class?(image, values)
|
|
18
|
+
values = [values] unless values.is_a? Array
|
|
19
|
+
values.include? color_class(image)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.rating(image)
|
|
23
|
+
contents = xmp(image)
|
|
24
|
+
matches = contents.match(RATING_REGEX)
|
|
25
|
+
matches[1] if matches
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.is_select?(image)
|
|
29
|
+
contains_color_class?(image, SELECT_COLOR_TAGS)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.is_5_star?(image)
|
|
33
|
+
rating(image) == '5'
|
|
10
34
|
end
|
|
11
35
|
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require "helpers/smugmug_api"
|
|
2
|
+
require "helpers/image_helper"
|
|
3
|
+
require "helpers/file_helper"
|
|
4
|
+
|
|
5
|
+
class SmugmugHelper
|
|
6
|
+
attr_accessor :smugmug_api
|
|
7
|
+
|
|
8
|
+
# to figure out what to delete, read all xmp files, loop through uploaded files and check xmp file
|
|
9
|
+
|
|
10
|
+
PATH_REGEX = %r{^.+Pictures\/.+\/(\d{4})\/(\d{2})_.+\/[^_]+_([^\/]+)}
|
|
11
|
+
|
|
12
|
+
def initialize(search_path)
|
|
13
|
+
@search_path = search_path
|
|
14
|
+
@smugmug = SmugmugAPI.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def parse_path
|
|
18
|
+
if matches = "#{@search_path}/".to_s.match(PATH_REGEX)
|
|
19
|
+
@year = matches[1]
|
|
20
|
+
@month = Date::MONTHNAMES[matches[2].to_i].capitalize
|
|
21
|
+
@location = matches[3].split("_").map(&:capitalize).join(' ')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def album_name
|
|
26
|
+
parse_path
|
|
27
|
+
if @year && @month && @location
|
|
28
|
+
folder = "#{@month} #{@year}"
|
|
29
|
+
album_name_short = "#{@location} #{@month} #{@year}"
|
|
30
|
+
File.join(@year, @month, album_name_short)
|
|
31
|
+
else
|
|
32
|
+
puts 'Unable to determine album from path'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def image_list
|
|
37
|
+
# todo: exclude exported path
|
|
38
|
+
Dir["#{@search_path}/**/*.{#{IMAGE_EXTENSIONS.join(",")}}"].reject{ |p| FileHelper.ingore_file?(p) }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def merge_exported(images = image_list)
|
|
42
|
+
exported = Dir["#{@search_path}/**/{Exported,exported}/*.{#{IMAGE_EXTENSIONS.join(",")}}"]
|
|
43
|
+
exported_basenames = exported.map{ |p| File.basename(p, ".*") }
|
|
44
|
+
images = images.reject { |p| exported_basenames.include? File.basename(p, ".*") }
|
|
45
|
+
images.concat(exported)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def upload(album_name, pictures, reject_trash = true)
|
|
49
|
+
album = @smugmug.get_or_create_album(album_name, album_url: @location&.downcase)
|
|
50
|
+
puts "#{album[:web_uri]}\n"
|
|
51
|
+
|
|
52
|
+
# remove uploaded pictures
|
|
53
|
+
uploaded = @smugmug.image_list(album[:id])
|
|
54
|
+
|
|
55
|
+
pictures = pictures.reject do |p|
|
|
56
|
+
if reject_trash
|
|
57
|
+
return true if ImageHelper.color_class(p) == "Trash"
|
|
58
|
+
end
|
|
59
|
+
uploaded.include? File.basename(p)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
puts "Uploading #{pictures.count} jpegs"
|
|
63
|
+
|
|
64
|
+
@smugmug.upload_images(pictures, album[:id], workers: 8)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def upload_dl
|
|
68
|
+
@album_name = album_name
|
|
69
|
+
@album_name = File.join("dl", @album_name)
|
|
70
|
+
|
|
71
|
+
puts "Uploading all images to album #{@album_name}"
|
|
72
|
+
upload(@album_name, image_list)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def upload_select
|
|
76
|
+
@album_name = album_name
|
|
77
|
+
pictures = image_list
|
|
78
|
+
pictures = pictures.select{ |p| ImageHelper.is_select?(p)}
|
|
79
|
+
pictures = merge_exported(pictures)
|
|
80
|
+
|
|
81
|
+
puts "Uploading selects to album #{@album_name}"
|
|
82
|
+
upload(@album_name, pictures)
|
|
83
|
+
end
|
|
84
|
+
end
|
data/lib/helpers/trash.rb
CHANGED
|
@@ -16,7 +16,7 @@ class File
|
|
|
16
16
|
FileUtils.mv(filename,"/Volumes/#{$1}/.Trashes/501/")
|
|
17
17
|
else
|
|
18
18
|
# Main drive, move to ~/.Trash/
|
|
19
|
-
FileUtils.mv(filename,self.expand_path("~/.Trash
|
|
19
|
+
FileUtils.mv(filename,self.expand_path("~/.Trash"))
|
|
20
20
|
end
|
|
21
21
|
# when /^Microsoft Windows/
|
|
22
22
|
# raise NotImplementedError, ""
|
data/lib/photo-helper/delete.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'helpers/trash'
|
|
2
|
+
require 'helpers/file_helper'
|
|
2
3
|
|
|
3
4
|
module PhotoHelper
|
|
4
5
|
class Delete < Thor
|
|
@@ -28,9 +29,13 @@ module PhotoHelper
|
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
files.each do |file|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
has_raw = false
|
|
33
|
+
RAW_EXTENSIONS.each do |extension|
|
|
34
|
+
raw_file_name = "#{File.basename(file.to_s, '.*')}.#{extension}"
|
|
35
|
+
has_raw = true if File.exist? File.join(File.dirname(file.to_s), raw_file_name)
|
|
36
|
+
end
|
|
37
|
+
next unless has_raw
|
|
38
|
+
next if FileHelper.ingore_file?(file)
|
|
34
39
|
puts file
|
|
35
40
|
|
|
36
41
|
if options[:hard]
|
data/lib/photo-helper/smugmug.rb
CHANGED
|
@@ -1,49 +1,30 @@
|
|
|
1
|
-
require 'helpers/
|
|
1
|
+
require 'helpers/smugmug'
|
|
2
2
|
require 'date'
|
|
3
3
|
require 'helpers/image_helper'
|
|
4
4
|
|
|
5
5
|
module PhotoHelper
|
|
6
6
|
class Smugmug < Thor
|
|
7
7
|
include Thor::Actions
|
|
8
|
-
PATH_REGEX = %r{^.+Pictures\/.+\/(\d{4})\/(\d{2})_.+\/[^_]+_([^\/]+)}
|
|
9
8
|
|
|
10
9
|
map 's' => 'sync'
|
|
11
|
-
|
|
12
10
|
desc 'sync', "sync folder's non-raw images with smugmug"
|
|
13
11
|
method_option :folder, aliases: '-f', type: :string, default: '.'
|
|
14
12
|
method_option :recursive, aliases: '-r', type: :boolean, default: false
|
|
15
13
|
method_option :dry_run, aliases: '-d', type: :boolean, default: false
|
|
16
14
|
def sync(folder = nil, album_name = nil)
|
|
17
15
|
search_path = File.expand_path(folder)
|
|
18
|
-
unless album_name
|
|
19
|
-
if matches = "#{search_path}/".to_s.match(PATH_REGEX)
|
|
20
|
-
year = matches[1]
|
|
21
|
-
month = Date::MONTHNAMES[matches[2].to_i].capitalize
|
|
22
|
-
location = matches[3].split("_").map(&:capitalize).join(' ')
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
album_name_short = "#{location} #{month} #{year}"
|
|
26
|
-
album_name = File.join(year, month, album_name_short)
|
|
27
|
-
else
|
|
28
|
-
puts 'Unable to determine album from path'
|
|
29
|
-
return
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
puts "Using album: #{album_name}"
|
|
17
|
+
@smugmug = SmugmugHelper.new(search_path)
|
|
33
18
|
|
|
34
|
-
@smugmug
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
pictures = pictures.reject { |p| (ImageHelper.color_class(p) == "Trash" or uploaded.include? File.basename(p)) }
|
|
42
|
-
puts "Uploading #{pictures.count} jpegs"
|
|
43
|
-
|
|
44
|
-
@smugmug.upload_images(pictures, album[:id], workers: 8)
|
|
19
|
+
@smugmug.upload_select
|
|
20
|
+
puts("\n")
|
|
21
|
+
if album_name
|
|
22
|
+
@smugmug.upload(album_name, @smugmug.image_list)
|
|
23
|
+
else
|
|
24
|
+
@smugmug.upload_dl
|
|
25
|
+
end
|
|
45
26
|
end
|
|
46
|
-
|
|
27
|
+
|
|
47
28
|
desc 'oauth', "fetch oauth credentials"
|
|
48
29
|
def oauth()
|
|
49
30
|
SmugmugAPI.new.request_access_token
|
data/lib/photo-helper/version.rb
CHANGED
data/lib/photo_helper.rb
CHANGED
|
@@ -19,11 +19,13 @@ IMAGE_EXTENSIONS = JPEG_EXTENSIONS.concat([])
|
|
|
19
19
|
PHOTOS_ROOT = "/Users/benjamincaldwell/Pictures/Pictures"
|
|
20
20
|
JPEG_ROOT ="/Users/benjamincaldwell/Pictures/jpegs"
|
|
21
21
|
IGNORE_FOLDERS = ["instagram", "exported", "edited"]
|
|
22
|
+
SELECT_COLOR_TAGS = ["Winner", "Winner alt", "Superior", "Superior alt"]
|
|
22
23
|
|
|
23
24
|
module PhotoHelper
|
|
24
25
|
class CLI < Thor
|
|
25
26
|
map "g" => "generate"
|
|
26
27
|
map "d" => "delete"
|
|
28
|
+
map "s" => "smugmug"
|
|
27
29
|
|
|
28
30
|
desc "version", "displays installed version"
|
|
29
31
|
def version
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: photo-helper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Benjamin Caldwell
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-11-
|
|
11
|
+
date: 2017-11-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -216,6 +216,7 @@ files:
|
|
|
216
216
|
- lib/helpers/image_helper.rb
|
|
217
217
|
- lib/helpers/printer.rb
|
|
218
218
|
- lib/helpers/secrets.rb
|
|
219
|
+
- lib/helpers/smugmug.rb
|
|
219
220
|
- lib/helpers/smugmug_api.rb
|
|
220
221
|
- lib/helpers/trash.rb
|
|
221
222
|
- lib/photo-helper/compress.rb
|