kopia lustrzana https://github.com/mediacms-io/mediacms
897 wiersze
26 KiB
JavaScript
897 wiersze
26 KiB
JavaScript
import EventEmitter from 'events';
|
||
import { exportStore, getRequest, postRequest, putRequest, deleteRequest, csrfToken } from '../helpers';
|
||
import { config as mediacmsConfig } from '../settings/config.js';
|
||
|
||
import UrlParse from 'url-parse';
|
||
|
||
import PageStore from './PageStore.js';
|
||
|
||
function extractPlaylistId() {
|
||
let playlistId = null;
|
||
|
||
const getParamsString = window.location.search;
|
||
|
||
if ('' !== getParamsString) {
|
||
let tmp = getParamsString.split('?');
|
||
|
||
if (2 === tmp.length) {
|
||
tmp = tmp[1].split('&');
|
||
|
||
let x;
|
||
|
||
let i = 0;
|
||
while (i < tmp.length) {
|
||
x = tmp[i].split('=');
|
||
|
||
if ('pl' === x[0]) {
|
||
if (2 === x.length) {
|
||
playlistId = x[1];
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
i += 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
return playlistId;
|
||
}
|
||
|
||
const MediaPageStoreData = {};
|
||
|
||
class MediaPageStore extends EventEmitter {
|
||
constructor() {
|
||
super();
|
||
|
||
this.mediacms_config = mediacmsConfig(window.MediaCMS);
|
||
|
||
this._MEDIA = null;
|
||
|
||
this.pagePlaylistId = null;
|
||
this.pagePlaylistData = null;
|
||
this.userList = null;
|
||
|
||
MediaPageStoreData[
|
||
Object.defineProperty(this, 'id', { value: 'MediaPageStoreData_' + Object.keys(MediaPageStoreData).length }).id
|
||
] = {
|
||
likedMedia: false,
|
||
dislikedMedia: false,
|
||
reported_times: 0,
|
||
while: {
|
||
deleteMedia: false,
|
||
submitComment: false,
|
||
deleteCommentId: null,
|
||
},
|
||
};
|
||
|
||
this.removeMediaResponse = this.removeMediaResponse.bind(this);
|
||
this.removeMediaFail = this.removeMediaFail.bind(this);
|
||
|
||
this.submitCommentFail = this.submitCommentFail.bind(this);
|
||
this.submitCommentResponse = this.submitCommentResponse.bind(this);
|
||
|
||
this.removeCommentFail = this.removeCommentFail.bind(this);
|
||
this.removeCommentResponse = this.removeCommentResponse.bind(this);
|
||
}
|
||
|
||
loadData() {
|
||
if (!MediaPageStoreData[this.id].mediaId) {
|
||
let urlParams = (function () {
|
||
let ret = new UrlParse(window.location.href).query;
|
||
if (!ret) {
|
||
ret = [];
|
||
} else {
|
||
ret = ret.substring(1);
|
||
ret.split('&');
|
||
ret = ret.length ? ret.split('=') : [];
|
||
}
|
||
return ret;
|
||
})();
|
||
|
||
if (urlParams.length) {
|
||
let i = 0;
|
||
while (i < urlParams.length) {
|
||
if ('m' === urlParams[i]) {
|
||
// NOTE: "m" => media id/token.
|
||
MediaPageStoreData[this.id].mediaId = urlParams[i + 1];
|
||
}
|
||
i += 2;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!MediaPageStoreData[this.id].mediaId) {
|
||
console.warn('Invalid media id:', MediaPageStoreData[this.id].mediaId);
|
||
return false;
|
||
}
|
||
|
||
this.mediaAPIUrl = this.mediacms_config.api.media + '/' + MediaPageStoreData[this.id].mediaId;
|
||
this.dataResponse = this.dataResponse.bind(this);
|
||
this.dataErrorResponse = this.dataErrorResponse.bind(this);
|
||
getRequest(this.mediaAPIUrl, !1, this.dataResponse, this.dataErrorResponse);
|
||
}
|
||
|
||
loadPlaylistData() {
|
||
const playlistApiUrl = this.mediacms_config.api.playlists + '/' + this.pagePlaylistId;
|
||
this.playlistDataResponse = this.playlistDataResponse.bind(this);
|
||
this.playlistDataErrorResponse = this.playlistDataErrorResponse.bind(this);
|
||
getRequest(playlistApiUrl, !1, this.playlistDataResponse, this.playlistDataErrorResponse);
|
||
}
|
||
|
||
playlistDataResponse(response) {
|
||
if (response && response.data) {
|
||
let validPlaylistMedia = false;
|
||
|
||
let i = 0;
|
||
while (i < response.data.playlist_media.length) {
|
||
if (MediaPageStoreData[this.id].mediaId === response.data.playlist_media[i].friendly_token) {
|
||
validPlaylistMedia = true;
|
||
break;
|
||
}
|
||
|
||
i += 1;
|
||
}
|
||
|
||
if (validPlaylistMedia) {
|
||
this.pagePlaylistData = response.data;
|
||
} else {
|
||
this.pagePlaylistId = null;
|
||
}
|
||
|
||
this.emit('loaded_viewer_playlist_data');
|
||
} else {
|
||
this.pagePlaylistId = null;
|
||
}
|
||
|
||
this.emit('loaded_page_playlist_data');
|
||
}
|
||
|
||
playlistDataErrorResponse(response) {
|
||
this.emit('loaded_viewer_playlist_error');
|
||
this.emit('loaded_page_playlist_data');
|
||
}
|
||
|
||
loadComments() {
|
||
this.commentsAPIUrl = this.mediacms_config.api.media + '/' + MediaPageStoreData[this.id].mediaId + '/comments';
|
||
this.commentsResponse = this.commentsResponse.bind(this);
|
||
getRequest(this.commentsAPIUrl, !1, this.commentsResponse);
|
||
}
|
||
|
||
loadUsers() {
|
||
this.usersAPIUrl = this.mediacms_config.api.users;
|
||
this.usersResponse = this.usersResponse.bind(this);
|
||
getRequest(this.usersAPIUrl, !1, this.usersResponse);
|
||
}
|
||
|
||
loadPlaylists() {
|
||
if (!this.mediacms_config.member.can.saveMedia) {
|
||
return;
|
||
}
|
||
|
||
this.playlistsAPIUrl = this.mediacms_config.api.user.playlists + this.mediacms_config.member.username;
|
||
|
||
this.playlistsResponse = this.playlistsResponse.bind(this);
|
||
|
||
getRequest(this.playlistsAPIUrl, !1, this.playlistsResponse);
|
||
}
|
||
|
||
dataResponse(response) {
|
||
if (response && response.data) {
|
||
MediaPageStoreData[this.id].data = response.data;
|
||
MediaPageStoreData[this.id].reported_times = !!MediaPageStoreData[this.id].data.reported_times;
|
||
|
||
switch (this.get('media-type')) {
|
||
case 'video':
|
||
case 'audio':
|
||
case 'image':
|
||
this.emit('loaded_' + this.get('media-type') + '_data');
|
||
break;
|
||
}
|
||
|
||
this.emit('loaded_media_data');
|
||
}
|
||
|
||
this.loadPlaylists();
|
||
if (MediaCMS.features.media.actions.comment_mention === true) {
|
||
this.loadUsers();
|
||
}
|
||
|
||
if (this.mediacms_config.member.can.readComment) {
|
||
this.loadComments();
|
||
}
|
||
}
|
||
|
||
dataErrorResponse(response) {
|
||
if (void 0 !== response.type) {
|
||
switch (response.type) {
|
||
case 'network':
|
||
case 'private':
|
||
case 'unavailable':
|
||
MediaPageStoreData[this.id].loadErrorType = response.type;
|
||
MediaPageStoreData[this.id].loadErrorMessage =
|
||
void 0 !== response.message ? response.message : "Αn error occurred while loading the media's data";
|
||
this.emit('loaded_media_error');
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
commentsResponse(response) {
|
||
if (response && response.data) {
|
||
MediaPageStoreData[this.id].comments = response.data.count ? response.data.results : [];
|
||
this.emit('comments_load');
|
||
}
|
||
}
|
||
|
||
usersResponse(response) {
|
||
if (response && response.data) {
|
||
MediaPageStoreData.userList = response.data.count ? response.data.results : [];
|
||
this.emit('users_load');
|
||
}
|
||
}
|
||
|
||
playlistsResponse(response) {
|
||
if (response && response.data) {
|
||
let tmp_playlists = response.data.count ? response.data.results : [];
|
||
|
||
MediaPageStoreData[this.id].playlists = [];
|
||
|
||
let i = 0;
|
||
let cntr = 0;
|
||
|
||
while (i < tmp_playlists.length) {
|
||
(function (pos) {
|
||
let _this = this;
|
||
|
||
if (tmp_playlists[pos].user === this.mediacms_config.member.username) {
|
||
let playlistsIndex = MediaPageStoreData[_this.id].playlists.length;
|
||
|
||
MediaPageStoreData[_this.id].playlists[playlistsIndex] = {
|
||
playlist_id: (function (_url_) {
|
||
let ret = _url_.split('/');
|
||
return 1 < ret.length ? ret[ret.length - 1] : null;
|
||
})(tmp_playlists[pos].url),
|
||
title: tmp_playlists[pos].title,
|
||
description: tmp_playlists[pos].description,
|
||
add_date: tmp_playlists[pos].add_date,
|
||
};
|
||
|
||
getRequest(
|
||
this.mediacms_config.site.url + '/' + tmp_playlists[pos].api_url.replace(/^\//g, ''),
|
||
!1,
|
||
function (resp) {
|
||
if (!!resp && !!resp.data) {
|
||
MediaPageStoreData[_this.id].playlists[playlistsIndex].media_list = [];
|
||
|
||
let f = 0;
|
||
let arr;
|
||
|
||
while (f < resp.data.playlist_media.length) {
|
||
arr = resp.data.playlist_media[f].url.split('m=');
|
||
if (2 === arr.length) {
|
||
MediaPageStoreData[_this.id].playlists[playlistsIndex].media_list.push(arr[1]);
|
||
}
|
||
f += 1;
|
||
}
|
||
}
|
||
|
||
cntr += 1;
|
||
|
||
if (cntr === tmp_playlists.length) {
|
||
this.emit('playlists_load');
|
||
}
|
||
}
|
||
);
|
||
}
|
||
}.bind(this)(i));
|
||
|
||
i += 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
requestMediaLike() {
|
||
if (!MediaPageStoreData[this.id].mediaId) {
|
||
console.warn('Invalid media id:', MediaPageStoreData[this.id].mediaId);
|
||
return false;
|
||
}
|
||
|
||
const url = this.mediacms_config.api.media + '/' + MediaPageStoreData[this.id].mediaId + '/actions';
|
||
|
||
this.likeActionResponse = this.likeActionResponse.bind(this);
|
||
|
||
postRequest(
|
||
url,
|
||
{
|
||
type: 'like',
|
||
// `headers` are custom headers to be sent
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.likeActionResponse,
|
||
function () {
|
||
this.emit('liked_media_failed_request');
|
||
}.bind(this)
|
||
);
|
||
}
|
||
|
||
likeActionResponse(response) {
|
||
if (response) {
|
||
if (response instanceof Error) {
|
||
} else if (response.data) {
|
||
MediaPageStoreData[this.id].likedMedia = true;
|
||
this.emit('liked_media');
|
||
}
|
||
}
|
||
}
|
||
|
||
requestMediaDislike() {
|
||
if (!MediaPageStoreData[this.id].mediaId) {
|
||
console.warn('Invalid media id:', MediaPageStoreData[this.id].mediaId);
|
||
return false;
|
||
}
|
||
|
||
const url = this.mediacms_config.api.media + '/' + MediaPageStoreData[this.id].mediaId + '/actions';
|
||
this.dislikeActionResponse = this.dislikeActionResponse.bind(this);
|
||
postRequest(
|
||
url,
|
||
{
|
||
type: 'dislike',
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.dislikeActionResponse,
|
||
function () {
|
||
this.emit('disliked_media_failed_request');
|
||
}.bind(this)
|
||
);
|
||
}
|
||
|
||
dislikeActionResponse(response) {
|
||
if (response) {
|
||
if (response instanceof Error) {
|
||
} else if (response.data) {
|
||
MediaPageStoreData[this.id].dislikedMedia = true;
|
||
this.emit('disliked_media');
|
||
}
|
||
}
|
||
}
|
||
|
||
requestMediaReport(descr) {
|
||
if (!MediaPageStoreData[this.id].mediaId) {
|
||
console.warn('Invalid media id:', MediaPageStoreData[this.id].mediaId);
|
||
return false;
|
||
}
|
||
|
||
const url = this.mediacms_config.api.media + '/' + MediaPageStoreData[this.id].mediaId + '/actions';
|
||
this.reportActionResponse = this.reportActionResponse.bind(this);
|
||
postRequest(
|
||
url,
|
||
{
|
||
type: 'report',
|
||
extra_info: descr,
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.reportActionResponse,
|
||
this.reportActionResponse
|
||
);
|
||
}
|
||
|
||
reportActionResponse(response) {
|
||
if (response) {
|
||
if (response instanceof Error) {
|
||
} else if (response.data) {
|
||
MediaPageStoreData[this.id].reported_times += 1;
|
||
this.emit('reported_media');
|
||
}
|
||
}
|
||
}
|
||
|
||
set(type, value) {
|
||
switch (type) {
|
||
case 'media-load-error-type':
|
||
MediaPageStoreData[this.id].loadErrorType = value;
|
||
break;
|
||
case 'media-load-error-message':
|
||
MediaPageStoreData[this.id].loadErrorMessage = value;
|
||
break;
|
||
}
|
||
}
|
||
|
||
get(type) {
|
||
let tmp,
|
||
activeItem,
|
||
browserCache,
|
||
i,
|
||
r = null;
|
||
switch (type) {
|
||
case 'users':
|
||
r = MediaPageStoreData.userList || [];
|
||
break;
|
||
case 'playlists':
|
||
r = MediaPageStoreData[this.id].playlists || [];
|
||
break;
|
||
case 'media-load-error-type':
|
||
r = void 0 !== MediaPageStoreData[this.id].loadErrorType ? MediaPageStoreData[this.id].loadErrorType : null;
|
||
break;
|
||
case 'media-load-error-message':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].loadErrorMessage ? MediaPageStoreData[this.id].loadErrorMessage : null;
|
||
break;
|
||
case 'media-comments':
|
||
r = MediaPageStoreData[this.id].comments || [];
|
||
break;
|
||
case 'media-data':
|
||
r = MediaPageStoreData[this.id].data || null;
|
||
break;
|
||
case 'media-id':
|
||
r = MediaPageStoreData[this.id].mediaId;
|
||
break;
|
||
case 'media-url':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.url
|
||
? MediaPageStoreData[this.id].data.url
|
||
: 'N/A';
|
||
break;
|
||
case 'media-edit-subtitle-url':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data &&
|
||
'string' === typeof MediaPageStoreData[this.id].data.add_subtitle_url
|
||
? MediaPageStoreData[this.id].data.add_subtitle_url
|
||
: null;
|
||
break;
|
||
case 'media-likes':
|
||
tmp = MediaPageStoreData[this.id].likedMedia ? 1 : 0;
|
||
if (tmp) {
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.likes
|
||
? MediaPageStoreData[this.id].data.likes + tmp
|
||
: tmp;
|
||
} else {
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.likes
|
||
? MediaPageStoreData[this.id].data.likes
|
||
: 'N/A';
|
||
}
|
||
break;
|
||
case 'media-dislikes':
|
||
tmp = MediaPageStoreData[this.id].dislikedMedia ? 1 : 0;
|
||
if (tmp) {
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.dislikes
|
||
? MediaPageStoreData[this.id].data.dislikes + tmp
|
||
: tmp;
|
||
} else {
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.dislikes
|
||
? MediaPageStoreData[this.id].data.dislikes
|
||
: 'N/A';
|
||
}
|
||
break;
|
||
case 'media-summary':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.summary
|
||
? MediaPageStoreData[this.id].data.summary
|
||
: null;
|
||
break;
|
||
case 'media-categories':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.categories_info
|
||
? MediaPageStoreData[this.id].data.categories_info
|
||
: [];
|
||
break;
|
||
case 'media-tags':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.tags_info
|
||
? MediaPageStoreData[this.id].data.tags_info
|
||
: [];
|
||
break;
|
||
case 'media-type':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.media_type
|
||
? MediaPageStoreData[this.id].data.media_type
|
||
: null;
|
||
break;
|
||
case 'media-original-url':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.original_media_url
|
||
? MediaPageStoreData[this.id].data.original_media_url
|
||
: null;
|
||
break;
|
||
case 'media-thumbnail-url':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.thumbnail_url
|
||
? MediaPageStoreData[this.id].data.thumbnail_url
|
||
: null;
|
||
break;
|
||
case 'user-liked-media':
|
||
r = MediaPageStoreData[this.id].likedMedia;
|
||
break;
|
||
case 'user-disliked-media':
|
||
r = MediaPageStoreData[this.id].dislikedMedia;
|
||
break;
|
||
case 'media-author-thumbnail-url':
|
||
r =
|
||
void 0 !== MediaPageStoreData[this.id].data && void 0 !== MediaPageStoreData[this.id].data.author_thumbnail
|
||
? this.mediacms_config.site.url +
|
||
'/' +
|
||
MediaPageStoreData[this.id].data.author_thumbnail.replace(/^\//g, '')
|
||
: null;
|
||
break;
|
||
case 'playlist-data':
|
||
r = this.pagePlaylistData;
|
||
break;
|
||
case 'playlist-id':
|
||
r = this.pagePlaylistId;
|
||
break;
|
||
case 'playlist-next-media-url':
|
||
if (!this.pagePlaylistData) {
|
||
break;
|
||
}
|
||
|
||
activeItem = 0;
|
||
i = 0;
|
||
while (i < this.pagePlaylistData.playlist_media.length) {
|
||
if (MediaPageStoreData[this.id].mediaId === this.pagePlaylistData.playlist_media[i].friendly_token) {
|
||
activeItem = i;
|
||
break;
|
||
}
|
||
|
||
i += 1;
|
||
}
|
||
|
||
let nextItem = activeItem + 1;
|
||
|
||
if (nextItem === this.pagePlaylistData.playlist_media.length) {
|
||
browserCache = PageStore.get('browser-cache');
|
||
if (true === browserCache.get('loopPlaylist[' + this.pagePlaylistId + ']')) {
|
||
nextItem = 0;
|
||
}
|
||
}
|
||
|
||
if (void 0 !== this.pagePlaylistData.playlist_media[nextItem]) {
|
||
r = this.pagePlaylistData.playlist_media[nextItem].url + '&pl=' + this.pagePlaylistId;
|
||
}
|
||
|
||
break;
|
||
case 'playlist-previous-media-url':
|
||
if (!this.pagePlaylistData) {
|
||
break;
|
||
}
|
||
|
||
activeItem = 0;
|
||
i = 0;
|
||
while (i < this.pagePlaylistData.playlist_media.length) {
|
||
if (MediaPageStoreData[this.id].mediaId === this.pagePlaylistData.playlist_media[i].friendly_token) {
|
||
activeItem = i;
|
||
break;
|
||
}
|
||
|
||
i += 1;
|
||
}
|
||
|
||
let previousItem = activeItem - 1;
|
||
|
||
if (0 === activeItem) {
|
||
previousItem = null;
|
||
|
||
browserCache = PageStore.get('browser-cache');
|
||
|
||
if (true === browserCache.get('loopPlaylist[' + this.pagePlaylistId + ']')) {
|
||
previousItem = this.pagePlaylistData.playlist_media.length - 1;
|
||
}
|
||
}
|
||
|
||
if (void 0 !== this.pagePlaylistData.playlist_media[previousItem]) {
|
||
r = this.pagePlaylistData.playlist_media[previousItem].url + '&pl=' + this.pagePlaylistId;
|
||
}
|
||
|
||
break;
|
||
}
|
||
return r;
|
||
}
|
||
|
||
isVideo() {
|
||
return 'video' === this.get('media-type');
|
||
}
|
||
|
||
onPlaylistCreationCompleted(response) {
|
||
if (response && response.data) {
|
||
this.emit('playlist_creation_completed', response.data);
|
||
}
|
||
}
|
||
|
||
onPlaylistCreationFailed() {
|
||
this.emit('playlist_creation_failed');
|
||
}
|
||
|
||
onPlaylistMediaAdditionCompleted(playlist_id, response) {
|
||
if (response) {
|
||
let i = 0;
|
||
while (i < MediaPageStoreData[this.id].playlists.length) {
|
||
if (playlist_id === MediaPageStoreData[this.id].playlists[i].playlist_id) {
|
||
MediaPageStoreData[this.id].playlists[i].media_list.push(MediaPageStoreData[this.id].mediaId);
|
||
break;
|
||
}
|
||
i += 1;
|
||
}
|
||
this.emit('media_playlist_addition_completed', playlist_id);
|
||
}
|
||
}
|
||
|
||
onPlaylistMediaAdditionFailed(playlist_id, response) {
|
||
this.emit('media_playlist_addition_failed');
|
||
}
|
||
|
||
onPlaylistMediaRemovalCompleted(playlist_id, response) {
|
||
if (response) {
|
||
let j, new_playlist_media;
|
||
let i = 0;
|
||
while (i < MediaPageStoreData[this.id].playlists.length) {
|
||
if (playlist_id === MediaPageStoreData[this.id].playlists[i].playlist_id) {
|
||
new_playlist_media = [];
|
||
j = 0;
|
||
while (j < MediaPageStoreData[this.id].playlists[i].media_list.length) {
|
||
if (MediaPageStoreData[this.id].mediaId !== MediaPageStoreData[this.id].playlists[i].media_list[j]) {
|
||
new_playlist_media.push(MediaPageStoreData[this.id].playlists[i].media_list[j]);
|
||
}
|
||
j += 1;
|
||
}
|
||
MediaPageStoreData[this.id].playlists[i].media_list = new_playlist_media;
|
||
|
||
break;
|
||
}
|
||
i += 1;
|
||
}
|
||
this.emit('media_playlist_removal_completed', playlist_id);
|
||
}
|
||
}
|
||
|
||
onPlaylistMediaRemovalFailed(playlist_id, response) {
|
||
this.emit('media_playlist_removal_failed');
|
||
}
|
||
|
||
actions_handler(action) {
|
||
switch (action.type) {
|
||
case 'LOAD_MEDIA_DATA':
|
||
MediaPageStoreData[this.id].mediaId = window.MediaCMS.mediaId || MediaPageStoreData[this.id].mediaId;
|
||
|
||
this.pagePlaylistId = extractPlaylistId();
|
||
|
||
if (this.pagePlaylistId) {
|
||
this.loadPlaylistData();
|
||
this.loadData();
|
||
} else {
|
||
this.emit('loaded_page_playlist_data');
|
||
this.loadData();
|
||
}
|
||
|
||
break;
|
||
case 'LIKE_MEDIA':
|
||
if (!MediaPageStoreData[this.id].likedMedia && !MediaPageStoreData[this.id].dislikedMedia) {
|
||
this.requestMediaLike();
|
||
}
|
||
break;
|
||
case 'DISLIKE_MEDIA':
|
||
if (!MediaPageStoreData[this.id].likedMedia && !MediaPageStoreData[this.id].dislikedMedia) {
|
||
this.requestMediaDislike();
|
||
}
|
||
break;
|
||
case 'REPORT_MEDIA':
|
||
if (!MediaPageStoreData[this.id].reported_times) {
|
||
if ('' !== action.reportDescription) {
|
||
this.requestMediaReport(action.reportDescription);
|
||
}
|
||
}
|
||
break;
|
||
case 'COPY_SHARE_LINK':
|
||
if (action.inputElement instanceof HTMLElement) {
|
||
action.inputElement.select();
|
||
document.execCommand('copy');
|
||
this.emit('copied_media_link');
|
||
}
|
||
break;
|
||
case 'COPY_EMBED_MEDIA_CODE':
|
||
if (action.inputElement instanceof HTMLElement) {
|
||
action.inputElement.select();
|
||
document.execCommand('copy');
|
||
this.emit('copied_embed_media_code');
|
||
}
|
||
break;
|
||
case 'REMOVE_MEDIA':
|
||
if (MediaPageStoreData[this.id].while.deleteMedia) {
|
||
return;
|
||
}
|
||
MediaPageStoreData[this.id].while.deleteMedia = true;
|
||
deleteRequest(
|
||
this.mediaAPIUrl,
|
||
{ headers: { 'X-CSRFToken': csrfToken() } },
|
||
false,
|
||
this.removeMediaResponse,
|
||
this.removeMediaFail
|
||
);
|
||
break;
|
||
case 'SUBMIT_COMMENT':
|
||
if (MediaPageStoreData[this.id].while.submitComment) {
|
||
return;
|
||
}
|
||
|
||
MediaPageStoreData[this.id].while.submitComment = true;
|
||
|
||
postRequest(
|
||
this.commentsAPIUrl,
|
||
{ text: action.commentText },
|
||
{ headers: { 'X-CSRFToken': csrfToken() } },
|
||
false,
|
||
this.submitCommentResponse,
|
||
this.submitCommentFail
|
||
);
|
||
break;
|
||
case 'DELETE_COMMENT':
|
||
if (null !== MediaPageStoreData[this.id].while.deleteCommentId) {
|
||
return;
|
||
}
|
||
|
||
MediaPageStoreData[this.id].while.deleteCommentId = action.commentId;
|
||
deleteRequest(
|
||
this.commentsAPIUrl + '/' + action.commentId,
|
||
{ headers: { 'X-CSRFToken': csrfToken() } },
|
||
false,
|
||
this.removeCommentResponse,
|
||
this.removeCommentFail
|
||
);
|
||
break;
|
||
case 'CREATE_PLAYLIST':
|
||
postRequest(
|
||
this.mediacms_config.api.playlists,
|
||
{
|
||
title: action.playlist_data.title,
|
||
description: action.playlist_data.description,
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.onPlaylistCreationCompleted.bind(this),
|
||
this.onPlaylistCreationFailed.bind(this)
|
||
);
|
||
break;
|
||
case 'ADD_MEDIA_TO_PLAYLIST':
|
||
putRequest(
|
||
this.mediacms_config.api.playlists + '/' + action.playlist_id,
|
||
{
|
||
type: 'add',
|
||
media_friendly_token: action.media_id,
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.onPlaylistMediaAdditionCompleted.bind(this, action.playlist_id),
|
||
this.onPlaylistMediaAdditionFailed.bind(this, action.playlist_id)
|
||
);
|
||
break;
|
||
case 'REMOVE_MEDIA_FROM_PLAYLIST':
|
||
putRequest(
|
||
this.mediacms_config.api.playlists + '/' + action.playlist_id,
|
||
{
|
||
type: 'remove',
|
||
media_friendly_token: action.media_id,
|
||
},
|
||
{
|
||
headers: {
|
||
'X-CSRFToken': csrfToken(),
|
||
},
|
||
},
|
||
false,
|
||
this.onPlaylistMediaRemovalCompleted.bind(this, action.playlist_id),
|
||
this.onPlaylistMediaRemovalFailed.bind(this, action.playlist_id)
|
||
);
|
||
break;
|
||
case 'APPEND_NEW_PLAYLIST':
|
||
MediaPageStoreData[this.id].playlists.push(action.playlist_data);
|
||
this.emit('playlists_load');
|
||
break;
|
||
}
|
||
}
|
||
|
||
removeMediaResponse(response) {
|
||
if (response && 204 === response.status) {
|
||
this.emit('media_delete', MediaPageStoreData[this.id].mediaId);
|
||
}
|
||
}
|
||
|
||
removeMediaFail() {
|
||
this.emit('media_delete_fail', MediaPageStoreData[this.id].mediaId);
|
||
setTimeout(
|
||
function (ins) {
|
||
MediaPageStoreData[ins.id].while.deleteMedia = null;
|
||
},
|
||
100,
|
||
this
|
||
);
|
||
}
|
||
|
||
removeCommentFail(err) {
|
||
this.emit('comment_delete_fail', MediaPageStoreData[this.id].while.deleteCommentId);
|
||
setTimeout(
|
||
function (ins) {
|
||
MediaPageStoreData[ins.id].while.deleteCommentId = null;
|
||
},
|
||
100,
|
||
this
|
||
);
|
||
}
|
||
|
||
removeCommentResponse(response) {
|
||
if (response && 204 === response.status) {
|
||
let k;
|
||
let newComments = [];
|
||
for (k in MediaPageStoreData[this.id].comments) {
|
||
if (MediaPageStoreData[this.id].comments.hasOwnProperty(k)) {
|
||
if (MediaPageStoreData[this.id].while.deleteCommentId !== MediaPageStoreData[this.id].comments[k].uid) {
|
||
newComments.push(MediaPageStoreData[this.id].comments[k]);
|
||
}
|
||
}
|
||
}
|
||
MediaPageStoreData[this.id].comments = newComments;
|
||
newComments = null;
|
||
|
||
this.emit('comment_delete', MediaPageStoreData[this.id].while.deleteCommentId);
|
||
}
|
||
setTimeout(
|
||
function (ins) {
|
||
MediaPageStoreData[ins.id].while.deleteCommentId = null;
|
||
},
|
||
100,
|
||
this
|
||
);
|
||
}
|
||
|
||
submitCommentFail(err) {
|
||
this.emit('comment_submit_fail');
|
||
setTimeout(
|
||
function (ins) {
|
||
MediaPageStoreData[ins.id].while.submitComment = false;
|
||
},
|
||
100,
|
||
this
|
||
);
|
||
}
|
||
|
||
submitCommentResponse(response) {
|
||
if (response && 201 === response.status && response.data && Object.keys(response.data)) {
|
||
MediaPageStoreData[this.id].comments.push(response.data);
|
||
this.emit('comment_submit', response.data.uid);
|
||
}
|
||
setTimeout(
|
||
function (ins) {
|
||
MediaPageStoreData[ins.id].while.submitComment = false;
|
||
},
|
||
100,
|
||
this
|
||
);
|
||
}
|
||
}
|
||
|
||
export default exportStore(new MediaPageStore(), 'actions_handler');
|