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.
Files changed (47) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +9 -0
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +3 -7
  5. data/README.md +2 -1
  6. data/Rakefile +74 -0
  7. data/airplay-cli.gemspec +19 -0
  8. data/airplay.gemspec +5 -8
  9. data/examples/demo.rb +5 -8
  10. data/lib/airplay.rb +20 -2
  11. data/lib/airplay/cli/version.rb +5 -0
  12. data/lib/airplay/configuration.rb +8 -3
  13. data/lib/airplay/connection.rb +0 -7
  14. data/lib/airplay/devices.rb +4 -1
  15. data/lib/airplay/group.rb +33 -0
  16. data/lib/airplay/group/players.rb +31 -0
  17. data/lib/airplay/playable.rb +7 -3
  18. data/lib/airplay/{protocol/player.rb → player.rb} +37 -17
  19. data/lib/airplay/player/media.rb +22 -0
  20. data/lib/airplay/player/playback_info.rb +51 -0
  21. data/lib/airplay/player/playlist.rb +41 -0
  22. data/lib/airplay/player/timers.rb +27 -0
  23. data/lib/airplay/server.rb +56 -0
  24. data/lib/airplay/server/app.rb +17 -0
  25. data/lib/airplay/version.rb +3 -0
  26. data/lib/airplay/viewable.rb +2 -2
  27. data/lib/airplay/{protocol/viewer.rb → viewer.rb} +2 -2
  28. metadata +22 -73
  29. data/lib/airplay/protocol.rb +0 -12
  30. data/lib/airplay/protocol/app.rb +0 -52
  31. data/lib/airplay/protocol/message.rb +0 -8
  32. data/lib/airplay/protocol/playback_info.rb +0 -49
  33. data/lib/airplay/protocol/reverse.rb +0 -69
  34. data/lib/airplay/protocol/slideshow.rb +0 -66
  35. data/lib/airplay/protocol/timers.rb +0 -25
  36. data/test/fixtures/cassettes/airplay/listing_slideshow_features.yml +0 -201
  37. data/test/fixtures/cassettes/airplay/play_an_entire_video.yml +0 -100
  38. data/test/fixtures/cassettes/airplay/sending_a_video.yml +0 -71
  39. data/test/fixtures/cassettes/airplay/sending_an_image.yml +0 -26439
  40. data/test/fixtures/cassettes/airplay/stop_any_transmission.yml +0 -8851
  41. data/test/integration/discovery_test.rb +0 -13
  42. data/test/integration/features_test.rb +0 -14
  43. data/test/integration/send_media_test.rb +0 -37
  44. data/test/integration/slideshow_test.rb +0 -26
  45. data/test/test_helper.rb +0 -42
  46. data/test/unit/node_test.rb +0 -17
  47. 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
@@ -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
@@ -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
@@ -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