flickpaper 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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/flickpaper.rb +77 -34
  3. data/version +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9deac4e1943d13926359e4889df91d14a7276c1
4
- data.tar.gz: 6e05ee5e5a2d17e8914bc807bd2954be819f2726
3
+ metadata.gz: 0b82140cd93717729460dbd662f37d9c26014e19
4
+ data.tar.gz: 2ad72a3424f3c4957cbddc4f6400d1706ff25210
5
5
  SHA512:
6
- metadata.gz: 66baa9e9f1ded8e026a0ac4b2a0afd443cd5a6aab5d85851ea727d09da5c6210fc55cf90340fc108376625c219eec313f8c3f4cb1a65c515e89cae6143cb21b4
7
- data.tar.gz: faa29407851cd513bd0a45e6a0e4e4d7097618296c6fbe1bb394d9809a8b3bd4f8919db0d7dd851487503d04a9a6ee3eb767fcfd60494c3c99a85370191b74f1
6
+ metadata.gz: 2347aa154ab92ceea8eac4b4ef1d206ed8a087d87a5f44d549a9259b2055a1fe3681b9b555c9056ab68d1f7bb45fece6f6a2409bd25e87090e5f725618f32f07
7
+ data.tar.gz: e5d00b9323457841f0c9a0926b648089ece01c2796cc198cf395664d063653e38dee48b6a4daaa8f2bf9138266067735c9fa6731172862b91b8bb4b85e89e417
data/lib/flickpaper.rb CHANGED
@@ -1,8 +1,10 @@
1
- require "flickpaper/version"
1
+ require 'flickpaper/version'
2
2
 
3
3
  require 'flickraw'
4
4
  require 'optparse'
5
5
  require 'open-uri'
6
+ require 'rbconfig'
7
+ require 'logger'
6
8
 
7
9
  module Flickpaper
8
10
  API_KEY = '23005d9cf8cc185c1c2d17152d03d98b'
@@ -16,7 +18,8 @@ module Flickpaper
16
18
  def self.parse_opts(opts)
17
19
  options = {
18
20
  dump: File.join(ENV['HOME'], '.flickpaper.dump'),
19
- image: File.join(ENV['HOME'], '.flickpaper.jpg')
21
+ image: File.join(ENV['HOME'], '.flickpaper.jpg'),
22
+ log: nil
20
23
  }
21
24
  opt_parser = OptionParser.new do |opts|
22
25
  opts.banner = "Usage: $ #{File.basename($0)} [options]"
@@ -26,12 +29,15 @@ module Flickpaper
26
29
  opts.on('-i', '--image [PATH]', "Where to store the downloaded image. Default: #{options[:image]}") do |image|
27
30
  options[:image] = image
28
31
  end
32
+ opts.on('-l', '--log [PATH]', "Path to log file. Default: STDOUT") do |log|
33
+ options[:log] = log
34
+ end
29
35
  opts.on('-v', '--verbose', 'Verbose') do |verbose|
30
36
  options[:verbose] = verbose
31
37
  end
32
38
  opts.on_tail("--version", "Show version") do
33
- puts Flickpaper::VERSION.map(&:to_s).join('.')
34
- exit
39
+ puts Flickpaper::VERSION
40
+ exit 0
35
41
  end
36
42
  end
37
43
  opt_parser.parse!(opts)
@@ -62,17 +68,6 @@ module Flickpaper
62
68
  end
63
69
  end
64
70
 
65
- def self.sort_infos(infos)
66
- sort_vals = infos.inject({}) do |sort_vals, info|
67
- sort_vals[info['id']] = (info['views'].to_f ** 0.5) * (info['comments'].to_f ** 0.5)
68
- sort_vals
69
- end
70
-
71
- infos.sort do |x,y|
72
- sort_vals[y['id']] <=> sort_vals[x['id']]
73
- end
74
- end
75
-
76
71
  def self.save_file(url, dst)
77
72
  File.open(dst, 'wb') do |saved_file|
78
73
  open(url, 'rb') do |read_file|
@@ -81,19 +76,60 @@ module Flickpaper
81
76
  end
82
77
  end
83
78
 
79
+ def self.os
80
+ host_os = RbConfig::CONFIG['host_os']
81
+ case host_os
82
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
83
+ :windows
84
+ when /darwin|mac os/
85
+ :macosx
86
+ when /linux/
87
+ :linux
88
+ when /solaris|bsd/
89
+ :unix
90
+ end
91
+ end
92
+
84
93
  def self.set_wallpaper(path)
