vitunes 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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