aric 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83716dff105d773cb4fda838e9c412a5948750ad
4
- data.tar.gz: a9bcf7b61e4d53ab16a374aae185c1f22c31775a
3
+ metadata.gz: 38efb585c476f6e9486d2c1f81f4a0fc05f96d33
4
+ data.tar.gz: 00542d977dd68357eb3e8e8288373d774821c022
5
5
  SHA512:
6
- metadata.gz: 8926293e242e2efa94ac452e9fc6ca1cd74f703eacc74cfac566cec539840ebbda0ed6e19dc4f867676e11e9ec52639b68864a222d6e6a14cbd723ee1506f05a
7
- data.tar.gz: de6c5e80d54124c0103fc57f35ca10e8838d30a4a0a80a1781887f9d8cc8105c8c1c3973d3b870a452d1a4c551e9c6265f59ea96000108e7d591769ab0801e06
6
+ metadata.gz: 6f96564319f5ddd6eefc31541a3d0f0139fc44534b24fffb47d15407b29380c858fc124dec26fb6a452c3b22a95351a4f78a0dc1ae25848ac5961252529c2ed7
7
+ data.tar.gz: e201d72434d0828eb1d7a43b65f29ecfbc021f40be6512a87b1726be21427a41fb787ffaf9e171c9e7e4643f2702cb23dbe6030f8679ee680d7b590e01851ac8
data/README.md CHANGED
@@ -5,6 +5,11 @@
5
5
 
6
6
  Awesome Ruby Itunes Client
7
7
 
8
+ ## Requirements
9
+
10
+ * OSX Yosemite or higher
11
+ * Ruby 2.2 or higher
12
+
8
13
  ## Installation
9
14
 
10
15
  Add this line to your application's Gemfile:
@@ -23,7 +28,49 @@ Or install it yourself as:
23
28
 
24
29
  ## Usage
25
30
 
26
- TODO: Write usage instructions here
31
+ ### Command Line
32
+
33
+ Show avalable jobs.
34
+
35
+ ```sh
36
+ $ aric --list
37
+ ```
38
+
39
+ Execute jobs as follow.
40
+
41
+ ```sh
42
+ // play trakcs
43
+ $ aric play
44
+
45
+ // next tracks
46
+ $ aric next
47
+
48
+ // volume up by 10
49
+ $ aric up 10
50
+
51
+ // volume up by 10
52
+ $ aric up 10
53
+
54
+ // show tracks in current playlists
55
+ $ aric current_playlist_tracks
56
+
57
+ // set state to track love
58
+ $ aric love
59
+
60
+ // open iTunes
61
+ $ aric activate
62
+ ```
63
+
64
+ Play founded tracks with `-p` option.
65
+
66
+ ```sh
67
+ // play loved tracks
68
+ $ aric -p find_loved_tracks
69
+
70
+ // play found tracks
71
+
72
+ $ aric -p find_tracks <track_name>
73
+ ```
27
74
 
28
75
  ## Development
29
76
 
data/lib/aric/command.rb CHANGED
@@ -13,29 +13,31 @@ module Aric
13
13
  case
14
14
  when list?
15
15
  puts JobHandler.jobs
16
+ when play?
17
+ JobHandler.play(*@args)
16
18
  else
17
- puts handler.run(*values)
19
+ puts JobHandler.new(job).run(*values)
18
20
  end
19
21
  end
20
22
 
21
23
  private
22
24
 
23
25
  def values
24
- @values ||= @args.drop(1)
26
+ @args.drop(1)
25
27
  end
26
28
 
27
29
  def job
28
- @job ||= (@args.first or raise JobNameRequired)
29
- end
30
-
31
- def handler
32
- @handler ||= JobHandler.new(job)
30
+ @args.first or raise JobNameRequired
33
31
  end
34
32
 
35
33
  def list?
36
34
  options['list']
37
35
  end
38
36
 
37
+ def play?
38
+ options['play']
39
+ end
40
+
39
41
  def options
40
42
  @options ||= option_parser.getopts(@argv)
41
43
  end
@@ -47,7 +49,8 @@ module Aric
47
49
 
48
50
  opt.separator 'Options:'
49
51
  opt.on('-l', '--list', 'show available methods')
50
- opt.on('-d', 'demonize')
52
+ opt.on('-p', '--play', 'play found tracks')
53
+ # opt.on('-d', 'demonize')
51
54
  end
52
55
  end
53
56
  end
@@ -3,10 +3,19 @@ require 'aric/job/base'
3
3
  module Aric
4
4
  module Job
5
5
  class Player < Base
