add appimage stuff
This commit is contained in:
parent
5b0689181e
commit
9ada9ef2cf
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -126,3 +126,5 @@ test*.py
|
|||
# glade backup files
|
||||
*.ui~
|
||||
|
||||
# appimage build
|
||||
/AppDir
|
||||
|
|
10
appimage-main.py
Normal file
10
appimage-main.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
appdir = os.environ['APPDIR']
|
||||
sys.path.insert(0, f'{appdir}/usr/src')
|
||||
|
||||
|
||||
from barkshark_web.cli import main
|
||||
|
||||
main()
|
6
appimage-requirements.txt
Normal file
6
appimage-requirements.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
configobj@git+https://github.com/DiffSK/configobj
|
||||
izzylib-http-async@git+https://git.barkshark.xyz/izaliamae/izzylib-http-async
|
||||
izzylib-sql@git+https://git.barkshark.xyz/izaliamae/izzylib-sql
|
||||
objgraph==3.5.0
|
||||
pillow==8.3.2
|
||||
pysftp==0.2.9
|
121
appimage.yaml
Normal file
121
appimage.yaml
Normal file
|
@ -0,0 +1,121 @@
|
|||
version: 1
|
||||
script:
|
||||
#- rm -rf AppDir | true
|
||||
- mkdir -p AppDir/usr/src
|
||||
- mkdir -p AppDir/usr/share/icons/hicolor/128x128/apps
|
||||
- cp -R barkshark_web AppDir/usr/src/
|
||||
- cp appimage-requirements.txt AppDir/usr/src/requirements.txt
|
||||
- cp appimage-main.py AppDir/usr/src/main.py
|
||||
- cp barkshark_web/resources/icon-128.png AppDir/usr/share/icons/hicolor/128x128/apps/barkshark-web.png
|
||||
|
||||
|
||||
AppDir:
|
||||
path: ./AppDir
|
||||
|
||||
app_info:
|
||||
id: xyz.barkshark.Web
|
||||
name: barkshark-web
|
||||
icon: barkshark-web
|
||||
version: 0.4.0
|
||||
exec: usr/bin/python3
|
||||
exec_args: "${APPDIR}/usr/src/main.py $@"
|
||||
|
||||
after_bundle:
|
||||
- AppDir/usr/bin/python3 -m pip install --ignore-installed --prefix=/usr --root=AppDir -r appimage-requirements.txt
|
||||
apt:
|
||||
arch: amd64
|
||||
allow_unauthenticated: true
|
||||
sources:
|
||||
- sourceline: 'deb [arch=amd64] https://deb.debian.org/debian bookworm main'
|
||||
#key_url: 'https://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2021.1.1.dsc'
|
||||
- sourceline: 'deb [arch=amd64] https://deb.debian.org/debian bookworm-updates main'
|
||||
#key_url: 'https://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2021.1.1.dsc'
|
||||
- sourceline: 'deb [arch=amd64] https://security.debian.org/debian-security bookworm-security main'
|
||||
#key_url: 'https://security.debian.org/debian-security/pool/main/d/debian-archive-keyring/debian-archive-keyring_2017.5+deb9u2.dsc'
|
||||
|
||||
include:
|
||||
- appmenu-gtk3-module
|
||||
- gir1.2-glib-2.0
|
||||
- gir1.2-gst-plugins-bad-1.0
|
||||
- gir1.2-gst-plugins-base-1.0
|
||||
- gir1.2-gtk-3.0
|
||||
- gir1.2-webkit2-4.0
|
||||
- gir1.2-notify-0.7
|
||||
- git
|
||||
- gstreamer1.0-plugins-bad
|
||||
- gstreamer1.0-plugins-base
|
||||
- gstreamer1.0-plugins-good
|
||||
- gstreamer1.0-plugins-ugly
|
||||
- libcairo-gobject2
|
||||
- librsvg2-common
|
||||
- openssl
|
||||
- python3
|
||||
- python3-bs4
|
||||
- python3-click
|
||||
- python3-dasbus
|
||||
- python3-dnspython
|
||||
- python3-gi
|
||||
- python3-gi-cairo
|
||||
- python3-lxml
|
||||
- python3-mastodon
|
||||
- python3-pip
|
||||
- python3-pkg-resources
|
||||
- python3-psutil
|
||||
- python3-secretstorage
|
||||
- python3-watchdog
|
||||
- python3-wheel
|
||||
- xapp
|
||||
|
||||
exclude:
|
||||
- emacsen-common
|
||||
- fdisk
|
||||
- libapparmor1
|
||||
- libasound2
|
||||
- libasound2-data
|
||||
- libmount
|
||||
- libsystemd0
|
||||
- libudev1
|
||||
- mount
|
||||
- systemd
|
||||
- systemd-sysv
|
||||
|
||||
files:
|
||||
exclude:
|
||||
- usr/share/man
|
||||
- usr/share/doc
|
||||
#- usr/share/doc/*/README.*
|
||||
#- usr/share/doc/*/changelog.*
|
||||
#- usr/share/doc/*/NEWS.*
|
||||
#- usr/share/doc/*/TODO.*
|
||||
|
||||
runtime:
|
||||
env:
|
||||
PYTHONHOME: '${APPDIR}/usr'
|
||||
PYTHONPATH: '${APPDIR}/usr/lib/python3.10/site-packages'
|
||||
|
||||
test:
|
||||
fedora:
|
||||
image: appimagecrafters/tests-env:fedora-30
|
||||
command: ./AppRun
|
||||
use_host_x: true
|
||||
debian:
|
||||
image: appimagecrafters/tests-env:debian-stable
|
||||
command: ./AppRun
|
||||
use_host_x: true
|
||||
arch:
|
||||
image: appimagecrafters/tests-env:archlinux-latest
|
||||
command: ./AppRun
|
||||
use_host_x: true
|
||||
centos:
|
||||
image: appimagecrafters/tests-env:centos-7
|
||||
command: ./AppRun
|
||||
use_host_x: true
|
||||
ubuntu:
|
||||
image: appimagecrafters/tests-env:ubuntu-xenial
|
||||
command: ./AppRun
|
||||
use_host_x: true
|
||||
|
||||
AppImage:
|
||||
update-information: 'zsync|https://static.barkshark.xyz/appimage-updates/{{APP_NAME}}-{{APP_VERSION}}-{{ARCH}}.AppImage.zsync'
|
||||
sign-key: A12ACFEC461B90EAA89A43FD7519E7A4AD70227D
|
||||
arch: x86_64
|
|
@ -6,10 +6,13 @@ gir1.2-notify-0.7
|
|||
libcairo-gobject2
|
||||
libgirepository1.0-dev
|
||||
libjson-glib-dev
|
||||
librsvg2-common
|
||||
libwebkit2gtk-4.0-dev
|
||||
meson
|
||||
ninja
|
||||
python-gi-dev
|
||||
python3-gi
|
||||
python3-gi-cairo
|
||||
python3-dev
|
||||
python3-pip
|
||||
python3-venv
|
||||
|
|
|
@ -6,7 +6,9 @@ from os import environ as env
|
|||
|
||||
from . import __shortname__, __software__, __version__
|
||||
from .component.application import Application
|
||||
from .database.base import default_config
|
||||
from .dbus import Client
|
||||
from .functions import install_desktop_file
|
||||
|
||||
|
||||
context_settings = dict(
|
||||
|
@ -27,6 +29,9 @@ def cli(ctx, profile):
|
|||
dbus = Client()
|
||||
)
|
||||
|
||||
if (deskfile := install_desktop_file(overwrite=False)):
|
||||
logging.verbose(f'Installed new desktop file: {deskfile}')
|
||||
|
||||
if not ctx.invoked_subcommand:
|
||||
cli_run.callback([])
|
||||
|
||||
|
@ -64,6 +69,16 @@ def cli_run(ctx, urls):
|
|||
ctx.obj.app.run([])
|
||||
|
||||
|
||||
@cli.command('install')
|
||||
@click.pass_context
|
||||
def cli_install(ctx):
|
||||
if (deskfile := install_desktop_file(overwrite=True)):
|
||||
click.echo(f'Installed new desktop file')
|
||||
|
||||
else:
|
||||
click.echo('Failed to install new desktop file')
|
||||
|
||||
|
||||
@cli.group('tab')
|
||||
@click.pass_context
|
||||
def cli_tab(ctx):
|
||||
|
@ -95,5 +110,46 @@ def cli_tab_new(ctx, urls):
|
|||
ctx.obj.dbus.disconnect()
|
||||
|
||||
|
||||
@cli.group('config')
|
||||
@click.pass_context
|
||||
def cli_config(ctx):
|
||||
pass
|
||||
|
||||
|
||||
@cli_config.command('list')
|
||||
@click.pass_context
|
||||
def cli_config_list(ctx):
|
||||
click.echo('Current config:')
|
||||
|
||||
with ctx.obj.app.db.session as s:
|
||||
for key in default_config.keys():
|
||||
if key == 'version':
|
||||
continue
|
||||
|
||||
value = s.get_config(key)
|
||||
click.echo(f'- {key.replace("_", "-").ljust(25)}: {value}')
|
||||
|
||||
|
||||
@cli_config.command('get')
|
||||
@click.argument('key')
|
||||
@click.pass_context
|
||||
def cli_config_get(ctx, key):
|
||||
with ctx.obj.app.db.session as s:
|
||||
value = s.get_config(key.replace('-', '_'))
|
||||
|
||||
click.echo(f'{key} = {value}')
|
||||
|
||||
|
||||
@cli_config.command('set')
|
||||
@click.argument('key')
|
||||
@click.argument('value')
|
||||
@click.pass_context
|
||||
def cli_config_set(ctx, key, value):
|
||||
with ctx.obj.app.db.session as s:
|
||||
value = s.put_config(key.replace('-', '_'), value)
|
||||
|
||||
click.echo(f'{key} = {value}')
|
||||
|
||||
|
||||
def main():
|
||||
cli(prog_name=__shortname__)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import sys
|
||||
|
||||
from izzylib.enums import LogLevel
|
||||
from izzylib.http_client import HttpClient
|
||||
from izzylib.misc import signal_handler
|
||||
from izzylib.misc import class_name, signal_handler
|
||||
from izzylib_http_async import Template
|
||||
from izzylib_sql import Database
|
||||
from urllib.parse import quote
|
||||
|
@ -182,8 +183,15 @@ class Application(Gtk.Application):
|
|||
self.window = Window(self)
|
||||
self.dbus = dbus.Server(self.window)
|
||||
|
||||
self.add_window(self.window)
|
||||
try:
|
||||
if logging.get_config('level') in [LogLevel.VERBOSE, LogLevel.DEBUG]:
|
||||
self.window.themes.watcher_start()
|
||||
|
||||
except OSError as e:
|
||||
logging.warning(f'Failed to start theme watcher')
|
||||
logging.error(f'{class_name(e)}: {e}')
|
||||
|
||||
self.add_window(self.window)
|
||||
self.setup_password_storage()
|
||||
|
||||
with self.db.session as s:
|
||||
|
|
|
@ -441,6 +441,8 @@ class Window(BuilderBase, Gtk.ApplicationWindow):
|
|||
def handle_window_close(self, *args):
|
||||
logging.verbose('Saving data')
|
||||
|
||||
self.hide()
|
||||
|
||||
self.app.password.stop()
|
||||
self.tabs_save()
|
||||
|
||||
|
|
|
@ -393,13 +393,15 @@ class CustomSession(Session):
|
|||
if value == None:
|
||||
value = default_config[key][0]
|
||||
|
||||
return self.put_cached('config', key,
|
||||
row = self.put_cached('config', key,
|
||||
row = self.fetch('config', key=key).one(),
|
||||
key = key,
|
||||
value = DotDict(value).to_json() if subtype == 'dict' else str(value),
|
||||
type = subtype
|
||||
)
|
||||
|
||||
return row.value
|
||||
|
||||
|
||||
def put_extension(self, extension):
|
||||
if self.get_extension(extension.digest):
|
||||
|
|
|
@ -116,6 +116,10 @@ class Client():
|
|||
return self.run_cmd('GetTabs')
|
||||
|
||||
|
||||
def Internal(self, data: str) -> str:
|
||||
return self.run_command('Internal', data)
|
||||
|
||||
|
||||
def Present(self):
|
||||
return self.run_cmd('Present')
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
import cairo
|
||||
import multiprocessing
|
||||
import random
|
||||
import os
|
||||
import socket
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import traceback
|
||||
|
||||
from configobj import ConfigObj
|
||||
from ctypes import cdll, create_string_buffer, byref
|
||||
from dns.resolver import NXDOMAIN, resolve
|
||||
from izzylib.http_client import HttpClient
|
||||
|
@ -17,6 +20,7 @@ from . import __version__, var
|
|||
|
||||
|
||||
js_cache = LruCache()
|
||||
appimage_exec = os.environ.get('APPIMAGE')
|
||||
client_options = {'appagent': f'PyWeb/{__version__}'}
|
||||
glib_types = {
|
||||
bytes: GLib.Variant.new_byte,
|
||||
|
@ -27,6 +31,17 @@ glib_types = {
|
|||
list: GLib.Variant.new_array
|
||||
}
|
||||
|
||||
categories = ['Network', 'WebBrowser']
|
||||
mimetypes = [
|
||||
'application/x-extension-htm', 'application/x-extension-html',
|
||||
'application/x-extension-shtml', 'application/x-extension-xht',
|
||||
'application/x-extension-xhtml', 'application/x-extension-xml'
|
||||
'text/html', 'text/xml',
|
||||
'application/xhtml+xml', 'application/xml',
|
||||
'x-scheme-handler/http', 'x-scheme-handler/https',
|
||||
'x-scheme-handler/ftp', 'x-scheme-handler/file'
|
||||
]
|
||||
|
||||
## Haven't implemented proxy support yet
|
||||
#if var.proxy:
|
||||
#client_options.update({
|
||||
|
@ -113,6 +128,57 @@ def icon_set(widget, *args, **kwargs):
|
|||
return widget
|
||||
|
||||
|
||||
def install_desktop_file(overwrite=False):
|
||||
app = get_app()
|
||||
deskfile = Path.xdg.data.join('applications/barkshark-web.desktop')
|
||||
deskfile.parent.mkdir()
|
||||
workdir = app.path.script.parent
|
||||
executable = appimage_exec or f'{sys.executable} -m barkshark_web'
|
||||
|
||||
if deskfile.exists() and not overwrite:
|
||||
logging.debug(f'Desktop file already exists: {deskfile}')
|
||||
return
|
||||
|
||||
config = ConfigObj()
|
||||
config.filename = deskfile
|
||||
|
||||
config.update({
|
||||
'Desktop Entry': {
|
||||
'Name': 'Barkshark Web',
|
||||
'GenericName': 'Web Browser',
|
||||
'Comment': 'Browse the World Wide Web',
|
||||
'Categories': ';'.join(categories),
|
||||
'Icon': 'applications-internet',
|
||||
'MimeType': ';'.join(mimetypes),
|
||||
'Exec': f'{sys.executable} -m barkshark_web %U',
|
||||
'Path': workdir,
|
||||
'StartupNotify': True,
|
||||
'StartupWMClass': 'BarksharkWeb',
|
||||
'Type': 'Application',
|
||||
'X-DBUS-ServiceName': 'xyz.barkshark.Web',
|
||||
'X-DBUS-StartupType': 'Unique'
|
||||
},
|
||||
'Desktop Action NewTab': {
|
||||
'Name': 'New Tab',
|
||||
'Exec': f'{sys.executable} -m barkshark_web tab new',
|
||||
'Path': workdir
|
||||
}
|
||||
})
|
||||
|
||||
if appimage_exec:
|
||||
del config['Desktop Entry']['Path']
|
||||
del config['Desktop Action NewTab']['Path']
|
||||
|
||||
config.write()
|
||||
deskfile.chmod(755)
|
||||
|
||||
return deskfile
|
||||
|
||||
|
||||
def set_default():
|
||||
subprocess.run(['xdg-settings' 'set' 'default-web-browser' 'barkshark-web.desktop'])
|
||||
|
||||
|
||||
def load_js_file(name, ext=False):
|
||||
cache_name = name + str(1 if ext else 0)
|
||||
cached = js_cache.fetch(cache_name)
|
||||
|
|
|
@ -33,9 +33,6 @@ class Themes(ComponentBase, ObjectBase):
|
|||
|
||||
self.setup()
|
||||
|
||||
if logging.get_config('level') in [LogLevel.VERBOSE, LogLevel.DEBUG]:
|
||||
self.watcher_start()
|
||||
|
||||
|
||||
def __del__(self):
|
||||
self.watcher_stop()
|
||||
|
|
12
pyvenv.json
12
pyvenv.json
|
@ -11,6 +11,11 @@
|
|||
"options": [],
|
||||
"url": null
|
||||
},
|
||||
"configobj": {
|
||||
"version": "5.1.0.dev0",
|
||||
"options": [],
|
||||
"url": "git+https://github.com/DiffSK/configobj"
|
||||
},
|
||||
"dasbus": {
|
||||
"version": "1.6",
|
||||
"options": [],
|
||||
|
@ -32,7 +37,7 @@
|
|||
"url": "git+https://git.barkshark.xyz/izaliamae/izzylib-http-async"
|
||||
},
|
||||
"izzylib-sql": {
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"options": [],
|
||||
"url": "git+https://git.barkshark.xyz/izaliamae/izzylib-sql"
|
||||
},
|
||||
|
@ -61,6 +66,11 @@
|
|||
"options": [],
|
||||
"url": null
|
||||
},
|
||||
"pycairo": {
|
||||
"version": "1.21.0",
|
||||
"options": [],
|
||||
"url": null
|
||||
},
|
||||
"pygobject": {
|
||||
"version": "3.38.0",
|
||||
"options": [],
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
beautifulsoup4==4.9.3
|
||||
click==8.1.0
|
||||
configobj@git+https://github.com/DiffSK/configobj
|
||||
dasbus==1.6
|
||||
dnspython==2.2.1
|
||||
izzylib@git+https://git.barkshark.xyz/izaliamae/izzylib@0.7.5
|
||||
izzylib-http-async@git+https://git.barkshark.xyz/izaliamae/izzylib-http-async
|
||||
izzylib-sql@git+https://git.barkshark.xyz/izaliamae/izzylib-sql
|
||||
lxml==4.6.3
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
[metadata]
|
||||
name = Barkshark Web
|
||||
version = 0.3.8
|
||||
version = 0.4.0
|
||||
author = Zoey Mae
|
||||
author_email = zoey@barkshark.xyz
|
||||
url = https://git.barkshark.xyz/izaliamae/barkshark-web
|
||||
description = Python venv manager
|
||||
long_description = file: README.md
|
||||
long_description_content_type = text/markdown; charset=UTF-8
|
||||
license = CNPL 4+
|
||||
license_file = LICENSE
|
||||
platform = any
|
||||
keywords = python development venv
|
||||
|
@ -35,6 +34,7 @@ packages =
|
|||
setup_requires =
|
||||
beautifulsoup4==4.9.3
|
||||
click==8.1.0
|
||||
configobj@git+https://github.com/DiffSK/configobj
|
||||
dasbus==1.6
|
||||
dnspython==2.2.1
|
||||
izzylib@git+https://git.barkshark.xyz/izaliamae/izzylib@0.7.5
|
||||
|
|
Reference in a new issue