Add CommandInfluencer

This commit is contained in:
Özenç Bilgili 2020-05-19 02:36:44 +03:00
parent 4b766df7e4
commit 2ad4f517c9

View File

@ -149,6 +149,7 @@ let CONFIG = {
* - "History" suggestions come from your previously entered queries
*/
influencers: [
{ name: 'Commands', limit: 2},
{ name: 'Default', limit: 4 },
{ name: 'History', limit: 1 },
{ name: 'DuckDuckGo', limit: 4 },
@ -476,6 +477,58 @@ class DefaultInfluencer extends Influencer {
}
}
class CommandsInfluencer extends Influencer {
constructor({ commands, queryParser }) {
super(...arguments);
this._commands = commands;
}
getSuggestions(rawQuery) {
const { query } = this._parseQuery(rawQuery);
if (!query) return Promise.resolve([]);
return new Promise(resolve => {
const suggestions = [];
const commands = this._commands;
commands.forEach(command => {
if(command.key.startsWith(rawQuery)){
suggestions.push(command.url);
}
});
resolve(suggestions);
});
}
_getHostName(url) {
let match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i);
if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) {
return match[2];
}
else {
return null;
}
}
_getDomain(url){
let hostName = this._getHostName(url);
let domain = hostName;
if (hostName != null) {
let parts = hostName.split('.').reverse();
if (parts != null && parts.length > 1) {
domain = parts[1] + '.' + parts[0];
if (hostName.toLowerCase().indexOf('.co.uk') != -1 && parts.length > 2) {
domain = parts[2] + '.' + domain;
}
}
}
return domain;
}
}
class DuckDuckGoInfluencer extends Influencer {
constructor({ queryParser }) {
super(...arguments);
@ -977,12 +1030,14 @@ const queryParser = new QueryParser({
const influencers = CONFIG.influencers.map(influencerConfig => {
return new {
Default: DefaultInfluencer,
Commands: CommandsInfluencer,
DuckDuckGo: DuckDuckGoInfluencer,
History: HistoryInfluencer,
}[influencerConfig.name]({
defaultSuggestions: CONFIG.defaultSuggestions,
limit: influencerConfig.limit,
parseQuery: queryParser.parse,
commands: CONFIG.commands
});
});