keenser 0.0.5 → 0.0.6
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 +4 -4
- data/Gemfile +0 -1
- data/bin/keenser +32 -77
- data/keenser.gemspec +0 -1
- data/lib/keenser.rb +62 -2
- data/lib/keenser/music.rb +18 -27
- data/lib/keenser/server.rb +25 -0
- data/lib/keenser/version.rb +1 -1
- metadata +3 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a82b0c422a1dc920fe649ef09c2fc057d4673da
|
4
|
+
data.tar.gz: ca07f7ac0c8def3bda386609c3ae2ef74c7b6605
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b92a2b36d02f38f21fe08edfcd4ae0d0384935a8f53ff13595d4c2a046bf94f1a390122d3324479613e67393eefa25945c567b84c8e9decf38bf2bfb848d5f2a
|
7
|
+
data.tar.gz: d0a1b396f1ffdd39575d3cbc06cd37a81218b666c02dc128d5f0255aed4a1225cc1346ee7549625b91a6228f84059aa64fab8d122dbb6cf9f1795345ee223898
|
data/Gemfile
CHANGED
data/bin/keenser
CHANGED
@@ -1,85 +1,40 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
Keenser::DB.setup!
|
20
|
-
|
21
|
-
# FIXME: need to do something to reload the connection / model after the
|
22
|
-
# db is setup for the first time
|
23
|
-
unless Keenser::Computer.local
|
24
|
-
puts arr "Configuring local machine"
|
25
|
-
|
26
|
-
role = askd "Role", :client
|
27
|
-
music = askd "Music directory", "#{ENV['SYNC']}/Music"
|
28
|
-
playlists = askd "Playlist directory", "#{ENV['HOME']}/Playlists"
|
29
|
-
|
30
|
-
Keenser::Computer.create({
|
31
|
-
name: `hostname`,
|
32
|
-
role: role,
|
33
|
-
music: music,
|
34
|
-
playlists: playlists
|
35
|
-
})
|
36
|
-
|
37
|
-
puts "Saved local config"
|
38
|
-
puts
|
39
|
-
end
|
40
|
-
|
41
|
-
puts "You're all set!"
|
42
|
-
end
|
43
|
-
|
44
|
-
desc "console", "Attach to a database console"
|
45
|
-
def console
|
46
|
-
Keenser.pry
|
47
|
-
end
|
48
|
-
|
49
|
-
# TODO: look into subcommands
|
50
|
-
desc "play", "Play music"
|
51
|
-
def play *args
|
52
|
-
cmd = args.shift || "pause"
|
53
|
-
Keenser::Music.send cmd, *args
|
54
|
-
rescue => e
|
55
|
-
puts "✗ #{e.message}"
|
56
|
-
end
|
57
|
-
|
58
|
-
desc "status", "Show current dependency status"
|
59
|
-
def status
|
60
|
-
[Keenser::DB, Keenser::Music].each do |m|
|
61
|
-
name = m.name.sub /^Keenser::/, ''
|
62
|
-
status, msg = begin
|
63
|
-
['✓'.green, m.status]
|
64
|
-
rescue => e
|
65
|
-
['✗'.red, e.to_s]
|
66
|
-
end
|
67
|
-
puts "#{status} #{name.underline}\t #{msg}"
|
3
|
+
cmd = ARGV.shift
|
4
|
+
session = "keenser"
|
5
|
+
|
6
|
+
|
7
|
+
if cmd == "boot"
|
8
|
+
unless system "tmux list-windows -t '#{session}' >/dev/null 2>&1"
|
9
|
+
`TMUX= tmux new-session -s '#{session}' -d`
|
10
|
+
`tmux send-keys -t '#{session}' '#{__FILE__} server' C-m`
|
11
|
+
`tmux split-window -h -t '#{session}'`
|
12
|
+
`tmux send-keys -t '#{session}' "cmus" C-m`
|
13
|
+
if ENV["TMUX"]
|
14
|
+
puts "Started new session '#{session}'"
|
15
|
+
exit
|
16
|
+
else
|
17
|
+
exec "tmux attach -t '#{session}'"
|
68
18
|
end
|
69
19
|
end
|
20
|
+
end
|
70
21
|
|
71
|
-
no_commands do
|
72
|
-
|
73
|
-
def arr str
|
74
|
-
"#{'==>'.light_blue} #{str}"
|
75
|
-
end
|
76
22
|
|
77
|
-
|
78
|
-
val = ask("#{field} (#{default}) >").strip
|
79
|
-
val.empty? ? default : val
|
80
|
-
end
|
23
|
+
require_relative "../lib/keenser"
|
81
24
|
|
82
|
-
|
25
|
+
case cmd
|
26
|
+
when "boot"
|
27
|
+
# No-op, just run the above startup logic
|
28
|
+
when nil, "console"
|
29
|
+
require "pry"
|
30
|
+
Pry.commands.delete "play"
|
31
|
+
Keenser.pry
|
32
|
+
when "server"
|
33
|
+
Keenser.start_server!
|
34
|
+
when "remote"
|
35
|
+
require "drb/drb"
|
36
|
+
DRb.start_service
|
37
|
+
puts DRbObject.new_with_uri(Keenser::Server.uri).send *ARGV
|
38
|
+
else
|
39
|
+
raise Keenser::Error.new "Not implemented: #{cmd}"
|
83
40
|
end
|
84
|
-
|
85
|
-
Default.start
|
data/keenser.gemspec
CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "colorize", "~> 0.6"
|
22
22
|
spec.add_dependency "pry", "~> 0.9"
|
23
23
|
spec.add_dependency "sequel", "~> 4.6"
|
24
|
-
spec.add_dependency "thor", "~> 0.18"
|
25
24
|
|
26
25
|
spec.add_development_dependency "bundler", "~> 1.5"
|
27
26
|
spec.add_development_dependency "rake", "~> 10.1"
|
data/lib/keenser.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
# FIXME: lazy-load everything
|
3
|
+
%w{ colorize sequel }.each { |m| require m }
|
2
4
|
|
3
5
|
%w{
|
4
|
-
version error db music
|
6
|
+
version error db music server
|
5
7
|
}.each { |m| require_relative "../lib/keenser/#{m}" }
|
6
8
|
|
7
9
|
module Keenser
|
@@ -19,4 +21,62 @@ module Keenser
|
|
19
21
|
:Tag => "tag",
|
20
22
|
:SongTag => "song_tag"
|
21
23
|
}.each { |name,m| autoload name, src("model/#{m}") }
|
24
|
+
|
25
|
+
def self.setup
|
26
|
+
unless ENV["SYNC"]
|
27
|
+
ENV["SYNC"] = ask "Path to sync directory >"
|
28
|
+
puts %!You should probably add `export SYNC="#{ENV['SYNC']}"` to your .*rc file!.yellow
|
29
|
+
puts
|
30
|
+
end
|
31
|
+
|
32
|
+
DB.setup!
|
33
|
+
|
34
|
+
# FIXME: need to do something to reload the connection / model after the
|
35
|
+
# db is setup for the first time
|
36
|
+
unless Computer.local
|
37
|
+
puts arr "Configuring local machine"
|
38
|
+
|
39
|
+
role = ask "Role", :client
|
40
|
+
music = ask "Music directory", "#{ENV['SYNC']}/Music"
|
41
|
+
playlists = ask "Playlist directory", "#{ENV['HOME']}/Playlists"
|
42
|
+
|
43
|
+
Computer.create({
|
44
|
+
name: `hostname`,
|
45
|
+
role: role,
|
46
|
+
music: music,
|
47
|
+
playlists: playlists
|
48
|
+
})
|
49
|
+
|
50
|
+
puts "Saved local config"
|
51
|
+
puts
|
52
|
+
end
|
53
|
+
|
54
|
+
puts "You're all set!"
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.status
|
58
|
+
[Keenser::DB, Keenser::Music].each do |m|
|
59
|
+
name = m.name.sub /^Keenser::/, ''
|
60
|
+
status, msg = begin
|
61
|
+
['✓'.green, m.status]
|
62
|
+
rescue => e
|
63
|
+
['✗'.red, e.to_s]
|
64
|
+
end
|
65
|
+
puts "#{status} #{name.underline}\t #{msg}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def self.arr str
|
72
|
+
"#{'==>'.light_blue} #{str}"
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.ask field, default=nil
|
76
|
+
print field
|
77
|
+
print " (#{default})" if default
|
78
|
+
print " > "
|
79
|
+
val = STDIN.gets.strip
|
80
|
+
val.empty? ? default : val
|
81
|
+
end
|
22
82
|
end
|
data/lib/keenser/music.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Keenser
|
2
3
|
module Music
|
3
4
|
extend self
|
4
5
|
|
5
|
-
SESSION_NAME = "music"
|
6
|
-
|
7
6
|
def status
|
8
7
|
expect "tmux"
|
9
8
|
expect "cmus-remote"
|
@@ -15,29 +14,30 @@ module Keenser
|
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
17
|
+
def show
|
18
|
+
playing.to_s
|
19
|
+
end
|
20
|
+
|
18
21
|
%w{ prev pause next }.each do |cmd|
|
19
|
-
define_method
|
22
|
+
define_method cmd do
|
23
|
+
puts "Pressed #{cmd}"
|
24
|
+
`cmus-remote --#{cmd}`
|
25
|
+
show
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def tag name
|
23
30
|
playing.tag name
|
24
|
-
puts "#{
|
25
|
-
|
26
|
-
|
27
|
-
def method_missing *args
|
28
|
-
name = args.first.to_s
|
29
|
-
if Tag.where(name: name).any?
|
30
|
-
list name
|
31
|
-
else
|
32
|
-
raise Error.new "Don't know how to play '#{args}'"
|
33
|
-
end
|
31
|
+
puts "Tagging #{playing} as #{name}"
|
32
|
+
"#{name} ← #{playing}"
|
34
33
|
end
|
35
34
|
|
36
35
|
def list name
|
37
|
-
t = Tag.where(name: name).first
|
36
|
+
t = Tag.where(name: name.to_s).first
|
37
|
+
t.export!
|
38
38
|
raise Error.new "Cannot find tag '#{t}'" unless t
|
39
39
|
`echo "load -p #{t.playlist}\nset play_library=false\nplayer-next" | cmus-remote`
|
40
|
-
|
40
|
+
"'#{name}' now playing"
|
41
41
|
end
|
42
42
|
|
43
43
|
def import name, path
|
@@ -51,12 +51,13 @@ module Keenser
|
|
51
51
|
n += 1
|
52
52
|
end
|
53
53
|
t.export!
|
54
|
-
|
54
|
+
"Imported #{n} songs"
|
55
55
|
end
|
56
56
|
|
57
57
|
def all
|
58
|
+
puts "Playing all songs"
|
58
59
|
`echo "set play_library=true\nplayer-next" | cmus-remote`
|
59
|
-
|
60
|
+
show
|
60
61
|
end
|
61
62
|
|
62
63
|
private
|
@@ -77,7 +78,6 @@ module Keenser
|
|
77
78
|
s
|
78
79
|
end
|
79
80
|
|
80
|
-
|
81
81
|
def test cmd
|
82
82
|
system "#{cmd} >/dev/null 2>&1"
|
83
83
|
end
|
@@ -85,14 +85,5 @@ module Keenser
|
|
85
85
|
def expect bin
|
86
86
|
raise Error.new "'#{bin}' is not present" unless test "which #{bin}"
|
87
87
|
end
|
88
|
-
|
89
|
-
def remote cmd
|
90
|
-
unless test "tmux list-windows -t '#{SESSION_NAME}'"
|
91
|
-
# tmux might complain about starting nested sessions without the TMUX=
|
92
|
-
`TMUX= tmux new-session -s '#{SESSION_NAME}' -d 'cmus'`
|
93
|
-
end
|
94
|
-
|
95
|
-
`cmus-remote --#{cmd}`
|
96
|
-
end
|
97
88
|
end
|
98
89
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "drb/drb"
|
2
|
+
require "pry"
|
3
|
+
|
4
|
+
module Keenser
|
5
|
+
def self.start_server!
|
6
|
+
# FIXME: $SAFE = 1
|
7
|
+
|
8
|
+
puts "Starting DRb server at '#{Server.uri}'"
|
9
|
+
DRb.start_service Server.uri, Server.new
|
10
|
+
DRb.thread.join
|
11
|
+
end
|
12
|
+
|
13
|
+
class Server
|
14
|
+
def self.uri
|
15
|
+
"druby://localhost:8787"
|
16
|
+
end
|
17
|
+
|
18
|
+
def play *args
|
19
|
+
cmd = args.shift || "pause"
|
20
|
+
Music.send cmd, *args
|
21
|
+
rescue => e
|
22
|
+
puts "#{'✗'.red} #{e.message}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/keenser/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keenser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Dabbs
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '4.6'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: thor
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.18'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.18'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: bundler
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,6 +106,7 @@ files:
|
|
120
106
|
- lib/keenser/model/song_tag.rb
|
121
107
|
- lib/keenser/model/tag.rb
|
122
108
|
- lib/keenser/music.rb
|
109
|
+
- lib/keenser/server.rb
|
123
110
|
- lib/keenser/version.rb
|
124
111
|
homepage: ''
|
125
112
|
licenses:
|
@@ -146,3 +133,4 @@ signing_key:
|
|
146
133
|
specification_version: 4
|
147
134
|
summary: A wee sidekick
|
148
135
|
test_files: []
|
136
|
+
has_rdoc:
|