vitunes 0.0.3

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.
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ .DS_Store
2
+ *.swp
3
+ *~.nib
4
+ build/
5
+ *.pbxuser
6
+ *.perspective
7
+ *.perspectivev3
8
+ *.mode1v3
9
+ *.mode2v3
10
+ xcuserdata
11
+ src/
data/NOTES ADDED
@@ -0,0 +1,216 @@
1
+
2
+ should put a max results limit
3
+
4
+
5
+ we need to keep the tracks recently foudn in the search list in memory?
6
+
7
+ Then that means keeping the process alive in memory. But we can also
8
+ just run the search again and find the track by index.
9
+
10
+ Tried Macruby but it is too hard to get either multithreaded DRb or
11
+ sinatra working
12
+
13
+ Vimscript can remember the last command send to system() and just append
14
+ an index number to it
15
+
16
+ Store lists like in Vmail
17
+ Put databaseID off screen and use it to look up anything
18
+
19
+
20
+ https://bitbucket.org/kamitchell/itunesbridged
21
+
22
+ https://github.com/mislav/itunes/blame/master/itunes.rb
23
+
24
+ https://github.com/mislav/itunes
25
+
26
+ ITunesManager.app.run
27
+
28
+ # start playing at the beginning
29
+ ITunesManager.music.playOnce(false)
30
+
31
+ ITunesManager.player_state #=> :playing
32
+
33
+ ITunesManager.app.playpause
34
+ ITunesManager.player_state #=> :paused
35
+
36
+ track = ITunesManager.current_track
37
+
38
+ # for more properties, see iTunes.h under "@interface iTunesTrack"
39
+ track.name
40
+ track.artist
41
+ track.album
42
+
43
+ # playlist management
44
+ favorites = ITunesManager.find_or_create_playlist 'Favorites'
45
+
46
+ track = ITunesManager.music.fileTracks.first
47
+ favorites << track
48
+
49
+ favorites.add ITunesManager.music.search('daft punk')
50
+ favorites.add ITunesManager.music.search('pendulum', :artists)
51
+ favorites.add ITunesManager.music.search('easy rider', :albums)
52
+
53
+
54
+
55
+ [choi spartan~/p/vitunes]$ /Users/choi/projects/vitunes/build/Release/vitunes search rush
56
+ 2011-06-30 02:08:59.516 vitunes[68007:903] args: (
57
+ "/Users/choi/projects/vitunes/build/Release/vitunes",
58
+ search,
59
+ rush
60
+ )
61
+ 1746 P56/Brushstroking Fingerstyle Blues Guitar Arnie Berle and Mark Galbo (1993) Religious
62
+ 1400 Cold Fire Counterparts Rush (2004) Rock
63
+ 1402 Mystic Rhythms Retrospective, Vol. 2 (1981-1987) Rush (1997) Rock
64
+ 1404 The Big Money Rush: Spirit of Radio - Greatest Hits 1974-1987 Rush (2003) Rock
65
+ [choi spartan~/p/vitunes]$ /Users/choi/projects/vitunes/build/Release/vitunes playTrackID 1404
66
+ 2011-06-30 02:09:09.536 vitunes[68010:903] args: (
67
+ "/Users/choi/projects/vitunes/build/Release/vitunes",
68
+ playTrackID,
69
+ 1404
70
+ )
71
+ 2011-06-30 02:09:09.646 vitunes[68010:903] playing track: The Big Money
72
+ [choi spartan~/p/vitunes]$ fg
73
+ vim vitunes.rb
74
+
75
+ [1]+ Stopped vim vitunes.rb
76
+
77
+
78
+ ------------------------------------------------------------------------
79
+ getting all artists in applescript
80
+
81
+ tell application "iTunes"
82
+ set myList to get artist of (every track of library playlist 1 whose
83
+ artist is not missing value)
84
+ end tell
85
+ set oldDelim to AppleScript's text item delimiters
86
+ set AppleScript's text item delimiters to ASCII character 10
87
+ set allArtists to myList as text
88
+ set AppleScript's text item delimiters to oldDelim
89
+ do shell script "echo " & (quoted form of allArtists) & " | sort -u "
90
+
91
+
92
+ ** BUILD SUCCEEDED **
93
+
94
+ [choi spartan~/p/vitunes]$ /Users/choi/projects/vitunes/build/Release/vitunes match "artist == 'U2'"
95
+ 2011-06-30 02:35:27.146 vitunes[68774:903] tracks: (
96
+ "Beautiful Day",
97
+ "Stuck In A Moment You Can't Get Out Of",
98
+ Elevation,
99
+ "Walk On",
100
+ Kite,
101
+ "In A Little While",
102
+ "Wild Honey",
103
+ "Peace On Earth",
104
+ "When I Look At The World",
105
+ "New York",
106
+ Grace,
107
+ "Pride (In The Name Of Love)",
108
+ "With Or Without You",
109
+ "Even Better Than the Real Thing",
110
+ "Mysterious Ways",
111
+ "Electrical Storm (William Orbit Mix)",
112
+ One,
113
+ "Stay (Faraway, so Close!)",
114
+ "Zoo Station",
115
+ Magnificent,
116
+ Always
117
+ )
118
+
119
+
120
+
121
+ Use contains instead of LIKE
122
+
123
+ tell application "iTunes"
124
+ set myList to get artist of (every track of library playlist 1 whose artist is not missing value)
125
+ end tell
126
+ set oldDelim to AppleScript's text item delimiters
127
+ set AppleScript's text item delimiters to ASCII character 10
128
+ set allArtists to myList as text
129
+ set AppleScript's text item delimiters to oldDelim
130
+ do shell script "echo " & (quoted form of allArtists) & " | sort -u "
131
+
132
+
133
+
134
+ ------------------------------------------------------------------------
135
+ Thu Jun 30 07:44:42 EDT 2011
136
+
137
+
138
+ Don't do any playlist management (writing) for the first release. Stick
139
+ to navigation, search, playing
140
+
141
+
142
+ Let user use Mac stop key? No, what if this is via remote?
143
+
144
+
145
+ Some commands
146
+
147
+ playTrackID 1423
148
+ itunes playpause
149
+ itunes currentPlaylist => prints current playlist name
150
+ predicate "name contains 'love'"
151
+ itunes currentTrack => print current track with smae formatting for
152
+ listed tracks
153
+
154
+ playPlaylist Purchased
155
+ playlistTracks Purchased
156
+
157
+ group artist
158
+ group name
159
+ # NOT group year because year involves int, not NSString
160
+
161
+ ------------------------------------------------------------------------
162
+
163
+ TODO
164
+ - maybe show iTunesPlaylist properties:
165
+ - duration (total length of playlist in secs)
166
+ - shuffle BOOL
167
+ - songRepeat (a constant)
168
+ - time <= MM:SS
169
+
170
+ Try adding a track to a playlist (LATER)
171
+
172
+ Try creating a playlist (LATER)
173
+
174
+ Rename command line tool itunes-unix since it is general
175
+
176
+ UI playOnce a track
177
+ play a playlist
178
+ forward and next (already ready to bind to vimscript)
179
+
180
+ DO IN LATER RELEASE:
181
+ create a playlist
182
+ move tracks to a playlist
183
+
184
+ Stick with search, navigation and playing functions for first release.
185
+ Release earlier this way. The simpler function set is useful enough.
186
+
187
+ TODO -- all on Vim side
188
+
189
+ artists, genre, album --> these will open Vim autocomplete dropdown
190
+ selectors
191
+
192
+ choose an item from the completion window, then we show the standard
193
+ tracks list
194
+
195
+ - tracks list will either be a playlist, a search result, or a predicate
196
+ filter (e.g. all tracks with artist == or album ==
197
+
198
+
199
+ ------------------------------------------------------------------------
200
+
201
+ - select a track to play. if IN playlist, start playing continuously
202
+
203
+ TODO
204
+ - documentation - ruby command in gem
205
+ - screenshots
206
+
207
+ ------------------------------------------------------------------------
208
+ LATER
209
+
210
+ - use sortTitle -- not urgent
211
+ - handle case of missing Track (not on disk); e.g. ATB
212
+ - remove from playlist
213
+ - put last seen Playlist on top of Playlist drop down
214
+ - compile vitunes tool and put in bin/
215
+
216
+
data/README.markdown ADDED
@@ -0,0 +1,65 @@
1
+ # ViTunes
2
+
3
+ ViTunes lets you control and navigate iTunes from the comfort of Vim.
4
+
5
+ ## Prerequisites
6
+
7
+ * Ruby 1.8.6 or higher (developed on Ruby 1.9.2)
8
+ * OS X (tested on Snow Leopard 10.6)
9
+ * Vim 7.2 or higher (tested on Vim 7.3)
10
+
11
+ ## Install
12
+
13
+ gem install vitunes
14
+
15
+ vitunes-install
16
+
17
+ `vitunes-install` installs a Vim plugin into your ~/.vim/plugin
18
+ directory.
19
+
20
+ ## How to use it
21
+
22
+ ### General commands
23
+
24
+ * `,i` invoke or dismiss ViTunes (if not, it might be `\i` on your system)
25
+ * `?` show help and commands
26
+
27
+ ### Navigation
28
+
29
+ * `,s` search iTunes library by search query
30
+ * `,p` select playlist
31
+ * `,a` select artist
32
+ * `,g` select genre
33
+ * `,A` select album
34
+ * `ENTER` start playing a track under cursor
35
+
36
+ The query and selection drop downs make Vim autocompletion. Start typing
37
+ the first few letters of what you want. For example, if you want to jump
38
+ to all artists that start with the letter 'P', type 'P' and you'll see
39
+ the drop down items update.
40
+
41
+ `CTRL-p` and `CTRL-n` let you navigate the matches. Press `ENTER` to select
42
+ one.
43
+
44
+ Press `ENTER` or `ESC` to exit drop down selection mode.
45
+
46
+ ### Volume Control
47
+
48
+ * `+` louder
49
+ * `-` softer
50
+ * `=` softer
51
+
52
+ ### Playhead
53
+
54
+ * `SPACEBAR` play/pause
55
+ * `>` next track
56
+ * `<` previous track
57
+ * `.` show current track and playlist, if any
58
+
59
+ ### Copying tracks
60
+
61
+ * `,c` copy track(s) to a playlist
62
+
63
+ To copy tracks, put the cursor on a track or select a range of tracks,
64
+ and then hit `,c` to select a playlist to copy them to. The tracks will be
65
+ added to the end of the playlist.
data/Rakefile ADDED
@@ -0,0 +1,69 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
7
+
8
+ desc "release and build and push new website"
9
+ task :push => [:release, :web]
10
+
11
+ desc "Bumps version number up one and git commits"
12
+ task :bump do
13
+ basefile = "lib/vitunes/version.rb"
14
+ file = File.read(basefile)
15
+ oldver = file[/VERSION = '(\d.\d.\d)'/, 1]
16
+ newver_i = oldver.gsub(".", '').to_i + 1
17
+ newver = ("%.3d" % newver_i).split(//).join('.')
18
+ puts oldver
19
+ puts newver
20
+ puts "Bumping version: #{oldver} => #{newver}"
21
+ newfile = file.gsub("VERSION = '#{oldver}'", "VERSION = '#{newver}'")
22
+ File.open(basefile, 'w') {|f| f.write newfile}
23
+ `git commit -am 'Bump'`
24
+ end
25
+
26
+ desc "build and push website"
27
+ task :web => :build_webpage do
28
+ puts "Building and pushing website"
29
+ Dir.chdir "../project-webpages" do
30
+ `scp out/vitunes.html zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
31
+ `rsync -avz out/images-vitunes zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
32
+ `rsync -avz out/stylesheets zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
33
+ `rsync -avz out/lightbox2 zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
34
+ end
35
+ `open http://danielchoi.com/software/vitunes.html`
36
+ end
37
+
38
+ desc "build webpage"
39
+ task :build_webpage do
40
+ `cp README.markdown ../project-webpages/src/vitunes.README.markdown`
41
+ Dir.chdir "../project-webpages" do
42
+ puts `ruby gen.rb vitunes #{Vmail::VERSION}`
43
+ #`open out/vitunes.html`
44
+ end
45
+ end
46
+
47
+
48
+ desc "git push and rake release bumped version"
49
+ task :bumped do
50
+ puts `git push && rake release`
51
+ Rake::Task["web"].execute
52
+ end
53
+
54
+ desc "Run tests"
55
+ task :test do
56
+ $:.unshift File.expand_path("test")
57
+ require 'test_helper'
58
+ Dir.chdir("test") do
59
+ Dir['*_test.rb'].each do |x|
60
+ puts "requiring #{x}"
61
+ require x
62
+ end
63
+ end
64
+
65
+ MiniTest::Unit.autorun
66
+ end
67
+
68
+ task :default => :test
69
+
data/bin/vitunes ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require 'vitunes'
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require 'vitunes'
7
+ end
8
+
9
+ ViTunes.install_vim_plugin
data/bin/vitunes-help ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'vitunes'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'vitunes'
8
+ end
9
+
10
+
11
+ puts ViTunes.help
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require 'vitunes'
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require 'vitunes'
7
+ end
8
+
9
+ ViTunes.install_vim_plugin