airplay 1.0.0.beta1 → 1.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +3 -7
- data/README.md +2 -1
- data/Rakefile +74 -0
- data/airplay-cli.gemspec +19 -0
- data/airplay.gemspec +5 -8
- data/examples/demo.rb +5 -8
- data/lib/airplay.rb +20 -2
- data/lib/airplay/cli/version.rb +5 -0
- data/lib/airplay/configuration.rb +8 -3
- data/lib/airplay/connection.rb +0 -7
- data/lib/airplay/devices.rb +4 -1
- data/lib/airplay/group.rb +33 -0
- data/lib/airplay/group/players.rb +31 -0
- data/lib/airplay/playable.rb +7 -3
- data/lib/airplay/{protocol/player.rb → player.rb} +37 -17
- data/lib/airplay/player/media.rb +22 -0
- data/lib/airplay/player/playback_info.rb +51 -0
- data/lib/airplay/player/playlist.rb +41 -0
- data/lib/airplay/player/timers.rb +27 -0
- data/lib/airplay/server.rb +56 -0
- data/lib/airplay/server/app.rb +17 -0
- data/lib/airplay/version.rb +3 -0
- data/lib/airplay/viewable.rb +2 -2
- data/lib/airplay/{protocol/viewer.rb → viewer.rb} +2 -2
- metadata +22 -73
- data/lib/airplay/protocol.rb +0 -12
- data/lib/airplay/protocol/app.rb +0 -52
- data/lib/airplay/protocol/message.rb +0 -8
- data/lib/airplay/protocol/playback_info.rb +0 -49
- data/lib/airplay/protocol/reverse.rb +0 -69
- data/lib/airplay/protocol/slideshow.rb +0 -66
- data/lib/airplay/protocol/timers.rb +0 -25
- data/test/fixtures/cassettes/airplay/listing_slideshow_features.yml +0 -201
- data/test/fixtures/cassettes/airplay/play_an_entire_video.yml +0 -100
- data/test/fixtures/cassettes/airplay/sending_a_video.yml +0 -71
- data/test/fixtures/cassettes/airplay/sending_an_image.yml +0 -26439
- data/test/fixtures/cassettes/airplay/stop_any_transmission.yml +0 -8851
- data/test/integration/discovery_test.rb +0 -13
- data/test/integration/features_test.rb +0 -14
- data/test/integration/send_media_test.rb +0 -37
- data/test/integration/slideshow_test.rb +0 -26
- data/test/test_helper.rb +0 -42
- data/test/unit/node_test.rb +0 -17
- data/test/unit/protocol_test.rb +0 -44
@@ -1,13 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
require "minitest/mock"
|
3
|
-
|
4
|
-
describe "Airplay node discovery" do
|
5
|
-
it "should find a node in the network" do
|
6
|
-
Airplay.stub :nodes, stubbed_nodes do
|
7
|
-
assert Airplay.nodes.size > 0, "At least a node should be found"
|
8
|
-
Airplay.stub :active, stubbed_nodes.first do
|
9
|
-
assert_equal "MockTV", Airplay.active.name
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "minitest/mock"
|
2
|
-
require "test_helper"
|
3
|
-
|
4
|
-
describe "Airplay feature discovery" do
|
5
|
-
it "should get the node feature support" do
|
6
|
-
Airplay.stub :nodes, stubbed_nodes do
|
7
|
-
airplay_node = Airplay.nodes.first
|
8
|
-
features = airplay_node.features
|
9
|
-
|
10
|
-
assert features.video
|
11
|
-
assert features.photo
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
describe "Airplay sending media" do
|
4
|
-
it "should send an image" do
|
5
|
-
with_cassette("sending an image") do
|
6
|
-
assert Airplay.view("test/fixtures/files/logo.png")
|
7
|
-
assert Airplay.view(File.read("test/fixtures/files/logo.png"))
|
8
|
-
assert Airplay.view(File.open("test/fixtures/files/logo.png"))
|
9
|
-
assert Airplay.view("http://comicsymascomics.com/wp-content/uploads/images/31/v-de-vendetta.jpg")
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should play transitions through images" do
|
14
|
-
Airplay.transitions.each_with_index do |transition, i|
|
15
|
-
assert Airplay.view("test/fixtures/files/transition_#{i}.png", transition: transition)
|
16
|
-
sleep 0.1
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should play an entire video" do
|
21
|
-
skip("Works, but I need a way to make Net::PTTH to work with VCR :/")
|
22
|
-
|
23
|
-
with_cassette("play an entire video") do
|
24
|
-
Airplay.play("test/fixtures/files/video.mp4")
|
25
|
-
Airplay.player.wait
|
26
|
-
assert Airplay.player.played?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should stop any transmission" do
|
31
|
-
with_cassette("stop any transmission") do
|
32
|
-
Airplay.view("test/fixtures/files/logo.png")
|
33
|
-
sleep 0.1
|
34
|
-
Airplay.stop
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
describe "Airplay should list the slideshow features" do
|
4
|
-
it "should a list of features" do
|
5
|
-
with_cassette("listing slideshow features") do
|
6
|
-
features = Airplay.slideshow.features
|
7
|
-
assert features.size > 10
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should start a slideshow of images" do
|
12
|
-
skip("There are some missing parts in the reverse streaming")
|
13
|
-
|
14
|
-
with_cassette("playing a given slideshow") do
|
15
|
-
Airplay.use "corax"
|
16
|
-
Airplay.slideshow << [
|
17
|
-
"test/fixtures/files/image_01.jpg",
|
18
|
-
"test/fixtures/files/image_02.jpg"
|
19
|
-
]
|
20
|
-
|
21
|
-
Airplay.slideshow.play
|
22
|
-
sleep 10
|
23
|
-
Airplay.slideshow.stop
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "minitest/spec"
|
5
|
-
require "minitest/pride"
|
6
|
-
require "minitest/autorun"
|
7
|
-
require "vcr"
|
8
|
-
require "airplay"
|
9
|
-
|
10
|
-
ENV["TEST"] = "yes"
|
11
|
-
|
12
|
-
VCR.configure do |c|
|
13
|
-
c.cassette_library_dir = 'test/fixtures/cassettes/airplay'
|
14
|
-
c.allow_http_connections_when_no_cassette = true
|
15
|
-
c.default_cassette_options = { record: :new_episodes }
|
16
|
-
c.hook_into :fakeweb
|
17
|
-
end
|
18
|
-
|
19
|
-
def with_cassette(name, &block)
|
20
|
-
VCR.use_cassette(name, preserve_exact_body_bytes: true, &block)
|
21
|
-
end
|
22
|
-
|
23
|
-
def stubbed_nodes
|
24
|
-
nodes = Airplay::Nodes.new
|
25
|
-
node = Airplay::Node.create(
|
26
|
-
name: "MockTV",
|
27
|
-
address: "127.0.0.1:12345",
|
28
|
-
domain: "MockTV.local"
|
29
|
-
)
|
30
|
-
|
31
|
-
text_record = {
|
32
|
-
"rhd" => "4.6.3",
|
33
|
-
"features" => "0x180029FF",
|
34
|
-
"deviceid" => "7D:C3:A1:89:88:0C",
|
35
|
-
"model" => "AppleTV3,1",
|
36
|
-
"vv" => "1",
|
37
|
-
"srcvers" => "150.35"
|
38
|
-
}
|
39
|
-
|
40
|
-
node.parse_info(text_record)
|
41
|
-
nodes << node
|
42
|
-
end
|
data/test/unit/node_test.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
describe "Airplay::Node" do
|
4
|
-
it "should represent an Airplay node" do
|
5
|
-
node = Airplay::Node.create(
|
6
|
-
name: "MockTV",
|
7
|
-
address: "127.0.0.1:7000",
|
8
|
-
domain: "local"
|
9
|
-
)
|
10
|
-
|
11
|
-
assert_equal "MockTV", node.name
|
12
|
-
assert_equal "127.0.0.1:7000", node.address
|
13
|
-
assert_equal "local", node.domain
|
14
|
-
assert_equal "127.0.0.1", node.ip
|
15
|
-
assert_equal 7000, node.port
|
16
|
-
end
|
17
|
-
end
|
data/test/unit/protocol_test.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require_relative "../test_helper"
|
2
|
-
require "net/ptth/test"
|
3
|
-
|
4
|
-
describe "Airplay protocol events connection" do
|
5
|
-
before do
|
6
|
-
request = Net::HTTP::Post.new("/event")
|
7
|
-
request.body = <<-EOS.gsub(/^\s+/, '')
|
8
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
10
|
-
<plist version="1.0">
|
11
|
-
<dict>
|
12
|
-
<key>category</key>
|
13
|
-
<string>video</string>
|
14
|
-
<key>state</key>
|
15
|
-
<string>loading</string>
|
16
|
-
</dict>
|
17
|
-
</plist>
|
18
|
-
EOS
|
19
|
-
|
20
|
-
@server = Net::PTTH::TestServer.new(port: 12345, response: request)
|
21
|
-
Thread.new { @server.start }
|
22
|
-
end
|
23
|
-
|
24
|
-
after do
|
25
|
-
@server.close
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should get events from the server" do
|
29
|
-
Airplay.stub :nodes, stubbed_nodes do
|
30
|
-
Airplay.stub :active, stubbed_nodes.first do
|
31
|
-
reverse = Airplay::Protocol::Reverse.new(Airplay.active)
|
32
|
-
reverse.callbacks << proc do |response|
|
33
|
-
assert_equal "video", response["category"]
|
34
|
-
assert_equal "loading", response["state"]
|
35
|
-
|
36
|
-
reverse.disconnect
|
37
|
-
end
|
38
|
-
|
39
|
-
reverse.connect
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|