multistockphoto 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,19 +1,32 @@
1
+ == 0.6.2 2008-06-14
2
+ * 3 minor enhancements
3
+ * new method Sitename.can_handle_orientation?
4
+ * --tags-only Schalter sendet nur Photos mit .tags Datei
5
+ * Zoonar: besser abgesichert gegen Site-down
6
+ * 2 bug fix
7
+ * an Fotolia wurden die nicht gedrehten, anstatt die gedrehten Bilder gesendet
8
+ * an Zoonar wurden die nicht gedrehten, anstatt die gedrehten Bilder gesendet
9
+
1
10
  == 0.6.1 2008-06-13
2
11
  * 1 bug fix
3
12
  * hm, das Schreiben von Keywords scheint nicht aktiviert gewesen zu sein...
13
+
4
14
  == 0.6.0 2008-06-10
5
15
  * 4 enhancements
6
16
  * Sendedauer fuer jedes Photo beim Senden auflisten
7
17
  * Option --ordered fuer alphabetisches Senden der Files
8
18
  * Option --no-tags erstellt (auch in Verbindung mit --ordered)
9
19
  * neues Sender-Objekt fuer zentrale Upload-Funktionen
20
+
10
21
  == 0.5.2 2008-05-30
11
22
  * 1 bug fix
12
23
  * Ja ja, Thomas. Erst eine dicke Lippe riskieren, von wegen "fehlerfrei" und dann noch nichtmal die Sprachelemente von Ruby beherrschen... skip -> next
13
24
  * Keine weiteren Sendeversuche, wenn fuer eine Site bereits die maximale Upload-Anzahl / Tag erreicht ist und dieser Schalter in Konfigurationsdatei gesetzt
25
+
14
26
  == 0.5.1 2008-05-29
15
27
  * 1 bug fix
16
28
  * Fehlerbehandlung wenn Site keine Photos mehr annimmt
29
+
17
30
  == 0.5.0 2008-05-27
18
31
  * 2 major enhancements:
19
32
  * Schalter in Konfigurationsdatei :total_per_day (pro Site)
data/README.txt CHANGED
@@ -1,26 +1,30 @@
1
1
  = multistockphoto
2
2
 
3
- * FIX (url)
3
+ * http://multistockphoto.rubyforge.org
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- FIX (describe your package)
7
+ Dieses Programm kann eigene Photos an mehrere definierte Photo-Sites (wie
8
+ fotolia.de, zoonar.de, photocase.de, etc.) hochladen um sie dort zum Verkauf
9
+ anzubieten.
8
10
 
9
11
  == FEATURES/PROBLEMS:
10
12
 
11
- * FIX (list of features or problems)
13
+ * automatisiertes Hochladen an mehrere Sites
14
+ * automatisches Drehen von Hochformatphotos, falls die Site dies nicht selbstaendig erkennen kann
15
+ * automatische Verarbeiten von Keywords
12
16
 
13
17
  == SYNOPSIS:
14
18
 
15
- FIX (code sample of usage)
19
+ ausfuehrliche Dokumentation zur Benutzung, siehe http://multistockphoto.rubyforge.org
16
20
 
17
21
  == REQUIREMENTS:
18
22
 
19
- * FIX (list of requirements)
23
+ * neben den abhaengigen gems muss ImageMagick installiert sein
20
24
 
21
25
  == INSTALL:
22
26
 
23
- * FIX (sudo gem install, anything else)
27
+ * sudo gem install multistockphoto
24
28
 
25
29
  == LICENSE:
26
30
 
data/bin/multistockphoto CHANGED
@@ -53,10 +53,19 @@ Choice.options do
53
53
  long '--send-all'
54
54
  desc 'Send all files'
55
55
  action do
56
- $send_all=true
56
+ $send_all = true
57
57
  end
58
58
  end
59
59
 
60
+ option :tags_only do
61
+ short '-1'
62
+ long '--tags-only'
63
+ desc 'Send only photos with keywords'
64
+ action do
65
+ $tags_only = true
66
+ end
67
+ end
68
+
60
69
  option :verbose do
61
70
  short '-y'
62
71
  long '--verbose'
@@ -201,8 +210,8 @@ def send_all
201
210
  total_transfers = 0
202
211
  total = {}
203
212
  errors = {}
