mikeplayer 1.1.0 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 121090e98631767a7c640e074f662732b39c4593bd30270c0d9f816a7833bb3f
4
- data.tar.gz: 618b4294b29fa83a8263530cee8c480e050c3ce56be457086933366aef08977e
3
+ metadata.gz: 75710f4741268d6bbc3c8708b626733ac02bf3dbbcaf3c8224761ddaea270ca4
4
+ data.tar.gz: 75fff78aa2ebfa4b4a2815a743fca6a923a4f85ee9bddf25f528167b08cdfaf0
5
5
  SHA512:
6
- metadata.gz: e666ab907816480ede76ad2d4e215116ec920c2ce0152d44687177675ecfb484c94de13b897006f2e110bb89f2c81039abb363a52ea6c43f1ace3e48a19c341a
7
- data.tar.gz: ac571aae2fc74fcef162583c50924a4e8e81dd7ccd141503d9de47e8fbf03898bd6fc8aa2482875068a477ae13fa9ef9a882d7d5379285ee5b9259a19675615f
6
+ metadata.gz: 8d20411df67b44cd5f25b4aaea1b1ab22e632eaa8505a47c3fbee652e88e75e314e42785e525cfbb97bf71876fdf4300165248d90deb0bfeaf9be1eeba459e06
7
+ data.tar.gz: a2877632fb5b48cb60d1eec6502f8b3d5015384c952852a47d6aace6531690b6adee4d66851e07ec29bf040d3b69139bdd5ca5d95bb4cc20c2d28ae66fbb65c2
@@ -3,11 +3,12 @@ module MikePlayer
3
3
  def initialize(volume: 1.0)
4
4
  check_system
5
5
 
6
- @pid = nil
7
- @volume = volume
8
- @start_t = 0
9
- @elapsed = 0
10
- @paused = false
6
+ @pid = nil
7
+ @wait_thread = nil
8
+ @volume = volume
9
+ @start_t = 0
10
+ @elapsed = 0
11
+ @paused = false
11
12
  end
12
13
 
13
14
  def play(file)
@@ -38,25 +39,19 @@ module MikePlayer
38
39
  @elapsed += Time.now.to_i - @start_t
39
40
  @start_t = 0
40
41
 
41
- 10.times do
42
- break unless alive?
43
-
44
- sleep 0.1
45
- end
42
+ @wait_thread&.join(1)
46
43
 
47
44
  kill('KILL')
48
45
 
49
- 10.times do
50
- break unless alive?
51
-
52
- sleep 0.1
53
- end
46
+ @wait_thread&.join
54
47
 
55
48
  @paused = true
56
49
  end
57
50
 
58
51
  def kill(signal)
59
52
  Process.kill(signal, @pid) if alive?
53
+ rescue Errno::ESRCH
54
+ nil
60
55
  end
61
56
 
62
57
  def alive?
@@ -88,11 +83,17 @@ module MikePlayer
88
83
  end
89
84
 
90
85
  def self.cmd_exist?(cmd)
91
- if (true != system('command'))
92
- raise "Missing 'command' command, which is used to test compatibility."
86
+ if @test_cmd.nil?
87
+ if system('command')
88
+ @test_cmd = 'command -v'
89
+ elsif system('bash -c "command"')
90
+ @test_cmd = 'bash -c "command -v"'
91
+ else
92
+ raise "Missing 'command' command, which is used to test compatibility."
93
+ end
93
94
  end
94
95
 
95
- if (true != system("command -v #{cmd} >/dev/null 2>&1"))
96
+ if (true != system("#{@test_cmd} #{cmd} >/dev/null 2>&1"))
96
97
  return false
97
98
  end
98
99
 
@@ -111,7 +112,8 @@ module MikePlayer
111
112
 
112
113
  stdin, stdother, thread_info = Open3.popen2e(*args)
113
114
 
114
- @pid = thread_info.pid
115
+ @pid = thread_info.pid
116
+ @wait_thread = thread_info
115
117
 
116
118
  10.times do
117
119
  break if alive?
@@ -4,12 +4,17 @@ module MikePlayer
4
4
 
5
5
  def initialize(filename)
6
6
  @filename = filename
