-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.rb
157 lines (151 loc) · 3.86 KB
/
controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
require "errorlog.rb"
require "package.rb"
require "builder"
def get_eisbn(name) #string; removes hyphens then checks for 13-digits
#add check to only grab 13 digit from filename; check File.filename?
#name = File.basename(path)
nohyphens = name.gsub("-","") #just in case; mainly for artwork
missing = catch(:finish) do
m = nohyphens.match(/\d{13}/)
throw(:finish,"failed") if m == nil
eisbn = m[0]
return eisbn
end
if missing
#puts "missing: #{missing}"
puts "couldn't get eISBN from filename: #{name}"
puts "make sure that the file is named correctly."
return missing
end
end
def build_eisbn_hash(filelist) ## takes an array of filenames
#h = Array.new
h = Hash.new
filelist.each do |f|
name = File.basename(f)
eisbn = get_eisbn(name)
#h << eisbn if eisbn != "failed"
if eisbn != "failed"
type = ""
case name
when /\.png|\.jpeg|\.jpg|\.tif{1,2}$/i
type = :artwork
when /\.epub$/i
if name =~ /_prev_/i
type = :preview
else
type = :full
end
end
#if ! type.empty?
if type.class == Symbol
if h.has_key? eisbn
h[eisbn][type] = h.fetch(h[eisbn][type],f)
else
h[eisbn] = {type => f}
end
else
@err.dontbelong << f
end
end
end
return h
end
def validate_eisbn_hash(h,types)
validatedh = Hash.new
h.each do |eisbn,typehash|
#puts eisbn
invalid = catch(:invalid) do
typehash.each do |type,path|
throw(:invalid,"#{eisbn}: #{File.basename(path)} was not set to be packaged. Check package options above if you want this asset type included.") if not types.include? type
end
types.each do |t|
#puts t
throw(:invalid,"#{eisbn}: #{t} is missing. Check that all wanted files are present and named properly.") if not typehash.has_key? t
end
puts "#{eisbn} is valid!"
validatedh[eisbn] = typehash
nil
end
puts "invalid: #{invalid}"
if invalid
#puts "#{eisbn} is missing #{invalid}"
@err.errors << invalid
end
end
return validatedh
end
#++++++ main logic
folder = ARGV[0]
guioption = ARGV[1]
puts guioption
#puts guioption.class
#gui will return array in order of precedence, i.e. [:full,:preview,:artwork]
guireturned = []
case guioption
when "0"
guireturned << :full
guireturned << :preview
guireturned << :artwork
when "1"
guireturned << :full
guireturned << :preview
when "2"
guireturned << :full
guireturned << :artwork
when "3"
guireturned << :preview
guireturned << :artwork
when "4"
guireturned << :full
when "5"
guireturned << :preview
when "6"
guireturned << :artwork
end
#guireturned = [:full,:preview,:artwork]
#guireturned = [:full,:preview]
#guireturned = [:full,:artwork]
#guireturned = [:preview,:artwork]
#guireturned = [:full]
#guireturned = [:preview]
#guireturned = [:artwork]
puts guireturned
#folder = path
@err = Errorlog.new #(self,:puts)
#puts folder
#puts @err
folderitems = Dir.glob(File.join(folder, "*"))
if folderitems.length == 0
abort "That folder does not exist or there are no files in it."
end
eisbns = build_eisbn_hash(folderitems)
puts "prior hash:"
eisbns.each do |eisbn,files|
puts "#{eisbn} => "
files.each do |type,files|
puts "#{type} => #{files}"
end
end
eisbns = validate_eisbn_hash(eisbns,guireturned)
puts "after hash:"
eisbns.each do |eisbn,files|
puts "#{eisbn} => "
files.each do |type,files|
puts "#{type} => #{files}"
end
end
#responses = Array.new
eisbns.each do |eisbn,filelist|
#puts @err
p = Package.new(eisbn,filelist,folder,@err)
puts p.response
if p.response == "package created"
@err.flash "Package for #{eisbn} was successfully created."
elsif p.response == nil
@err.flash "something went horribly wrong."
else
@err.flash "not sure what happened."
end
end
@err.report