6
- def play(id = nil)
7
- run(:play, id)
6
+ def play_music(*argv)
7
+ run(:play_music, argv)
8
+ end
9
+
10
+ def play_track(id = nil)
11
+ run(:play_track, id)
12
+ end
13
+ alias_method :play, :play_track
14
+ alias_method :start, :play_track
15
+
16
+ def play_playlist(id)
17
+ run(:play_playlist, id)
8
18
  end
9
- alias_method :start, :play
10
19
 
11
20
  def pause
12
21
  run(:pause)
@@ -5,6 +5,14 @@ module Aric
5
5
  class JobNotFound < StandardError; end
6
6
 
7
7
  class << self
8
+ def play(*args)
9
+ if args.first && jobs.include?(args.first.to_sym)
10
+ new(:play_music).run(*args)
11
+ else
12
+ raise JobNotFound
13
+ end
14
+ end
15
+
8
16
  def jobs
9
17
  @jobs ||= job_class_hash.values.flat_map(&:itself)
10
18
  end
@@ -27,7 +35,7 @@ module Aric
27
35
  end
28
36
 
29
37
  def run(*args)
30
- # check argument number
38
+ # Check argument number
31
39
  job_class.run(@job_name, *args)
32
40
  end
33
41
 
@@ -23,7 +23,7 @@ module Aric
23
23
  end
24
24
 
25
25
  def to_s
26
- name
26
+ '%s / %s' % [name, persistentID]
27
27
  end
28
28
  end
29
29
  end
@@ -32,7 +32,7 @@ module Aric
32
32
  end
33
33
 
34
34
  def to_s
35
- '%s / %s / %s' % [name, artist, album]
35
+ '%s / %s / %s / %s' % [name, artist, album, persistentID]
36
36
  end
37
37
 
38
38
  private
@@ -15,10 +15,7 @@ module Aric
15
15
  def run(args = [])
16
16
  args = Array(args).join(' ')
17
17
  stdout, stderr, status = Open3.capture3("osascript -l JavaScript #{script_file_path} #{args}")
18
- puts nil, '<============================================================ DEBUG OUTPUT START HERE'
19
- p stdout, stderr, status
20
- puts '<============================================================ DEBUG OUTPUT CLOSE HERE', nil
21
- raise stderr unless status.success?
18
+ raise "#{stderr} at osascript -l JavaScript #{script_file_path} #{args}" unless status.success?
22
19
  stdout.strip
23
20
  end
24
21
 
