jellyfin-web/dashboard-ui/voice/textprocessor-en-us.js
2015-09-13 20:29:04 -04:00

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;
}
});