• 0 Posts
  • 370 Comments
Joined 2 years ago
cake
Cake day: July 3rd, 2023

help-circle





  • I wrote myself a Chrome add-on that adds a context menu entry to play or download links.

    background.js
    chrome.runtime.onInstalled.addListener(() => {
    		
        chrome.contextMenus.create({
            id: "processLink",
            title: "Download as...",
            contexts: ["link"]
        });
    
        chrome.contextMenus.create({
            id: "720p",
            parentId: "processLink",
            title: "720p",
            contexts: ["link"]
        });
    
        chrome.contextMenus.create({
            id: "music",
            parentId: "processLink",
            title: "MP3",
            contexts: ["link"]
        });
    
        chrome.contextMenus.create({
            id: "maxQual",
            parentId: "processLink",
            title: "Maximum quality video",
            contexts: ["link"]
        });
    	
        chrome.contextMenus.create({
            id: "separator1",
            parentId: "processLink",
            type: "separator",
            contexts: ["link"]
        });
    
        chrome.contextMenus.create({
            id: "piQual",
            parentId: "processLink",
            title: "30 fps for RPi",
            contexts: ["link"]
        });
    	
        chrome.contextMenus.create({
            id: "separator2",
            parentId: "processLink",
            type: "separator",
            contexts: ["link"]
        });
    	
        chrome.contextMenus.create({
            id: "streamLink",
            parentId: "processLink",
            title: "Stream to VLC...",
            contexts: ["link"]
        });
    });
    
    chrome.contextMenus.onClicked.addListener((info, tab) => {
        let linkUrl = info.linkUrl;
    
        if (info.menuItemId === "720p") {
            sendLinkToNativeApp(linkUrl, "video720");
        } else if (info.menuItemId === "music") {
            sendLinkToNativeApp(linkUrl, "music");
        } else if (info.menuItemId === "maxQual") {
            sendLinkToNativeApp(linkUrl, "videomp4");
        } else if (info.menuItemId === "piQual") {
            sendLinkToNativeApp(linkUrl, "video720p30");
        } else if (info.menuItemId === "streamLink") {
            sendLinkToNativeApp(linkUrl, "stream");
        }
    });
    
    function sendLinkToNativeApp(link, action) {
        console.log("Sending link to native app with action:", action, link);
        chrome.runtime.sendNativeMessage(
            'com.example.ytlink_processor',
            { link: link, action: action },
            function(response) {
                if (chrome.runtime.lastError) {
                    console.error("Error:", chrome.runtime.lastError.message);
                } else {
                    console.log("Received response from native app:", response.output);
                }
            }
        );
    }
    
    native_host.py (chatGPT wrote this because I can't Python)
    import sys
    import subprocess
    import json
    import struct
    
    def log_to_file(message):
        with open("log.txt", "a") as log_file:
            log_file.write(message + "\n")
    
    def get_message():
        raw_length = sys.stdin.read(4)
        if len(raw_length) == 0:
            sys.exit(0)
        message_length = struct.unpack('I', raw_length)[0]
        message = sys.stdin.read(message_length)
        return json.loads(message)
    
    def send_message(message_content):
        message = json.dumps(message_content)
        sys.stdout.write(struct.pack('I', len(message)))
        sys.stdout.write(message)
        sys.stdout.flush()
    
    def process_link(link, action):
        if action == "stream":
            cmd = 'yt-dlp --stream "{}" -o - | "D:/Programme/VLC/vlc.exe" -'.format(link)
        else:
            cmd = 'yt-dlp --{} "{}"'.format(action, link)
        result = subprocess.Popen('start cmd /c "{}"'.format(cmd), shell=True)
        return result.stdout + result.stderr
    
    if __name__ == "__main__":
        message = get_message()
        link = message.get("link")
        action = message.get("action")
        if link and action:
            output = process_link(link, action)
            send_message({"output": output})
    
    

    The actions are just aliases for different qualities (old pi, so 720p60 stutters at times), audio extraction, etc.








  • That means that if some companies decide to raise prices because of more purchasing power, some smart company is going to charge less to gain more market share.

    Here is how this turns out in reality: Company A raises prices because they are greedy bastards. Company B is then impressed with the sheer display of dominance by A and raises prices accordingly to “keep up”.

    Your thinking is correct and that’s how it should work, maybe it even did in the 60s, but it just isn’t the case anymore.