Bladeren bron

Use metadata instead of making unnecessary function calls

JC Brand 4 maanden geleden
bovenliggende
commit
86bac5263d

+ 1 - 0
src/headless/types/utils/index.d.ts

@@ -32,6 +32,7 @@ declare const _default: {
     isImageURL(url: string | URL): boolean;
     isEncryptedFileURL(url: string | URL): boolean;
     withinString(string: string, callback: Function, options?: import("./types.js").ProcessStringOptions): string;
+    getMetadataForURL(o: import("./types.js").MediaURLIndexes): import("./types.js").MediaURLMetadata;
     getMediaURLsMetadata(text: string, offset?: number): {
         media_urls?: import("./types.js").MediaURLMetadata[];
     };

+ 9 - 5
src/headless/types/utils/types.d.ts

@@ -10,13 +10,17 @@ export type ProcessStringOptions = {
     ignoreHtml?: boolean;
     ignore?: RegExp;
 };
-export type MediaURLMetadata = {
+export type MediaURLIndexes = {
+    url: string;
+    end: number;
+    start: number;
+};
+export type MediaURLMetadata = MediaURLIndexes & {
     is_audio?: boolean;
+    is_encrypted?: boolean;
+    is_gif?: boolean;
     is_image?: boolean;
     is_video?: boolean;
-    is_encrypted?: boolean;
-    end?: number;
-    start?: number;
-    url: string;
+    content_type?: string;
 };
 //# sourceMappingURL=types.d.ts.map

+ 5 - 0
src/headless/types/utils/url.d.ts

@@ -58,6 +58,11 @@ export function isEncryptedFileURL(url: string | URL): boolean;
  * @returns {string} The modified string after processing all matches.
  */
 export function withinString(string: string, callback: Function, options?: import("./types").ProcessStringOptions): string;
+/**
+ * @param {import("./types").MediaURLIndexes} o
+ * @returns {import("./types").MediaURLMetadata}
+ */
+export function getMetadataForURL(o: import("./types").MediaURLIndexes): import("./types").MediaURLMetadata;
 /**
  * @param {string} text
  * @param {number} offset

+ 9 - 5
src/headless/utils/types.ts

@@ -12,12 +12,16 @@ export type ProcessStringOptions = {
     ignore?: RegExp;
 };
 
-export type MediaURLMetadata = {
+export type MediaURLIndexes = {
+    url: string;
+    end: number;
+    start: number;
+}
+
+export type MediaURLMetadata = MediaURLIndexes & {
     is_audio?: boolean;
+    is_encrypted?: boolean;
+    is_gif?: boolean;
     is_image?: boolean;
     is_video?: boolean;
-    is_encrypted?: boolean;
-    end?: number;
-    start?: number;
-    url: string;
 };

+ 16 - 7
src/headless/utils/url.js

@@ -174,6 +174,21 @@ export function withinString(string, callback, options) {
     return string;
 }
 
+/**
+ * @param {import("./types").MediaURLIndexes} o
+ * @returns {import("./types").MediaURLMetadata}
+ */
+export function getMetadataForURL(o) {
+    return {
+        ...o,
+        is_gif: isGIFURL(o.url),
+        is_audio: isAudioURL(o.url),
+        is_image: isImageURL(o.url),
+        is_video: isVideoURL(o.url),
+        is_encrypted: isEncryptedFileURL(o.url),
+    };
+}
+
 /**
  * @param {string} text
  * @param {number} offset
@@ -213,13 +228,7 @@ export function getMediaURLsMetadata(text, offset = 0) {
         log.debug(error);
     }
 
-    const media_urls = objs.map((o) => ({
-        ...o,
-        is_audio: isAudioURL(o.url),
-        is_image: isImageURL(o.url),
-        is_video: isVideoURL(o.url),
-        is_encrypted: isEncryptedFileURL(o.url),
-    }));
+    const media_urls = objs.map((o) => getMetadataForURL(o));
     return media_urls.length ? { media_urls } : {};
 }
 

+ 4 - 8
src/shared/texture/texture.js

@@ -29,10 +29,6 @@ const {
     getCodePointReferences,
     getMediaURLsMetadata,
     getShortnameReferences,
-    isAudioURL,
-    isGIFURL,
-    isImageURL,
-    isVideoURL,
 } = u;
 
 /**
@@ -134,9 +130,9 @@ export class Texture extends String {
         const { url } = url_obj;
         const filtered_url = filterQueryParamsFromURL(url);
         let template;
-        if (isGIFURL(url) && this.shouldRenderMedia(url, "image")) {
+        if (url_obj.is_gif && this.shouldRenderMedia(url, "image")) {
             template = tplGif(filtered_url, this.hide_media_urls);
-        } else if (isImageURL(url) && this.shouldRenderMedia(url, "image")) {
+        } else if (url_obj.is_image && this.shouldRenderMedia(url, "image")) {
             template = tplImage({
                 src: filtered_url,
                 // XXX: bit of an abuse of `hide_media_urls`, might want a dedicated option here
@@ -144,9 +140,9 @@ export class Texture extends String {
                 onClick: this.onImgClick,
                 onLoad: this.onImgLoad,
             });
-        } else if (isVideoURL(url) && this.shouldRenderMedia(url, "video")) {
+        } else if (url_obj.is_video && this.shouldRenderMedia(url, "video")) {
             template = tplVideo(filtered_url, this.hide_media_urls);
-        } else if (isAudioURL(url) && this.shouldRenderMedia(url, "audio")) {
+        } else if (url_obj.is_audio && this.shouldRenderMedia(url, "audio")) {
             template = tplAudio(filtered_url, this.hide_media_urls);
         } else if (api.settings.get("embed_3rd_party_media_players") && isSpotifyTrack(url)) {
             const song_id = url.split("/track/")[1];

+ 2 - 0
src/types/utils/index.d.ts

@@ -16,6 +16,7 @@ declare const _default: {
     isImageURL(url: string | URL): boolean;
     isEncryptedFileURL(url: string | URL): boolean;
     withinString(string: string, callback: Function, options?: import("headless/types/utils/types.js").ProcessStringOptions): string;
+    getMetadataForURL(o: import("headless/types/utils/types.js").MediaURLIndexes): import("headless/types/utils/types.js").MediaURLMetadata;
     getMediaURLsMetadata(text: string, offset?: number): {
         media_urls?: import("headless/types/utils/types.js").MediaURLMetadata[];
     };
@@ -123,6 +124,7 @@ declare const _default: {
         isImageURL(url: string | URL): boolean;
         isEncryptedFileURL(url: string | URL): boolean;
         withinString(string: string, callback: Function, options?: import("headless/types/utils/types.js").ProcessStringOptions): string;
+        getMetadataForURL(o: import("headless/types/utils/types.js").MediaURLIndexes): import("headless/types/utils/types.js").MediaURLMetadata;
         getMediaURLsMetadata(text: string, offset?: number): {
             media_urls?: import("headless/types/utils/types.js").MediaURLMetadata[];
         };