Skip to content

Commit

Permalink
Merge pull request #1035 from streamaserver/1.9.2
Browse files Browse the repository at this point in the history
1.9.3
  • Loading branch information
dularion committed Feb 5, 2021
2 parents 646d57b + 8d2fbf2 commit 210d96e
Show file tree
Hide file tree
Showing 39 changed files with 486 additions and 236 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -14,7 +14,7 @@ buildscript {
}
}

version "1.9.1"
version "1.9.3"
group "streama"


Expand Down
34 changes: 10 additions & 24 deletions grails-app/assets/javascripts/streama/controllers/dash-ctrl.js
Expand Up @@ -5,17 +5,14 @@ angular.module('streama').controller('dashCtrl',
var vm = this;

var LIST_MAX = 30;
vm.fetchFirstEpisodeAndPlay = fetchFirstEpisodeAndPlay;
vm.showDetails = showDetails;
vm.handleWatchlistUpdate = handleWatchlistUpdate;
vm.addToWatchlist = addToWatchlist;
vm.removeFromWatchlist = removeFromWatchlist;
vm.markCompleted = markCompleted;
vm.loadingRecommendations = true;
vm.isDashSectionHidden = isDashSectionHidden;
vm.isDashType = isDashType;

$scope.$on('changedGenre', onChangedGenre);
$scope.$on('video.updateWatchlist', onVideoUpdateWatchlist);

init();

Expand Down Expand Up @@ -143,18 +140,12 @@ angular.module('streama').controller('dashCtrl',
vm.tvShow.setFilter();
}

function fetchFirstEpisodeAndPlay(tvShow) {
apiService.dash.firstEpisodeForShow(tvShow.id).then(function (response) {
$state.go('player', {videoId: response.data.id});
});
}

function showDetails(media) {
if(media.mediaType === 'episode'){
modalService.mediaDetailModal({mediaId: media.tvShowId, mediaType: 'tvShow', isApiMovie: false});
}else{
modalService.mediaDetailModal({mediaId: media.id, mediaType: media.mediaType, isApiMovie: false}, function (response) {
updateWatchlist(response.action, vm.watchlistEntry.list, media, response.watchlistEntry);
updateWatchlist(response.action, _.get(vm.watchlistEntry, 'list'), media, response.watchlistEntry);
});
}
}
Expand All @@ -173,16 +164,17 @@ angular.module('streama').controller('dashCtrl',
function addToWatchlist(item) {
apiService.watchlistEntry.create(item).then(function (response) {
vm.watchlistEntry.list = vm.watchlistEntry.list ? vm.watchlistEntry.list : [];
updateWatchlist("added", vm.watchlistEntry.list, item, response.data);
updateWatchlist("added", _.get(vm.watchlistEntry, 'list'), item, response.data);
});
}

function removeFromWatchlist(item) {
vm.watchlistEntry.list = vm.watchlistEntry.list ? vm.watchlistEntry.list : [];
alertify.set({buttonReverse: true, labels: {ok: "Yes", cancel: "Cancel"}});
alertify.confirm("Are you sure you want to remove this video from your watchlist?", function (confirmed) {
if (confirmed) {
apiService.watchlistEntry.delete(item).then(function (response) {
updateWatchlist("removed", vm.watchlistEntry.list, item);
updateWatchlist("removed", _.get(vm.watchlistEntry, 'list'), item);
});
}
});
Expand Down Expand Up @@ -254,17 +246,6 @@ angular.module('streama').controller('dashCtrl',
return (showItemArray.indexOf(false) < 0);
}

function markCompleted(viewingStatus) {
alertify.set({buttonReverse: true, labels: {ok: "Yes", cancel: "Cancel"}});
alertify.confirm("Are you sure you want to mark this video as completed?", function (confirmed) {
if (confirmed) {
apiService.viewingStatus.delete(viewingStatus.id).then(function (data) {
_.remove(vm.continueWatching, {'id': viewingStatus.id});
});
}
})
}

function isDashSectionHidden(sectionName) {
var hiddenDashSectionSetting = _.find($scope.settings, {name: 'hidden_dash_sections'});
if(_.get(hiddenDashSectionSetting, 'parsedValue')){
Expand All @@ -273,4 +254,9 @@ angular.module('streama').controller('dashCtrl',
}
}

function onVideoUpdateWatchlist(e, data) {
vm.watchlistEntry.list = vm.watchlistEntry.list ? vm.watchlistEntry.list : [];
updateWatchlist(data.action, _.get(vm.watchlistEntry, 'list'), data.media, _.get(data.response, 'data'));
}

});
Expand Up @@ -12,6 +12,7 @@ angular.module('streama').controller('modalMediaDetailCtrl', [
$scope.listEpisodesForSeason = listEpisodesForSeason;
$scope.addToWatchlist = addToWatchlist;
$scope.removeFromWatchlist = removeFromWatchlist;
$scope.markAsUnviewed = markAsUnviewed;

if(config.mediaObject) {
$scope.media = config.mediaObject;
Expand Down Expand Up @@ -101,4 +102,11 @@ angular.module('streama').controller('modalMediaDetailCtrl', [
}
})
}

function markAsUnviewed() {
apiService.video.markAsUnviewed({id: $scope.media.id}).then(function () {
$scope.media.status = 'unviewed';
$rootScope.$broadcast('video.markAsUnviewed', {id: $scope.media.id});
});
}
}]);
@@ -0,0 +1,85 @@
//= wrapped

