Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.6 KiB

import {blobConstruct} from './bin_utils';
export class FileManager {
public blobSupported = true;
constructor() {
try {
blobConstruct([], '');
} catch(e) {
this.blobSupported = false;
}
}
public isAvailable() {
return this.blobSupported;
}
public write(fileWriter: ReturnType<FileManager['getFakeFileWriter']>, bytes: Uint8Array | Blob | string): Promise<void> {
if(bytes instanceof Blob) { // is file bytes
return new Promise((resolve, reject) => {
let fileReader = new FileReader();
fileReader.onload = function(event) {
let arrayBuffer = event.target.result as ArrayBuffer;
let arr = new Uint8Array(arrayBuffer);
fileWriter.write(arr).then(resolve, reject);
};
fileReader.readAsArrayBuffer(bytes);
});
} else {
return fileWriter.write(bytes);
}
}
4 years ago
public getFakeFileWriter(mimeType: string, saveFileCallback: (blob: Blob) => Promise<Blob>) {
const blobParts: Array<Uint8Array | string> = [];
4 years ago
const fakeFileWriter = {
write: async(part: Uint8Array | string) => {
if(!this.blobSupported) {
throw false;
}
blobParts.push(part);
},
truncate: () => {
blobParts.length = 0;
},
finalize: () => {
const blob = blobConstruct(blobParts, mimeType);
if(saveFileCallback) {
saveFileCallback(blob);
}
return blob;
}
};
return fakeFileWriter;
}
}
export default new FileManager();