Some minor bugfixing
This commit is contained in:
parent
37e3cfc30e
commit
d06d350ded
2
github
2
github
@ -1 +1 @@
|
||||
Subproject commit 1e2220d20cc98a6fb3ee75264ecc6f4b95cfa4fb
|
||||
Subproject commit 7f89167600c72eadf1c31be0dad3b7563561699e
|
@ -2,6 +2,10 @@ import {Options} from "electron-packager";
|
||||
import * as packager from "electron-packager"
|
||||
const pkg = require('../package.json');
|
||||
|
||||
if(pkg.name !== "TeaClient") {
|
||||
throw "The package name determines where the app data folder will be! Don't change that!"
|
||||
}
|
||||
|
||||
import * as fs from "fs-extra";
|
||||
import * as path_helper from "path";
|
||||
import {parseVersion} from "../modules/shared/version";
|
||||
|
@ -56,19 +56,27 @@ export async function fetchRemoteUpdateData() : Promise<UpdateData> {
|
||||
const request_url = updateServerUrl() + "/api.php?" + querystring.stringify({
|
||||
type: "update-info"
|
||||
});
|
||||
console.log("request: %s", request_url);
|
||||
|
||||
console.log("Fetching update data from: %s", request_url);
|
||||
request.get(request_url, {
|
||||
timeout: 2000
|
||||
}, (error, response, body) => {
|
||||
if(response.statusCode !== 200) {
|
||||
setImmediate(reject, "Invalid status code (" + response.statusCode + (response.statusMessage ? "/" + response.statusMessage : "") + ")");
|
||||
if(error) {
|
||||
console.error("Failed to query the update server for update information: %o", error);
|
||||
setImmediate(reject, "failed to query update server");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!response) {
|
||||
setImmediate(reject, "Missing response object");
|
||||
return;
|
||||
}
|
||||
|
||||
if(response.statusCode !== 200) {
|
||||
setImmediate(reject, "Invalid status code (" + response.statusCode + (response.statusMessage ? "/" + response.statusMessage : "") + ")");
|
||||
return;
|
||||
}
|
||||
|
||||
let data: any;
|
||||
try {
|
||||
data = JSON.parse(body);
|
||||
@ -201,6 +209,12 @@ export async function downloadClientVersion(channel: string, version: Version, s
|
||||
let stream = progress(request.get(requestUrl, {
|
||||
timeout: 10_000
|
||||
}, (error, response, _body) => {
|
||||
if(error) {
|
||||
console.error("Failed to download new client version: %o", error);
|
||||
fireFailed("Download failed");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!response) {
|
||||
fireFailed("Missing response object");
|
||||
return;
|
||||
|
@ -12,6 +12,7 @@ let _save_timer: number;
|
||||
export async function initialize() {
|
||||
await fs.mkdirp(SETTINGS_DIR);
|
||||
|
||||
console.error("Load local storage from: %o", SETTINGS_DIR);
|
||||
const files = await fs.readdir(SETTINGS_DIR);
|
||||
for(const file of files) {
|
||||
const key = decodeURIComponent(file);
|
||||
|
@ -13,8 +13,8 @@ import {tr} from "tc-shared/i18n/localize";
|
||||
import {Registry} from "tc-shared/events";
|
||||
import {Filter, FilterType, FilterTypeClass} from "tc-shared/voice/Filter";
|
||||
import {NativeFilter, NStateFilter, NThresholdFilter, NVoiceLevelFilter} from "./AudioFilter";
|
||||
import {IDevice} from "tc-shared/audio/recorder";
|
||||
import {LogCategory, logTrace, logWarn} from "tc-shared/log";
|
||||
import {getRecorderBackend, IDevice} from "tc-shared/audio/recorder";
|
||||
import {LogCategory, logError, logTrace, logWarn} from "tc-shared/log";
|
||||
import {Settings, settings} from "tc-shared/settings";
|
||||
import NativeFilterMode = audio.record.FilterMode;
|
||||
|
||||
@ -79,8 +79,16 @@ export class NativeInput implements AbstractInput {
|
||||
this.setState(InputState.INITIALIZING);
|
||||
logTrace(LogCategory.AUDIO, tr("Starting input for device %o", this.deviceId));
|
||||
try {
|
||||
const state = await new Promise<audio.record.DeviceSetResult>(resolve => this.nativeHandle.set_device(this.deviceId, resolve));
|
||||
let deviceId;
|
||||
if(this.deviceId === IDevice.NoDeviceId) {
|
||||
throw tr("no device selected");
|
||||
} else if(this.deviceId === IDevice.DefaultDeviceId) {
|
||||
deviceId = getRecorderBackend().getDeviceList().getDefaultDeviceId();
|
||||
} else {
|
||||
deviceId = this.deviceId;
|
||||
}
|
||||
|
||||
const state = await new Promise<audio.record.DeviceSetResult>(resolve => this.nativeHandle.set_device(deviceId, resolve));
|
||||
if(state !== "success") {
|
||||
if(state === "invalid-device") {
|
||||
return InputStartError.EDEVICEUNKNOWN;
|
||||
@ -88,8 +96,8 @@ export class NativeInput implements AbstractInput {
|
||||
throw tr("invalid set device result state");
|
||||
}
|
||||
|
||||
/* FIXME! */
|
||||
throw state;
|
||||
logError(LogCategory.AUDIO, tr("Native audio driver returned invalid device set result: %o"), state);
|
||||
throw tr("unknown device change result");
|
||||
}
|
||||
|
||||
await new Promise((resolve, reject) => this.nativeHandle.start(result => {
|
||||
@ -206,7 +214,7 @@ export class NativeInput implements AbstractInput {
|
||||
|
||||
async setConsumer(consumer: InputConsumer): Promise<void> {
|
||||
if(typeof(consumer) !== "undefined") {
|
||||
throw "we only support native consumers!"; // TODO: May create a general wrapper?
|
||||
throw tr("we only support native consumers!"); // TODO: May create a general wrapper?
|
||||
}
|
||||
|
||||
return;
|
||||
@ -273,6 +281,7 @@ export class NativeLevelMeter implements LevelMeter {
|
||||
|
||||
constructor(device: IDevice) {
|
||||
this.targetDevice = device;
|
||||
this.callback = () => {};
|
||||
}
|
||||
|
||||
async initialize() {
|
||||
@ -305,10 +314,7 @@ export class NativeLevelMeter implements LevelMeter {
|
||||
}
|
||||
|
||||
/* references this variable, needs a destroy() call, else memory leak */
|
||||
this.nativeFilter.set_analyze_filter(value => {
|
||||
if(this.callback) this.callback(value);
|
||||
});
|
||||
|
||||
this.nativeFilter.set_analyze_filter(value => this.callback(value));
|
||||
NativeLevelMeter.instances.push(this);
|
||||
}
|
||||
|
||||
@ -340,6 +346,6 @@ export class NativeLevelMeter implements LevelMeter {
|
||||
}
|
||||
|
||||
setObserver(callback: (value: number) => any) {
|
||||
this.callback = callback;
|
||||
this.callback = callback || (() => {});
|
||||
}
|
||||
}
|
@ -43,16 +43,17 @@ class InputDeviceList extends AbstractDeviceList {
|
||||
const nativeDeviceList = audio.available_devices();
|
||||
logTrace(LogCategory.AUDIO, tr("Native device list: %o"), nativeDeviceList);
|
||||
this.cachedDevices = nativeDeviceList
|
||||
.filter(e => e.input_supported || e.input_default)
|
||||
.filter(e => e.driver !== "Windows WDM-KS") /* If we're using WDM-KS and opening the microphone view, for some reason the channels get blocked an never release.... */
|
||||
.map(device => {
|
||||
return {
|
||||
deviceId: device.device_id,
|
||||
name: device.name,
|
||||
driver: device.driver,
|
||||
isDefault: device.input_default
|
||||
}
|
||||
});
|
||||
.filter(e => e.input_supported || e.input_default)
|
||||
/* If we're using WDM-KS and opening the microphone view, for some reason the channels get blocked an never release.... */
|
||||
.filter(e => e.driver !== "Windows WDM-KS")
|
||||
.map(device => {
|
||||
return {
|
||||
deviceId: device.device_id,
|
||||
name: device.name,
|
||||
driver: device.driver,
|
||||
isDefault: device.input_default
|
||||
}
|
||||
});
|
||||
this.setState("healthy");
|
||||
return this.cachedDevices;
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ import {
|
||||
} from "tc-shared/file/Transfer";
|
||||
import * as native from "tc-native/connection";
|
||||
import {tr} from "tc-shared/i18n/localize";
|
||||
import * as log from "tc-shared/log";
|
||||
import {LogCategory, logError} from "tc-shared/log";
|
||||
import {base64_encode_ab} from "tc-shared/utils/buffers";
|
||||
import * as path from "path";
|
||||
@ -52,8 +51,9 @@ const executeTransfer = (transfer: FileTransfer, object: native.ft.TransferObjec
|
||||
};
|
||||
|
||||
ntransfer.callback_failed = error => {
|
||||
if(transfer.isFinished())
|
||||
if(transfer.isFinished()) {
|
||||
return;
|
||||
}
|
||||
|
||||
transfer.lastStateUpdate = Date.now();
|
||||
transfer.setFailed({
|
||||
@ -64,8 +64,9 @@ const executeTransfer = (transfer: FileTransfer, object: native.ft.TransferObjec
|
||||
};
|
||||
|
||||
ntransfer.callback_finished = aborted => {
|
||||
if(transfer.isFinished())
|
||||
if(transfer.isFinished()) {
|
||||
return;
|
||||
}
|
||||
|
||||
callbackFinished();
|
||||
transfer.setTransferState(aborted ? FileTransferState.CANCELED : FileTransferState.FINISHED);
|
||||
@ -73,13 +74,15 @@ const executeTransfer = (transfer: FileTransfer, object: native.ft.TransferObjec
|
||||
};
|
||||
|
||||
ntransfer.callback_progress = (current, max) => {
|
||||
if(transfer.isFinished())
|
||||
if(transfer.isFinished()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const transferInfo = transfer.lastProgressInfo();
|
||||
/* ATTENTION: transferInfo.timestamp | 0 does not work since 1591875114970 > 2^32 (1591875114970 | 0 => -1557751846) */
|
||||
if(transferInfo && Date.now() - (typeof transferInfo.timestamp === "number" ? transferInfo.timestamp : 0) < 2000 && !(transferInfo as any).native_info)
|
||||
if(transferInfo && Date.now() - (typeof transferInfo.timestamp === "number" ? transferInfo.timestamp : 0) < 2000 && !(transferInfo as any).native_info) {
|
||||
return;
|
||||
}
|
||||
|
||||
transfer.updateProgress({
|
||||
network_current_speed: 0,
|
||||
@ -100,8 +103,9 @@ const executeTransfer = (transfer: FileTransfer, object: native.ft.TransferObjec
|
||||
};
|
||||
|
||||
try {
|
||||
if(!ntransfer.start())
|
||||
if(!ntransfer.start()) {
|
||||
throw tr("failed to start transfer");
|
||||
}
|
||||
} catch (error) {
|
||||
if(typeof error !== "string") {
|
||||
logError(LogCategory.FILE_TRANSFER, tr("Failed to start file transfer: %o"), error);
|
||||
@ -119,7 +123,9 @@ const executeTransfer = (transfer: FileTransfer, object: native.ft.TransferObjec
|
||||
TransferProvider.setProvider(new class extends TransferProvider {
|
||||
executeFileDownload(transfer: FileDownloadTransfer) {
|
||||
try {
|
||||
if(!transfer.target) throw tr("transfer target is undefined");
|
||||
if(!transfer.target) {
|
||||
throw tr("transfer target is undefined");
|
||||
}
|
||||
transfer.setTransferState(FileTransferState.CONNECTING);
|
||||
|
||||
let nativeTarget: native.ft.FileTransferTarget;
|
||||
@ -137,8 +143,9 @@ TransferProvider.setProvider(new class extends TransferProvider {
|
||||
}
|
||||
|
||||
executeTransfer(transfer, nativeTarget, () => {
|
||||
if(transfer.target instanceof ResponseTransferTargetImpl)
|
||||
if(transfer.target instanceof ResponseTransferTargetImpl) {
|
||||
transfer.target.createResponseFromBuffer();
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
if(typeof error !== "string") {
|
||||
@ -155,7 +162,9 @@ TransferProvider.setProvider(new class extends TransferProvider {
|
||||
|
||||
executeFileUpload(transfer: FileUploadTransfer) {
|
||||
try {
|
||||
if(!transfer.source) throw tr("transfer source is undefined");
|
||||
if(!transfer.source) {
|
||||
throw tr("transfer source is undefined");
|
||||
}
|
||||
|
||||
let nativeSource: native.ft.FileTransferSource;
|
||||
if(transfer.source instanceof BrowserFileTransferSourceImpl) {
|
||||
@ -165,7 +174,6 @@ TransferProvider.setProvider(new class extends TransferProvider {
|
||||
} else if(transfer.source instanceof BufferTransferSourceImpl) {
|
||||
nativeSource = transfer.source.getNativeSource();
|
||||
} else {
|
||||
console.log(transfer.source);
|
||||
transfer.setFailed({
|
||||
error: "io",
|
||||
reason: "unsupported-target"
|
||||
@ -367,15 +375,18 @@ class FileTransferTargetImpl extends FileTransferTarget {
|
||||
}
|
||||
|
||||
async requestPath() {
|
||||
if(typeof this.path === "string")
|
||||
if(typeof this.path === "string") {
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await electron.remote.dialog.showSaveDialog({ defaultPath: this.name });
|
||||
if(result.canceled)
|
||||
if(result.canceled) {
|
||||
throw tr("download canceled");
|
||||
}
|
||||
|
||||
if(!result.filePath)
|
||||
if(!result.filePath) {
|
||||
throw tr("invalid result path");
|
||||
}
|
||||
|
||||
this.path = path.dirname(result.filePath);
|
||||
this.name = path.basename(result.filePath);
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "teaspeak_client",
|
||||
"name": "TeaClient",
|
||||
"version": "1.5.0-9",
|
||||
"description": "",
|
||||
"main": "main.js",
|
||||
|
Loading…
Reference in New Issue
Block a user