Add linkwarden for qutebrowser
This commit is contained in:
		
							parent
							
								
									f0c444ce6c
								
							
						
					
					
						commit
						cc1c39d20d
					
				
					 6 changed files with 97 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1,9 +1,11 @@
 | 
			
		|||
import keybindings
 | 
			
		||||
import common
 | 
			
		||||
import linkwarden
 | 
			
		||||
 | 
			
		||||
config.load_autoconfig()
 | 
			
		||||
keybindings.init(config)
 | 
			
		||||
common.init(c)
 | 
			
		||||
linkwarden.init()
 | 
			
		||||
 | 
			
		||||
import socket
 | 
			
		||||
if socket.gethostname() == 'portalo':
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,9 @@ def init(c):
 | 
			
		|||
    c.bind(',Po', 'spawn --userscript qutebrowser-keepassxc --only-otp --key ' + gpg_key, mode='normal')
 | 
			
		||||
    c.bind(',Pp', 'spawn --userscript qutebrowser-keepassxc --autotype --key ' + gpg_key, mode='normal')
 | 
			
		||||
 | 
			
		||||
    c.unbind('M')
 | 
			
		||||
    c.bind('M', 'spawn --userscript qutebrowser-linkwarden', mode='normal')
 | 
			
		||||
 | 
			
		||||
    c.bind(',q', 'spawn --userscript qr {url}')
 | 
			
		||||
    c.bind(',Q', 'hint links spawn --userscript qr {hint-url}')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										47
									
								
								.config/qutebrowser/linkwarden.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								.config/qutebrowser/linkwarden.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
import os
 | 
			
		||||
import json
 | 
			
		||||
import urllib.request
 | 
			
		||||
 | 
			
		||||
linkwarden_url = os.environ.get('LINKWARDEN_URL')
 | 
			
		||||
linkwarden_token = os.environ.get('LINKWARDEN_TOKEN')
 | 
			
		||||
 | 
			
		||||
def get_links(cursor):
 | 
			
		||||
    request = urllib.request.Request(linkwarden_url + "/api/v1/links?sort=0&cursor=" + str(cursor), headers={
 | 
			
		||||
        'Authorization': 'Bearer ' + linkwarden_token
 | 
			
		||||
    })
 | 
			
		||||
    response = urllib.request.urlopen(request)
 | 
			
		||||
    data = response.read().decode("utf-8")
 | 
			
		||||
    data = data.replace("\\n", " ").replace("\\r", " ").replace("\\t", " ")
 | 
			
		||||
    data = ' '.join(data.split())
 | 
			
		||||
    return json.loads(data).get("response", [])
 | 
			
		||||
 | 
			
		||||
def init():
 | 
			
		||||
    if linkwarden_url is None or linkwarden_token is None:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    links = []
 | 
			
		||||
    cursor = 0
 | 
			
		||||
 | 
			
		||||
    while True:
 | 
			
		||||
        new_links = get_links(cursor)
 | 
			
		||||
        links += new_links
 | 
			
		||||
        if len(new_links):
 | 
			
		||||
            cursor = new_links[-1]["id"]
 | 
			
		||||
        else:
 | 
			
		||||
            break
 | 
			
		||||
 | 
			
		||||
    with open(os.path.expanduser("~/.config/qutebrowser/bookmarks/urls"), "w+") as f:
 | 
			
		||||
        for link in links:
 | 
			
		||||
            url = link.get("url")
 | 
			
		||||
            if not url:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            title = link.get("name")
 | 
			
		||||
            if not title:
 | 
			
		||||
                title = link.get("description")
 | 
			
		||||
            if not title:
 | 
			
		||||
                title = ""
 | 
			
		||||
 | 
			
		||||
            f.write(url + " " + title + "\n")
 | 
			
		||||
 | 
			
		||||
        f.close()
 | 
			
		||||
							
								
								
									
										39
									
								
								.config/qutebrowser/userscripts/qutebrowser-linkwarden
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								.config/qutebrowser/userscripts/qutebrowser-linkwarden
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
get_collections() {
 | 
			
		||||
  curl -H "Authorization: Bearer $LINKWARDEN_TOKEN" \
 | 
			
		||||
    -H "Accept: application/json" \
 | 
			
		||||
    "$LINKWARDEN_URL/api/v1/collections" 2>/dev/null \
 | 
			
		||||
    | jq -r '.response | map_values(.name)[]'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
collection=$(get_collections | $DMENU -p "Collection: ")
 | 
			
		||||
url=$QUTE_URL
 | 
			
		||||
name=$(echo "$QUTE_TITLE" | $DMENU -p "Title: ")
 | 
			
		||||
 | 
			
		||||
payload=$(jq -n \
 | 
			
		||||
  --arg u "$url" \
 | 
			
		||||
  --arg n "$name" \
 | 
			
		||||
  --arg c "$collection" \
 | 
			
		||||
  '{
 | 
			
		||||
    url: $u,
 | 
			
		||||
    name: $n,
 | 
			
		||||
    collection: {name: $c},
 | 
			
		||||
    tags: []
 | 
			
		||||
  }')
 | 
			
		||||
 | 
			
		||||
response=$(curl -sS --fail-with-body \
 | 
			
		||||
  -H "Authorization: Bearer $LINKWARDEN_TOKEN" \
 | 
			
		||||
  -H "Accept: application/json" \
 | 
			
		||||
  -H "Content-Type: application/json" \
 | 
			
		||||
  -X POST \
 | 
			
		||||
  -d "$payload" \
 | 
			
		||||
  "$LINKWARDEN_URL/api/v1/links" 2>&1)
 | 
			
		||||
 | 
			
		||||
code="$?"
 | 
			
		||||
 | 
			
		||||
if [ "$code" -ne 0 ]
 | 
			
		||||
then
 | 
			
		||||
  response=$(echo "$response" | sed 's/"/\\"/g' | sed 's/$/ - /g' | tr -d '\n' | sed 's/ - $//g')
 | 
			
		||||
  echo "message-error \"Failed to save link: $response\"" >> "$QUTE_FIFO"
 | 
			
		||||
fi
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue