aric 0.1.0 → 0.2.0

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