fedimbed: we love non-standard activitystream implementations
This commit is contained in:
		
							parent
							
								
									60631bba37
								
							
						
					
					
						commit
						2388f0cc47
					
				
					 1 changed files with 73 additions and 71 deletions
				
			
		| 
						 | 
				
			
			@ -997,90 +997,92 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
			
		|||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // NB: gts doesnt send singular attachments as array
 | 
			
		||||
    const attachments = Array.isArray(postData.attachment) ? postData.attachment : [postData.attachment];
 | 
			
		||||
    for (const attachment of attachments) {
 | 
			
		||||
      if (attachment.mediaType) {
 | 
			
		||||
        if (attachment.mediaType.startsWith("video/")) {
 | 
			
		||||
          videos.push({
 | 
			
		||||
            url: attachment.url,
 | 
			
		||||
            desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
            type: attachment.mediaType,
 | 
			
		||||
          });
 | 
			
		||||
        } else if (attachment.mediaType.startsWith("image/")) {
 | 
			
		||||
          images.push({
 | 
			
		||||
            url: attachment.url,
 | 
			
		||||
            desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
            type: attachment.mediaType,
 | 
			
		||||
          });
 | 
			
		||||
        } else if (attachment.mediaType.startsWith("audio/")) {
 | 
			
		||||
          audios.push({
 | 
			
		||||
            url: attachment.url,
 | 
			
		||||
            desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
            type: attachment.mediaType,
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
      } else if (attachment.url) {
 | 
			
		||||
        const contentType = await fetch(attachment.url, {
 | 
			
		||||
          method: "HEAD",
 | 
			
		||||
        }).then((res) => res.headers.get("Content-Type"));
 | 
			
		||||
 | 
			
		||||
        if (contentType) {
 | 
			
		||||
          if (contentType.startsWith("image/")) {
 | 
			
		||||
            images.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: contentType,
 | 
			
		||||
            });
 | 
			
		||||
          } else if (contentType.startsWith("video/")) {
 | 
			
		||||
    if (postData.attachment) {
 | 
			
		||||
      // NB: gts doesnt send singular attachments as array
 | 
			
		||||
      const attachments = Array.isArray(postData.attachment) ? postData.attachment : [postData.attachment];
 | 
			
		||||
      for (const attachment of attachments) {
 | 
			
		||||
        if (attachment.mediaType) {
 | 
			
		||||
          if (attachment.mediaType.startsWith("video/")) {
 | 
			
		||||
            videos.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: contentType,
 | 
			
		||||
              type: attachment.mediaType,
 | 
			
		||||
            });
 | 
			
		||||
          } else if (contentType.startsWith("audio/")) {
 | 
			
		||||
          } else if (attachment.mediaType.startsWith("image/")) {
 | 
			
		||||
            images.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: attachment.mediaType,
 | 
			
		||||
            });
 | 
			
		||||
          } else if (attachment.mediaType.startsWith("audio/")) {
 | 
			
		||||
            audios.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: contentType,
 | 
			
		||||
              type: attachment.mediaType,
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        } else if (attachment.url) {
 | 
			
		||||
          const contentType = await fetch(attachment.url, {
 | 
			
		||||
            method: "HEAD",
 | 
			
		||||
          }).then((res) => res.headers.get("Content-Type"));
 | 
			
		||||
 | 
			
		||||
          if (contentType) {
 | 
			
		||||
            if (contentType.startsWith("image/")) {
 | 
			
		||||
              images.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: contentType,
 | 
			
		||||
              });
 | 
			
		||||
            } else if (contentType.startsWith("video/")) {
 | 
			
		||||
              videos.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: contentType,
 | 
			
		||||
              });
 | 
			
		||||
            } else if (contentType.startsWith("audio/")) {
 | 
			
		||||
              audios.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: contentType,
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            const type = attachment.type?.toLowerCase();
 | 
			
		||||
 | 
			
		||||
            const fileType =
 | 
			
		||||
              type.indexOf("/") > -1
 | 
			
		||||
                ? type
 | 
			
		||||
                : type +
 | 
			
		||||
                  "/" +
 | 
			
		||||
                  (url.match(/\.([a-z0-9]{3,4})$/)?.[0] ?? type == "image" ? "png" : type == "video" ? "mp4" : "mpeg");
 | 
			
		||||
            if (type.startsWith("image")) {
 | 
			
		||||
              images.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: fileType,
 | 
			
		||||
              });
 | 
			
		||||
            } else if (type.startsWith("video")) {
 | 
			
		||||
              videos.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: fileType,
 | 
			
		||||
              });
 | 
			
		||||
            } else if (type.startsWith("audio")) {
 | 
			
		||||
              audios.push({
 | 
			
		||||
                url: attachment.url,
 | 
			
		||||
                desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
                type: fileType,
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          const type = attachment.type?.toLowerCase();
 | 
			
		||||
 | 
			
		||||
          const fileType =
 | 
			
		||||
            type.indexOf("/") > -1
 | 
			
		||||
              ? type
 | 
			
		||||
              : type +
 | 
			
		||||
                "/" +
 | 
			
		||||
                (url.match(/\.([a-z0-9]{3,4})$/)?.[0] ?? type == "image" ? "png" : type == "video" ? "mp4" : "mpeg");
 | 
			
		||||
          if (type.startsWith("image")) {
 | 
			
		||||
            images.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: fileType,
 | 
			
		||||
            });
 | 
			
		||||
          } else if (type.startsWith("video")) {
 | 
			
		||||
            videos.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: fileType,
 | 
			
		||||
            });
 | 
			
		||||
          } else if (type.startsWith("audio")) {
 | 
			
		||||
            audios.push({
 | 
			
		||||
              url: attachment.url,
 | 
			
		||||
              desc: attachment.name ?? attachment.description ?? attachment.comment,
 | 
			
		||||
              type: fileType,
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
          logger.warn("fedimbed", `Unhandled attachment structure! ${JSON.stringify(attachment)}`);
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        logger.warn("fedimbed", `Unhandled attachment structure! ${JSON.stringify(attachment)}`);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!spoiler && postData.sensitive && attachments.length > 0) {
 | 
			
		||||
      spoiler = true;
 | 
			
		||||
      if (!spoiler && postData.sensitive && attachments.length > 0) {
 | 
			
		||||
        spoiler = true;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (postData.image?.url) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue