airplay 0.2.9 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -0
- data/Gemfile.lock +68 -0
- data/HUGS +15 -0
- data/LICENSE +20 -0
- data/README.md +50 -72
- data/Rakefile +6 -9
- data/SPEC.md +34 -0
- data/airplay.gemspec +28 -16
- data/bin/air +27 -0
- data/examples/demo.rb +35 -0
- data/examples/image.rb +9 -0
- data/examples/video.rb +24 -0
- data/lib/airplay.rb +38 -17
- data/lib/airplay/browser.rb +68 -0
- data/lib/airplay/cli.rb +104 -0
- data/lib/airplay/configuration.rb +29 -0
- data/lib/airplay/connection.rb +114 -0
- data/lib/airplay/connection/authentication.rb +37 -0
- data/lib/airplay/connection/persistent.rb +44 -0
- data/lib/airplay/device.rb +81 -0
- data/lib/airplay/device/features.rb +43 -0
- data/lib/airplay/device/info.rb +22 -0
- data/lib/airplay/devices.rb +46 -0
- data/lib/airplay/logger.rb +20 -0
- data/lib/airplay/playable.rb +24 -0
- data/lib/airplay/protocol.rb +9 -72
- data/lib/airplay/protocol/app.rb +52 -0
- data/lib/airplay/protocol/message.rb +8 -0
- data/lib/airplay/protocol/playback_info.rb +49 -0
- data/lib/airplay/protocol/player.rb +170 -0
- data/lib/airplay/protocol/reverse.rb +69 -0
- data/lib/airplay/protocol/slideshow.rb +66 -0
- data/lib/airplay/protocol/timers.rb +25 -0
- data/lib/airplay/protocol/viewer.rb +56 -0
- data/lib/airplay/structure.rb +7 -0
- data/lib/airplay/viewable.rb +16 -0
- data/test/fixtures/cassettes/airplay/listing_slideshow_features.yml +201 -0
- data/test/fixtures/cassettes/airplay/play_an_entire_video.yml +100 -0
- data/test/fixtures/cassettes/airplay/sending_a_video.yml +71 -0
- data/test/fixtures/cassettes/airplay/sending_an_image.yml +26439 -0
- data/test/fixtures/cassettes/airplay/stop_any_transmission.yml +8851 -0
- data/test/fixtures/files/logo.png +0 -0
- data/test/fixtures/files/transition_0.png +0 -0
- data/test/fixtures/files/transition_1.png +0 -0
- data/test/fixtures/files/transition_2.png +0 -0
- data/test/fixtures/files/transition_3.png +0 -0
- data/test/integration/discovery_test.rb +13 -0
- data/test/integration/features_test.rb +14 -0
- data/test/integration/send_media_test.rb +37 -0
- data/test/integration/slideshow_test.rb +26 -0
- data/test/test_helper.rb +42 -0
- data/test/unit/node_test.rb +17 -0
- data/test/unit/protocol_test.rb +44 -0
- metadata +247 -77
- data/.gitignore +0 -2
- data/.travis.yml +0 -6
- data/examples/jobs.jpg +0 -0
- data/examples/send_image.rb +0 -5
- data/examples/send_video.rb +0 -7
- data/lib/airplay/client.rb +0 -60
- data/lib/airplay/protocol/image.rb +0 -41
- data/lib/airplay/protocol/media.rb +0 -64
- data/lib/airplay/protocol/scrub.rb +0 -37
- data/lib/airplay/server.rb +0 -2
- data/lib/airplay/server/browser.rb +0 -35
- data/lib/airplay/server/node.rb +0 -7
- data/test/authentication.rb +0 -13
- data/test/discovery.rb +0 -27
- data/test/fixtures/cassettes/airplay/authenticate_all_the_things_.yml +0 -139
- data/test/fixtures/cassettes/airplay/control_a_video_being_played_in_apple_tv.yml +0 -242
- data/test/fixtures/cassettes/airplay/get_current_scrub_from_apple_tv.yml +0 -69
- data/test/fixtures/cassettes/airplay/go_to_a_given_position_in_the_video.yml +0 -157
- data/test/fixtures/cassettes/airplay/send_audio_to_apple_tv.yml +0 -33
- data/test/fixtures/cassettes/airplay/send_image_to_apple_tv.yml +0 -661
- data/test/fixtures/cassettes/airplay/send_image_to_apple_tv_with_effects.yml +0 -591
- data/test/fixtures/cassettes/airplay/send_video_to_apple_tv.yml +0 -33
- data/test/fixtures/image.gif +0 -0
- data/test/fixtures/image2.gif +0 -0
- data/test/helper.rb +0 -31
- data/test/images.rb +0 -31
- data/test/media.rb +0 -47
- data/test/scrub.rb +0 -31
@@ -1,33 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: http://mocktv.local:7000/play
|
6
|
-
body:
|
7
|
-
encoding: US-ASCII
|
8
|
-
base64_string: |
|
9
|
-
Q29udGVudC1Mb2NhdGlvbjogaHR0cDovL3d3dy55by15by5vcmcvbXA0L3l1
|
10
|
-
Lm1wNApTdGFydC1Qb3NpdGlvbjogMAo=
|
11
|
-
|
12
|
-
headers:
|
13
|
-
user-agent:
|
14
|
-
- MediaControl/1.0
|
15
|
-
connection:
|
16
|
-
- keep-alive
|
17
|
-
keep-alive:
|
18
|
-
- 30
|
19
|
-
response:
|
20
|
-
status:
|
21
|
-
code: 200
|
22
|
-
message: OK
|
23
|
-
headers:
|
24
|
-
date:
|
25
|
-
- Fri, 23 Mar 2012 22:40:15 GMT
|
26
|
-
content-length:
|
27
|
-
- "0"
|
28
|
-
body:
|
29
|
-
encoding: US-ASCII
|
30
|
-
base64_string: ""
|
31
|
-
http_version: "1.1"
|
32
|
-
recorded_at: Fri, 23 Mar 2012 22:40:16 GMT
|
33
|
-
recorded_with: VCR 2.0.0
|
data/test/fixtures/image.gif
DELETED
Binary file
|
data/test/fixtures/image2.gif
DELETED
Binary file
|
data/test/helper.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
$:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
|
2
|
-
|
3
|
-
require "airplay"
|
4
|
-
require 'vcr'
|
5
|
-
require "cutest"
|
6
|
-
|
7
|
-
module MockedBrowser
|
8
|
-
attr_reader :servers
|
9
|
-
|
10
|
-
def self.browse
|
11
|
-
@servers = [Airplay::Server::Node.new("Mock TV", ".local", "mocktv.local", 7000)]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.find_by_name(name)
|
15
|
-
if name == "Mock TV"
|
16
|
-
@servers.first
|
17
|
-
else
|
18
|
-
raise Airplay::Client::ServerNotFoundError
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
VCR.configure do |c|
|
24
|
-
c.cassette_library_dir = 'test/fixtures/cassettes/airplay'
|
25
|
-
c.default_cassette_options = { :record => :once }
|
26
|
-
c.hook_into :fakeweb
|
27
|
-
end
|
28
|
-
|
29
|
-
def with_cassette(name, &block)
|
30
|
-
VCR.use_cassette(name, :preserve_exact_body_bytes => true) { block.call if block }
|
31
|
-
end
|
data/test/images.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
2
|
-
|
3
|
-
scope do
|
4
|
-
test "check image protocol class" do
|
5
|
-
image_protocol = Airplay::Protocol::Image.new("127.0.0.1")
|
6
|
-
assert_equal "/photo", image_protocol.resource
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
scope do
|
11
|
-
setup do
|
12
|
-
@airplay = Airplay::Client.new(false, MockedBrowser)
|
13
|
-
end
|
14
|
-
|
15
|
-
test "send an image to the server" do
|
16
|
-
with_cassette("send image to apple tv") do
|
17
|
-
file_path = "./test/fixtures/image2.gif"
|
18
|
-
assert @airplay.send_image(file_path).kind_of?(String)
|
19
|
-
assert @airplay.send_image(File.open(file_path)).kind_of?(String)
|
20
|
-
assert @airplay.send_image("http://cdn.mactrast.com/wp-content/uploads/2011/04/Steve-Jobs-Apple-CEO.jpg").kind_of?(String)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
test "send an image to the server doing all the effects" do
|
25
|
-
with_cassette("send image to apple tv with effects") do
|
26
|
-
[:none, :slide_left, :slide_right, :dissolve].each do |effect|
|
27
|
-
assert @airplay.send_image("./test/fixtures/image.gif", effect).kind_of?(String)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/test/media.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
2
|
-
|
3
|
-
scope do
|
4
|
-
test "check media protocol class" do
|
5
|
-
image_protocol = Airplay::Protocol::Media.new("127.0.0.1")
|
6
|
-
assert_equal "/play", image_protocol.resource
|
7
|
-
assert_equal "/stop", image_protocol.stop_resource
|
8
|
-
assert_equal "/rate", image_protocol.pause_resource
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
scope do
|
13
|
-
setup do
|
14
|
-
@airplay = Airplay::Client.new(false, MockedBrowser)
|
15
|
-
end
|
16
|
-
|
17
|
-
test "send a video to the server" do
|
18
|
-
with_cassette("send video to apple tv") do
|
19
|
-
assert @airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
test "player capabilities" do
|
24
|
-
with_cassette("control a video being played in apple tv") do
|
25
|
-
player = @airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
|
26
|
-
|
27
|
-
assert player.pause
|
28
|
-
assert player.resume
|
29
|
-
assert player.scrub.has_key?("position")
|
30
|
-
assert player.scrub.has_key?("duration")
|
31
|
-
assert player.scrub("10%")
|
32
|
-
assert player.stop
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
test "send audio to the server" do
|
37
|
-
with_cassette("send audio to apple tv") do
|
38
|
-
assert @airplay.send_audio("http://www.robtowns.com/music/blind_willie.mp3")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
test "raise an exception on invalid media url" do
|
43
|
-
assert_raise Airplay::Protocol::InvalidMediaError do
|
44
|
-
@airplay.send_video("Surculus Fructum!")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/test/scrub.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
2
|
-
|
3
|
-
scope do
|
4
|
-
test "check image protocol class" do
|
5
|
-
scrub_protocol = Airplay::Protocol::Scrub.new("127.0.0.1")
|
6
|
-
assert_equal "/scrub", scrub_protocol.resource
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
scope do
|
11
|
-
setup do
|
12
|
-
@airplay = Airplay::Client.new(false, MockedBrowser)
|
13
|
-
end
|
14
|
-
|
15
|
-
test "check scrub status" do
|
16
|
-
with_cassette("get current scrub from apple tv") do
|
17
|
-
assert @airplay.scrub.has_key?("duration")
|
18
|
-
assert @airplay.scrub.has_key?("position")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
test "move to a given position" do
|
23
|
-
with_cassette("go to a given position in the video") do
|
24
|
-
@airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
|
25
|
-
duration = @airplay.scrub.fetch("duration")
|
26
|
-
|
27
|
-
assert @airplay.scrub(duration/2)
|
28
|
-
assert @airplay.scrub("50%")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|