Krapka
Хотя я изначально думал между ним и tauri и выбрал второе, но уже не помню почему
Sergey
Я даже завести не смог
Krapka
Я пока все баги пофиксил, забыл уже что хотел делать
Elmir
Вся функциональность ноды и апи операционной системы напрямую
Ахмед
Ребят я с электрон, не сильно знаком, но я думаю что он умеет отслеживать состояние сети, если да то кто знает, как я могу настроить электрон так чтобы он отслеживал состояние сети? к примеру если ее нет могу ли я через ipc мб, передать уведомление в интерфейс мол "нет сети"? (у меня шаблон electron +vue + vite)
Ed
Вальдемар
всем привет!
позвольте такой вопрос. пытаюсь сделать приложение с электроном (версия последняя), застрял на моменте с драг дропом.
задача вроде простая, перетянуть из папки файл в окно и получить к нему путь. но не выходит никак. в консоли дата трансфер пустой. да и само перетаскивание срабатывает будто через раз.
const dropZone = document.getElementById("drop-zone") as HTMLElement;
dropZone.addEventListener("dragover", (event) => {
event.preventDefault();
});
dropZone.addEventListener("drop", (event) => {
console.log("event", event);
event.preventDefault();
const files = event.dataTransfer?.files;
if (files && files.length > 0) {
selectedFilePath = files[0].path;
dropZone.textContent = `Выбран файл: ${files[0].name}`;
console.log("Выбранный файл:", selectedFilePath);
}
});
я уже как только не крутил и не вертел эти ивенты - не выходит. видео приложил, где видно, как через раз подхватывается и что тогда даже промелькивает, что имя файла андефайнд.
Вальдемар
в доке электрона я видел драг-дроп, но там из приложения, а мне бы в приложение закинуть. я прикидываю, что здесь какая-то проблема с ограничением по безопасности. но как тогда получить этот путь?
Вальдемар
полдня копаний и попыток, но я нашел на СО решение моей проблемы.
dropZone.addEventListener("dragover", (event) => {
event.preventDefault();
event.stopPropagation();
});
dropZone.addEventListener("drop", async (event) => {
event.preventDefault();
event.stopPropagation();
const files = event.dataTransfer?.files;
if (files && files.length > 0) {
const file = files[0];
selectedFilePath = window.api.getFilePath(file);
dropZone.textContent = `${file.name}`;
}
});
window.api.getFilePath(file); это
getFilePath: (file: File): string => webUtils.getPathForFile(file),
в прелоаде.
причем, я до этого пробовал веб утилс в рендрере напрямую. и в доке ссылка на рендерер где веб утилс, что сбило меня с толку.
в общем, он там не должен быть, иначе не заработает.
при этом - 0 ошибок, 0 информации и выпилили это в электроне 32.
опыт неприятный, время потрачено много на такую ерунду. может кому-то в будущем поможет.
eden
подскажите, как цвет поменять окна?
пробовал так, не получилось
eden
eden
разобрался
Sergey
eden
как сделал?
оказывается, надо было в body css прописать фон, я думал, он идет из browserWindow
🅰️nimeCoder
🅰️nimeCoder
и принимает оно вроде только HEX
eden
eden
да, я вот и подумал, что этот кусок - часть этого окна
🅰️nimeCoder
тот фон что будет за пределами рендера HTML будет тем что у BrowserWindow
🅰️nimeCoder
ну это чисто по тому что я помню
🅰️nimeCoder
но я как то хотел в зависимости от темы приложения менять этот фон, у меня окно тоже transparent, но почему то я отказклся от этой идеи вроде
🅰️nimeCoder
Rinat
Добрый день. Прошу помощи разобраться в rendere, АЭС частности в ipcMain: как передать объект с параметрами? Получается только переменную.
ipcMain.handle(‘task’,()=>varInt)
Возможно пережать объект?
Vladislav
Rinat
Спасибо, буду разбираться.
Vladislav
Спасибо, буду разбираться.
А что там разбираться -то, 5 минут прочтения и все ясно как день...
// renderer.js
(async () => {
const user = await window.api.getUser(42);
console.log('Получен пользователь:', user);
})();
// preload.js
const { contextBridge, ipcRenderer } = require('electron');
// Прокидываем метод в глобальное пространство
contextBridge.exposeInMainWorld('api', {
getUser: (id) => ipcRenderer.invoke('get-user', id),
});
// Главный процесс ждёт вызова по каналу 'get-user'
ipcMain.handle('get-user', async (event, id) => {
// Возвращаем объект с данными
return {
id,
name: 'John Doe',
email: 'johnDoe@example.com'
};
});
Rinat
Спасибо, очень помог)
eden
Привет, у кого-нибудь есть гайд по настройке github action на автоматический билд, подписание и нотаризацию приложений?
Я близок к *роскомнадзор*
Артем
eden
могу скинуть свой экшн когда буду у компа, или опиши проблему, мб подскажу что
спасибо за ответ! Сейчас проблема такая - я использую этот экшен https://github.com/paneron/action-electron-builder
и там предлагают использовать либо api_key либо apple_id. Я выбрал второй вариант, но что-то не работает и непонятно что.
Экшн падает с такой ошибкой:
⨯ Unexpected token 'E', "Error: HTT"... is not valid JSON failedTask=build stackTrace=SyntaxError: Unexpected token 'E', "Error: HTT"... is not valid JSON
SyntaxError: Unexpected token 'E', "Error: HTT"... is not valid JSON
Сам экшен был рабочий, я потерял доступ к аккаунту и пытаюсь заменить переменные на другие. Проблема где-то здесь зарыта
Артем
зайди в свой девелоперский аккаунт от эпл, и переподпиши соглашения (скорей всего они обновились) после ревокни свой app specific password, если ты его использовал
Артем
сталкивался с абсолютно такой же проблемой
eden
eden
сейчас попробую первый способ
Евгений
Есть рабочий плагин или либа для выпадающего меню на пкм? Как в хроме "исследовать элемент"
Евгений
Последний которым пользовался пару лет назад больше не работает на новых версиях
eden
сейчас попробую первый способ
вроде заработало. Надо написать пост, про то как это с нуля собирать, вдруг кому-то пригодится, да и сам забуду как страшный сон, как это делать
eden
Артем
попробуй через cli вручную для макос подписать (так проверишь валидность кредов)
Артем
попробуй используя notarytool подписать локально не через экшн. там вроде еще можно логи расширить через флаг соответствующий
eden
eden
какой-то пиздец, простите. 15 источников пришлось почитать, в трех репозиториях исходники посмотреть и одно ишью, чтобы разобраться, как это дело завести.
то, что написано в README к github экшену was a fucking lie
Артем
eden
в чем проблема была?
это еще предстоит выяснить)
я жонглировал переменнными, пока не заработало, буду отключать по одной, пока не останутся только нужные.
но если коротко, я пошёл по такому пути - вместо того, чтобы опираться на доку экшена в гитхабе, я пошёл смотреть https://github.com/electron/notarize и что конкретно он ждёт в переменных. У него есть несколько сетов переменных и там очень хитро - если ты заведешь какую-то неправильную, лишнюю переменную - он может сломаться.
eden
плюс наткнулся на такую штуку - https://github.com/electron-userland/electron-builder/issues/8103
APPLE_TEAM_ID нужен всегда, хотя не везде об этом пишут
Георгий
Георгий
eden
Георгий
Для интереса
.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
</dict>
</plist>
sign.cjs
const { notarize } = require('@electron/notarize');
exports.default = async function (context) {
const { electronPlatformName, appOutDir, packager } = context;
const { NOTARIZE_APPLE_ID, NOTARIZE_APPLE_ID_PASSWORD, NOTARIZE_APPLE_TEAM_ID } = process.env;
if (electronPlatformName !== 'darwin') {
return;
}
console.info('Start custom notarize process for MacOS');
try {
await notarize({
appPath: `${ appOutDir }/${ packager.appInfo.productFilename }.app`,
appBundleId: 'bla-bla-bla',
appleId: NOTARIZE_APPLE_ID,
appleIdPassword: NOTARIZE_APPLE_ID_PASSWORD,
teamId: NOTARIZE_APPLE_TEAM_ID,
});
} catch (err) {
console.error(err);
}
};
eden
Для интереса
.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
</dict>
</plist>
sign.cjs
const { notarize } = require('@electron/notarize');
exports.default = async function (context) {
const { electronPlatformName, appOutDir, packager } = context;
const { NOTARIZE_APPLE_ID, NOTARIZE_APPLE_ID_PASSWORD, NOTARIZE_APPLE_TEAM_ID } = process.env;
if (electronPlatformName !== 'darwin') {
return;
}
console.info('Start custom notarize process for MacOS');
try {
await notarize({
appPath: `${ appOutDir }/${ packager.appInfo.productFilename }.app`,
appBundleId: 'bla-bla-bla',
appleId: NOTARIZE_APPLE_ID,
appleIdPassword: NOTARIZE_APPLE_ID_PASSWORD,
teamId: NOTARIZE_APPLE_TEAM_ID,
});
} catch (err) {
console.error(err);
}
};
ааа, ты подписываешь через скрипт, а у меня-то сторонний экшен
eden
он там от себя приколов, кажется, добавляет
eden
Георгий
А ты получается пытаешься прям в экшене все сделать самом?
eden
eden
спасибо!
eden
купил сертификат для подписания приложений для винды
а он теперь требует подтверждения регистрации компании и прочую хрень
просчитался, но где
Yuri
eden
Yuri
а ИП-то подойдет?
Разные компании предъявляют разные требования. Если ты у GlobalSign к примеру покупаешь ev серт, то подойдет
eden
eden
eden
certum.eu
это здесь
Yuri
Я про то, что некоторые компании выдают серты только ООО
eden
пытаюсь хранить настройки в keychain, и моё приложение теперь спрашивает пароль от него. Ни разу такого в других приложениях не видел. Как от этого избавиться, подскажите, пожалуйста?
использую две эти штуки:
import { safeStorage } from 'electron';
import Store from 'electron-store';
Георгий
eden
eden