JM Tech Power

jm-tech-power-official/Flash Download

A desktop download manager that opens up to 32 connections against one file and can send each of them out a different proxy route.

Public Uncategorized
Clone jm-tech-power-official/flash-download.jmproj
src/preload/preload.js
'use strict';

const { contextBridge, ipcRenderer } = require('electron');

// Every call is a named, argument-checked channel — the renderer never gets
// node, fs, or a general-purpose invoke.
const call = (channel) => (...args) => ipcRenderer.invoke(channel, ...args);

contextBridge.exposeInMainWorld('flash', {
  getState: call('state:get'),
  probe: call('url:probe'),

  add: call('download:add'),
  pause: call('download:pause'),
  resume: call('download:resume'),
  retry: call('download:retry'),
  rebalance: call('download:rebalance'),
  cancel: call('download:cancel'),
  remove: call('download:remove'),
  clearFinished: call('download:clearFinished'),
  reveal: call('download:reveal'),
  openFile: call('download:open'),

  addRoute: call('route:add'),
  updateRoute: call('route:update'),
  removeRoute: call('route:remove'),
  testRoute: call('route:test'),
  testAllRoutes: call('route:testAll'),

  updateSettings: call('settings:update'),
  chooseFolder: call('dialog:chooseFolder'),

  win: {
    minimize: call('win:minimize'),
    maximize: call('win:maximize'),
    close: call('win:close'),
    info: call('win:info'),
  },

  onState: (fn) => {
    const listener = (_e, state) => fn(state);
    ipcRenderer.on('state', listener);
    return () => ipcRenderer.removeListener('state', listener);
  },
  onNotice: (fn) => {
    const listener = (_e, notice) => fn(notice);
    ipcRenderer.on('notice', listener);
    return () => ipcRenderer.removeListener('notice', listener);
  },
  onClipboardUrl: (fn) => {
    const listener = (_e, url) => fn(url);
    ipcRenderer.on('clipboard:url', listener);
    return () => ipcRenderer.removeListener('clipboard:url', listener);
  },
  onOpenUrl: (fn) => {
    const listener = (_e, url) => fn(url);
    ipcRenderer.on('open-url', listener);
    return () => ipcRenderer.removeListener('open-url', listener);
  },
  onWinState: (fn) => {
    const listener = (_e, s) => fn(s);
    ipcRenderer.on('win:state', listener);
    return () => ipcRenderer.removeListener('win:state', listener);
  },
});