flickpaper 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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