xiami_radio 1.1.6 → 1.1.8

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: 45ddcbcc63e20f9f3999029050af23a8d67c60df
4
- data.tar.gz: 3a463ade0be3eaca266432247e2b8225c0821713
3
+ metadata.gz: 50ddba85c070fa7c7fd7b01f709dc8db3b3b752d
4
+ data.tar.gz: bd290dc2f4f2a9ffa6548836532ea253c1ffb8d8
5
5
  SHA512:
6
- metadata.gz: 726ba0bc37a2c6d153f63afbab77bbadbf4e8637935a33f7c1f099ab3b023f3c657937f53566f4e647989f6b003aca6c9915d7e457964bf7dd665bb84d4fb6cd
7
- data.tar.gz: bce25a48033c93f47242d7931f2b236ba5e384083ae81fd1e4c5058a5f014156fd0a151688df308e9563e34d2ab50db7e620fa7abba7d9e601607d9fb5bd7c79
6
+ metadata.gz: e92935f1f4f3e04b05f2a2779b62bc71b2f6975e5cf331b7b86a56dff48731a9237084c60b837af13d7522026b0563de6355a259e178389f5dca8b75e5d513ef
7
+ data.tar.gz: cd9685770691fd5ec0fa9ff7012e46d447629fc43e2045e58ddc2baa6377c9b008e65df9c36ab4ae31629e9156bca6fd86ca8e7bed46a033a0fb03a7136d0b3b
data/README.md CHANGED
@@ -30,6 +30,19 @@ and then
30
30
  $ xiaomi_radio
31
31
  ```
32
32
 
33
+ you can also pass `-d` to make it run in background
34
+
35
+ ```
36
+ # run xiaomi_radio in background
37
+ $ xiaomi_radio -d
38
+
39
+ # play next song
40
+ $ xiaomi_radio next
41
+
42
+ # stop
43
+ $ xiaomi_radio stop
44
+ ```
45
+
33
46
  Enjoy yourself ~
34
47
 
35
48
  ## Requirements
data/bin/xiami_radio CHANGED
@@ -3,36 +3,74 @@
3
3
 
4
4
  require 'xiami_radio'
5
5
  require 'io/console'
6
+ require 'daemons'
7
+
8
+ daemons_opts = {
9
+ app_name: 'xiami_radio',
10
+ dir_mode: :normal,
11
+ dir: XiamiRadio::TMP_DIR,
12
+ log_output: XiamiRadio.debug?,
13
+ output_logfilename: '辛'
14
+ }
15
+
16
+ def send_next_signal(app)
17
+ Process.kill :SIGUSR1, app.pid.pid
18
+ end
19
+
20
+ case ARGV[0]
21
+ when 'stop', 'status'
22
+ Daemons.run_proc 'xiami_radio', daemons_opts
23
+ exit
24
+ when 'next'
25
+ Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['status'], show_status_callback: :send_next_signal)
26
+ exit
27
+ end
28
+
29
+
30
+ args = ARGV.select { |arg| /^[a-zA-Z]+=.+/ === arg }.inject({}) do |res, arg|
31
+ k, v = arg.split("=")
32
+ res.merge k.to_sym => v
33
+ end
34
+ original_argv = ARGV.dup
35
+ ARGV.clear
6
36
 
7
37
  user = XiamiRadio::User.instance
38
+ unless user.login?
39
+ email, pwd = args[:email].to_s, args[:pwd].to_s
40
+ if email.empty? || pwd.to_s.empty?
41
+ puts 'Plz keep empty if you don\'t want to login'
42
+ print 'Email: '
43
+ email = gets.chomp.to_s
44
+ pwd = unless email.empty?
45
+ print 'Password: '
46
+ STDIN.noecho(&:gets).chomp
47
+ end.to_s
48
+ end
49
+ user.login_by_email(email, pwd) unless email.to_s.empty? || pwd.to_s.empty?
50
+ end
51
+
52
+ if args[:type].to_s.empty? || args[:oid].to_s.empty?
53
+ puts 'Which radio do you want to listen?'
54
+ puts '1/Enter - 虾米猜 2 - 个人电台 3 - 其他'
55
+ case gets.chomp[0]
56
+ when '2'
57
+ radio_type, radio_oid = user.login? ? [4, user.user_id] : [8, 0]
58
+ when '3'
59
+ print 'type: '
60
+ radio_type = gets.chomp.to_i
61
+ print 'oid: '
62
+ radio_oid = gets.chomp.to_i
63
+ else
64
+ radio_type, radio_oid = 8, 0
65
+ end
66
+ else
67
+ radio_type, radio_oid = args[:type].to_i, args[:oid].to_i
68
+ end
8
69
 
9
- email = unless user.login?
10
- puts 'Plz keep empty if you don\'t want to login'
11
- print 'Email: '
12
- gets.chomp
13
- end.to_s
14
- pwd = unless user.login? || email.empty?
15
- print 'Password: '
16
- STDIN.noecho(&:gets).chomp
17
- end.to_s
18
- user.login_by_email email, pwd unless email.empty? || pwd.empty?
19
-
20
- puts 'Which radio do you want to listen?'
21
- puts '1/Enter - 虾米猜 2 - 个人电台 3 - 其他'
22
-
23
- radio_option = case gets.chomp[0]
24
- when nil
25
- {type: 8, oid: 0}
26
- when '1'
27
- {type: 8, oid: 0}
28
- when '2'
29
- user.login? ? {type: 4, oid: user.user_id} : {type: 8, oid: 0}
30
- else
31
- print 'type: '
32
- type = gets.chomp[0]
33
- print 'oid: '
34
- oid = gets.chomp
35
- {type: (type || 8).to_i, oid: oid.to_i}
36
- end
37
-
38
- XiamiRadio::Player.play XiamiRadio::Radio.new(radio_option)
70
+ if original_argv.include? '-d'
71
+ Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['start']) do
72
+ XiamiRadio::Player.play XiamiRadio::Radio.new(type: radio_type, oid: radio_oid)
73
+ end
74
+ else
75
+ XiamiRadio::Player.play XiamiRadio::Radio.new(type: radio_type, oid: radio_oid)
76
+ end
data/lib/xiami_radio.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'xiami_radio/client'
2
2
  require 'xiami_radio/downloader'
3
3
  require 'xiami_radio/notice'
4
- require 'xiami_radio/player'
4
+ # require 'xiami_radio/player'
5
5
  require 'xiami_radio/radio'
6
6
  require 'xiami_radio/track'
7
7
  require 'xiami_radio/user'
@@ -11,6 +11,8 @@ require 'tmpdir'
11
11
  require 'logger'
12
12
 
13
13
  module XiamiRadio
14
+ autoload :Player, 'xiami_radio/player'
15
+
14
16
  TMP_DIR = File.join(Dir.tmpdir, 'xiami_radio').freeze
15
17
  DEBUG = false
16
18
 
@@ -14,6 +14,8 @@ module XiamiRadio
14
14
  @player.events.on :position_change, &method(:position_change)
15
15
  @player.events.on :complete, &method(:complete)
16
16
  @view.listen_on self
17
+
18
+ trap(:SIGUSR1) { self.next }
17
19
  end
18
20
 
19
21
  def play
@@ -1,5 +1,5 @@
1
1
  module XiamiRadio
2
2
 
3
- VERSION = '1.1.6'
3
+ VERSION = '1.1.8'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xiami_radio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Chou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-20 00:00:00.000000000 Z
11
+ date: 2018-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: audite
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: daemons
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.2'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: byebug
71
85
  requirement: !ruby/object:Gem::Requirement