Skip to content

Commit

Permalink
Merge pull request #32 from rolandbernard/devel
Browse files Browse the repository at this point in the history
v0.0.22
  • Loading branch information
rolandbernard committed Mar 21, 2021
2 parents 9ee32b9 + c02bb02 commit 6583697
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 45 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "marvin",
"version": "0.0.21",
"version": "0.0.22",
"license": "MIT",
"scripts": {
"dev": "electron-webpack dev",
Expand Down
35 changes: 13 additions & 22 deletions src/main/modules/linux-applications.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@

import { config } from "../config";
import { readdir, readFile, writeFileSync, existsSync, readFileSync, stat } from "fs";
import { app, ipcMain } from 'electron';
import path from 'path';
import { exec } from "child_process";
import { format as formatUrl } from 'url';

import { config } from "../config";
import { stringMatchQuality } from '../search';

let applications = [];
Expand Down Expand Up @@ -37,7 +39,7 @@ function getProps(object, name) {
if (object[name] instanceof Object) {
return Object.keys(object[name]).map(key => [object[name][key], key.toLowerCase()]);
} else if (object[name]) {
return [ [object[name], ''] ];
return [ [object[name], 'default'] ];
} else {
return [];
}
Expand Down Expand Up @@ -157,23 +159,13 @@ function findIconPath(name) {
});
}

function pathToDataUrl(path) {
function pathToUrl(path) {
return new Promise((resolve) => {
readFile(path, (_, data) => {
if (data) {
const mime_endings = {
'__default__': 'text/plain',
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.svg': 'image/svg+xml',
};
let mime = mime_endings[Object.keys(mime_endings).find((ending) => path.endsWith(ending)) || '__default__'];
resolve(`data:${mime};base64,${Buffer.from(data).toString('base64')}`);
} else {
resolve(null);
}
});
resolve(formatUrl({
pathname: path,
protocol: 'file',
slashes: true
}));
});
}

Expand Down Expand Up @@ -243,7 +235,7 @@ async function loadApplications() {
if (getProp(value, 'Icon') && !icons[getProp(value, 'Icon')]) {
const path = await findIconPath(getProp(value, 'Icon'), theme, fallback_theme);
if (path) {
icons[getProp(value, 'Icon')] = await pathToDataUrl(path);
icons[getProp(value, 'Icon')] = await pathToUrl(path);
}
}
value.icon = icons[getProp(value, 'Icon')];
Expand All @@ -254,9 +246,9 @@ async function loadApplications() {
}

function getQualityForProp(object, prop, text, regex, scale) {
return Math.max(...(getProps(object, prop)
return Math.max(0, ...(getProps(object, prop)
.map(([value, lang]) =>
scale * (lang === 'default' || lang.includes(config.general.language) ? 1 : 0.5) * stringMatchQuality(text, value, regex)
scale * (lang === 'default' || lang.toLowerCase().includes(config.general.language) ? 1 : 0.5) * stringMatchQuality(text, value, regex)
)
));
}
Expand Down Expand Up @@ -286,7 +278,6 @@ const LinuxApplicationModule = {
return query.trim().length >= 1;
},
search: async (query, regex) => {
const language = config.general.language;
return applications.map((app) => {
const name = getProp(app.desktop, 'Name', app.application.replace('.desktop', ''));
const app_match = Math.max(
Expand Down
53 changes: 31 additions & 22 deletions src/main/modules/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,36 @@ let tray;
let main_window;

let last_loading = null;
let last_query = null;

const MAX_TRANSFER_LEN = 1000;
const MAX_TRANSFER_LEN = 200;

const original_option = new Map();

function handleQuery(query, sender) {
if (query !== last_query) {
clearTimeout(last_loading);
last_loading = setTimeout(() => sender.send('update-options', null), config.general.debounce_time + 100);
searchQuery(query, (results) => {
clearTimeout(last_loading);
original_option.clear();
sender.send('update-options', results.map((opt) => {
const new_opt = { ...opt };
if (new_opt.text?.length > MAX_TRANSFER_LEN) {
new_opt.text = new_opt.text.substr(0, MAX_TRANSFER_LEN) + '...';
}
if (new_opt.primary?.length > MAX_TRANSFER_LEN) {
new_opt.primary = new_opt.primary.substr(0, MAX_TRANSFER_LEN) + '...';
}
if (new_opt.secondary?.length > MAX_TRANSFER_LEN) {
new_opt.secondary = new_opt.secondary.substr(0, MAX_TRANSFER_LEN) + '...';
}
original_option.set(JSON.stringify(new_opt), opt);
return new_opt;
}));
});
}
}

export function createMainWindow() {
main_window = new BrowserWindow({
Expand Down Expand Up @@ -68,28 +96,8 @@ export function createMainWindow() {
main_window.on('blur', hideWindow);
}

const original_option = new Map();
ipcMain.on('search-options', (msg, query) => {
clearTimeout(last_loading);
last_loading = setTimeout(() => msg.sender.send('update-options', null), config.general.debounce_time + 100);
searchQuery(query, (results) => {
clearTimeout(last_loading);
original_option.clear();
msg.sender.send('update-options', results.map((opt) => {
const new_opt = { ...opt };
if (new_opt.text?.length > MAX_TRANSFER_LEN) {
new_opt.text = new_opt.text.substr(0, MAX_TRANSFER_LEN) + '...';
}
if (new_opt.primary?.length > MAX_TRANSFER_LEN) {
new_opt.primary = new_opt.primary.substr(0, MAX_TRANSFER_LEN) + '...';
}
if (new_opt.secondary?.length > MAX_TRANSFER_LEN) {
new_opt.secondary = new_opt.secondary.substr(0, MAX_TRANSFER_LEN) + '...';
}
original_option.set(JSON.stringify(new_opt), opt);
return new_opt;
}));
});
handleQuery(query, msg.sender);
});
ipcMain.on('execute-option', (_, option) => {
if (option && option.executable) {
Expand Down Expand Up @@ -120,6 +128,7 @@ export async function toggleMain(op) {
await new Promise(res => setTimeout(() => res(), 50));
main_window.hide();
} else if ((op === undefined || op) && !main_window.isVisible()) {
handleQuery('', main_window);
main_window.show();
if (config.general.recenter_on_show) {
main_window.center();
Expand Down

0 comments on commit 6583697

Please sign in to comment.