picasa-downloader 0.0.1 → 0.0.2

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.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
+ *.gem
1
2
  Gemfile.lock
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # Picasa album downloader
2
+
3
+ [![Build Status](https://secure.travis-ci.org/laurilehmijoki/picasa-downloader.png)]
4
+ (http://travis-ci.org/laurilehmijoki/picasa-downloader)
5
+
6
+ With this tool you can download your Picasa albums.
7
+
8
+ ## Installation
9
+
10
+ (Here we assume that you have Ruby and Ruby Gems installed.)
11
+
12
+ `gem install picasa-downloader`
13
+
14
+ Set your Google credentials as environmental values:
15
+
16
+ `export PICASA_USERNAME="your.gmail.account"`
17
+
18
+ `export PICASA_PASSWORD="yourpass"`
19
+
20
+ ## Usage
21
+
22
+ Download all Picasa albums:
23
+
24
+ `picasa-downloader all`
25
+
26
+ ## Development
27
+
28
+ Run tests:
29
+
30
+ `rake test`
31
+
32
+ ## License
33
+
34
+ MIT
data/TODO.md CHANGED
@@ -1,6 +1,4 @@
1
1
  # TODO
2
2
 
3
- * README.md
4
- * Publish Gem
5
3
  * Persist albums into year directiories
6
4
  * Video download
@@ -4,24 +4,40 @@ module PicasaDownloader
4
4
  @client = client
5
5
  @album = album
6
6
  @download_directory_root = download_directory_root
7
- FileUtils.mkdir_p(get_album_dir)
8
7
  end
9
8
 
10
9
  def download
10
+ FileUtils.mkdir_p(get_temp_album_dir)
11
11
  @client.list_photos(@album.id).each { |photo|
12
12
  photo_data = @client.download_photo(photo)
13
13
  if photo_data
14
- File.open(get_album_dir + photo.name, 'wb') { |file|
14
+ File.open(get_temp_album_dir + photo.name, 'wb') { |file|
15
15
  file.write(photo_data)
16
+ FileUtils.touch(file.path, :mtime => photo.created_date)
16
17
  }
17
18
  end
18
19
  }
20
+ move_to_final_dir
19
21
  end
20
22
 
21
23
  private
22
24
 
23
- def get_album_dir
24
- @download_directory_root + "/#{@album.title}/"
25
+ def move_to_final_dir
26
+ file_modified_years = Dir.entries(get_temp_album_dir).map { |file|
27
+ File.new(get_temp_album_dir + file).mtime.year
28
+ }.reject { |year| year == nil }
29
+ album_min_year = file_modified_years.min
30
+ final_dir = get_final_album_dir_root(album_min_year)
31
+ FileUtils.mkdir_p(final_dir)
32
+ FileUtils.mv(get_temp_album_dir, final_dir)
33
+ end
34
+
35
+ def get_final_album_dir_root(year)
36
+ @download_directory_root + "/#{year}"
37
+ end
38
+
39
+ def get_temp_album_dir
40
+ @download_directory_root + "/.temp/#{@album.title}/"
25
41
  end
26
42
  end
27
43
  end
@@ -22,9 +22,9 @@ module PicasaDownloader
22
22
  Photo.new(
23
23
  e.xpath("group/content/@url").to_s,
24
24
  # Google includes the milliseconds in the timestamp:
25
- e.css("tags time").inner_text.to_i / 1000,
25
+ e.css("timestamp").inner_text.to_i / 1000,
26
26
  e.css("size").inner_text.to_i,
27
- e.css("title").inner_text)
27
+ e.css("title").first.inner_text)
28
28
  }
29
29
  end
30
30
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'picasa-downloader'
3
- s.version = '0.0.1'
3
+ s.version = '0.0.2'
4
4
  s.license = 'MIT'
5
5
  s.summary = 'Download your Google Picasa photo albums'
6
6
  s.description =
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.authors = ['Lauri Lehmijoki']
9
9
  s.email = 'lauri.lehmijoki@iki.fi'
10
10
  s.files = `git ls-files`.split("\n")
11
+ s.test_files = `git ls-files -- {spec,fixtures}/*`.split("\n")
11
12
  s.require_paths = ['lib']
12
13
  s.executables << 'picasa-downloader'
13
14
  s.homepage = 'https://github.com/laurilehmijoki/picasa-downloader'
@@ -21,7 +21,7 @@ module PicasaDownloader
21
21
  with_cassettes {
22
22
  @albums = @client.list_albums
23
23
  AlbumPersister.new(@client, @albums.first, @dir).download
24
- File.exists?(@dir + "/#{@albums.first.title}")
24
+ File.exists?(@dir + "/2012/#{@albums.first.title}").should be true
25
25
  }
26
26
  end
27
27
 
@@ -29,7 +29,7 @@ module PicasaDownloader
29
29
  with_cassettes {
30
30
  @albums = @client.list_albums
31
31
  AlbumPersister.new(@client, @albums.first, @dir).download
32
- Dir.entries(@dir + "/#{@albums.first.title}/").any? { |file|
32
+ Dir.entries(@dir + "/2012/#{@albums.first.title}/").any? { |file|
33
33
  file.downcase.match(/jp(e)?g/)
34
34
  }.should be true
35
35
  }
metadata CHANGED
@@ -1,160 +1,172 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: picasa-downloader
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Lauri Lehmijoki
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-07-18 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: require_all
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: gdata
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: gdata_19
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: require_relative
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: require_relative
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: nokogiri
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: nokogiri
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
74
70
  type: :runtime
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: gli
78
71
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
80
- none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: gli
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
88
86
  type: :runtime
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: rake
92
87
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
102
  type: :runtime
103
- version_requirements: *id006
104
- - !ruby/object:Gem::Dependency
105
- name: rspec
106
103
  prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
108
- none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 3
113
- segments:
114
- - 0
115
- version: "0"
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
116
118
  type: :development
117
- version_requirements: *id007
118
- - !ruby/object:Gem::Dependency
119
- name: vcr
120
119
  prerelease: false
121
- requirement: &id008 !ruby/object:Gem::Requirement
122
- none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- hash: 3
127
- segments:
128
- - 0
129
- version: "0"
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: vcr
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
130
134
  type: :development
131
- version_requirements: *id008
132
- - !ruby/object:Gem::Dependency
133
- name: webmock
134
135
  prerelease: false
135
- requirement: &id009 !ruby/object:Gem::Requirement
136
- none: false
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- hash: 3
141
- segments:
142
- - 0
143
- version: "0"
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: webmock
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
144
150
  type: :development
145
- version_requirements: *id009
146
- description: This Gem makes it convenient to download Picasa albums via command-line interface
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: This Gem makes it convenient to download Picasa albums via command-line
159
+ interface
147
160
  email: lauri.lehmijoki@iki.fi
148
- executables:
161
+ executables:
149
162
  - picasa-downloader
150
163
  extensions: []
151
-
152
164
  extra_rdoc_files: []
153
-
154
- files:
165
+ files:
155
166
  - .gitignore
156
167
  - .travis.yml
157
168
  - Gemfile
169
+ - README.md
158
170
  - Rakefile
159
171
  - TODO.md
160
172
  - bin/picasa-downloader
@@ -175,37 +187,36 @@ files:
175
187
  - spec/env_credentials_spec.rb
176
188
  - spec/test_helper.rb
177
189
  homepage: https://github.com/laurilehmijoki/picasa-downloader
178
- licenses:
190
+ licenses:
179
191
  - MIT
180
192
  post_install_message:
181
193
  rdoc_options: []
182
-
183
- require_paths:
194
+ require_paths:
184
195
  - lib
185
- required_ruby_version: !ruby/object:Gem::Requirement
196
+ required_ruby_version: !ruby/object:Gem::Requirement
186
197
  none: false
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- hash: 3
191
- segments:
192
- - 0
193
- version: "0"
194
- required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
203
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- version: "0"
204
+ requirements:
205
+ - - ! '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
203
208
  requirements: []
204
-
205
209
  rubyforge_project:
206
- rubygems_version: 1.8.13
210
+ rubygems_version: 1.8.24
207
211
  signing_key:
208
212
  specification_version: 3
209
213
  summary: Download your Google Picasa photo albums
210
- test_files: []
211
-
214
+ test_files:
215
+ - fixtures/cassettes/google-login.yml
216
+ - fixtures/cassettes/picasa-album.yml
217
+ - fixtures/cassettes/picasa-albums.yml
218
+ - fixtures/cassettes/picasa-photo.yml
219
+ - spec/album_persister_spec.rb
220
+ - spec/client_spec.rb
221
+ - spec/env_credentials_spec.rb
222
+ - spec/test_helper.rb