angular.module('streama').directive('streamaDashMediaItem', function () {
return {
restrict: 'E',
templateUrl: '/streama/directive--streama-dash-media-item.htm',
scope: {
entity: '='
},
bindToController: true,
controllerAs: 'vm',
controller: controller
}
});

function controller(apiService, modalService, $rootScope, $state, $scope) {
var vm = this;
vm.fetchFirstEpisodeAndPlay = fetchFirstEpisodeAndPlay;
vm.showDetails = showDetails;
vm.handleWatchlistUpdate = handleWatchlistUpdate;
vm.markCompleted = markCompleted;

$scope.$on('video.markAsUnviewed', onVideoMarkAsUnviewed);

function fetchFirstEpisodeAndPlay(tvShow) {
apiService.dash.firstEpisodeForShow(tvShow.id).then(function (response) {
$state.go('player', {videoId: response.data.id});
});
}

function showDetails(media) {
if(media.mediaType === 'episode'){
modalService.mediaDetailModal({mediaId: media.tvShowId, mediaType: 'tvShow', isApiMovie: false});
}else{
modalService.mediaDetailModal({mediaId: media.id, mediaType: media.mediaType, isApiMovie: false}, function (response) {
$rootScope.$broadcast('video.updateWatchlist', {response: response, media: media});
});
}
}

function handleWatchlistUpdate(action, item){
switch (action) {
case "added":
addToWatchlist(item);
break;
case "removed":
removeFromWatchlist(item);
break;
}
}

function addToWatchlist(item) {
apiService.watchlistEntry.create(item).then(function (response) {
$rootScope.$broadcast('video.updateWatchlist', {action: 'added', response: response, media: item});
});
}

function removeFromWatchlist(item) {
alertify.set({buttonReverse: true, labels: {ok: "Yes", cancel: "Cancel"}});
alertify.confirm("Are you sure you want to remove this video from your watchlist?", function (confirmed) {
if (confirmed) {
apiService.watchlistEntry.delete(item).then(function (response) {
$rootScope.$broadcast('video.updateWatchlist', {action: 'removed', media: item});
});
}
});
}

function markCompleted() {
alertify.set({buttonReverse: true, labels: {ok: "Yes", cancel: "Cancel"}});
alertify.confirm("Are you sure you want to mark this video as completed?", function (confirmed) {
if (confirmed) {
apiService.video.markCompleted({id: vm.entity.id}).then(function (data) {
vm.entity.deleted = true;
});
}
})
}

function onVideoMarkAsUnviewed(e, data) {
if(data.id === vm.entity.id){
vm.entity.status = 'unviewed';
}
}
}
Expand Up @@ -120,7 +120,13 @@ angular.module('streama').factory('apiService', function ($http, $rootScope, con
},
addLocalFile: function (params) {
return $http.get('video/addLocalFile.json', {params: params});
}
},
markAsUnviewed: function (params) {
return $http.get('video/markAsUnviewed.json', {params: params});
},
markCompleted: function (params) {
return $http.get('video/markCompleted.json', {params: params});
},
},

