Remove non-functional DuckDuckGo Autocomplete Provider
This commit is contained in:
parent
0a09682982
commit
0cd00ae64f
5 changed files with 1 additions and 138 deletions
|
@ -245,21 +245,6 @@ export const Commands = [
|
||||||
},
|
},
|
||||||
category: CommandCategories.messages,
|
category: CommandCategories.messages,
|
||||||
}),
|
}),
|
||||||
new Command({
|
|
||||||
command: 'ddg',
|
|
||||||
args: '<query>',
|
|
||||||
description: _td('Searches DuckDuckGo for results'),
|
|
||||||
runFn: function() {
|
|
||||||
// TODO Don't explain this away, actually show a search UI here.
|
|
||||||
Modal.createTrackedDialog('Slash Commands', '/ddg is not a command', ErrorDialog, {
|
|
||||||
title: _t('/ddg is not a command'),
|
|
||||||
description: _t('To use it, just wait for autocomplete results to load and tab through them.'),
|
|
||||||
});
|
|
||||||
return success();
|
|
||||||
},
|
|
||||||
category: CommandCategories.actions,
|
|
||||||
hideCompletionAfterSpace: true,
|
|
||||||
}),
|
|
||||||
new Command({
|
new Command({
|
||||||
command: 'upgraderoom',
|
command: 'upgraderoom',
|
||||||
args: '<new_version>',
|
args: '<new_version>',
|
||||||
|
|
|
@ -20,7 +20,6 @@ import { Room } from 'matrix-js-sdk/src/models/room';
|
||||||
|
|
||||||
import CommandProvider from './CommandProvider';
|
import CommandProvider from './CommandProvider';
|
||||||
import CommunityProvider from './CommunityProvider';
|
import CommunityProvider from './CommunityProvider';
|
||||||
import DuckDuckGoProvider from './DuckDuckGoProvider';
|
|
||||||
import RoomProvider from './RoomProvider';
|
import RoomProvider from './RoomProvider';
|
||||||
import UserProvider from './UserProvider';
|
import UserProvider from './UserProvider';
|
||||||
import EmojiProvider from './EmojiProvider';
|
import EmojiProvider from './EmojiProvider';
|
||||||
|
@ -55,7 +54,6 @@ const PROVIDERS = [
|
||||||
EmojiProvider,
|
EmojiProvider,
|
||||||
NotifProvider,
|
NotifProvider,
|
||||||
CommandProvider,
|
CommandProvider,
|
||||||
DuckDuckGoProvider,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
if (SpaceStore.spacesEnabled) {
|
if (SpaceStore.spacesEnabled) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ export default class CommandProvider extends AutocompleteProvider {
|
||||||
// The input looks like a command with arguments, perform exact match
|
// The input looks like a command with arguments, perform exact match
|
||||||
const name = command[1].substr(1); // strip leading `/`
|
const name = command[1].substr(1); // strip leading `/`
|
||||||
if (CommandMap.has(name) && CommandMap.get(name).isEnabled()) {
|
if (CommandMap.has(name) && CommandMap.get(name).isEnabled()) {
|
||||||
// some commands, namely `me` and `ddg` don't suit having the usage shown whilst typing their arguments
|
// some commands, namely `me` don't suit having the usage shown whilst typing their arguments
|
||||||
if (CommandMap.get(name).hideCompletionAfterSpace) return [];
|
if (CommandMap.get(name).hideCompletionAfterSpace) return [];
|
||||||
matches = [CommandMap.get(name)];
|
matches = [CommandMap.get(name)];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2016 Aviral Dasgupta
|
|
||||||
Copyright 2017 Vector Creations Ltd
|
|
||||||
Copyright 2017, 2018 New Vector Ltd
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { _t } from '../languageHandler';
|
|
||||||
import AutocompleteProvider from './AutocompleteProvider';
|
|
||||||
|
|
||||||
import { TextualCompletion } from './Components';
|
|
||||||
import { ICompletion, ISelectionRange } from "./Autocompleter";
|
|
||||||
|
|
||||||
const DDG_REGEX = /\/ddg\s+(.+)$/g;
|
|
||||||
const REFERRER = 'vector';
|
|
||||||
|
|
||||||
export default class DuckDuckGoProvider extends AutocompleteProvider {
|
|
||||||
constructor() {
|
|
||||||
super(DDG_REGEX);
|
|
||||||
}
|
|
||||||
|
|
||||||
static getQueryUri(query: string) {
|
|
||||||
return `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}`
|
|
||||||
+ `&format=json&no_redirect=1&no_html=1&t=${encodeURIComponent(REFERRER)}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getCompletions(
|
|
||||||
query: string,
|
|
||||||
selection: ISelectionRange,
|
|
||||||
force = false,
|
|
||||||
limit = -1,
|
|
||||||
): Promise<ICompletion[]> {
|
|
||||||
const { command, range } = this.getCurrentCommand(query, selection);
|
|
||||||
if (!query || !command) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = await fetch(DuckDuckGoProvider.getQueryUri(command[1]), {
|
|
||||||
method: 'GET',
|
|
||||||
});
|
|
||||||
const json = await response.json();
|
|
||||||
const maxLength = limit > -1 ? limit : json.Results.length;
|
|
||||||
const results = json.Results.slice(0, maxLength).map((result) => {
|
|
||||||
return {
|
|
||||||
completion: result.Text,
|
|
||||||
component: (
|
|
||||||
<TextualCompletion
|
|
||||||
title={result.Text}
|
|
||||||
description={result.Result} />
|
|
||||||
),
|
|
||||||
range,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
if (json.Answer) {
|
|
||||||
results.unshift({
|
|
||||||
completion: json.Answer,
|
|
||||||
component: (
|
|
||||||
<TextualCompletion
|
|
||||||
title={json.Answer}
|
|
||||||
description={json.AnswerType} />
|
|
||||||
),
|
|
||||||
range,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (json.RelatedTopics && json.RelatedTopics.length > 0) {
|
|
||||||
results.unshift({
|
|
||||||
completion: json.RelatedTopics[0].Text,
|
|
||||||
component: (
|
|
||||||
<TextualCompletion
|
|
||||||
title={json.RelatedTopics[0].Text} />
|
|
||||||
),
|
|
||||||
range,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (json.AbstractText) {
|
|
||||||
results.unshift({
|
|
||||||
completion: json.AbstractText,
|
|
||||||
component: (
|
|
||||||
<TextualCompletion
|
|
||||||
title={json.AbstractText} />
|
|
||||||
),
|
|
||||||
range,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
getName() {
|
|
||||||
return '🔍 ' + _t('Results from DuckDuckGo');
|
|
||||||
}
|
|
||||||
|
|
||||||
renderCompletions(completions: React.ReactNode[]): React.ReactNode {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className="mx_Autocomplete_Completion_container_block"
|
|
||||||
role="presentation"
|
|
||||||
aria-label={_t("DuckDuckGo Results")}
|
|
||||||
>
|
|
||||||
{ completions }
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -426,9 +426,6 @@
|
||||||
"Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Prepends ( ͡° ͜ʖ ͡°) to a plain-text message",
|
"Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Prepends ( ͡° ͜ʖ ͡°) to a plain-text message",
|
||||||
"Sends a message as plain text, without interpreting it as markdown": "Sends a message as plain text, without interpreting it as markdown",
|
"Sends a message as plain text, without interpreting it as markdown": "Sends a message as plain text, without interpreting it as markdown",
|
||||||
"Sends a message as html, without interpreting it as markdown": "Sends a message as html, without interpreting it as markdown",
|
"Sends a message as html, without interpreting it as markdown": "Sends a message as html, without interpreting it as markdown",
|
||||||
"Searches DuckDuckGo for results": "Searches DuckDuckGo for results",
|
|
||||||
"/ddg is not a command": "/ddg is not a command",
|
|
||||||
"To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.",
|
|
||||||
"Upgrades a room to a new version": "Upgrades a room to a new version",
|
"Upgrades a room to a new version": "Upgrades a room to a new version",
|
||||||
"You do not have the required permissions to use this command.": "You do not have the required permissions to use this command.",
|
"You do not have the required permissions to use this command.": "You do not have the required permissions to use this command.",
|
||||||
"Changes your display nickname": "Changes your display nickname",
|
"Changes your display nickname": "Changes your display nickname",
|
||||||
|
@ -3002,8 +2999,6 @@
|
||||||
"Commands": "Commands",
|
"Commands": "Commands",
|
||||||
"Command Autocomplete": "Command Autocomplete",
|
"Command Autocomplete": "Command Autocomplete",
|
||||||
"Community Autocomplete": "Community Autocomplete",
|
"Community Autocomplete": "Community Autocomplete",
|
||||||
"Results from DuckDuckGo": "Results from DuckDuckGo",
|
|
||||||
"DuckDuckGo Results": "DuckDuckGo Results",
|
|
||||||
"Emoji": "Emoji",
|
"Emoji": "Emoji",
|
||||||
"Emoji Autocomplete": "Emoji Autocomplete",
|
"Emoji Autocomplete": "Emoji Autocomplete",
|
||||||
"Notify the whole room": "Notify the whole room",
|
"Notify the whole room": "Notify the whole room",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue