hearken 0.0.4 → 0.0.5

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.
@@ -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