create a desktop file when running the binary distribution on Linux
This commit is contained in:
@@ -29,18 +29,6 @@
|
||||
z"/>
|
||||
<rect x="8" y="8" width="112" height="112"
|
||||
style="fill:none; stroke:url(#bg1); stroke-width:14" rx="10"/>
|
||||
|
||||
<circle cx="65" cy="40" r="6" fill="url(#rg1)"/>
|
||||
<circle cx="65" cy="40" r="3" fill="white"/>
|
||||
</svg>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -5,6 +5,7 @@ from PySide6.QtWidgets import QApplication
|
||||
from PySide6.QtCore import QTimer
|
||||
import sys
|
||||
import constants
|
||||
from src import install
|
||||
from src.pluginregistry import PluginRegistry
|
||||
import gettext
|
||||
from src.ui.icon import Icon
|
||||
@@ -37,8 +38,12 @@ if __name__ == "__main__":
|
||||
if sys.platform == 'win32' or sys.platform == 'cygwin':
|
||||
myappid = 'krowlog' # arbitrary string
|
||||
import ctypes
|
||||
|
||||
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
|
||||
|
||||
# install stuff, e.g. a desktop file
|
||||
install.install()
|
||||
|
||||
# workaround to make signals work in QT apps.
|
||||
# They do not work out of the box, because the main thread
|
||||
# is running in C++ code once app.exec() is executed
|
||||
|
||||
89
src/install.py
Normal file
89
src/install.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import sys
|
||||
import textwrap
|
||||
from os import PathLike
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def install():
|
||||
if sys.platform == 'win32' or sys.platform == 'cygwin':
|
||||
# nothing to do
|
||||
pass
|
||||
else:
|
||||
if _is_executable():
|
||||
_linux_install_desktop_file()
|
||||
_linux_install_icon()
|
||||
|
||||
|
||||
def _is_executable() -> bool:
|
||||
"""
|
||||
Checks if we run from an executable (as opposed to from source by calling 'python krowlog.py')
|
||||
:return: True if this process is run from a distribution binary
|
||||
"""
|
||||
return Path(sys.executable).name == 'krowlog'
|
||||
|
||||
|
||||
def _linux_install_desktop_file():
|
||||
apps_dir = Path.home().joinpath(".local").joinpath("share").joinpath("applications")
|
||||
if apps_dir.exists() and apps_dir.is_dir():
|
||||
krowlog_desktop_file = apps_dir.joinpath("krowlog.desktop")
|
||||
if not krowlog_desktop_file.exists():
|
||||
desktop_file_data = textwrap.dedent("""
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Name=KrowLog
|
||||
Comment=A viewer for files of arbitrary size.
|
||||
Categories=Development;Utility;TextTools;IDE;
|
||||
MimeType=text/plain;text/x-log
|
||||
Icon=krowlog
|
||||
Exec={binary}
|
||||
""".format(binary=Path(sys.executable).resolve()))
|
||||
krowlog_desktop_file.write_text(desktop_file_data, "utf8")
|
||||
|
||||
|
||||
def _linux_install_icon():
|
||||
local_share = Path.home().joinpath(".local").joinpath("share")
|
||||
if local_share.is_dir():
|
||||
icon_dir = local_share / "icons" / "hicolor" / "scalable" / "apps"
|
||||
icon_dir.mkdir(parents=True, exist_ok=True)
|
||||
_linux_install_icon_to_path(icon_dir / "krowlog.svg")
|
||||
|
||||
|
||||
def _linux_install_icon_to_path(path: Path):
|
||||
svg = textwrap.dedent("""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="bg1" x1="0%" y1="100%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#9f8700"/>
|
||||
<stop offset="100%" style="stop-color:#ffdb00"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="fg1" x1="0%" y1="100%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#8caec7"/>
|
||||
<stop offset="100%" style="stop-color:#6289a3"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="rg1">
|
||||
<stop offset="0%" stop-color="white"/>
|
||||
<stop offset="100%" stop-color="black"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect x="8" y="8" width="112" height="112" style="fill:url(#fg1)" rx="10"/>
|
||||
<path style="fill:black"
|
||||
d="M76,113
|
||||
L15,113
|
||||
L15,70
|
||||
C15,70 25,55 45,36
|
||||
C53,29 60,26 78,32
|
||||
C85,34 90,32 90,32
|
||||
C95,30 108,35 110,40
|
||||
L110,40
|
||||
C83,48 80,60 76,71
|
||||
C74,80 76,113 76,113
|
||||
z"/>
|
||||
<rect x="8" y="8" width="112" height="112"
|
||||
style="fill:none; stroke:url(#bg1); stroke-width:14" rx="10"/>
|
||||
|
||||
<circle cx="65" cy="40" r="6" fill="url(#rg1)"/>
|
||||
<circle cx="65" cy="40" r="3" fill="white"/>
|
||||
</svg>""")
|
||||
path.write_text(svg, "utf8")
|
||||
pass
|
||||
Reference in New Issue
Block a user