in_our_time 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fdf0f4fb7f458ec6f36151a8b43765be9ef5e5fc
4
- data.tar.gz: 12ef0612de0983287a45af693b3124b49e8987a7
3
+ metadata.gz: 95c440df705ea2afb85d4c4ea6caa5fa03b67732
4
+ data.tar.gz: c61b39babdf2dbd70ea44df6656cfb108b829d42
5
5
  SHA512:
6
- metadata.gz: 43ec3359f3ed982d34e8e6c79a6b6aaafd1b70dc22994196691f705aefd33f93b4fe26027d6481132e6ff7702f0832196d662ba2187d639bc4c691a85db51731
7
- data.tar.gz: a651827754058efa7c8bb613bc6965ede3f9b13b914efefc04c696724c2438b612a68869da81792e451392b278c489f0ce03c523ecee8eb5e0e184bb4b1b9971
6
+ metadata.gz: aff9aa5de8973ea63ed168df39bf1e540dd7de222e7fcc4bf4c90551659eb74a17432893ad89aaf8ec6f9b7defcdc79ce5b059e1981d89134ab3d0489ee3f05c
7
+ data.tar.gz: 94d19d14be5efafcdb409b82f5765cc263308aac43052804812ca3df7cce1ce3f97a55caae14d0ca35139c89da2d5c09e576179a24ee8e6dfd41bc06d8f481fd
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ ## In Our Time
2
+
3
+ Select, auto-download, and play **BBC In Our Time** podcasts easily, from the command line [link](http://www.bbc.co.uk/programmes/b006qykl).
4
+
5
+ When played, podcast is archived locally for offline access in the future.
6
+
7
+ Checks regularly for new podcasts and adds to the list.
8
+
9
+ ![compile image](https://raw.githubusercontent.com/mjago/In_Our_Time/master/light_theme.png)
10
+
11
+ ![compile image](https://raw.githubusercontent.com/mjago/In_Our_Time/master/dark_theme.png)
12
+
13
+ ## Installation:
14
+
15
+ ```sh
16
+ gem install in_our_time
17
+ iot
18
+ ```
19
+
20
+ ## Config:
21
+
22
+ Config can be found at '~/.in_our_time/config.yml'
23
+
24
+ ## mp3 player:
25
+
26
+ By default uses **afplay** on **OSX** but can also be configured to use **mpg123**. Use **aplay** on **Linux**.
27
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.1.0
data/dark_theme.png ADDED
Binary file
data/in_our_time.gemspec CHANGED
@@ -19,5 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
21
  spec.add_runtime_dependency 'nokogiri', '>= 1.6.8'
22
+ spec.add_runtime_dependency 'colorize', '>= 0.8.1'
22
23
  spec.add_development_dependency 'version', '>= 1.0.0'
23
24
  end
data/lib/in_our_time.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  require_relative 'iot/iot.rb'
2
- require_relative 'iot/colour_prompt.rb'
3
2
 
4
3
  InOurTime.new
data/lib/iot/iot.rb CHANGED
@@ -5,10 +5,12 @@ require 'net/http'
5
5
  require 'open-uri'
6
6
  require 'yaml'
7
7
  require 'fileutils'
8
+ require 'colorize'
8
9
 
9
10
  class InOurTime
10
- ROOT = File.expand_path '~/'
11
- IN_OUR_TIME = File.join ROOT, '.in_our_time'
11
+
12
+ ROOT = File.expand_path '~/'
13
+ IN_OUR_TIME = File.join ROOT, '.in_our_time'
12
14
  CONFIG = File.join IN_OUR_TIME, 'config.yml'
13
15
  UPDATE_INTERVAL = 604800
14
16
  AUDIO_DIRECTORY = 'audio'
@@ -20,11 +22,14 @@ class InOurTime
20
22
 
21
23
  @arrow = 0
22
24
 
25
+ def reset
26
+ $stdin.flush
27
+ end
28
+
23
29
  def input
24
- sleep 0.001
25
30
  begin
26
31
  system("stty raw -echo")
27
- str = STDIN.getc
32
+ str = $stdin.getc
28
33
  ensure
29
34
  system("stty -raw echo")
30
35
  end
@@ -82,14 +87,14 @@ class InOurTime
82
87
  run
83
88
  end
84
89
 
85
- def iot_print x, role = :default
86
- colour_print(role, x) if @config[:colour]
87
- print(x) unless @config[:colour]
90
+ def iot_print x, col = @text_colour
91
+ print x.colorize col if @config[:colour]
92
+ print x unless @config[:colour]
88
93
  end
89
94
 
90
- def iot_puts x, role = :default
91
- colour_puts(role, x) if @config[:colour]
92
- puts(x) unless @config[:colour]
95
+ def iot_puts x, col = @text_colour
96
+ puts x.colorize col if @config[:colour]
97
+ puts x unless @config[:colour]
93
98
  end
94
99
 
95
100
  def now
@@ -120,7 +125,22 @@ class InOurTime
120
125
  :sort => :age,
121
126
  :show_count => true,
122
127
  :page_height => PAGE_HEIGHT,
123
- :page_width => PAGE_WIDTH
128
+ :page_width => PAGE_WIDTH,
129
+ :colour_theme => :light_theme,
130
+ :light_theme => {
131
+ :selection_colour => {:colour => :magenta, :background => :light_white},
132
+ :count_sel_colour => {:colour => :cyan, :background => :light_white},
133
+ :count_colour => :yellow,
134
+ :text_colour => :default,
135
+ :system_colour => :yellow
136
+ },
137
+ :dark_theme => {
138
+ :selection_colour => {:colour => :light_yellow, :background => :light_black},
139
+ :count_sel_colour => {:colur => :blue, :background => :yellow},
140
+ :count_colour => :yellow,
141
+ :text_colour => :default,
142
+ :system_colour => :yellow
143
+ }
124
144
  }
125
145
  end
126
146
 
@@ -130,6 +150,12 @@ class InOurTime
130
150
  end
131
151
  @config = YAML::load_file(CONFIG)
132
152
  @line_count = @config[:page_height]
153
+ theme = @config[:colour_theme]
154
+ @selection_colour = @config[theme][:selection_colour]
155
+ @count_sel_colour = @config[theme][:count_sel_colour]
156
+ @count_colour = @config[theme][:count_colour]
157
+ @text_colour = @config[theme][:text_colour]
158
+ @system_colour = @config[theme][:system_colour]
133
159
  end
134
160
 
135
161
  def save_config cfg = @config
@@ -176,13 +202,13 @@ class InOurTime
176
202
  case res
177
203
  when Net::HTTPOK
178
204
  File.open(filename_from_title(program[:title]) , 'wb') do |f|
179
- iot_print "writing #{filename_from_title(program[:title])}...", :yellow
205
+ iot_print "writing #{filename_from_title(program[:title])}...", @system_colour
180
206
  f.print(res.body)
181
- iot_puts " written.", :yellow
207
+ iot_puts " written.", @system_colour
182
208
  end
183
209
  program[:have_locally] = true
184
210
  else
185
- iot_puts 'audio download failed. Retrying...', :yellow
211
+ iot_puts 'audio download failed. Retrying...', @system_colour
186
212
  end
187
213
  end
188
214
 
@@ -200,9 +226,9 @@ class InOurTime
200
226
 
201
227
  def check_remote
202
228
  if update_remote?
203
- iot_print "checking rss feeds ", :yellow
229
+ iot_print "checking rss feeds ", @system_colour
204
230
  local_rss.length.times do |count|
205
- print '.'
231
+ iot_print '.', @system_colour
206
232
  fetch_uri rss_addresses[count], rss_files[count]
207
233
  end
208
234
  iot_puts ''
@@ -294,12 +320,12 @@ class InOurTime
294
320
  def run_program prg
295
321
  unless prg[:have_locally]
296
322
  retries = 0
297
- iot_puts "fetching #{prg[:title]}", :yellow
323
+ iot_puts "fetching #{prg[:title]}", @system_colour
298
324
  10.times do
299
325
  res = Net::HTTP.get_response(URI.parse(prg[:link]))
300
326
  case res
301
327
  when Net::HTTPFound
302
- iot_puts 'redirecting...', :yellow
328
+ iot_puts 'redirecting...', @system_colour
303
329
  @doc = Nokogiri::XML(res.body)
304
330
  redirect = @doc.css("body p a").text
305
331
  break if download_audio(prg, redirect)
@@ -326,10 +352,10 @@ class InOurTime
326
352
  def print_playing_maybe
327
353
  iot_puts ''
328
354
  if @playing
329
- iot_puts "Playing '#{@playing}'"
355
+ iot_puts "Playing '#{@playing}'", @selection_colour
330
356
  elsif @started.nil?
331
357
  @started = true
332
- iot_puts "? or h for instructions"
358
+ iot_puts "? or h for instructions", @text_colour
333
359
  else
334
360
  iot_puts ''
335
361
  end
@@ -344,15 +370,16 @@ class InOurTime
344
370
  end
345
371
 
346
372
  def idx_format idx
347
- sprintf("%03d, ", idx + 1)
373
+ sprintf("%03d", idx + 1)
348
374
  end
349
375
 
350
376
  def show_count_maybe idx
351
377
  if have_locally?(@sorted_titles[idx])
352
- iot_print idx_format(idx), :cyan if @config[:show_count]
378
+ iot_print idx_format(idx), @count_sel_colour if @config[:show_count]
353
379
  else
354
- iot_print idx_format(idx), :yellow if @config[:show_count]
380
+ iot_print idx_format(idx), @count_colour if @config[:show_count]
355
381
  end
382
+ iot_print ' '
356
383
  end
357
384
 
358
385
  def draw_page
@@ -361,16 +388,16 @@ class InOurTime
361
388
  if idx < @sorted_titles.length
362
389
  iot_print "> " if(idx == @selected) unless @config[:colour]
363
390
  show_count_maybe idx
364
- iot_puts @sorted_titles[idx], :purple if (idx == @selected)
365
- iot_puts @sorted_titles[idx], :default unless(idx == @selected)
391
+ iot_puts @sorted_titles[idx], @selection_colour if (idx == @selected)
392
+ iot_puts @sorted_titles[idx], @text_colour unless(idx == @selected)
366
393
  end
367
394
  end
368
395
  else
369
396
  @line_count = 0
370
397
  0.upto(@config[:page_height] - 1) do |idx|
371
- iot_print "> " if(idx == @selected)
398
+ iot_print "> ", @selection_colour if(idx == @selected)
372
399
  show_count_maybe(idx) unless @sorted_titles[idx].nil?
373
- iot_puts @sorted_titles[idx] unless @sorted_titles[idx].nil?
400
+ iot_puts @sorted_titles[idx], @text_colour unless @sorted_titles[idx].nil?
374
401
  end
375
402
  end
376
403
  @line_count += @config[:page_height]
@@ -458,10 +485,10 @@ class InOurTime
458
485
 
459
486
  def info
460
487
  if @info.nil?
488
+ prg = select_program @sorted_titles[@selected]
461
489
  system 'clear'
462
490
  iot_puts ''
463
- prg = select_program @sorted_titles[@selected]
464
- iot_puts justify(prg[:subtitle].gsub(/\s+/, ' '))
491
+ justify(prg[:subtitle].gsub(/\s+/, ' ')).map{|x| iot_puts x}
465
492
  iot_puts ''
466
493
  iot_puts "Date Broadcast: #{prg[:date]}"
467
494
  iot_puts "Duration: #{prg[:duration].to_i/60} mins"
@@ -469,11 +496,11 @@ class InOurTime
469
496
  (prg[:have_locally] ? "Downloaded" : "Requires Download")
470
497
  @info = 1
471
498
  elsif @info == 1
472
- system 'clear'
473
- iot_puts ''
474
499
  prg = select_program @sorted_titles[@selected]
475
500
  info = prg[:summary].gsub(/\s+/, ' ')
476
- iot_puts justify(reformat(info))
501
+ system 'clear'
502
+ iot_puts ''
503
+ justify(reformat(info)).map{|x| iot_puts x}
477
504
  @info = -1
478
505
  else
479
506
  display_list :same_page
@@ -482,53 +509,58 @@ class InOurTime
482
509
  end
483
510
 
484
511
  def run
512
+ action = :unknown
485
513
  display_list :same_page
486
514
  key = KeyboardEvents.new
487
515
  loop do
516
+ unless action == :unknown
517
+ key.reset
518
+ end
519
+
488
520
  ip = key.input
489
521
  @info = nil unless ip == :info
490
522
  @help = nil unless ip == :help
491
523
 
492
- case ip
493
- when :list
494
- @line_count = 0
495
- @selected = 0
496
- display_list :draw_page
497
- when :page_forward
498
- @selected = @line_count
499
- display_list :draw_page
500
- when :previous
501
- @selected -= 1 if @selected > 0
502
- if @selected >= @line_count -
503
- @config[:page_height]
504
- display_list :same_page
505
- else
506
- display_list :previous_page
507
- end
508
- when :next
509
- @selected += 1
510
- if @selected <= @line_count - 1
511
- display_list :same_page
512
- else
524
+ action =
525
+ case ip
526
+ when :list
527
+ @line_count = 0
528
+ @selected = 0
529
+ display_list :draw_page
530
+ when :page_forward
531
+ @selected = @line_count
513
532
  display_list :draw_page
533
+ when :previous
534
+ @selected -= 1 if @selected > 0
535
+ if @selected >= @line_count -
536
+ @config[:page_height]
537
+ display_list :same_page
538
+ else
539
+ display_list :previous_page
540
+ end
541
+ when :next
542
+ @selected += 1
543
+ if @selected <= @line_count - 1
544
+ display_list :same_page
545
+ else
546
+ display_list :draw_page
547
+ end
548
+ when :play
549
+ kill_audio
550
+ title = @sorted_titles[@selected]
551
+ pr = select_program title
552
+ run_program pr
553
+ display_list :same_page
554
+ when :stop
555
+ kill_audio
556
+ when :info
557
+ info
558
+ when :help
559
+ help
560
+ when :quit
561
+ kill_audio
562
+ exit 0
514
563
  end
515
- when :play
516
- kill_audio
517
- title = @sorted_titles[@selected]
518
- pr = select_program title
519
- run_program pr
520
- display_list :same_page
521
- when :stop
522
- kill_audio
523
- when :info
524
- info
525
- when :help
526
- help
527
- when :quit
528
- kill_audio
529
- exit 0
530
- end
531
- sleep 0.001
532
564
  end
533
565
  end
534
566
  end
data/light_theme.png ADDED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: in_our_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martyn Jago
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.6.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: version
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -48,13 +62,15 @@ extra_rdoc_files: []
48
62
  files:
49
63
  - ".gitignore"
50
64
  - Gemfile
65
+ - README.md
51
66
  - Rakefile
52
67
  - VERSION
53
68
  - bin/iot
69
+ - dark_theme.png
54
70
  - in_our_time.gemspec
55
71
  - lib/in_our_time.rb
56
- - lib/iot/colour_prompt.rb
57
72
  - lib/iot/iot.rb
73
+ - light_theme.png
58
74
  homepage: https://github.com/mjago/In_Our_Time
59
75
  licenses:
60
76
  - MIT
@@ -1,129 +0,0 @@
1
- # ==========================================
2
- # Unity Project - A Test Framework for C
3
- # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4
- # [Released under MIT License. Please refer to license.txt for details]
5
- # ==========================================
6
-
7
- if RUBY_PLATFORM =~/(win|w)32$/
8
- begin
9
- require 'Win32API'
10
- rescue LoadError
11
- puts "ERROR! \"Win32API\" library not found"
12
- puts "\"Win32API\" is required for colour on a windows machine"
13
- puts " try => \"gem install Win32API\" on the command line"
14
- puts
15
- end
16
- # puts
17
- # puts 'Windows Environment Detected...'
18
- # puts 'Win32API Library Found.'
19
- # puts
20
- end
21
-
22
- class ColourCommandLine
23
- def initialize
24
- if RUBY_PLATFORM =~/(win|w)32$/
25
- get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L')
26
- @set_console_txt_attrb =
27
- Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I')
28
- @hout = get_std_handle.call(-11)
29
- end
30
- end
31
-
32
- def change_to(new_colour)
33
- if RUBY_PLATFORM =~/(win|w)32$/
34
- @set_console_txt_attrb.call(@hout,self.win32_colour(new_colour))
35
- else
36
- "\033[30;#{posix_colour(new_colour)};22m"
37
- end
38
- end
39
-
40
- def win32_colour(colour)
41
- case colour
42
- when :black then 0
43
- when :dark_blue then 1
44
- when :dark_green then 2
45
- when :dark_cyan then 3
46
- when :dark_red then 4
47
- when :dark_purple then 5
48
- when :dark_yellow, :narrative then 6
49
- when :default_white, :default, :dark_white then 7
50
- when :silver then 8
51
- when :blue then 9
52
- when :green, :success then 10
53
- when :cyan, :output then 11
54
- when :red, :failure then 12
55
- when :purple then 13
56
- when :yellow then 14
57
- when :white then 15
58
- else
59
- 0
60
- end
61
- end
62
-
63
- def posix_colour(colour)
64
- # ANSI Escape Codes - Foreground colors
65
- # | Code | Color |
66
- # | 39 | Default foreground color |
67
- # | 30 | Black |
68
- # | 31 | Red |
69
- # | 32 | Green |
70
- # | 33 | Yellow |
71
- # | 34 | Blue |
72
- # | 35 | Magenta |
73
- # | 36 | Cyan |
74
- # | 37 | Light gray |
75
- # | 90 | Dark gray |
76
- # | 91 | Light red |
77
- # | 92 | Light green |
78
- # | 93 | Light yellow |
79
- # | 94 | Light blue |
80
- # | 95 | Light magenta |
81
- # | 96 | Light cyan |
82
- # | 97 | White |
83
-
84
- case colour
85
- when :black then 30
86
- when :red, :failure then 31
87
- when :green, :success then 32
88
- when :yellow then 33
89
- when :blue, :narrative then 34
90
- when :purple, :magenta then 35
91
- when :cyan, :output then 36
92
- when :white, :default_white then 37
93
- when :default then 39
94
- when :dark_gray then 90 # Dark gray
95
- when :light_red then 91 # Light red
96
- when :light_green then 92 # Light green
97
- when :light_yellow then 93 # Light yellow
98
- when :light_blue then 94 # Light blue
99
- when :light_magenta then 95 # Light magenta
100
- when :light_cyan then 96 # Light cyan
101
- when :White then 97 # White
102
-
103
- else
104
- 39
105
- end
106
- end
107
-
108
- def out_c(mode, colour, str, out = :stdout)
109
- buf = case out
110
- when :stdout
111
- $stdout
112
- else
113
- out = out
114
- end
115
- case RUBY_PLATFORM
116
- when /(win|w)32$/
117
- change_to(colour)
118
- buf.puts str if mode == :puts
119
- buf.print str if mode == :print
120
- change_to(:default_white)
121
- else
122
- buf.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts
123
- $stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
124
- end
125
- end
126
- end # ColourCommandLine
127
-
128
- def colour_puts(role,str, out = :stdout) ColourCommandLine.new.out_c(:puts, role, str, out) end
129
- def colour_print(role,str, out = :stdout) ColourCommandLine.new.out_c(:print, role, str, out) end