diff --git a/main.meta.js b/main.meta.js index 6e539e6..782c77f 100644 --- a/main.meta.js +++ b/main.meta.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.135 +// @version 0.136 // @description uhh // @author You // @match https://boards.4channel.org/* diff --git a/main.user.js b/main.user.js index c3386c3..210ed60 100644 --- a/main.user.js +++ b/main.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.135 +// @version 0.136 // @description uhh // @author You // @match https://boards.4channel.org/* @@ -11598,7 +11598,7 @@ var extract2 = (webm) => { const dec = new ebml.Decoder(); const chunks = dec.decode(webm); - const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "COOM"); + const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "DOOM"); const cl = chunks.find((e) => e.name == "Cluster"); if (cl && embed2 == -1) return; @@ -11606,7 +11606,7 @@ return; const chk = chunks[embed2 + 1]; if (chk.type == "b" && chk.name == "TagBinary") - return [{ filename: "string", data: chk.data }]; + return decodeCoom3Payload(chk.data); }; var inject2 = async (container, injs) => { const links = await uploadFiles(injs); @@ -11615,7 +11615,7 @@ var has_embed2 = (webm) => { const dec = new ebml.Decoder(); const chunks = dec.decode(webm); - const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "COOM"); + const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "DOOM"); const cl = chunks.find((e) => e.name == "Cluster"); if (cl && embed2 == -1) return false; @@ -11662,7 +11662,7 @@ } while (gif[end] == "!".charCodeAt(0)) { let sec = read_section(gif, end); - if (sec.appname == "COOMTECH") { + if (sec.appname == "DOOMTECH") { const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -11670,8 +11670,8 @@ sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "COOMTECH" && gif[end] == "!".charCodeAt(0)); - return [{ data: ret, filename: "embedded" }]; + } while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0)); + return decodeCoom3Payload(ret); } end = sec.end; } diff --git a/src/gif.ts b/src/gif.ts index 6cd1eec..ea6f115 100644 --- a/src/gif.ts +++ b/src/gif.ts @@ -1,7 +1,7 @@ import { Buffer } from "buffer"; import type { EmbeddedFile, ImageProcessor } from "./main"; import { BufferWriteStream } from "./png"; -import { uploadFiles } from "./utils"; +import { decodeCoom3Payload, uploadFiles } from "./utils"; const netscape = Buffer.from("!\xFF\x0BNETSCAPE2.0", 'ascii'); const magic = Buffer.from("!\xFF\x0B" + "DOOMTECH1.1", 'ascii'); @@ -35,7 +35,7 @@ const extractBuff = (gif: Buffer) => { // skip beeg blocks while (gif[end] == '!'.charCodeAt(0)) { let sec = read_section(gif, end); // this section contains the size to more easily preallocate a buffer size, but you don't need to care care - if (sec.appname == "COOMTECH") { + if (sec.appname == "DOOMTECH") { const ret = Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -43,8 +43,8 @@ const extractBuff = (gif: Buffer) => { sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "COOMTECH" && gif[end] == '!'.charCodeAt(0)); - return [{ data: ret, filename: 'embedded' }] as EmbeddedFile[]; + } while (sec.appname == "DOOMTECH" && gif[end] == '!'.charCodeAt(0)); + return decodeCoom3Payload(ret); } end = sec.end; } diff --git a/src/webm.ts b/src/webm.ts index d8cf3a1..ccb78a0 100644 --- a/src/webm.ts +++ b/src/webm.ts @@ -1,7 +1,7 @@ import { Buffer } from "buffer"; import * as ebml from "ts-ebml"; import type { ImageProcessor } from "./main"; -import { uploadFiles } from "./utils"; +import { decodeCoom3Payload, uploadFiles } from "./utils"; // unused, but will in case 4chan does file sig checks const password = Buffer.from("NOA"); @@ -113,7 +113,7 @@ const extract = (webm: Buffer) => { const dec = new ebml.Decoder(); const chunks = dec.decode(webm); - const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "COOM"); + const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "DOOM"); const cl = chunks.find(e => e.name == "Cluster"); if (cl && embed == -1) return; @@ -121,7 +121,7 @@ const extract = (webm: Buffer) => { return; const chk = chunks[embed + 1]; if (chk.type == "b" && chk.name == "TagBinary") - return [{ filename: 'string', data: chk.data }]; + return decodeCoom3Payload(chk.data); }; const inject = async (container: File, injs: File[]): Promise => { @@ -133,7 +133,7 @@ const has_embed = (webm: Buffer) => { const dec = new ebml.Decoder(); const chunks = dec.decode(webm); - const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "COOM"); + const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "DOOM"); const cl = chunks.find(e => e.name == "Cluster"); if (cl && embed == -1) return false; // Tags appear before Cluster, so if we have a Cluster and no coomtag, then it's a definite no