mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 03:18:19 -07:00
244 lines
5.5 KiB
JavaScript
244 lines
5.5 KiB
JavaScript
define([], function () {
|
|
|
|
function parseTextInternal(text) {
|
|
|
|
var result = {
|
|
action: '',
|
|
itemName: '',
|
|
itemType: '',
|
|
category: '',
|
|
filters: [],
|
|
removeWords: [],
|
|
sortby: '',
|
|
sortorder: 'Ascending',
|
|
limit: null,
|
|
userId: Dashboard.getCurrentUserId()
|
|
};
|
|
|
|
var textLower = text.toLowerCase();
|
|
var words = text.toLowerCase().split(' ');
|
|
|
|
var displayWords = [
|
|
'show',
|
|
'pull up',
|
|
'display',
|
|
'go to',
|
|
'view'
|
|
];
|
|
|
|
if (displayWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
if (words.indexOf('guide') != -1) {
|
|
result.action = 'show';
|
|
result.category = 'tvguide';
|
|
}
|
|
|
|
if (words.indexOf('recordings') != -1) {
|
|
result.action = 'show';
|
|
result.category = 'recordings';
|
|
}
|
|
|
|
result.removeWords = displayWords;
|
|
return result;
|
|
}
|
|
|
|
var searchWords = [
|
|
'search',
|
|
'search for',
|
|
'find',
|
|
'query'
|
|
];
|
|
|
|
if (searchWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Search
|
|
result.action = 'search';
|
|
|
|
result.removeWords = searchWords;
|
|
return result;
|
|
}
|
|
|
|
var playWords = [
|
|
'play',
|
|
'watch'
|
|
];
|
|
|
|
if (playWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Play
|
|
result.action = 'play';
|
|
|
|
result.removeWords = playWords;
|
|
return result;
|
|
}
|
|
|
|
var controlWords = [
|
|
'use',
|
|
'control'
|
|
];
|
|
|
|
if (controlWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Play
|
|
result.action = 'control';
|
|
|
|
result.removeWords = controlWords;
|
|
return result;
|
|
}
|
|
|
|
var enableWords = [
|
|
'enable',
|
|
'turn on'
|
|
];
|
|
|
|
if (enableWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Play
|
|
result.action = 'enable';
|
|
|
|
result.removeWords = enableWords;
|
|
return result;
|
|
}
|
|
|
|
var disableWords = [
|
|
'disable',
|
|
'turn off'
|
|
];
|
|
|
|
if (disableWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Play
|
|
result.action = 'disable';
|
|
|
|
result.removeWords = disableWords;
|
|
return result;
|
|
}
|
|
|
|
var toggleWords = [
|
|
'toggle'
|
|
];
|
|
|
|
if (toggleWords.filter(function (w) { return textLower.indexOf(w) == 0; }).length) {
|
|
|
|
// Play
|
|
result.action = 'toggle';
|
|
|
|
result.removeWords = toggleWords;
|
|
return result;
|
|
}
|
|
|
|
if (words.indexOf('shuffle') != -1) {
|
|
|
|
// Play
|
|
result.action = 'shuffle';
|
|
|
|
result.removeWords.push('shuffle');
|
|
return result;
|
|
}
|
|
|
|
if (words.indexOf('record') != -1) {
|
|
|
|
// Record
|
|
result.action = 'record';
|
|
|
|
result.removeWords.push('record');
|
|
return result;
|
|
}
|
|
|
|
if (words.indexOf('guide') != -1) {
|
|
result.action = 'show';
|
|
result.category = 'tvguide';
|
|
return result;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function parseContext(text, result) {
|
|
|
|
text = text.toLowerCase();
|
|
|
|
var i, length;
|
|
|
|
for (i = 0, length = result.removeWords.length; i < length; i++) {
|
|
|
|
text = text.replace(result.removeWords[i], '');
|
|
}
|
|
|
|
text = text.trim();
|
|
|
|
var removeAtStart = [
|
|
'my'
|
|
];
|
|
|
|
for (i = 0, length = removeAtStart.length; i < length; i++) {
|
|
|
|
if (text.indexOf(removeAtStart[i]) == 0) {
|
|
text = text.substring(removeAtStart[i].length);
|
|
}
|
|
}
|
|
|
|
result.what = text;
|
|
|
|
text = text.trim();
|
|
var words = text.toLowerCase().split(' ');
|
|
|
|
if (words.indexOf('favorite') != -1) {
|
|
result.filters.push('favorite');
|
|
}
|
|
|
|
if (text.indexOf('latest movies') != -1 || text.indexOf('latest films') != -1) {
|
|
|
|
result.sortby = 'datecreated';
|
|
result.sortorder = 'Descending';
|
|
result.filters.push('unplayed');
|
|
result.itemType = 'Movie';
|
|
|
|
return;
|
|
}
|
|
|
|
if (text.indexOf('latest episodes') != -1) {
|
|
|
|
result.sortby = 'datecreated';
|
|
result.sortorder = 'Descending';
|
|
result.filters.push('unplayed');
|
|
result.itemType = 'Episode';
|
|
|
|
return;
|
|
}
|
|
|
|
if (text.indexOf('next up') != -1) {
|
|
|
|
result.category = 'nextup';
|
|
|
|
return;
|
|
}
|
|
|
|
if (text.indexOf('movies') != -1 || text.indexOf('films') != -1) {
|
|
|
|
result.itemType = 'Movie';
|
|
|
|
return;
|
|
}
|
|
|
|
if (text.indexOf('shows') != -1 || text.indexOf('series') != -1) {
|
|
|
|
result.itemType = 'Series';
|
|
|
|
return;
|
|
}
|
|
|
|
if (text.indexOf('songs') != -1) {
|
|
|
|
result.itemType = 'Audio';
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
return function (text) {
|
|
var result = parseTextInternal(text);
|
|
parseContext(text, result);
|
|
return result;
|
|
}
|
|
}); |