data/lib/aric/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Aric
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,22 @@
1
+ function run(argv) {
2
+ var app = Application("iTunes");
3
+ var plName = argv[0];
4
+ var pl = app.playlist[plName];
5
+
6
+ if (!pl) {
7
+ pl = new app.Playlist;
8
+ pl.make();
9
+ pl.name = plName;
10
+ }
11
+
12
+ argv.shift();
13
+ argv.forEach(function(id) {
14
+ var v = app.tracks().find(function(x){
15
+ return x.persistentID() == id;
16
+ });
17
+
18
+ if (v) {
19
+ v.duplicate({to: pl});
20
+ }
21
+ });
22
+ }
@@ -1,16 +1,21 @@
1
- function run(argv) {
1
+ function run(argv, playMode) {
2
2
  var app = Application("iTunes");
3
- var tracks = app.tracks().filter(function(x){ return x.loved(); }).map(function(track){
4
- return {
5
- class: track.class(),
6
- container: track.container(),
7
- id: track.id(),
8
- index: track.index(),
9
- name: track.name(),
10
- persistentID: track.persistentID(),
11
- properties: track.properties()
12
- };
13
- });;
14
3
 
15
- return JSON.stringify(tracks);
4
+ if (playMode === true) {
5
+ return app.tracks().filter(function(x){ return x.loved(); });
6
+ } else {
7
+ var tracks = app.tracks().filter(function(x){ return x.loved(); }).map(function(track){
8
+ return {
9
+ class: track.class(),
10
+ container: track.container(),
11
+ id: track.id(),
12
+ index: track.index(),
13
+ name: track.name(),
14
+ persistentID: track.persistentID(),
15
+ properties: track.properties()
16
+ };
17
+ });;
18
+
19
+ return JSON.stringify(tracks);
20
+ }
16
21
  }
@@ -1,16 +1,21 @@
1
- function run(argv) {
1
+ function run(argv, playMode) {
2
2
  var app = Application("iTunes");
3
+
3
4
  var track = app.tracks().find(function(x){
4
5
  return x.persistentID() == argv[0];
5
6
  });
6
7
 
7
- return JSON.stringify({
8
- class: track.class(),
9
- container: track.container(),
10
- id: track.id(),
11
- index: track.index(),
12
- name: track.name(),
13
- persistentID: track.persistentID(),
14
- properties: track.properties()
15
- });
8
+ if (playMode == true) {
9
+ return track;
10
+ } else {
11
+ return JSON.stringify({
12
+ class: track.class(),
13
+ container: track.container(),
14
+ id: track.id(),
15
+ index: track.index(),
16
+ name: track.name(),
17
+ persistentID: track.persistentID(),
18
+ properties: track.properties()
19
+ });
20
+ }
16
21
  }
@@ -1,18 +1,24 @@
1
- function run(argv) {
1
+ function run(argv, playMode) {
2
2
  var app = Application("iTunes");
3
3
  var pl = app.playlists().find(function(x){
4
4
  return x.name() == "ミュージック" || x.name() == "Music";
5
5
  });
6
- var tracks = app.search(pl, {for: argv[0]}).map(function(track){
7
- return {
8
- class: track.class(),
9
- container: track.container(),
10
- id: track.id(),
11
- index: track.index(),
12
- name: track.name(),
13
- persistentID: track.persistentID(),
14
- properties: track.properties()
15
- };
16
- });
17
- return JSON.stringify(tracks);
6
+ var tracks = app.search(pl, {for: argv[0]});
7
+
8
+ if (playMode === true) {
9
+ return tracks;
10
+ } else {
11
+ var t = tracks.map(function(track){
12
+ return {
13
+ class: track.class(),
14
+ container: track.container(),
15
+ id: track.id(),
16
+ index: track.index(),
17
+ name: track.name(),
18
+ persistentID: track.persistentID(),
19
+ properties: track.properties()
20
+ };
21
+ });
22
+ return JSON.stringify(t);
23
+ }
18
24
  }
@@ -0,0 +1,37 @@
1
+ function run(argv) {
2
+ var app = Application("iTunes");
3
+ var ret = loadAndEval(argv);
4
+ var pl = createPlayList(app, "_aric_tmp");
5
+
6
+ ret.forEach(function (x) {
7
+ x.duplicate({to: pl});
8
+ });
9
+
10
+ app.play(pl);
11
+ }
12
+
13
+ function createPlayList(app, name) {
14
+ var pl = app.playlists().find(function (x) { return x.name() === name; });
15
+ console.log(pl);
16
+
17
+ if (pl) {
18
+ pl.delete(); // to overwrite
19
+ }
20
+
21
+ pl = new app.Playlist;
22
+ pl.make();
23
+ pl.name = name;
24
+ return pl;
25
+ }
26
+
27
+ function loadAndEval(argv) {
28
+ ObjC.import('Foundation');
29
+
30
+ var path = 'scripts/finder/' + argv[0] + '.js';
31
+ var fm = $.NSFileManager.defaultManager;
32
+ var contents = fm.contentsAtPath(path.toString());
33
+ contents = $.NSString.alloc.initWithDataEncoding(contents, $.NSUTF8StringEncoding);
34
+
35
+ eval(ObjC.unwrap(contents));
36
+ return run([argv[1]], true);
37
+ }
@@ -0,0 +1,7 @@
1
+ function run(argv){
2
+ var app = Application("iTunes");
3
+ var t = app.playlists().find(function (x) {
4
+ return x.persistentID() == argv[0];
5
+ });
6
+ app.play(t);
7
+ }
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ganmacs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-15 00:00:00.000000000 Z
11
+ date: 2015-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -103,6 +103,7 @@ files:
103
103
  - lib/aric/version.rb
104
104
  - scripts/activate.js
105
105
  - scripts/back_track.js
106
+ - scripts/create_playlist.js
106
107
  - scripts/current_playlist.js
107
108
  - scripts/current_playlist_tracks.js
108
109
  - scripts/current_track.js
@@ -122,7 +123,9 @@ files:
122
123
  - scripts/mute.js
123
124
  - scripts/next_track.js
124
125
  - scripts/pause.js
125
- - scripts/play.js
126
+ - scripts/play_music.js
127
+ - scripts/play_playlist.js
128
+ - scripts/play_track.js
126
129
  - scripts/player_position.js
127
130
  - scripts/player_state.js
128
131
  - scripts/previous_track.js
@@ -151,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
154
  version: '0'
152
155
  requirements: []
153
156
  rubyforge_project:
154
- rubygems_version: 2.4.5.1
157
+ rubygems_version: 2.4.5
155
158
  signing_key:
156
159
  specification_version: 4
157
160
  summary: Awesome Ruby Ituens Client