85
- bash = <<-EOBASH
86
- sessionfile=`find "${HOME}/.dbus/session-bus/" -type f`
87
- eval `cat ${sessionfile}`
88
- export DBUS_SESSION_BUS_ADDRESS \
89
- DBUS_SESSION_BUS_PID \
90
- DBUS_SESSION_BUS_WINDOWID
94
+ case os
95
+ when :windows
96
+ false
97
+ when :macosx
98
+ set_wallpaper_macosx(path)
99
+ when :linux, :unix
100
+ set_wallpaper_linux(path)
101
+ else
102
+ false
103
+ end
104
+ end
91
105
 
92
- gsettings set org.gnome.desktop.background picture-uri "file://#{path}"
106
+ def self.set_wallpaper_macosx(path)
107
+ bash = <<-EOBASH
108
+ tell application "Finder"
109
+ set desktop picture to POSIX file "#{path}"
110
+ end tell
93
111
  EOBASH
94
112
  system(bash)
95
113
  end
96
114
 
115
+ def self.set_wallpaper_linux(path)
116
+ dbus_launch = %w{ which dbus-launch }.to_s.strip
117
+ if dbus_launch != ""
118
+ # http://dbus.freedesktop.org/doc/dbus-launch.1.html
119
+ bash = <<-EOBASH
120
+ if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
121
+ # if not found, launch a new one
122
+ eval `dbus-launch --sh-syntax`
123
+ fi
124
+
125
+ gsettings set org.gnome.desktop.background picture-uri "file://#{path}"
126
+ EOBASH
127
+ system(bash)
128
+ else
129
+ false
130
+ end
131
+ end
132
+
97
133
  def self.get_ids(file)
98
134
  File.file?(file) ? Marshal.load(File.read(file)) : []
99
135
  end
@@ -105,22 +141,23 @@ module Flickpaper
105
141
 
106
142
  def self.run!
107
143
  arguments, options = Flickpaper.parse_opts(ARGV.dup)
144
+ log = Logger.new(options[:log] ? options[:log] : STDOUT)
145
+ log.level = options[:verbose] ? Logger::INFO : Logger::ERROR
146
+
108
147
  Flickpaper.init
109
148
 
110
- list = Flickpaper.interesting
149
+ log.info("Getting interesting list")
150
+ list = Flickpaper.interesting(per_page: 25)
111
151
  ids = Flickpaper.get_ids(options[:dump])
112
152
  list = list.select { |l| !ids.include?(l['id']) }
113
- infos = Flickpaper.sort_infos(Flickpaper.infos(list))
114
- sorted_list = infos.map do |info|
115
- list.detect { |photo| photo['id'] == info['id'] }
116
- end
117
- sizes = Flickpaper.sizes(sorted_list)
118
153
 
119
154
  idx = nil
120
155
  url = nil
121
156
 
122
- (0...(sizes.length)).each do |i|
123
- if my_size = sizes[i].detect { |s| s['label'] == "Large 2048" }
157
+ log.info("Selecting large photo")
158
+ (0...(list.length)).each do |i|
159
+ size = flickr.photos.getSizes(photo_id: list[i]['id'])
160
+ if my_size = size.detect { |s| s['label'] == "Large 2048" }
124
161
  idx = i
125
162
  url = my_size['source']
126
163
  break
@@ -128,12 +165,18 @@ module Flickpaper
128
165
  end
129
166
 
130
167
  if idx
131
- my_photo = sorted_list[idx]
132
- my_info = infos[idx]
168
+ my_photo = list[idx]
133
169
 
134
170
  Flickpaper.save_file(url, options[:image])
135
- Flickpaper.set_wallpaper(options[:image])
136
- Flickpaper.put_ids(options[:dump], ids<<my_photo['id'])
171
+ result = Flickpaper.set_wallpaper(options[:image])
172
+ if result
173
+ log.info("Set photo #{my_photo['id']} as wallpaper")
174
+ Flickpaper.put_ids(options[:dump], ids<<my_photo['id'])
175
+ else
176
+ log.error("Unable to set photo #{my_photo['id']} as wallpaper")
177
+ end
178
+ else
179
+ log.error("Unable to find photo for wallpaper")
137
180
  end
138
181
  end
139
182
  end
data/version CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flickpaper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Tongen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-02 00:00:00.000000000 Z
11
+ date: 2015-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler