tablo_connect 0.0.3 → 0.0.4
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/app/assets/javascripts/tablo_connect/ng_app/controllers/episodes_controller.js +1 -1
- data/app/assets/javascripts/tablo_connect/ng_app/controllers/movies_controller.js +1 -2
- data/app/assets/javascripts/tablo_connect/ng_app/controllers/shows_controller.js +1 -2
- data/app/assets/javascripts/tablo_connect/ng_app/filters/url_filter.js +24 -16
- data/app/assets/javascripts/tablo_connect/ng_app/services/tablo_service.js +6 -6
- data/app/assets/javascripts/tablo_connect/ng_app/templates/movies.html +1 -1
- data/app/assets/javascripts/tablo_connect/ng_app/templates/shows.html +1 -1
- data/app/controllers/tablo_connect/copy_controller.rb +2 -2
- data/app/controllers/tablo_connect/sync_controller.rb +23 -20
- data/app/models/tablo_connect/movie.rb +3 -2
- data/app/models/tablo_connect/show.rb +5 -5
- data/app/views/layouts/tablo_connect/application.html.erb +0 -4
- data/db/migrate/20151109173418_add_tablo_ip_to_tablo_connect_shows.rb +7 -0
- data/db/migrate/20151109173427_add_tablo_ip_to_tablo_connect_movies.rb +7 -0
- data/lib/tablo_connect.rb +2 -2
- data/lib/tablo_connect/engine.rb +2 -2
- data/lib/tablo_connect/version.rb +1 -1
- data/spec/controllers/tablo_connect/copy_controller_spec.rb +14 -14
- data/spec/controllers/tablo_connect/sync_controller_spec.rb +24 -24
- data/spec/factories/tablo_connect_movies.rb +1 -0
- data/spec/factories/tablo_connect_shows.rb +1 -1
- data/spec/javascript/angular-environment.js +0 -1
- data/spec/javascript/unit/controllers/movies_controller_spec.js +3 -9
- data/spec/javascript/unit/controllers/shows_controller_spec.js +3 -9
- data/spec/javascript/unit/filters/url_filter_spec.js +14 -0
- data/spec/javascript/unit/services/tablo_service_spec.js +2 -2
- data/spec/models/tablo_connect/movie_spec.rb +6 -2
- data/spec/models/tablo_connect/show_spec.rb +6 -2
- data/spec/test_app/db/schema.rb +5 -3
- data/spec/test_app/db/test.sqlite3 +0 -0
- data/spec/test_app/log/test.log +10416 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31465bd7d2afd932a492da3cb6dcbceb60aaffda
|
4
|
+
data.tar.gz: e9c2fc111d540a9bcb2794e924ea8f89ec4401c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1257617683c66a08a877c42b65242755f4a269b13dda133230c478f38ead11b55815076b9d7f9bd0ac4a5fb39be5de530ab7359bb7f367dd1e03fc9e19c3f35b
|
7
|
+
data.tar.gz: 86febfc96596f98239c77dbf14236b2485874c27ada323b74355326a45f545a5a3c1082eae7841ce6d23190ab392bec554f5f8dafea155922ede93722f3077da
|
@@ -2,7 +2,7 @@
|
|
2
2
|
'use strict';
|
3
3
|
|
4
4
|
angular.module('ac.tabloConnectApp')
|
5
|
-
.controller('EpisodesCtrl', ['$scope', '$stateParams', '
|
5
|
+
.controller('EpisodesCtrl', ['$scope', '$stateParams', 'tabloService', 'alertsService', function ($scope, $stateParams, tabloService, alertsService) {
|
6
6
|
$scope.episodes = tabloService.episodeData();
|
7
7
|
$scope.showTitle = $stateParams.showName;
|
8
8
|
$scope.alerts = alertsService.getAlerts();
|
@@ -2,10 +2,9 @@
|
|
2
2
|
'use strict';
|
3
3
|
|
4
4
|
angular.module('ac.tabloConnectApp')
|
5
|
-
.controller('MoviesCtrl', ['$scope', 'tabloService', '
|
5
|
+
.controller('MoviesCtrl', ['$scope', 'tabloService', 'alertsService', function ($scope, tabloService, alertsService) {
|
6
6
|
$scope.movies = tabloService.movieData();
|
7
7
|
$scope.alerts = alertsService.getAlerts();
|
8
|
-
$scope.tabloBaseUrl = tabloBaseUrl;
|
9
8
|
|
10
9
|
$scope.copyRecording = function (movie) {
|
11
10
|
alertsService.clearAlerts();
|
@@ -2,8 +2,7 @@
|
|
2
2
|
'use strict';
|
3
3
|
|
4
4
|
angular.module('ac.tabloConnectApp')
|
5
|
-
.controller('ShowsCtrl', ['$scope', '
|
5
|
+
.controller('ShowsCtrl', ['$scope', 'tabloService', function ($scope, tabloService) {
|
6
6
|
$scope.shows = tabloService.showData();
|
7
|
-
$scope.tabloBaseUrl = tabloBaseUrl;
|
8
7
|
}]);
|
9
8
|
})(window.angular);
|
@@ -1,19 +1,27 @@
|
|
1
|
-
(function(angular) {
|
2
|
-
|
1
|
+
(function (angular) {
|
2
|
+
'use strict';
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
4
|
+
angular.module('ac.url', [])
|
5
|
+
.filter('urlencode', [function () {
|
6
|
+
return function (string) {
|
7
|
+
if (!!string) {
|
8
|
+
return encodeURIComponent(string);
|
9
|
+
}
|
10
|
+
};
|
11
|
+
}])
|
12
|
+
.filter('urldecode', [function () {
|
13
|
+
return function (string) {
|
14
|
+
if (!!string) {
|
15
|
+
return decodeURIComponent(string);
|
16
|
+
}
|
17
|
+
};
|
18
|
+
}])
|
19
|
+
.filter('tabloBaseUrl', [function () {
|
20
|
+
return function (tabloIp) {
|
21
|
+
if (!!tabloIp) {
|
22
|
+
return 'http://' + tabloIp + ':18080';
|
23
|
+
}
|
24
|
+
};
|
25
|
+
}]);
|
18
26
|
|
19
27
|
})(window.angular);
|
@@ -41,22 +41,22 @@
|
|
41
41
|
episodeData: function() {
|
42
42
|
return episodeData;
|
43
43
|
},
|
44
|
-
copyRecording: function (
|
44
|
+
copyRecording: function (recording, type) {
|
45
45
|
return $http({
|
46
|
-
url: '/tablo/copy/' +
|
46
|
+
url: '/tablo/copy/' + recording.tablo_id + '/' + type + '?tablo_ip=' + recording.tablo_ip,
|
47
47
|
method: 'GET'
|
48
48
|
});
|
49
49
|
},
|
50
|
-
copyStatus: function (
|
50
|
+
copyStatus: function (recording, type) {
|
51
51
|
return $http({
|
52
|
-
url: '/tablo/copy/' +
|
52
|
+
url: '/tablo/copy/' + recording.tablo_id + '/' + type + '/status?tablo_ip=' + recording.tablo_ip,
|
53
53
|
method: 'GET'
|
54
54
|
});
|
55
55
|
},
|
56
56
|
initCopy: function (recording, type) {
|
57
57
|
var self = this;
|
58
58
|
|
59
|
-
self.copyRecording(recording
|
59
|
+
self.copyRecording(recording, type)
|
60
60
|
.success(function () {
|
61
61
|
recording.copy_status = 'in_progress';
|
62
62
|
$timeout(function () {
|
@@ -70,7 +70,7 @@
|
|
70
70
|
pollStatus: function (recording, type) {
|
71
71
|
var self = this;
|
72
72
|
|
73
|
-
self.copyStatus(recording
|
73
|
+
self.copyStatus(recording, type)
|
74
74
|
.success(function (res) {
|
75
75
|
if (res.copy_status === 'in_progress') {
|
76
76
|
$timeout(function () {
|
@@ -14,7 +14,7 @@
|
|
14
14
|
</thead>
|
15
15
|
<tbody>
|
16
16
|
<tr ng-repeat="movie in movies track by $index">
|
17
|
-
<td class="thumb"><img ng-src="{{tabloBaseUrl}}/stream/thumb?id={{movie.image_id}}"></td>
|
17
|
+
<td class="thumb"><img ng-src="{{movie.tablo_ip|tabloBaseUrl}}/stream/thumb?id={{movie.image_id}}"></td>
|
18
18
|
<td ng-bind="movie.title"></td>
|
19
19
|
<td ng-bind="movie.description"></td>
|
20
20
|
<td ng-bind="movie.release_year"></td>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<div ng-switch="!!shows">
|
5
5
|
<div ng-switch-when="true">
|
6
6
|
<a class="show-cell" ng-repeat="show in shows track by $index" ui-sref="episodes({showName: (show.show|urlencode)})">
|
7
|
-
<img ng-src="{{tabloBaseUrl}}/stream/thumb?id={{show.image_id}}" alt="{{show.show}}">
|
7
|
+
<img ng-src="{{show.tablo_ip|tabloBaseUrl}}/stream/thumb?id={{show.image_id}}" alt="{{show.show}}">
|
8
8
|
<div class="episode-count" ng-bind="show.count"></div>
|
9
9
|
</a>
|
10
10
|
</div>
|
@@ -29,12 +29,12 @@ module TabloConnect
|
|
29
29
|
return head :not_found if @item.nil?
|
30
30
|
end
|
31
31
|
|
32
|
-
@item = model.find_by_tablo_id(params[:tablo_id])
|
32
|
+
@item = model.find_by_tablo_ip(params[:tablo_ip]).find_by_tablo_id(params[:tablo_id])
|
33
33
|
head :not_found if @item.nil?
|
34
34
|
end
|
35
35
|
|
36
36
|
def source_path
|
37
|
-
"#{TabloConnect.tablo_base_url}/pvr/#{@item.tablo_id}/pl/playlist.m3u8"
|
37
|
+
"#{TabloConnect.tablo_base_url(@item.tablo_ip)}/pvr/#{@item.tablo_id}/pl/playlist.m3u8"
|
38
38
|
end
|
39
39
|
|
40
40
|
def destination_path
|
@@ -5,9 +5,12 @@ module TabloConnect
|
|
5
5
|
class SyncController < ApplicationController
|
6
6
|
def index
|
7
7
|
begin
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
TabloConnect.tablo_ips.each do |ip|
|
9
|
+
item_ids = parse_items(ip)
|
10
|
+
delete_removed(ip, item_ids)
|
11
|
+
update_items(ip, item_ids)
|
12
|
+
end
|
13
|
+
|
11
14
|
head :ok
|
12
15
|
rescue => e
|
13
16
|
render json: {error: e.to_s}, status: :internal_server_error
|
@@ -16,35 +19,35 @@ module TabloConnect
|
|
16
19
|
|
17
20
|
private
|
18
21
|
|
19
|
-
def parse_items
|
20
|
-
page = Nokogiri::HTML(open("#{TabloConnect.tablo_base_url}/pvr/"))
|
22
|
+
def parse_items(tablo_ip)
|
23
|
+
page = Nokogiri::HTML(open("#{TabloConnect.tablo_base_url(tablo_ip)}/pvr/"))
|
21
24
|
page.css('tbody a').map { |row|
|
22
25
|
row[:href].gsub('/', '').to_i if row[:href].gsub('/', '') =~ /\A\d+\z/
|
23
26
|
}.compact
|
24
27
|
end
|
25
28
|
|
26
|
-
def delete_removed(new_ids)
|
27
|
-
old_ids = TabloConnect::Movie.
|
28
|
-
delete_ids = old_ids.map {|i| i.tablo_id } - new_ids
|
29
|
+
def delete_removed(tablo_ip, new_ids)
|
30
|
+
old_ids = TabloConnect::Movie.find_by_tablo_ip(tablo_ip) + TabloConnect::Show.find_by_tablo_ip(tablo_ip)
|
31
|
+
delete_ids = old_ids.map { |i| i.tablo_id } - new_ids
|
29
32
|
|
30
|
-
TabloConnect::Movie.delete_by_tablo_id(delete_ids)
|
31
|
-
TabloConnect::Show.delete_by_tablo_id(delete_ids)
|
33
|
+
TabloConnect::Movie.find_by_tablo_ip(tablo_ip).delete_by_tablo_id(delete_ids)
|
34
|
+
TabloConnect::Show.find_by_tablo_ip(tablo_ip).delete_by_tablo_id(delete_ids)
|
32
35
|
end
|
33
36
|
|
34
|
-
def update_items(tablo_ids)
|
37
|
+
def update_items(tablo_ip, tablo_ids)
|
35
38
|
tablo_ids.each do |tablo_id|
|
36
|
-
details = recording_details tablo_id
|
39
|
+
details = recording_details(tablo_ip, tablo_id)
|
37
40
|
|
38
41
|
if details[:recMovie].present?
|
39
|
-
update_movie(tablo_id, details)
|
42
|
+
update_movie(tablo_ip, tablo_id, details)
|
40
43
|
elsif details[:recEpisode].present?
|
41
|
-
update_show(tablo_id, details)
|
44
|
+
update_show(tablo_ip, tablo_id, details)
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
45
48
|
|
46
|
-
def update_movie(tablo_id, details)
|
47
|
-
item = TabloConnect::Movie.find_or_create_by(tablo_id: tablo_id)
|
49
|
+
def update_movie(tablo_ip, tablo_id, details)
|
50
|
+
item = TabloConnect::Movie.find_or_create_by(tablo_ip: tablo_ip, tablo_id: tablo_id)
|
48
51
|
item.title = details.try(:[], :recMovie).try(:[], :jsonForClient).try(:[], :title)
|
49
52
|
item.description = details.try(:[], :recMovie).try(:[], :jsonForClient).try(:[], :plot)
|
50
53
|
item.release_year = details.try(:[], :recMovie).try(:[], :jsonForClient).try(:[], :releaseYear)
|
@@ -53,8 +56,8 @@ module TabloConnect
|
|
53
56
|
item.save!
|
54
57
|
end
|
55
58
|
|
56
|
-
def update_show(tablo_id, details)
|
57
|
-
item = TabloConnect::Show.find_or_create_by(tablo_id: tablo_id)
|
59
|
+
def update_show(tablo_ip, tablo_id, details)
|
60
|
+
item = TabloConnect::Show.find_or_create_by(tablo_ip: tablo_ip, tablo_id: tablo_id)
|
58
61
|
item.show = details.try(:[], :recEpisode).try(:[], :jsonFromTribune).try(:[], :program).try(:[], :title)
|
59
62
|
item.title = details.try(:[], :recEpisode).try(:[], :jsonFromTribune).try(:[], :program).try(:[], :episodeTitle)
|
60
63
|
item.description = details.try(:[], :recEpisode).try(:[], :jsonFromTribune).try(:[], :program).try(:[], :longDescription)
|
@@ -66,8 +69,8 @@ module TabloConnect
|
|
66
69
|
item.save!
|
67
70
|
end
|
68
71
|
|
69
|
-
def recording_details(tablo_id)
|
70
|
-
JSON.parse(RestClient.get("#{TabloConnect.tablo_base_url}/pvr/#{tablo_id}/meta.txt")).with_indifferent_access
|
72
|
+
def recording_details(tablo_ip, tablo_id)
|
73
|
+
JSON.parse(RestClient.get("#{TabloConnect.tablo_base_url(tablo_ip)}/pvr/#{tablo_id}/meta.txt")).with_indifferent_access
|
71
74
|
end
|
72
75
|
end
|
73
76
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module TabloConnect
|
2
2
|
class Movie < ActiveRecord::Base
|
3
|
-
validates_presence_of :tablo_id
|
4
|
-
validates_uniqueness_of :tablo_id
|
3
|
+
validates_presence_of :tablo_ip, :tablo_id
|
4
|
+
validates_uniqueness_of :tablo_ip, scope: :tablo_id
|
5
5
|
|
6
6
|
enum copy_status: [:idle, :in_progress, :complete]
|
7
7
|
|
8
8
|
scope :all_order_title, -> { self.all.order(:title) }
|
9
|
+
scope :find_by_tablo_ip, -> (tablo_ip) { where(tablo_ip: tablo_ip) }
|
9
10
|
|
10
11
|
def self.delete_by_tablo_id(delete_ids)
|
11
12
|
self.where(tablo_id: delete_ids).delete_all
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module TabloConnect
|
2
2
|
class Show < ActiveRecord::Base
|
3
|
-
validates_presence_of :tablo_id
|
4
|
-
validates_uniqueness_of :tablo_id
|
3
|
+
validates_presence_of :tablo_ip, :tablo_id
|
4
|
+
validates_uniqueness_of :tablo_ip, scope: :tablo_id
|
5
5
|
|
6
6
|
enum copy_status: [:idle, :in_progress, :complete]
|
7
7
|
|
8
8
|
scope :shows, -> { group(:show).order(:show).count }
|
9
9
|
scope :show_episodes, ->(show) { where(show: show).order(:season, :episode, :rec_date, :title) }
|
10
|
+
scope :find_by_tablo_ip, -> (tablo_ip) { where(tablo_ip: tablo_ip) }
|
10
11
|
|
11
12
|
def self.shows_with_image_id
|
12
13
|
self.shows.map { |show|
|
13
|
-
|
14
|
-
|
15
|
-
{show: show[0], count: show[1], image_id: image_id}
|
14
|
+
image_data = self.select(:image_id, :tablo_ip).distinct(:image_id).where({show: show[0]}).order(image_id: :desc).limit(1).first
|
15
|
+
{show: show[0], count: show[1], image_id: image_data.try(:[], :image_id), tablo_ip: image_data.try(:[], :tablo_ip)}
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
@@ -10,10 +10,6 @@
|
|
10
10
|
<div class="container-fluid">
|
11
11
|
<%= yield %>
|
12
12
|
</div>
|
13
|
-
|
14
13
|
<%= javascript_include_tag "tablo_connect/application" %>
|
15
|
-
<script>
|
16
|
-
angular.module('ac.tabloConnectApp').constant('tabloBaseUrl', '<%= "http://#{TabloConnect.tablo_ip}:#{TabloConnect.tablo_port}" %>')
|
17
|
-
</script>
|
18
14
|
</body>
|
19
15
|
</html>
|
data/lib/tablo_connect.rb
CHANGED
data/lib/tablo_connect/engine.rb
CHANGED
@@ -15,32 +15,32 @@ module TabloConnect
|
|
15
15
|
|
16
16
|
context "when the item is not found" do
|
17
17
|
it "returns a 404" do
|
18
|
-
get :index, {tablo_id: 99999, type: 'some_type'}
|
18
|
+
get :index, {tablo_ip: show.tablo_ip, tablo_id: 99999, type: 'some_type'}
|
19
19
|
expect(response.status).to eq 404
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
context "when the item is found" do
|
24
24
|
it "returns a 200" do
|
25
|
-
get :index, {tablo_id: show.tablo_id, type: 'show'}
|
25
|
+
get :index, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
26
26
|
expect(response.status).to eq 200
|
27
27
|
end
|
28
28
|
|
29
29
|
it "calls spawn" do
|
30
30
|
expect(controller).to receive(:spawn)
|
31
|
-
get :index, {tablo_id: show.tablo_id, type: 'show'}
|
31
|
+
get :index, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
32
32
|
end
|
33
33
|
|
34
34
|
it "sets the copy_status to in_progress" do
|
35
35
|
item = TabloConnect::Show.find_by_tablo_id show.tablo_id
|
36
36
|
expect(item.copy_status).to eq('idle')
|
37
|
-
get :index, {tablo_id: show.tablo_id, type: 'show'}
|
37
|
+
get :index, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
38
38
|
item.reload
|
39
39
|
expect(item.copy_status).to eq('in_progress')
|
40
40
|
end
|
41
41
|
|
42
42
|
it "returns an object with a shows array" do
|
43
|
-
get :index, {tablo_id: show.tablo_id, type: 'show'}
|
43
|
+
get :index, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
44
44
|
json_body = JSON.parse(response.body).with_indifferent_access
|
45
45
|
expect(json_body).to match({pid: 1234, destination: '/tmp/output.mp4'})
|
46
46
|
end
|
@@ -50,16 +50,16 @@ module TabloConnect
|
|
50
50
|
describe "GET status" do
|
51
51
|
it "calls file_copy_status" do
|
52
52
|
expect(controller).to receive(:file_copy_status)
|
53
|
-
get :status, {tablo_id: show.tablo_id, type: 'show'}
|
53
|
+
get :status, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
54
54
|
end
|
55
55
|
|
56
56
|
it "returns a 200 status code" do
|
57
|
-
get :status, {tablo_id: show.tablo_id, type: 'show'}
|
57
|
+
get :status, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
58
58
|
expect(response.status).to eq 200
|
59
59
|
end
|
60
60
|
|
61
61
|
it "returns a JSON object with the copy_status" do
|
62
|
-
get :status, {tablo_id: show.tablo_id, type: 'show'}
|
62
|
+
get :status, {tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'show'}
|
63
63
|
json_body = JSON.parse(response.body).with_indifferent_access
|
64
64
|
expect(json_body[:copy_status]).to eq show.copy_status
|
65
65
|
end
|
@@ -72,7 +72,7 @@ module TabloConnect
|
|
72
72
|
|
73
73
|
context "when the type is not show or movie" do
|
74
74
|
it "returns a 404" do
|
75
|
-
allow(controller).to receive(:params).and_return({tablo_id: show.tablo_id, type: 'invalid_type'})
|
75
|
+
allow(controller).to receive(:params).and_return({tablo_ip: TabloConnect.tablo_ips[0], tablo_id: show.tablo_id, type: 'invalid_type'})
|
76
76
|
expect(controller).to receive(:head).with(:not_found)
|
77
77
|
controller.send(:set_item)
|
78
78
|
end
|
@@ -81,7 +81,7 @@ module TabloConnect
|
|
81
81
|
context "when the type is 'show' or 'movie'" do
|
82
82
|
context "when the type is 'movie'" do
|
83
83
|
it "uses the Movie model" do
|
84
|
-
allow(controller).to receive(:params).and_return({tablo_id: show.tablo_id, type: 'movie'})
|
84
|
+
allow(controller).to receive(:params).and_return({tablo_ip: show.tablo_ip, tablo_id: show.tablo_id, type: 'movie'})
|
85
85
|
expect(TabloConnect::Movie).to receive(:find_by_tablo_id).with(show.tablo_id)
|
86
86
|
controller.send(:set_item)
|
87
87
|
end
|
@@ -89,7 +89,7 @@ module TabloConnect
|
|
89
89
|
|
90
90
|
context "when the type is 'show'" do
|
91
91
|
it "uses the Show model" do
|
92
|
-
allow(controller).to receive(:params).and_return({tablo_id: show.tablo_id, type: 'show'})
|
92
|
+
allow(controller).to receive(:params).and_return({tablo_ip: show.tablo_ip, tablo_id: show.tablo_id, type: 'show'})
|
93
93
|
expect(TabloConnect::Show).to receive(:find_by_tablo_id).with(show.tablo_id)
|
94
94
|
controller.send(:set_item)
|
95
95
|
end
|
@@ -97,14 +97,14 @@ module TabloConnect
|
|
97
97
|
|
98
98
|
context "when the item is not found" do
|
99
99
|
it "returns a 404" do
|
100
|
-
allow(controller).to receive(:params).and_return({tablo_id: 99999, type: 'show'})
|
100
|
+
allow(controller).to receive(:params).and_return({tablo_ip: show.tablo_ip, tablo_id: 99999, type: 'show'})
|
101
101
|
controller.send(:set_item)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
105
|
context "when the item is found" do
|
106
106
|
it "sets the @item instance variable" do
|
107
|
-
allow(controller).to receive(:params).and_return({tablo_id: show.tablo_id, type: 'show'})
|
107
|
+
allow(controller).to receive(:params).and_return({tablo_ip: show.tablo_ip, tablo_id: show.tablo_id, type: 'show'})
|
108
108
|
controller.send(:set_item)
|
109
109
|
item = controller.instance_variable_get(:@item)
|
110
110
|
expect(item).to match(show)
|
@@ -117,7 +117,7 @@ module TabloConnect
|
|
117
117
|
it "builds the source_path with the tablo_id" do
|
118
118
|
controller.instance_variable_set(:@item, show)
|
119
119
|
path = controller.send(:source_path)
|
120
|
-
expect(path).to eq "#{TabloConnect.tablo_base_url}/pvr/#{show.tablo_id}/pl/playlist.m3u8"
|
120
|
+
expect(path).to eq "#{TabloConnect.tablo_base_url(show.tablo_ip)}/pvr/#{show.tablo_id}/pl/playlist.m3u8"
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|