204
- sites = [:fotolia, :zoonar, :photocase]
205
- sites.each {|site|
213
+ #sites = [:fotolia, :zoonar, :photocase]
214
+ $active_sites.each {|site|
206
215
  total[site] = 0
207
216
  errors[site] = 0
208
217
  }
@@ -212,11 +221,11 @@ def send_all
212
221
  # - true: we do the rotation
213
222
  # - false: the site does the rotation automatically
214
223
  # change to false if a photo site can automatically rotate photos
215
- rotate_photos = {
216
- :fotolia => true,
217
- :zoonar => true,
218
- :photocase => true,
219
- }
224
+ # rotate_photos = {
225
+ # :fotolia => true,
226
+ # :zoonar => true,
227
+ # :photocase => true,
228
+ # }
220
229
 
221
230
  done = {
222
231
  :fotolia => false,
@@ -228,14 +237,14 @@ def send_all
228
237
  :zoonar => 999_999_999,
229
238
  :photocase => 999_999_999,
230
239
  }
231
- sites.each {|site|
240
+ $active_sites.each {|site|
232
241
  # dynamisches Site.new("site")
233
242
  s = eval("#{site.to_s.capitalize}"+".new(#{site.to_s.capitalize})")
234
243
  if s.total_per_day
235
244
  remaining[site] = s.total_per_day - s.heute_schon_gesendet(site)
236
245
  end
237
246
  }
238
- allfiles = Dir.glob($upload_dir+'/*')
247
+ allfiles = Dir.glob(File.join($upload_dir,'*'))
239
248
  if $ordered
240
249
  allfiles.sort!
241
250
  end
@@ -245,15 +254,20 @@ def send_all
245
254
  if filename.upcase =~ PICTURE_FILES
246
255
  total_per_site_flag = $total_per_site
247
256
  photo = Photo.new(filename)
248
- # [:fotolia, :zoonar, :photocase].each {|site_name|
249
257
  $active_sites.each {|site_name|
250
258
  begin
251
259
  Timeout::timeout(10.0*60.0) do
252
260
  t1 = Time.now
253
261
  site = eval(site_name.to_s.capitalize+".new(#{site_name.to_s.capitalize})")
254
- site.rotate_photos = rotate_photos[site_name]
262
+ # site.rotate_photos = rotate_photos[site_name]
255
263
  done[site_name] = true if remaining[site_name] <= 0
256
264
  next if done[site_name]
265
+ if $tags_only and ! tagsfile?(photo.filename)
266
+ if $verbose
267
+ puts "#{photo.filename}: no tags file. skipped."
268
+ end
269
+ next
270
+ end
257
271
  if $send_all or
258
272
  (total_per_site_flag and
259
273
  total[site_name] < Choice.choices[:total_per_site])
@@ -344,7 +358,7 @@ def not_sent
344
358
  not_sent[site] = 0
345
359
  }
346
360
  puts "not sent photos:"
347
- Dir.glob($upload_dir+'/*').each {|filename|
361
+ Dir.glob(File.join($upload_dir,'*')).each {|filename|
348
362
  next if File.basename(filename)[0,4] == 'rot_'
349
363
  if filename.upcase =~ PICTURE_FILES
350
364
  $active_sites.each {|site|
@@ -421,7 +435,7 @@ end
421
435
 
422
436
  # listet Bilddateien auf, die an alle Sites gesendet wurden
423
437
  def list_done
424
- Dir.glob($upload_dir+'/*').each {|filename|
438
+ Dir.glob(File.join($upload_dir,'*')).each {|filename|
425
439
  photo_sent = {}
426
440
  $active_sites.each {|site|
427
441
  photo_sent[site] = false
@@ -460,7 +474,7 @@ end
460
474
  # Es schadet aber auch nicht, wenn dieser Schritt nie ausgefuehrt wird.
461
475
  def purge_done
462
476
  puts 'purge_done'
463
- Dir.glob($upload_dir+'/*').each {|filename|
477
+ Dir.glob(File.join($upload_dir,'*')).each {|filename|
464
478
  photo_sent = {}
465
479
  $active_sites.each {|site|
466
480
  photo_sent[site] = false
@@ -492,7 +506,7 @@ end
492
506
 
493
507
  # Listet alle Photo-Dateien auf, zu denen es keine .tags-Datei gibt
494
508
  def no_tags
495
- allfiles = Dir.glob($upload_dir+'/*')
509
+ allfiles = Dir.glob(File.join($upload_dir,'*'))
496
510
  if $ordered
497
511
  allfiles.sort!
498
512
  end
@@ -1,6 +1,6 @@
1
1
  class GenericSite
2
2
  attr_reader :name
3
- attr_accessor :user, :password, :max_errors, :rotate_photos
3
+ attr_accessor :user, :password, :max_errors
4
4
 
5
5
  MAX_ERRORS = 3
6
6
  SENDLIST = 'sendeliste.dat'
@@ -8,7 +8,6 @@ class GenericSite
8
8
  def initialize(name)
9
9
  @name = name
10
10
  @max_errors = MAX_ERRORS
11
- @rotate_photos = true
12
11
  end
13
12
 
14
13
  def photos_fuer_heute_uebrig?
@@ -4,7 +4,7 @@ require 'RMagick'
4
4
  include Magick
5
5
 
6
6
  class Photo
7
- attr_reader :filename
7
+ attr_reader :filename, :rotated_filename
8
8
  attr_accessor :tags
9
9
 
10
10
  def initialize(filename)
@@ -40,6 +40,7 @@ class Photo
40
40
  end
41
41
  end
42
42
 
43
+ # dreht Bild und schreibt in rot_... Datei
43
44
  def drehen
44
45
  pic = ImageList.new(@filename)
45
46
  if pic.orientation == LeftBottomOrientation
@@ -49,7 +50,9 @@ class Photo
49
50
  pic.auto_orient!
50
51
  puts "rotating picture, writing to #{tmpname}"
51
52
  pic.write(tmpname)
53
+
52
54
  end
55
+ @rotated_filename = tmpname
53
56
  end
54
57
  end
55
58
 
@@ -101,10 +104,17 @@ class Photo
101
104
  if s == ''
102
105
  s = s + tag
103
106
  else
104
- s = s + ' ' + tag
107
+ # s = s + ' ' + tag
108
+ # lieber durch Komma trennen, da sonst das Formular z.B. bei fotolia nicht
109
+ # richtig gefüllt wird
110
+ s = s + ',' + tag
105
111
  end
106
112
  }
107
113
  photo['keywords'] = s
114
+
115
+ #TODO:
116
+ photo['title'] = 'Testtitel'
117
+
108
118
  photo.save
109
119
  end
110
120
 
@@ -49,10 +49,8 @@ class Fotolia < GenericSite
49
49
  puts "already sent"
50
50
  return :duplicate
51
51
  end
52
- if rotate_photos
53
- if photo.portrait?
54
- photo.drehen
55
- end
52
+ if photo.portrait? and ! Fotolia.can_handle_orientation?
53
+ photo.drehen
56
54
  end
57
55
  if site_can_handle_keywords?
58
56
  photo.set_keywords
@@ -62,7 +60,12 @@ class Fotolia < GenericSite
62
60
  ftp = Net::FTP.new(FTP_HOST)
63
61
  ftp.login(@ftp_user,@ftp_password)
64
62
  files=ftp.list('*')
65
- res = ftp.putbinaryfile(photo.filename)
63
+ if photo.portrait?
64
+ p photo.rotated_filename
65
+ res = ftp.putbinaryfile(photo.rotated_filename)
66
+ else
67
+ res = ftp.putbinaryfile(photo.filename)
68
+ end
66
69
  files =ftp.list('*')
67
70
  #p files
68
71
  ftp.close
@@ -81,18 +84,21 @@ class Fotolia < GenericSite
81
84
  true
82
85
  end
83
86
 
84
- # def total_per_day
85
- # @total_per_day
86
- # end
87
- #
87
+ # Anzahl heute schon gesendeter Photos
88
88
  def sent_today
89
89
  site = 'fotolia'
90
90
  return sent_today_site(site)
91
91
  end
92
92
 
93
+ # wurde dieses Photo schon gesendet?
93
94
  def already_sent?(photo)
94
95
  already_sent_site?(photo,'fotolia')
95
96
  end
97
+
98
+ # can site handle orientation?
99
+ def self.can_handle_orientation?
100
+ false
101
+ end
96
102
 
97
103
  private
98
104
 
@@ -41,12 +41,10 @@ class Photocase < GenericSite
41
41
  puts 'already sent'
42
42
  return :duplicate
43
43
  end
44
- if rotate_photos
45
- if photo.portrait?
46
- photo.drehen
47
- end
44
+ if photo.portrait? and ! Photocase.can_handle_orientation?
45
+ photo.drehen
48
46
  end
49
- if site_can_handle_keywords?
47
+ if site_can_handle_keywords?
50
48
  photo.set_keywords
51
49
  end
52
50
 
@@ -70,11 +68,11 @@ class Photocase < GenericSite
70
68
  raise "no Upload a photo" if ! page.body.include?('Upload a photo')
71
69
  form = page.form('Form')
72
70
  if photo.portrait?
73
-
74
- b = File.basename(photo.filename)
75
- newfilename = photo.filename.sub(b,'')+'rot_'+b
76
- # form.file_uploads.first.file_name = 'r' + photo.filename
77
- form.file_uploads.first.file_name = newfilename
71
+ form.file_uploads.first.file_name = photo.rotated_filename
72
+ # b = File.basename(photo.filename)
73
+ # newfilename = photo.filename.sub(b,'')+'rot_'+b
74
+ # # form.file_uploads.first.file_name = 'r' + photo.filename
75
+ # form.file_uploads.first.file_name = newfilename
78
76
  else
79
77
  form.file_uploads.first.file_name = photo.filename
80
78
  end
@@ -114,31 +112,34 @@ class Photocase < GenericSite
114
112
  true
115
113
  end
116
114
 
117
- # def total_per_day
118
- # @total_per_day
119
- # end
120
-
115
+ # Anzahl heute schon gesendeter Photos
121
116
  def sent_today
122
117
  site = 'photocase'
123
118
  return sent_today_site(site)
124
119
  end
125
120
 
121
+ # wurde dieses Photo schon gesendet?
126
122
  def already_sent?(photo)
127
- already_sent_site?(photo,'photocase')
128
- #
129
- # unless photo.class == Photo
130
- # raise 'not a Photo object'
131
- # end
132
- # unless File.exist?(photo.filename)
133
- # raise "file #{photo.filename} does not exist"
134
- # end
135
- # g = grep(SENDLIST, /photocase\t#{photo.filename}/)
136
- # return g.size > 0
123
+ already_sent_site?(photo,'photocase')
124
+ #
125
+ # unless photo.class == Photo
126
+ # raise 'not a Photo object'
127
+ # end
128
+ # unless File.exist?(photo.filename)
129
+ # raise "file #{photo.filename} does not exist"
130
+ # end
131
+ # g = grep(SENDLIST, /photocase\t#{photo.filename}/)
132
+ # return g.size > 0
133
+ end
134
+
135
+ # can site handle orientation?
136
+ def self.can_handle_orientation?
137
+ false
137
138
  end
138
139
 
139
140
  private
140
141
 
141
142
  def site_can_handle_keywords?
142
- true # TODO: ueberpruefen, ob richtig?
143
- end
143
+ true # TODO: ueberpruefen, ob richtig?
144
+ end
144
145
  end
@@ -37,17 +37,15 @@ class Zoonar < GenericSite
37
37
  end
38
38
  print "zoonar:#{photo.filename} ... "
39
39
  $stdout.flush
40
- # g = `grep "zoonar\t#{photo.filename}" sendeliste.dat` #TODO: will not work for windows
41
40
  g = grep(SENDLIST, /zoonar\t#{photo.filename}/)
42
41
  if g.size > 0
43
42
  puts 'already sent'
44
43
  return :duplicate
45
44
  end
46
- if rotate_photos
47
- if photo.portrait?
48
- photo.drehen
49
- end
45
+ if photo.portrait? and ! Zoonar.can_handle_orientation?
46
+ photo.drehen
50
47
  end
48
+
51
49
  if site_can_handle_keywords?
52
50
  photo.set_keywords
53
51
  end
@@ -55,8 +53,11 @@ class Zoonar < GenericSite
55
53
  unless dont_send
56
54
  agent = WWW::Mechanize.new
57
55
  agent.user_agent_alias = 'Linux Mozilla'
58
- page = agent.get 'http://www.zoonar.de'
59
-
56
+ begin
57
+ page = agent.get 'http://www.zoonar.de'
58
+ rescue WWW::Mechanize::ResponseCodeError
59
+ raise UploadException
60
+ end
60
61
  form = page.forms[1] #TODO: besser nach Name
61
62
  form['loginForm[Username]'] = @config[:zoonar][:user]
62
63
  form['loginForm[Password]'] = @config[:zoonar][:password]
@@ -66,7 +67,11 @@ class Zoonar < GenericSite
66
67
  page = agent.click page.links.text('Bilder hochladen')
67
68
  raise "nicht auf Upload-Seite" if ! page.body.include?('bertragen Sie Ihre Bilder einzeln mit Hilfe Ihres Internet-Browsers,')
68
69
  form = page.form('fUploadResource')
69
- form.file_uploads.first.file_name = photo.filename
70
+ if photo.portrait?
71
+ form.file_uploads.first.file_name = photo.rotated_filename
72
+ else
73
+ form.file_uploads.first.file_name = photo.filename
74
+ end
70
75
  # puts "form abgeschickt ..."
71
76
  page = agent.submit form
72
77
  if page.body.include?("Es ist ein Fehler aufgetreten")
@@ -115,19 +120,22 @@ Falls wir das Bild ablehnen sollten, werden Sie eine Benachrichtigung per E-Mail
115
120
  true
116
121
  end
117
122
 
118
- # def total_per_day
119
- # @total_per_day
120
- # end
121
-
123
+ # Anzahl heute schon gesendeter Photos
122
124
  def sent_today
123
125
  site = 'zoonar'
124
126
  return sent_today_site(site)
125
127
  end
126
128
 
129
+ # wurde dieses Photo schon gesendet?
127
130
  def already_sent?(photo)
128
131
  already_sent_site?(photo,'zoonar')
129
132
  end
130
133
 
134
+ # can site handle orientation?
135
+ def self.can_handle_orientation?
136
+ false
137
+ end
138
+
131
139
  private
132
140
 
133
141
  def site_can_handle_keywords?
@@ -2,7 +2,7 @@ module Multistockphoto #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 6
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -52,11 +52,12 @@ class TestMultistockphoto < Test::Unit::TestCase
52
52
  end
53
53
 
54
54
  def test_bin_help
55
- expected = "Usage: multistockphoto [-vayntscrxlpoq]
55
+ expected = "Usage: multistockphoto [-va1yntscrxlpoq]
56
56
  Options:
57
57
  --help Show this message
58
58
  -v, --version Show version
59
59
  -a, --send-all Send all files
60
+ -1, --tags-only Send only photos with keywords
60
61
  -y, --verbose Verbose output
61
62
  -n, --not-sent Count not sent files per site
62
63
  -t, --total-transfers Dont't send more than N photos in total
@@ -70,28 +71,20 @@ Options:
70
71
  -q, --no-tags List photos without tags file
71
72
  --dont-send
72
73
  --dont-log \n"
73
- after Date.new(2008,6,10) do
74
- result = `#{BIN}multistockphoto -h`
75
- assert_equal expected, result
76
- end
74
+ result = `#{BIN}multistockphoto -h`
75
+ assert_equal expected, result
77
76
  result = `#{BIN}multistockphoto --help`
78
77
  assert_equal expected, result
79
78
  end
80
79
 
81
80
  def test_bin_version
82
- expected = "multistockphoto 0.6.0\n"
81
+ expected = "multistockphoto 0.6.1\n"
83
82
  result = `#{BIN}multistockphoto -v`
84
83
  assert_equal expected, result
85
84
  result = `#{BIN}multistockphoto --version`
86
85
  assert_equal expected, result
87
86
  end
88
87
 
89
-
90
- def after(d)
91
- yield if DateTime.now > d
92
- end
93
-
94
-
95
88
  def test_fotolia
96
89
  fotolia = Fotolia.new("Fotolia")
97
90
  fotolia.ftp_user = @fotolia_ftp_user
@@ -152,17 +145,15 @@ Options:
152
145
  end
153
146
 
154
147
  def test_config_params_fotolia
155
- after Date.new(2008,6,10) do
156
- fotolia = Fotolia.new("Fotolia Site")
157
- assert fotolia.user
158
- assert fotolia.password
159
- assert fotolia.ftp_user
160
- assert fotolia.ftp_password
161
- assert_equal @fotolia_user, fotolia.user
162
- assert_equal @fotolia_password, fotolia.password
163
- assert_equal @fotolia_ftp_user, fotolia.ftp_user
164
- assert_equal @fotolia_ftp_password, fotolia.ftp_password
165
- end
148
+ fotolia = Fotolia.new("Fotolia Site")
149
+ assert fotolia.user
150
+ assert fotolia.password
151
+ assert fotolia.ftp_user
152
+ assert fotolia.ftp_password
153
+ assert_equal @fotolia_user, fotolia.user
154
+ assert_equal @fotolia_password, fotolia.password
155
+ assert_equal @fotolia_ftp_user, fotolia.ftp_user
156
+ assert_equal @fotolia_ftp_password, fotolia.ftp_password
166
157
  end
167
158
 
168
159
  def test_config_params_zoonar
@@ -176,15 +167,13 @@ Options:
176
167
  end
177
168
 
178
169
  def test_config_params_photocase
179
- after Date.new(2008,6,10) do
180
- photocase = Photocase.new("photocase Site")
181
- assert photocase.user
182
- assert photocase.password
183
- assert_equal @photocase_user, photocase.user
184
- assert_equal @photocase_password, photocase.password
185
- #kein ftp assert_equal @photocase_ftp_user, photocase.ftp_user
186
- #kein ftp assert_equal @photocase_ftp_password, photocase.ftp_password
187
- end
170
+ photocase = Photocase.new("photocase Site")
171
+ assert photocase.user
172
+ assert photocase.password
173
+ assert_equal @photocase_user, photocase.user
174
+ assert_equal @photocase_password, photocase.password
175
+ #kein ftp assert_equal @photocase_ftp_user, photocase.ftp_user
176
+ #kein ftp assert_equal @photocase_ftp_password, photocase.ftp_password
188
177
  end
189
178
 
190
179
  def test_grep
@@ -288,7 +277,6 @@ Options:
288
277
  def test_iptc_file_keywords
289
278
  expected = 'Berlin gwb Blume Biene'
290
279
  photo = Photo.new(File.join('test','IMG_3602.JPG'))
291
-
292
280
  photo.set_keywords
293
281
  assert_equal expected, photo.file_keywords
294
282
  end
@@ -331,15 +319,8 @@ Options:
331
319
  assert_equal 0, zoonar.sent_today
332
320
  assert_equal 0, fotolia.sent_today
333
321
  assert_equal 0, photocase.sent_today
334
-
335
-
336
322
  end
337
323
  #end
338
- # Code Generated by ZenTest v. 3.9.2
339
- # classname: asrt / meth = ratio%
340
- # GenericSite: 0 / 4 = 0.00%
341
-
342
- #require 'test/unit' unless defined? $ZENTEST and $ZENTEST
343
324
 
344
325
  #class Multistockphoto
345
326
  after Date.new(2008,6,13) do
@@ -612,5 +593,14 @@ photocase:upload/3.gif ... OK
612
593
  assert ret.exited?
613
594
  assert_equal 0, ret.exitstatus
614
595
  end
596
+
597
+ def test_can_handle_orientation
598
+ assert ! Fotolia.can_handle_orientation?
599
+ assert ! Zoonar.can_handle_orientation?
600
+ assert ! Photocase.can_handle_orientation?
601
+ end
602
+
603
+
604
+
615
605
  end
616
606
 
data/website/index.html CHANGED
@@ -150,9 +150,11 @@ Funktionsweise dieses Programm nicht notwendig, da die gedrehten Dateien bei
150
150
  Bedarf einfach neu angelegt werden.</p>
151
151
 
152
152
 
153
- <p>Da es theoretisch auch möglich wäre, daß die entsprechende Photo-Site das Drehen
154
- von sich aus beherrscht, ist vorgesehen, in zukünfigen Programm-Versionen das
155
- Drehen vorab bei Bedarf zu deaktivieren.</p>
153
+ <p>Ab dem Release 0.6.2 weiß jede der Site-Klassen, ob ein Drehen des Bildes vorab
154
+ nötig ist, oder ob die Site das Drehen selbständig erkennen kann. Falls eine
155
+ Site das Drehen beherrscht, wird nicht von diesem Programm vorab gedreht, sondern
156
+ es wird die originale Datei hochgeladen. Zum jetzigen Zeitpunkt beherrscht
157
+ jedoch keine der bisher realisierten Sites das Drehen von sich aus.</p>
156
158
 
157
159
 
158
160
  <p>Das Programm erstellt (im Directory multistockphoto) eine Datei namens
@@ -569,6 +571,21 @@ die gedrehte Datei ersetzt.</p>
569
571
  Photo-Dateien auf, für die keine tags-Datei exisitiert.</p>
570
572
 
571
573
 
574
+ <h3>&#8212;tags-only</h3>
575
+
576
+
577
+ <p>Diese Option, in Verbindung mit dem Aufrufparameter&#8212;send-all sendet nur Photos,
578
+ für die eine zugehörige .tags Datei existiert.
579
+ Diese Option ist arbeitstechnisch nützlich, wenn du mindestens eine Site verwendest,
580
+ bei der das Vergeben von Keywords obligatorisch ist, bevor ein Bild begutachtet
581
+ wird (z. B. fotolia). Denn in diesem Fall mußt du die Keywords so oder so (entweder
582
+ offline oder online) erfassen.
583
+ Solltest du jedoch z. B. nur zoonar und photocase verwenden, kannst du auf das
584
+ Erfassen von Keywords vorab gut verzichten, da du nur für die angenommenen
585
+ Photos Keywords erfassen mußt, was wahrscheinlich bedeutend weniger Aufwand
586
+ bedeutet.</p>
587
+
588
+
572
589
  <h3>&#8212;dont-send und&#8212;dont-log</h3>
573
590
 
574
591
 
@@ -674,7 +691,8 @@ soll. Erst dann werden deine Bilder begutachtet und entweder angenommen oder
674
691
  abgelehnt.</p>
675
692
 
676
693
 
677
- <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: Ja</p>
694
+ <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: Ja
695
+ Site unterstützt Hoch-/Querformat: Nein</p>
678
696
 
679
697
 
680
698
  <h3>zoonar.de</h3>
@@ -689,7 +707,8 @@ Mein Shop bei Zoonar ist übrigens unter http://www.zoonar.de/shop/thopre zu
689
707
  zu erreichen. Kauft fleißig bei mir ein! ;-)</p>
690
708
 
691
709
 
692
- <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: Ja</p>
710
+ <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: Ja
711
+ Site unterstützt Hoch-/Querformat: Nein</p>
693
712
 
694
713
 
695
714
  <h3>photocase.de</h3>
@@ -702,11 +721,8 @@ Gimmick bei photocase kannst du bei deinen Photos sehen, an welchem Platz
702
721
  sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.</p>
703
722
 
704
723
 
705
- <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: ? noch mal nachschauen! <span class="caps">TODO</span>:</p>
706
-
707
-
708
- <p><i>Click on the Browse button to search your computer for the photo you’d like to upload. We accept <span class="caps">JPG</span> and <span class="caps">TIFF</span> files. Please pay close attention to the minimum resolution requirement of 1600&#215;1200 pixels, the image quality (e.g. not overly compressed) and the content of the image itself (e.g. it does not contain any material that you don’t hold the copyright to).
709
- </i></p>
724
+ <p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: ? noch mal nachschauen! <span class="caps">TODO</span>:
725
+ Site unterstützt Hoch-/Querformat: Nein</p>
710
726
 
711
727
 
712
728
  <h2>Forum</h2>
@@ -784,7 +800,7 @@ rake install_gem</pre>
784
800
  <p>Comments are welcome. Send an email to <a href="mailto:thopre@gmail.com">Thomas Preymesser</a> email
785
801
  or via the <a href="http://groups.google.com/group/multistockphoto">forum</a></p>
786
802
  <p class="coda">
787
- <a href="mailto:thopre@gmail.com">Thomas Preymesser</a>, 11th June 2008<br>
803
+ <a href="mailto:thopre@gmail.com">Thomas Preymesser</a>, 14th June 2008<br>
788
804
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
789
805
  </p>
790
806
  </div>
data/website/index.txt CHANGED
@@ -98,9 +98,11 @@ Dateien dürfen gefahrlos gelöscht werden, ist aber im normalen Betrieb für di
98
98
  Funktionsweise dieses Programm nicht notwendig, da die gedrehten Dateien bei
99
99
  Bedarf einfach neu angelegt werden.
100
100
 
101
- Da es theoretisch auch möglich wäre, daß die entsprechende Photo-Site das Drehen
102
- von sich aus beherrscht, ist vorgesehen, in zukünfigen Programm-Versionen das
103
- Drehen vorab bei Bedarf zu deaktivieren.
101
+ Ab dem Release 0.6.2 weiß jede der Site-Klassen, ob ein Drehen des Bildes vorab
102
+ nötig ist, oder ob die Site das Drehen selbständig erkennen kann. Falls eine
103
+ Site das Drehen beherrscht, wird nicht von diesem Programm vorab gedreht, sondern
104
+ es wird die originale Datei hochgeladen. Zum jetzigen Zeitpunkt beherrscht
105
+ jedoch keine der bisher realisierten Sites das Drehen von sich aus.
104
106
 
105
107
  Das Programm erstellt (im Directory multistockphoto) eine Datei namens
106
108
  'sendeliste.dat', in der die erfolgreichen Uploads mit Site, Dateiname und
@@ -450,6 +452,19 @@ h3. --no-tags
450
452
  Ein Aufruf mit dieser Option, auch in Verbindung mit --ordered, listet alle
451
453
  Photo-Dateien auf, für die keine tags-Datei exisitiert.
452
454
 
455
+ h3. --tags-only
456
+
457
+ Diese Option, in Verbindung mit dem Aufrufparameter --send-all sendet nur Photos,
458
+ für die eine zugehörige .tags Datei existiert.
459
+ Diese Option ist arbeitstechnisch nützlich, wenn du mindestens eine Site verwendest,
460
+ bei der das Vergeben von Keywords obligatorisch ist, bevor ein Bild begutachtet
461
+ wird (z. B. fotolia). Denn in diesem Fall mußt du die Keywords so oder so (entweder
462
+ offline oder online) erfassen.
463
+ Solltest du jedoch z. B. nur zoonar und photocase verwenden, kannst du auf das
464
+ Erfassen von Keywords vorab gut verzichten, da du nur für die angenommenen
465
+ Photos Keywords erfassen mußt, was wahrscheinlich bedeutend weniger Aufwand
466
+ bedeutet.
467
+
453
468
  h3. --dont-send und --dont-log
454
469
 
455
470
  Diese beiden Optionen sind eigentlich nur für interne Unit-Tests der Programme
@@ -535,6 +550,7 @@ soll. Erst dann werden deine Bilder begutachtet und entweder angenommen oder
535
550
  abgelehnt.
536
551
 
537
552
  Site unterstützt Keywords in IPTC-Header: Ja
553
+ Site unterstützt Hoch-/Querformat: Nein
538
554
 
539
555
  h3. zoonar.de
540
556
 
@@ -547,6 +563,7 @@ Mein Shop bei Zoonar ist übrigens unter http://www.zoonar.de/shop/thopre zu
547
563
  zu erreichen. Kauft fleißig bei mir ein! ;-)
548
564
 
549
565
  Site unterstützt Keywords in IPTC-Header: Ja
566
+ Site unterstützt Hoch-/Querformat: Nein
550
567
 
551
568
  h3. photocase.de
552
569
 
@@ -557,9 +574,7 @@ Gimmick bei photocase kannst du bei deinen Photos sehen, an welchem Platz
557
574
  sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.
558
575
 
559
576
  Site unterstützt Keywords in IPTC-Header: ? noch mal nachschauen! TODO:
560
-
561
- <i>Click on the Browse button to search your computer for the photo you’d like to upload. We accept JPG and TIFF files. Please pay close attention to the minimum resolution requirement of 1600x1200 pixels, the image quality (e.g. not overly compressed) and the content of the image itself (e.g. it does not contain any material that you don’t hold the copyright to).
562
- </i>
577
+ Site unterstützt Hoch-/Querformat: Nein
563
578
 
564
579
  h2. Forum
565
580
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multistockphoto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Preymesser
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-13 00:00:00 +02:00
12
+ date: 2008-06-14 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15