xiami_radio 1.1.10 → 1.1.11
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.
- checksums.yaml +4 -4
- data/bin/xiami_radio +25 -7
- data/lib/xiami_radio.rb +8 -7
- data/lib/xiami_radio/downloader.rb +2 -2
- data/lib/xiami_radio/player.rb +11 -7
- data/lib/xiami_radio/radio.rb +1 -2
- data/lib/xiami_radio/track.rb +11 -7
- data/lib/xiami_radio/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c80df547afbbfc2284323017626b157e353bddeb015ba83a473d0e5cd9fc3336
|
|
4
|
+
data.tar.gz: 7875216b5308b02065d7c7b7f1c115234bc1f980a13f71155e647adf793a0941
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f789017ef89a92681a64a07b6a8bcb95188b3acc36ef12acb2a5ae6e762b21c2012f1f09626833bc4aaf795849a66d8d8f8ff862941ffb2602532660f4b54b4e
|
|
7
|
+
data.tar.gz: 73ef890cbb1ffeced6dada265b642853609f4039f650763cc6f378b6c6b62c3ae24d1b1b847c58550be1f507d493db1803c6d5921acc1b0bce5925057de4a1e3
|
data/bin/xiami_radio
CHANGED
|
@@ -5,6 +5,8 @@ require 'xiami_radio'
|
|
|
5
5
|
require 'io/console'
|
|
6
6
|
require 'daemons'
|
|
7
7
|
|
|
8
|
+
XiamiRadio.init
|
|
9
|
+
|
|
8
10
|
daemons_opts = {
|
|
9
11
|
app_name: 'xiami_radio',
|
|
10
12
|
dir_mode: :normal,
|
|
@@ -17,15 +19,24 @@ def send_next_signal(app)
|
|
|
17
19
|
Process.kill :SIGUSR1, app.pid.pid
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['status'], show_status_callback: :send_next_signal)
|
|
26
|
-
exit
|
|
22
|
+
def send_which_signal(app)
|
|
23
|
+
File.delete XiamiRadio.track_info_swap
|
|
24
|
+
Process.kill :SIGUSR2, app.pid.pid
|
|
25
|
+
sleep 0.1
|
|
26
|
+
puts File.read XiamiRadio.track_info_swap
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
if ARGV[0] == '-s'
|
|
30
|
+
case ARGV[1]
|
|
31
|
+
when 'stop', 'status'
|
|
32
|
+
Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ARGV[1..-1])
|
|
33
|
+
when 'next'
|
|
34
|
+
Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['status'], show_status_callback: :send_next_signal)
|
|
35
|
+
when 'name', 'which', 'what'
|
|
36
|
+
Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['status'], show_status_callback: :send_which_signal)
|
|
37
|
+
end
|
|
38
|
+
exit
|
|
39
|
+
end
|
|
29
40
|
|
|
30
41
|
args = ARGV.select { |arg| /^[a-zA-Z]+=.+/ === arg }.inject({}) do |res, arg|
|
|
31
42
|
k, v = arg.split("=")
|
|
@@ -68,7 +79,14 @@ else
|
|
|
68
79
|
end
|
|
69
80
|
|
|
70
81
|
if original_argv.include? '-d'
|
|
82
|
+
if RUBY_PLATFORM.include?('x86_64-darwin') && ENV['OBJC_DISABLE_INITIALIZE_FORK_SAFETY'] != 'YES'
|
|
83
|
+
puts "Plz setup OBJC_DISABLE_INITIALIZE_FORK_SAFETY firstly:"
|
|
84
|
+
puts " export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES"
|
|
85
|
+
return
|
|
86
|
+
end
|
|
87
|
+
|
|
71
88
|
Daemons.run_proc 'xiami_radio', daemons_opts.merge(ARGV: ['start']) do
|
|
89
|
+
XiamiRadio.init
|
|
72
90
|
XiamiRadio::Player.play XiamiRadio::Radio.new(type: radio_type, oid: radio_oid)
|
|
73
91
|
end
|
|
74
92
|
else
|
data/lib/xiami_radio.rb
CHANGED
|
@@ -19,24 +19,25 @@ module XiamiRadio
|
|
|
19
19
|
Thread.abort_on_exception = true
|
|
20
20
|
|
|
21
21
|
class << self
|
|
22
|
+
attr_reader :logger
|
|
23
|
+
|
|
22
24
|
def init
|
|
23
25
|
mktmpdir
|
|
24
26
|
$stderr.reopen File.join(TMP_DIR, '戊'), 'w'
|
|
25
|
-
logger
|
|
27
|
+
@logger = Logger.new File.join(TMP_DIR, '戊')
|
|
28
|
+
logger.level = debug? ? :debug : :info
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
def mktmpdir
|
|
29
32
|
Dir.mkdir TMP_DIR, 0700 unless Dir.exist? TMP_DIR
|
|
30
33
|
end
|
|
31
34
|
|
|
32
|
-
def logger
|
|
33
|
-
@logger ||= Logger.new File.join(TMP_DIR, '戊')
|
|
34
|
-
end
|
|
35
|
-
|
|
36
35
|
def debug?
|
|
37
36
|
%w(1 true on).include? ENV.fetch('DEBUG', DEBUG)
|
|
38
37
|
end
|
|
38
|
+
|
|
39
|
+
def track_info_swap
|
|
40
|
+
File.join(XiamiRadio::TMP_DIR, '庚')
|
|
41
|
+
end
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
|
-
|
|
42
|
-
XiamiRadio.init
|
|
@@ -41,7 +41,7 @@ module XiamiRadio
|
|
|
41
41
|
if res.code == '302'
|
|
42
42
|
request URI(res.header['Location'])
|
|
43
43
|
else
|
|
44
|
-
XiamiRadio.logger.
|
|
44
|
+
XiamiRadio.logger.info "#{@track.title} download start"
|
|
45
45
|
@progress, @total = 0, res.header['Content-Length'].to_i
|
|
46
46
|
@file = File.open(filename, 'w')
|
|
47
47
|
res.read_body do |chunk|
|
|
@@ -51,7 +51,7 @@ module XiamiRadio
|
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
|
-
XiamiRadio.logger.
|
|
54
|
+
XiamiRadio.logger.info "#{@track.title} download completed"
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
data/lib/xiami_radio/player.rb
CHANGED
|
@@ -16,6 +16,11 @@ module XiamiRadio
|
|
|
16
16
|
@view.listen_on self
|
|
17
17
|
|
|
18
18
|
trap(:SIGUSR1) { self.next }
|
|
19
|
+
trap(:SIGUSR2) do
|
|
20
|
+
File.open(XiamiRadio.track_info_swap, 'w') do |f|
|
|
21
|
+
f.puts "#{self.track.title} - #{self.track.artist} - #{self.track.album_name}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
def play
|
|
@@ -28,7 +33,7 @@ module XiamiRadio
|
|
|
28
33
|
|
|
29
34
|
def next
|
|
30
35
|
@track.downloader.stop
|
|
31
|
-
if
|
|
36
|
+
if preloading?
|
|
32
37
|
@track, @next_track = @next_track, nil
|
|
33
38
|
else
|
|
34
39
|
@track = @radio.next_track
|
|
@@ -54,9 +59,9 @@ module XiamiRadio
|
|
|
54
59
|
def position_change(position)
|
|
55
60
|
@view.refresh @track, position
|
|
56
61
|
|
|
57
|
-
@track.record position.to_i if (120.0..
|
|
62
|
+
@track.record position.to_i if (120.0..123.0).include? position
|
|
58
63
|
|
|
59
|
-
if !
|
|
64
|
+
if !preloading? && position / @track.duration > 0.8
|
|
60
65
|
@preloader = Thread.start do
|
|
61
66
|
@next_track = @radio.next_track
|
|
62
67
|
@player.queue @next_track.file_path
|
|
@@ -65,13 +70,12 @@ module XiamiRadio
|
|
|
65
70
|
end
|
|
66
71
|
|
|
67
72
|
def complete
|
|
68
|
-
@track, @next_track = @next_track, nil
|
|
69
73
|
@track.record
|
|
74
|
+
@track, @next_track = @next_track, nil
|
|
70
75
|
end
|
|
71
76
|
|
|
72
|
-
def
|
|
73
|
-
|
|
74
|
-
!@preloader.nil? && @preloader.alive?
|
|
77
|
+
def preloading?
|
|
78
|
+
!@next_track.nil? || @preloader&.alive?
|
|
75
79
|
end
|
|
76
80
|
|
|
77
81
|
def self.play(radio)
|
data/lib/xiami_radio/radio.rb
CHANGED
|
@@ -6,13 +6,12 @@ module XiamiRadio
|
|
|
6
6
|
|
|
7
7
|
XIAMI_CAI = {type: 8, oid: 0}.freeze
|
|
8
8
|
|
|
9
|
-
attr_reader :type, :oid, :
|
|
9
|
+
attr_reader :type, :oid, :play_queue, :client
|
|
10
10
|
|
|
11
11
|
def initialize(type:, oid:)
|
|
12
12
|
@type = type
|
|
13
13
|
@oid = oid
|
|
14
14
|
@client = Client.new user: User.instance
|
|
15
|
-
@nori = Nori.new(:convert_tags_to => -> (tag) { tag.snakecase.to_sym })
|
|
16
15
|
@play_queue = []
|
|
17
16
|
end
|
|
18
17
|
|
data/lib/xiami_radio/track.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module XiamiRadio
|
|
2
2
|
class Track
|
|
3
3
|
attr_reader :info, :title, :song_id, :album_name, :artist, :radio, :client
|
|
4
|
+
attr_accessor :recorded
|
|
4
5
|
|
|
5
6
|
def initialize(track, radio:)
|
|
6
7
|
@info = track
|
|
@@ -43,13 +44,16 @@ module XiamiRadio
|
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
def record(point = 1)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
@recorded ||= begin
|
|
48
|
+
Thread.start do
|
|
49
|
+
client.init_http
|
|
50
|
+
uri = client.uri path: '/count/playrecord', query: URI.encode_www_form(
|
|
51
|
+
sid: song_id, type:10, start_point: point, _xiamitoken: client.user.xiami_token
|
|
52
|
+
)
|
|
53
|
+
client.get(uri, headers: radio.headers_referer, format: :xhtml)
|
|
54
|
+
XiamiRadio.logger.info "#{title} record completed"
|
|
55
|
+
true
|
|
56
|
+
end
|
|
53
57
|
end
|
|
54
58
|
end
|
|
55
59
|
|
data/lib/xiami_radio/version.rb
CHANGED
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.
|
|
4
|
+
version: 1.1.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ivan Chou
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-01-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: audite
|