report: {
Expand Down
123 changes: 8 additions & 115 deletions grails-app/assets/javascripts/streama/templates/dash.tpl.htm
Expand Up @@ -45,25 +45,9 @@ <h2 class="genre-display" ng-if="$root.selectedGenre">{{'DASHBOARD.LOOKING_AT_GE
<h3>{{'DASHBOARD.CONTINUE_WATCHING' | translate}}</h3>

<div class="media-list media-list-continue-watching">
<div class="media-list-item media-poster-item" ng-repeat="viewingStatus in vm.continueWatching">
<div class="media-item" >
<div class="media-list-item media-poster-item" ng-repeat="viewingStatus in vm.continueWatching" ng-if="!viewingStatus.video.deleted">

<streama-video-image type="poster" video="viewingStatus.video" size="300"></streama-video-image>

<div class="play-text">
<h4>Continue "<span ng-bind="::(viewingStatus.video.title || viewingStatus.video.show.name)"></span>"</h4>
<button class=" btn btn-secondary btn-xss complete-watching" ng-click="vm.markCompleted(viewingStatus)">
{{'DASHBOARD.MARK_COMPLETED' | translate}}</button>
<p ng-show="viewingStatus.video.isEpisode"><span ng-bind="::viewingStatus.video.episodeString"></span></p>
</div>
<!--<div>-->
<!--<i ng-class="viewingStatus.video.inWatchlist ? 'remove-icon ion-android-remove-circle' : 'add-icon ion-android-add-circle'"-->
<!--ng-click="vm.handleWatchlistUpdate(viewingStatus.video.inWatchlist ? 'removed' : 'added', viewingStatus.video)"></i>-->
<!--</div>-->

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(viewingStatus.video)"></i>
<a class="play-icon ion-ios-play" ui-sref="player({videoId: viewingStatus.video.id})"></a>
</div>
<streama-dash-media-item entity="viewingStatus.video"></streama-dash-media-item>

<div class="media-progress-wrapper">

Expand Down Expand Up @@ -93,29 +77,15 @@ <h3>{{'DASHBOARD.RECOMMENDATIONS' | translate}}</h3>

<div class="media-list media-list-continue-watching">
<div class="media-list-item media-poster-item" ng-repeat="video in vm.recommendations track by video.id">
<div class="media-item" >

<streama-video-image type="poster" video="video"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::(video.title || video.show.name)"></h4>
<p ng-show="video.isEpisode"><span ng-bind="::video.episodeString"></span></p>
</div>
<div>
<i ng-class="video.inWatchlist ? 'remove-icon ion-android-remove-circle' : 'add-icon ion-android-add-circle'"
ng-click="vm.handleWatchlistUpdate(video.inWatchlist ? 'removed' : 'added', video)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(video)"></i>
<a class="play-icon ion-ios-play" ui-sref="player({videoId: video.id})"></a>
</div>
<streama-dash-media-item entity="video"></streama-dash-media-item>
</div>
</div>

</div>

<!----------------------------------------------watchlist-------------------------------------------->
<div ng-if="vm.isDashType('home') && vm.watchlistEntry.list.length && !vm.isDashSectionHidden('watchlist')">
<div ng-if="(vm.isDashType('home') || vm.isDashType('watchlist')) && vm.watchlistEntry.list.length && !vm.isDashSectionHidden('watchlist')">
<hr/>
<h3>{{'DASHBOARD.WATCHLIST' | translate}}</h3>

Expand All @@ -129,38 +99,7 @@ <h3>{{'DASHBOARD.WATCHLIST' | translate}}</h3>

<div class="media-list">
<div class="media-list-item media-poster-item" ng-repeat="watchlistEntry in vm.watchlistEntry.list track by watchlistEntry.id">
<div class="media-item" ng-if="watchlistEntry.tvShow">

<streama-video-image type="poster" size="300" video="watchlistEntry.tvShow"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::watchlistEntry.tvShow.name"></h4>
</div>
<i class="remove-icon ion-android-remove-circle" ng-click="vm.removeFromWatchlist(watchlistEntry.tvShow)"></i>
<div>
<i ng-class="'remove-icon ion-android-remove-circle'"
ng-click="vm.handleWatchlistUpdate('removed', watchlistEntry.tvShow)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(watchlistEntry.tvShow)"></i>
<a class="play-icon ion-ios-play" ng-click="vm.fetchFirstEpisodeAndPlay(watchlistEntry.tvShow)"></a>
</div>
<div class="media-item" ng-if="watchlistEntry.video">

<streama-video-image type="poster" size="300" video="watchlistEntry.video"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::watchlistEntry.video.title"></h4>
<p ng-bind="::watchlistEntry.video.release_date.substring(0,4)"></p>
</div>
<div>
<i ng-class="'remove-icon ion-android-remove-circle'"
ng-click="vm.handleWatchlistUpdate('removed', watchlistEntry.video)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(watchlistEntry.video)"></i>
<a class="play-icon ion-ios-play" ui-sref="player({videoId: watchlistEntry.video.id})"></a>
</div>
<streama-dash-media-item entity="watchlistEntry.tvShow || watchlistEntry.video"></streama-dash-media-item>
</div>
</div>
</div>
Expand Down Expand Up @@ -215,21 +154,7 @@ <h3>

<div class="media-list">
<div class="media-list-item media-poster-item" ng-repeat="tvShow in vm.tvShow.list | filter: vm.tvShow.filter.execute">
<div class="media-item" >
<streama-video-image type="poster" size="300" video="tvShow"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::tvShow.name"></h4>
</div>

<div>
<i ng-class="tvShow.inWatchlist ? 'remove-icon ion-android-remove-circle' : 'add-icon ion-android-add-circle'"
ng-click="vm.handleWatchlistUpdate(tvShow.inWatchlist ? 'removed' : 'added', tvShow)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(tvShow)"></i>
<a class="play-icon ion-ios-play" ng-click="vm.fetchFirstEpisodeAndPlay(tvShow)"></a>
</div>
<streama-dash-media-item entity="tvShow"></streama-dash-media-item>
</div>
</div>

Expand Down Expand Up @@ -285,22 +210,7 @@ <h3>

<div class="media-list">
<div class="media-list-item media-poster-item" ng-repeat="movie in vm.movie.list | orderBy:vm.movie.sorter.sort |filter: vm.movie.filter.execute">
<div class="media-item" >

<streama-video-image type="poster" size="300" video="movie"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::movie.title"></h4>
<p ng-bind="::movie.release_date.substring(0,4)"></p>
</div>
<div>
<i ng-class="movie.inWatchlist ? 'remove-icon ion-android-remove-circle' : 'add-icon ion-android-add-circle'"
ng-click="vm.handleWatchlistUpdate(movie.inWatchlist ? 'removed' : 'added', movie)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(movie)"></i>
<a class="play-icon ion-ios-play" ui-sref="player({videoId: movie.id})"></a>
</div>
<streama-dash-media-item entity="movie"></streama-dash-media-item>
</div>
</div>

Expand Down Expand Up @@ -341,24 +251,7 @@ <h3>

<div class="media-list">
<div class="media-list-item media-poster-item" ng-repeat="movie in vm.genericVideo.list |filter: vm.genericVideo.filter.title">

<div class="media-item" >


<streama-video-image type="poster" size="300" video="movie"></streama-video-image>

<div class="play-text">
<h4 ng-bind="::movie.title"></h4>
<p ng-bind="::movie.release_date.substring(0,4)"></p>
</div>
<div>
<i ng-class="movie.inWatchlist ? 'remove-icon ion-android-remove-circle' : 'add-icon ion-android-add-circle'"
ng-click="vm.handleWatchlistUpdate(movie.inWatchlist ? 'removed' : 'added', movie)"></i>
</div>

<i class="info-icon ion-ios-information" ng-click="vm.showDetails(movie)"></i>
<a class="play-icon ion-ios-play" ui-sref="player({videoId: movie.id})"></a>
</div>
<streama-dash-media-item entity="movie"></streama-dash-media-item>
</div>
</div>
</div>
Expand Down

0 comments on commit 210d96e

Please sign in to comment.