7
- @mp3info = Mp3Info.new(filename)
7
+
8
+ Mp3Info.open(filename) do |mp3info|
9
+ @artist = mp3info.tag.artist.to_s
10
+ @title = mp3info.tag.title.to_s
11
+ @length = mp3info.length || 0
12
+ end
8
13
  end
9
14
 
10
15
  def info
11
- artist = "#{@mp3info.tag.artist}"
12
- title = "#{@mp3info.tag.title}"
16
+ artist = @artist
17
+ title = @title
13
18
 
14
19
  if (true == artist.empty?) && (true == title.empty?)
15
20
  return File.basename(@filename, '.mp3')
@@ -23,7 +28,7 @@ module MikePlayer
23
28
  end
24
29
 
25
30
  def length
26
- return @mp3info.length || 0
31
+ return @length
27
32
  end
28
33
 
29
34
  def length_str(elapsed_time)
@@ -1,3 +1,3 @@
1
1
  module MikePlayer
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '1.1.2'.freeze
3
3
  end
data/lib/mikeplayer.rb CHANGED
@@ -27,6 +27,7 @@ module MikePlayer
27
27
  @timer_start = Time.now if (@minutes > 0)
28
28
  @state = STOPPED
29
29
  @player = PlayThread.new(volume: @settings.volume)
30
+ @song_mutex = Mutex.new
30
31
 
31
32
  if (true == @settings.list?)
32
33
  @songs.map { |song| File.basename(song) }.sort.each {|song| puts "#{File.basename(song)}"}
@@ -158,27 +159,35 @@ module MikePlayer
158
159
  end
159
160
 
160
161
  def next_song
161
- debug('n')
162
+ @song_mutex.synchronize do
163
+ return if changing?
162
164
 
163
- @state = SONG_CHANGE
165
+ debug('n')
164
166
 
165
- @player.stop
167
+ @state = SONG_CHANGE
168
+
169
+ @player.stop
166
170
 
167
- @song_i += 1
171
+ @song_i += 1
172
+ end
168
173
  end
169
174
 
170
175
  def previous_song
171
- debug('p')
176
+ @song_mutex.synchronize do
177
+ return if changing?
172
178
 
173
- @state = SONG_CHANGE
179
+ debug('p')
174
180
 
175
- if (@player.elapsed < 10)
176
- @song_i -= 1 if @song_i.positive?
177
- else
178
- debug('x')
179
- end
181
+ @state = SONG_CHANGE
180
182
 
181
- @player.stop
183
+ if (@player.elapsed < 10)
184
+ @song_i -= 1 if @song_i.positive?
185
+ else
186
+ debug('x')
187
+ end
188
+
189
+ @player.stop
190
+ end
182
191
  end
183
192
 
184
193
  def pause_if_over_time_limit
data/mikeplayer.gemspec CHANGED
@@ -34,6 +34,5 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency 'json', '~> 2.5'
35
35
  spec.add_dependency 'ruby-mp3info', '~> 0.8'
36
36
  spec.add_dependency 'minitest', '~> 5'
37
- spec.add_development_dependency 'rake', '~> 12'
38
- spec.add_development_dependency 'byebug', '~> 11'
37
+ spec.add_development_dependency 'rake', '~> 13'
39
38
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mikeplayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Crockett
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-02-08 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: json
@@ -58,28 +57,14 @@ dependencies:
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: '12'
60
+ version: '13'
62
61
  type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: '12'
69
- - !ruby/object:Gem::Dependency
70
- name: byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '11'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '11'
67
+ version: '13'
83
68
  description: |
84
69
  Wraps Sox's `play` command, allowing playslists, find, random and time limit.
85
70
  Once a song is playing you can:
@@ -113,7 +98,6 @@ homepage: https://github.com/mmcrockett/mikeplayer
113
98
  licenses:
114
99
  - MIT
115
100
  metadata: {}
116
- post_install_message:
117
101
  rdoc_options: []
118
102
  require_paths:
119
103
  - lib
@@ -128,8 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
112
  - !ruby/object:Gem::Version
129
113
  version: '0'
130
114
  requirements: []
131
- rubygems_version: 3.1.2
132
- signing_key:
115
+ rubygems_version: 3.6.9
133
116
  specification_version: 4
134
117
  summary: Wraps Sox's `play` command, allowing playslists, find, random and time limit.
135
118
  test_files: []