Skip to content

Commit

Permalink
Merge remote-tracking branch 'benma/qttransport'
Browse files Browse the repository at this point in the history
  • Loading branch information
benma committed Oct 19, 2022
2 parents dd1cabb + 2fbc8f0 commit ff6fada
Showing 1 changed file with 25 additions and 35 deletions.
60 changes: 25 additions & 35 deletions frontends/web/src/utils/qttransport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,46 +19,36 @@ import { QWebChannel } from './qwebchannel';
import { TMsgCallback, TQueryPromiseMap } from './transport-common';
import { runningInQtWebEngine } from './env';

let cache: any = null;
let webChannel: any = null;
let queryID: number = 0;
const queryPromises: TQueryPromiseMap = {};
const currentListeners: TMsgCallback[] = [];

function initTransport() {
return new Promise((resolve, reject) => {
if (webChannel) {
resolve(webChannel);
} else if (cache) {
const check = function() {
if (webChannel) {
resolve(webChannel);
} else {
window.setTimeout(check, 1);
}
};
check();
} else if (runningInQtWebEngine()) {
const initWebChannel = function(channel: any) {
webChannel = channel;
webChannel.objects.backend.gotResponse.connect((
queryID: number,
response: string,
) => {
queryPromises[queryID].resolve(JSON.parse(response));
delete queryPromises[queryID];
});
webChannel.objects.backend.pushNotify.connect((msg: string) => {
currentListeners.forEach(listener => listener(JSON.parse(msg)));
});
resolve(webChannel);

};
cache = new QWebChannel((window.qt!).webChannelTransport, initWebChannel);
} else {
reject();
}
});
async function initTransport() {
if (!runningInQtWebEngine()) {
throw new Error('Must be running in Qt');
}
if (webChannel) {
return webChannel;
}
const initWebChannel = function(channel: any) {
channel.objects.backend.gotResponse.connect((
queryID: number,
response: string,
) => {
queryPromises[queryID].resolve(JSON.parse(response));
delete queryPromises[queryID];
});
channel.objects.backend.pushNotify.connect((msg: string) => {
currentListeners.forEach(listener => listener(JSON.parse(msg)));
});
webChannel = channel;
};
new QWebChannel((window.qt!).webChannelTransport, initWebChannel);
while (!webChannel) {
await new Promise(r => setTimeout(r, 1));
}
return webChannel;
}

export function call(query: string) {
Expand Down

0 comments on commit ff6fada

Please sign in to comment.