mirror of
https://github.com/Qortal/qortal-ui.git
synced 2025-04-30 23:07:50 +00:00
able to save zip file to qdn
This commit is contained in:
parent
0a16625ca6
commit
aea4c876b8
@ -21,15 +21,17 @@
|
|||||||
"@material/mwc-list": "0.27.0",
|
"@material/mwc-list": "0.27.0",
|
||||||
"@material/mwc-select": "0.27.0",
|
"@material/mwc-select": "0.27.0",
|
||||||
"@tiptap/core": "2.0.0-beta.209",
|
"@tiptap/core": "2.0.0-beta.209",
|
||||||
|
"@tiptap/extension-highlight": "2.0.0-beta.209",
|
||||||
"@tiptap/extension-image": "2.0.0-beta.209",
|
"@tiptap/extension-image": "2.0.0-beta.209",
|
||||||
"@tiptap/extension-placeholder": "2.0.0-beta.209",
|
"@tiptap/extension-placeholder": "2.0.0-beta.209",
|
||||||
"@tiptap/extension-underline": "2.0.0-beta.209",
|
"@tiptap/extension-underline": "2.0.0-beta.209",
|
||||||
"@tiptap/extension-highlight": "2.0.0-beta.209",
|
|
||||||
"@tiptap/html": "2.0.0-beta.209",
|
"@tiptap/html": "2.0.0-beta.209",
|
||||||
"@tiptap/starter-kit": "2.0.0-beta.209",
|
"@tiptap/starter-kit": "2.0.0-beta.209",
|
||||||
|
"@zip.js/zip.js": "2.6.62",
|
||||||
"asmcrypto.js": "2.3.2",
|
"asmcrypto.js": "2.3.2",
|
||||||
"compressorjs": "1.1.1",
|
"compressorjs": "1.1.1",
|
||||||
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
|
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
|
||||||
|
"localforage": "1.10.0",
|
||||||
"prosemirror-commands": "1.5.0",
|
"prosemirror-commands": "1.5.0",
|
||||||
"prosemirror-dropcursor": "1.6.1",
|
"prosemirror-dropcursor": "1.6.1",
|
||||||
"prosemirror-gapcursor": "1.3.1",
|
"prosemirror-gapcursor": "1.3.1",
|
||||||
@ -40,7 +42,6 @@
|
|||||||
"prosemirror-state": "1.4.2",
|
"prosemirror-state": "1.4.2",
|
||||||
"prosemirror-transform": "1.7.0",
|
"prosemirror-transform": "1.7.0",
|
||||||
"prosemirror-view": "1.29.1",
|
"prosemirror-view": "1.29.1",
|
||||||
"localforage": "1.10.0",
|
|
||||||
"short-unique-id": "4.4.4"
|
"short-unique-id": "4.4.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -9,6 +9,8 @@ import Placeholder from '@tiptap/extension-placeholder'
|
|||||||
import Highlight from '@tiptap/extension-highlight'
|
import Highlight from '@tiptap/extension-highlight'
|
||||||
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
|
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
|
||||||
import { Editor, Extension } from '@tiptap/core'
|
import { Editor, Extension } from '@tiptap/core'
|
||||||
|
import * as zip from "@zip.js/zip.js";
|
||||||
|
import { saveAs } from 'file-saver';
|
||||||
|
|
||||||
// import localForage from "localforage";
|
// import localForage from "localforage";
|
||||||
registerTranslateConfig({
|
registerTranslateConfig({
|
||||||
@ -103,7 +105,8 @@ class ChatPage extends LitElement {
|
|||||||
openUserInfo: { type: Boolean },
|
openUserInfo: { type: Boolean },
|
||||||
selectedHead: { type: Object },
|
selectedHead: { type: Object },
|
||||||
userName: { type: String },
|
userName: { type: String },
|
||||||
goToRepliedMessage: {attribute: false}
|
goToRepliedMessage: {attribute: false},
|
||||||
|
gifsToBeAdded: { type: Array}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,6 +894,7 @@ class ChatPage extends LitElement {
|
|||||||
this.currentEditor = '_chatEditorDOM'
|
this.currentEditor = '_chatEditorDOM'
|
||||||
this.initialChat = this.initialChat.bind(this)
|
this.initialChat = this.initialChat.bind(this)
|
||||||
this.isEnabledChatEnter = true
|
this.isEnabledChatEnter = true
|
||||||
|
this.gifsToBeAdded = []
|
||||||
}
|
}
|
||||||
|
|
||||||
_toggle(value) {
|
_toggle(value) {
|
||||||
@ -924,6 +928,66 @@ class ChatPage extends LitElement {
|
|||||||
this.isEnabledChatEnter = !this.isEnabledChatEnter
|
this.isEnabledChatEnter = !this.isEnabledChatEnter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addGifs(gifs){
|
||||||
|
console.log('gifs', gifs)
|
||||||
|
this.gifsToBeAdded = [...this.gifsToBeAdded, ...gifs]
|
||||||
|
console.log('this.gifsToBeAdded', this.gifsToBeAdded)
|
||||||
|
}
|
||||||
|
|
||||||
|
async uploadGifCollection(){
|
||||||
|
try {
|
||||||
|
function blobToBase64(blob) {
|
||||||
|
return new Promise((resolve, _) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onloadend = () => resolve(reader.result);
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const zipFileWriter = new zip.BlobWriter("application/zip");
|
||||||
|
// Creates a TextReader object storing the text of the entry to add in the zip
|
||||||
|
// (i.e. "Hello world!").
|
||||||
|
const helloWorldReader = new zip.TextReader("Hello world!");
|
||||||
|
|
||||||
|
// Creates a ZipWriter object writing data via `zipFileWriter`, adds the entry
|
||||||
|
// "hello.txt" containing the text "Hello world!" via `helloWorldReader`, and
|
||||||
|
// closes the writer.
|
||||||
|
const file = this.gifsToBeAdded[0]
|
||||||
|
const file2 = this.gifsToBeAdded[1]
|
||||||
|
const zipWriter = new zip.ZipWriter(zipFileWriter, { bufferedWrite: true });
|
||||||
|
await zipWriter.add(file.name, new zip.BlobReader(file));
|
||||||
|
await zipWriter.add(file2.name, new zip.BlobReader(file2));
|
||||||
|
|
||||||
|
await zipWriter.close();
|
||||||
|
const zipFileBlob = await zipFileWriter.getData()
|
||||||
|
const blobTobase = await blobToBase64(zipFileBlob)
|
||||||
|
console.log({blobTobase})
|
||||||
|
const userName = await this.getName(this.selectedAddress.address);
|
||||||
|
if (!userName) {
|
||||||
|
parentEpml.request('showSnackBar', get("chatpage.cchange27"));
|
||||||
|
this.isLoading = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const id = this.uid();
|
||||||
|
const identifier = `gif_${id}`;
|
||||||
|
await publishData({
|
||||||
|
registeredName: userName,
|
||||||
|
file : blobTobase.split(',')[1],
|
||||||
|
service: 'GIF_REPOSITORY',
|
||||||
|
identifier: identifier,
|
||||||
|
parentEpml,
|
||||||
|
metaData: undefined,
|
||||||
|
uploadType: 'zip',
|
||||||
|
selectedAddress: this.selectedAddress,
|
||||||
|
worker: this.webWorkerImage,
|
||||||
|
isBase64: true
|
||||||
|
})
|
||||||
|
saveAs(zipFileBlob, 'zipfile');
|
||||||
|
console.log({zipFileBlob})
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return html`
|
return html`
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
@ -1110,6 +1174,34 @@ class ChatPage extends LitElement {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</wrapper-modal>
|
</wrapper-modal>
|
||||||
|
<!-- gif modal -->
|
||||||
|
<wrapper-modal
|
||||||
|
.onClickFunc=${() => {
|
||||||
|
// this.removeImage();
|
||||||
|
}}
|
||||||
|
style=${true ? "visibility:visible;z-index:50" : "visibility: hidden;z-index:-100"}>
|
||||||
|
<div>
|
||||||
|
<div class="dialog-container">
|
||||||
|
|
||||||
|
<input
|
||||||
|
@change="${e => {
|
||||||
|
this.addGifs(e.target.files);
|
||||||
|
const filePickerInput = this.shadowRoot.getElementById('file-picker-gif')
|
||||||
|
if(filePickerInput){
|
||||||
|
filePickerInput.value = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
id="file-picker-gif"
|
||||||
|
?multiple=${true}
|
||||||
|
class="file-picker-input-gif" type="file" name="myGif" accept="image/gif" />
|
||||||
|
|
||||||
|
<button @click=${()=> {
|
||||||
|
this.uploadGifCollection()
|
||||||
|
}}>Upload Collection</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</wrapper-modal>
|
||||||
<paper-dialog class="warning" id="confirmDialog" modal>
|
<paper-dialog class="warning" id="confirmDialog" modal>
|
||||||
<h2 style="color: var(--black);">${translate("chatpage.cchange41")}</h2>
|
<h2 style="color: var(--black);">${translate("chatpage.cchange41")}</h2>
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -16,7 +16,8 @@ export const publishData = async ({
|
|||||||
parentEpml,
|
parentEpml,
|
||||||
uploadType,
|
uploadType,
|
||||||
selectedAddress,
|
selectedAddress,
|
||||||
worker
|
worker,
|
||||||
|
isBase64
|
||||||
}) => {
|
}) => {
|
||||||
const validateName = async (receiverName) => {
|
const validateName = async (receiverName) => {
|
||||||
let nameRes = await parentEpml.request("apiCall", {
|
let nameRes = await parentEpml.request("apiCall", {
|
||||||
@ -115,11 +116,17 @@ export const publishData = async ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Base64 encode the file to work around compatibility issues between javascript and java byte arrays
|
// Base64 encode the file to work around compatibility issues between javascript and java byte arrays
|
||||||
|
if(isBase64){
|
||||||
|
postBody = file
|
||||||
|
}
|
||||||
|
if(!isBase64){
|
||||||
let fileBuffer = new Uint8Array(await file.arrayBuffer())
|
let fileBuffer = new Uint8Array(await file.arrayBuffer())
|
||||||
postBody = Buffer.from(fileBuffer).toString("base64")
|
postBody = Buffer.from(fileBuffer).toString("base64")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log({postBody})
|
||||||
|
|
||||||
let uploadDataUrl = `/arbitrary/${service}/${registeredName}${urlSuffix}?apiKey=${getApiKey()}`
|
let uploadDataUrl = `/arbitrary/${service}/${registeredName}${urlSuffix}?apiKey=${getApiKey()}`
|
||||||
if (identifier != null && identifier.trim().length > 0) {
|
if (identifier != null && identifier.trim().length > 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user