openvibers/openvibe.exchange Commits

Search: the default engines follow the chosen kind (#215)

OP OpenVibers committed 2 days ago · 2045fb7d80 · 2 files, +8 −1

With Web selected the compare form picked Openverse and Wikimedia Commons, the first two working engines in AI's list.
It now picks the first two working engines for the kind (OpenVibe Search and DeepSeek Search for Web).

Changes

ddiff --git a/server/views/search.js b/server/views/search.js
iindex c989312..5376f58 100644
---- a/server/views/search.js
++++ b/server/views/search.js
@@@ -62,7 +62,9 @@ function searchPage({ engines = [], found = [], query = {} } = {}) {
}).join('');
const kind = KINDS.some(([k]) => k === query.kind) ? query.kind : 'web';
// The engines in each list grouped by what they find; the first two that work are picked unless the search named some.
-- const ready = engines.filter((e) => e.available !== false);
++ // The first two that work for the chosen kind (Web picked two picture engines when those came first in AI's list).
++ const forKind = (e) => !Array.isArray(e.kinds) || e.kinds.includes(kind);
++ const ready = [...engines.filter((e) => e.available !== false && forKind(e)), ...engines.filter((e) => e.available !== false && !forKind(e))];
const defaults = [query.first || (ready[0] || engines[0] || {}).id, query.second || (ready[1] || engines[1] || {}).id];
const pick = (field, label, chosen) => `<label class="xs-field"><span>${label}</span><select name="${field}">${KINDS.map(([k, l]) => {
const rows = engines.filter((e) => (Array.isArray(e.kinds) ? e.kinds[0] === k : k === 'web'));
ddiff --git a/test/image-search-view.test.js b/test/image-search-view.test.js
iindex 870f88a..4d89e0a 100644
---- a/test/image-search-view.test.js
++++ b/test/image-search-view.test.js
@@@ -10,4 +10,9 @@ assert.ok(html.includes('Source and usage'));
assert.ok(html.includes('Reuse rights unknown') === false);
assert.ok(html.includes('2400 × 1600 px'));
assert.ok(html.includes('name="color"') && html.includes('name="after"'));
++// The default engines follow the kind: Web picks the first two working web engines even when picture engines come first.
++const E = (id, kinds, available = true) => ({ id, kinds, available, price_per_1000: 0 });
++const web = searchPage({ engines: [E('searxng', ['web'], false), E('openverse', ['images']), E('commons', ['images']), E('openvibe', ['web']), E('deepseek', ['web'])] });
++assert.match(web, /name="first">[\s\S]*?value="openvibe" selected/);
++assert.match(web, /name="second">[\s\S]*?value="deepseek" selected/);
process.stdout.write('image search view passed\n');