hearken 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ = 0.0.5
2
+
3
+ * fixed 'recent' command - the library is sorted on file modification date
4
+ * moved 'current_song' from working directory to .hearken directory
5
+ * Changed dequeue to return track instead of id - this fixed a bug where reindexing would cause player to start playing the wrong files.
6
+
1
7
  = 0.0.4
2
8
 
3
9
  * Partially fixed bug with growl (correctly escaping characters in message)
@@ -26,14 +26,20 @@ Growl notification (as new tracks are played) will work but only if 'growlnotify
26
26
 
27
27
  hearken index DIRECTORY
28
28
 
29
- Will create a track index at ~/.music. Note that this might take a while the first time you run it.
29
+ Will create a track index at ~/.hearken/music. Note that this might take a while the first time you run it.
30
30
 
31
31
  Subsequent runs will only query tags for new or modified files so should be fairly fast.
32
32
 
33
+ The index can be regenerated while the console is running and reloaded using the 'reload' command.
34
+
33
35
  == Console
34
36
 
35
37
  hearken console
36
38
 
39
+ This enters an interactive prompt where you can start/stop the player, search and enqueue tracks.
40
+
41
+ The queue will be persisted to ~/.hearken/queue
42
+
37
43
  == Commands
38
44
 
39
45
  ?
@@ -44,8 +50,47 @@ will list all commands
44
50
 
45
51
  will describe the use and purpose of a particular command
46
52
 
53
+ == Main commands
54
+
55
+ search iver bon
56
+
57
+ Searches for tracks with 'bon' and 'iver' in the track, artist or album name (this is case insensitive).
58
+
59
+ Results will be displayed and the ids will be added to the clipboard (for convenient pasting to the '+' command).
60
+
61
+ + abc-f 123 456
62
+
63
+ Enqueues tracks with ids abc, abd, abe, abf, 123 and 456
64
+
65
+ start
66
+
67
+ Starts the player
68
+
69
+ stop
70
+
71
+ Stops the player
72
+
73
+ next
74
+
75
+ Stops and restarts the player (which will kill the currently playing track)
76
+
77
+ setup_scrobbling
78
+
79
+ Runs through a wizard to configure scrobbling to last.fm
80
+
81
+ scrobbling on
82
+
83
+ Turns scrobbling on (has no effect if scrobbling has not been configured)
84
+
85
+ scrobbling off
86
+
87
+ Turns scrobbling off
88
+
47
89
  = Future plans for world domination
48
90
 
49
- * Fix or remove 'recent' - it should sort library based on file modification date
91
+ * add a '-' command to remove tracks from queue
92
+ * add a command to launch last.fm profile (for track history)
93
+ * put some content on wiki to explain usage (especially use of track ranges '+ eft-z')
94
+ * eliminate last.fm setup command once setup and add lastfm commands only when setup
50
95
  * Get working on linux
51
96
  * Get working on windows
@@ -1,3 +1,3 @@
1
1
  module Hearken
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -5,8 +5,8 @@ class Hearken::Command::Shuffle
5
5
  help 'shuffles the current queue'
6
6
  execute do |ignored=nil|
7
7
  ids = []
8
- while id = @player.dequeue
9
- ids << id
8
+ while track = @player.dequeue
9
+ ids << track.id
10
10
  end
11
11
  ids.sort_by { rand }.each {|id| @player.enqueue id }
12
12
  end
@@ -25,10 +25,10 @@ module Hearken
25
25
  at_exit { @player.stop }
26
26
  @prompt = "hearken > "
27
27
  with :status, "'"
28
- with :show_properties, 'show'
29
28
  with :restart, 'next'
29
+ with :list, 'ls'
30
30
  with :enqueue, '+'
31
- with_all *%w{reload search start stop scrobbling shuffle list setup_scrobbling recent flush }
31
+ with_all *%w{reload search start stop scrobbling shuffle setup_scrobbling recent flush}
32
32
  end
33
33
  end
34
34
  end
@@ -23,10 +23,6 @@ class Hearken::Library
23
23
  @tracks[id]
24
24
  end
25
25
 
26
- def path row
27
- row.path
28
- end
29
-
30
26
  def with_track id
31
27
  yield @tracks[id]
32
28
  end
@@ -42,6 +38,10 @@ class Hearken::Library
42
38
  @tracks << track
43
39
  id += 1
44
40
  end
41
+ @tracks.sort! do |a, b|
42
+ tc = a.timestamp <=> b.timestamp
43
+ tc == 0 ? a.id <=> b.id : tc
44
+ end
45
45
  end if File.exist? index_path
46
46
  end
47
47
  end
@@ -1,9 +1,10 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Hearken::Paths
4
- attr_reader :preferences_path, :queue_path, :index_path
4
+ attr_reader :base_path, :preferences_path, :queue_path, :index_path
5
5
 
6
6
  def create_paths
7
+ @base_path = '.hearken'.from_home
7
8
  @preferences_path = '.hearken/config'.from_home
8
9
  @queue_path = '.hearken/queue'.from_home
9
10
  @index_path = '.hearken/music'.from_home
@@ -16,4 +17,8 @@ module Hearken::Paths
16
17
  def in_queue_dir
17
18
  Dir.chdir(queue_path) { yield }
18
19
  end
20
+
21
+ def in_base_dir
22
+ Dir.chdir(base_path) { yield }
23
+ end
19
24
  end
@@ -37,12 +37,16 @@ module Hearken
37
37
  end
38
38
 
39
39
  def current
40
- (@pid and File.exist?('current_song')) ? YAML.load_file('current_song') : nil
40
+ in_base_dir do
41
+ (@pid and File.exist?('current_song')) ? YAML.load_file('current_song') : nil
42
+ end
41
43
  end
42
44
 
43
45
  def register track
44
46
  track.started = Time.now.to_i
45
- File.open('current_song', 'w') {|f| f.print track.to_yaml }
47
+ in_base_dir do
48
+ File.open('current_song', 'w') {|f| f.print track.to_yaml }
49
+ end
46
50
  end
47
51
 
48
52
  def notify_started track
@@ -57,6 +61,10 @@ module Hearken
57
61
  @scrobbler.enabled = tf
58
62
  end
59
63
 
64
+ def random_track
65
+ @library.row (rand * @library.count).to_i
66
+ end
67
+
60
68
  def start
61
69
  return if @pid
62
70
  @pid = fork do
@@ -65,26 +73,18 @@ module Hearken
65
73
  Process.kill 'TERM', player_pid if player_pid
66
74
  exit
67
75
  end
68
- total_tracks = @library.count
69
76
  loop do
70
- id = dequeue || (rand * total_tracks).to_i
71
- row = @library.row id
72
- unless row
73
- puts "track with id #{id} did not exist"
77
+ track = dequeue || random_track
78
+ next unless track
79
+ unless File.exist? track.path
80
+ puts "skipping track as #{track.path} does not exist"
74
81
  next
75
82
  end
76
- path = @library.path row
77
- unless path and File.exist? path
78
- puts "track with id #{id} did not refer to a file"
79
- next
80
- end
81
- @library.with_track(id) do |track|
82
- notify_started track
83
- register track
84
- player_pid = path.escape2("\`").to_player
85
- Process.wait player_pid
86
- notify_finished track
87
- end
83
+ notify_started track
84
+ register track
85
+ player_pid = track.path.escape2("\`").to_player
86
+ Process.wait player_pid
87
+ notify_finished track
88
88
  end
89
89
  end
90
90
  end
@@ -26,9 +26,8 @@ module Hearken::Queue
26
26
  file = Dir.glob('*.song').sort.first
27
27
  return nil unless file
28
28
  hash = YAML.load_file file
29
- id = hash[:id] if hash
30
29
  FileUtils.rm file
31
- id
30
+ hash
32
31
  end
33
32
  end
34
33
  end
@@ -13,9 +13,13 @@ describe Hearken::Command::Shuffle do
13
13
  end
14
14
 
15
15
  it 'should dequeue all tracks, shuffle then enqueue them' do
16
- @player.should_receive(:dequeue).and_return(1)
17
- @player.should_receive(:dequeue).and_return(2)
18
- @player.should_receive(:dequeue).and_return(3)
16
+ track = stub 'track'
17
+ track.should_receive(:id).and_return 1
18
+ track.should_receive(:id).and_return 2
19
+ track.should_receive(:id).and_return 3
20
+ @player.should_receive(:dequeue).and_return track
21
+ @player.should_receive(:dequeue).and_return track
22
+ @player.should_receive(:dequeue).and_return track
19
23
  @player.should_receive(:dequeue).and_return nil
20
24
 
21
25
  @player.should_receive(:enqueue).with 3
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: hearken
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mark Ryall
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-06 00:00:00 +10:00
13
+ date: 2011-08-07 00:00:00 +10:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -138,7 +138,6 @@ files:
138
138
  - lib/hearken/command/scrobbling.rb
139
139
  - lib/hearken/command/search.rb
140
140
  - lib/hearken/command/setup_scrobbling.rb
141
- - lib/hearken/command/show_properties.rb
142
141
  - lib/hearken/command/shuffle.rb
143
142
  - lib/hearken/command/start.rb
144
143
  - lib/hearken/command/status.rb
@@ -198,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
197
  requirements: []
199
198
 
200
199
  rubyforge_project: hearken
201
- rubygems_version: 1.5.2
200
+ rubygems_version: 1.6.2
202
201
  signing_key:
203
202
  specification_version: 3
204
203
  summary: command line music player
@@ -1,9 +0,0 @@
1
- require 'hearken/command'
2
- require 'pp'
3
-
4
- class Hearken::Command::ShowProperties
5
- include Hearken::Command
6
- usage '<id>'
7
- help 'show the track details for a specified id'
8
- execute {|id| @player.library.with_track(id.to_i(36)) {|track| pp track } }
9
- end