Bluesky Image/Video Download Button

Adds a download button to Bluesky images and videos. Built off coredumperror's script with a few improvements.

< Bluesky Image/Video Download Button 피드백

질문/댓글

KanashiiWolf개발자
§
작성: 2024-10-18

If anyone can tell me a better way to do lines 95 and 96, I'm all ears. I hate the stupid obfuscation methods modern sites use.

§
작성: 2024-10-20
수정: 2024-10-20

Its info is possibly stored in the js object, generated by vue or similar thing

I'm not familiar to this too

Take one of my script for example, I got the path of target id from a classless div by brute force search the source code in console debugger

   let cards = document.querySelectorAll("div[data-v-485ecbd6]:has(>.card):not(.fixedLink)");
   let id = card?.__vue__.$vnode.componentOptions.propsData.card.mblog.id;
KanashiiWolf개발자
§
작성: 2024-10-20

Oh jeez, that's a hell of a work around. I'll look around to see if there's something like that I can do. I really don't want to keep coming back to update selectors just because they decided to add another empty div randomly to their hierarchies.

the-nelsonator개발자
§
작성: 2024-10-21
수정: 2024-10-21
targetNode = node.querySelector(".r-13awgt0:has(> .r-1d5kdc7)");

Still relies on the obfuscated classnames, and isn't as performant as a stricter selector, but seems to work for now.

KanashiiWolf개발자
§
작성: 2024-10-21

I'm currently testing '[data-testid="followingFeedPage-feed-flatlist"]' and it seems to be a safe one.

KanashiiWolf개발자
§
작성: 2024-10-21

I found a really silly way to do it and I hate it, but here it goes into the 1.4 code :)

                targetNode = $(node).find('[data-testid$="-flatlist"]').get(0);
                headerNode = node.querySelector('[href="/settings"]');
                if (targetNode && !targetSpotted) {
                    imgObserver.observe(targetNode.parentElement.parentElement.parentElement.parentElement.parentElement,config);
                    targetSpotted = true;
                }
                if (headerNode && !headerSpotted) {
                    headerNode = headerNode.parentElement;
the-nelsonator개발자
§
작성: 2024-10-21

On v1.4, filenaming button being located in left menu above profile picture makes it not usable if the window is small which collapses the left bar. See attached image. Tradeoff between this and it being always accessible I guess. Could alternatively just remain only in the account page where it was before.

Also the v1.4 targetNode selector doesn't work for individual post pages, e.g. https://bsky.app/profile/96yottea.bsky.social/post/3l6ytr3bbh42b. v1.1 seemed to work for every page type, unless I missed something.

Thanks for making me an author! But I don't think that lets me contribute directly without making another fork, unless I'm missing something. I don't have an "Update" tab on greasyfork like I do with scripts that I create myself.

KanashiiWolf개발자
§
작성: 2024-10-21

On v1.4, filenaming button being located in left menu above profile picture makes it not usable if the window is small which collapses the left bar. See attached image. Tradeoff between this and it being always accessible I guess. Could alternatively just remain only in the account page where it was before.

I'll move it somewhere else, also just realized I made this unnecessarily complex.

the-nelsonator개발자
§
작성: 2024-10-21

Sounds good. Btw I figured out the author thing, missed the associated email.

KanashiiWolf개발자
§
작성: 2024-10-21

v1.5 is out, opinions?

the-nelsonator개발자
§
작성: 2024-10-21
수정: 2024-10-21

Seems great! New location for Filenaming makes sense.

I see a minor "conflict" with the Imagus extension - adds a non-functional download button to very top left when I hover an image with it. If I get around to patching that for myself I'll push it here.

댓글 남기기

댓글을 남기려면 로그인하세요.