From eca28698940be2ceb58f39ed20b00f54dab2dc51 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 22 Oct 2020 22:25:44 +0200 Subject: [PATCH] Install launcher and icons the right way --- .gitignore | 1 + setup.py | 174 +++++++++--------- .../icon-novelwriter-1024.png} | Bin .../icon-novelwriter-128.png} | Bin .../icon-novelwriter-16.png} | Bin .../icon-novelwriter-16@2.png} | Bin .../icon-novelwriter-18@2.png} | Bin setup/icons/scaled/icon-novelwriter-22.png | Bin 0 -> 985 bytes .../icon-novelwriter-24.png} | Bin .../icon-novelwriter-256.png} | Bin .../icon-novelwriter-32.png} | Bin .../icon-novelwriter-48.png} | Bin .../icon-novelwriter-512.png} | Bin .../icon-novelwriter-64.png} | Bin .../icon-novelwriter-96.png} | Bin .../icon-novelwriter32@2.png} | Bin .../mime-novelwriter-1024.png} | Bin .../mime-novelwriter-128.png} | Bin .../mime-novelwriter-16.png} | Bin .../mime-novelwriter-16@2.png} | Bin .../mime-novelwriter-18@2.png} | Bin setup/icons/scaled/mime-novelwriter-22.png | Bin 0 -> 986 bytes .../mime-novelwriter-24.png} | Bin .../mime-novelwriter-256.png} | Bin .../mime-novelwriter-32.png} | Bin .../mime-novelwriter-32@2.png} | Bin .../mime-novelwriter-48.png} | Bin .../mime-novelwriter-512.png} | Bin .../mime-novelwriter-64.png} | Bin .../mime-novelwriter-96.png} | Bin 30 files changed, 91 insertions(+), 84 deletions(-) rename setup/icons/{1024x1024/novelwriter.png => scaled/icon-novelwriter-1024.png} (100%) rename setup/icons/{128x128/novelwriter.png => scaled/icon-novelwriter-128.png} (100%) rename setup/icons/{16x16/novelwriter.png => scaled/icon-novelwriter-16.png} (100%) rename setup/icons/{16x16@2x/novelwriter.png => scaled/icon-novelwriter-16@2.png} (100%) rename setup/icons/{18x18@2x/novelwriter.png => scaled/icon-novelwriter-18@2.png} (100%) create mode 100644 setup/icons/scaled/icon-novelwriter-22.png rename setup/icons/{24x24/novelwriter.png => scaled/icon-novelwriter-24.png} (100%) rename setup/icons/{256x256/novelwriter.png => scaled/icon-novelwriter-256.png} (100%) rename setup/icons/{32x32/novelwriter.png => scaled/icon-novelwriter-32.png} (100%) rename setup/icons/{48x48/novelwriter.png => scaled/icon-novelwriter-48.png} (100%) rename setup/icons/{512x512/novelwriter.png => scaled/icon-novelwriter-512.png} (100%) rename setup/icons/{32x32@2x/novelwriter.png => scaled/icon-novelwriter-64.png} (100%) rename setup/icons/{96x96/novelwriter.png => scaled/icon-novelwriter-96.png} (100%) rename setup/icons/{64x64/novelwriter.png => scaled/icon-novelwriter32@2.png} (100%) rename setup/icons/{1024x1024/x-novelwriter-project.png => scaled/mime-novelwriter-1024.png} (100%) rename setup/icons/{128x128/x-novelwriter-project.png => scaled/mime-novelwriter-128.png} (100%) rename setup/icons/{16x16/x-novelwriter-project.png => scaled/mime-novelwriter-16.png} (100%) rename setup/icons/{16x16@2x/x-novelwriter-project.png => scaled/mime-novelwriter-16@2.png} (100%) rename setup/icons/{18x18@2x/x-novelwriter-project.png => scaled/mime-novelwriter-18@2.png} (100%) create mode 100644 setup/icons/scaled/mime-novelwriter-22.png rename setup/icons/{24x24/x-novelwriter-project.png => scaled/mime-novelwriter-24.png} (100%) rename setup/icons/{256x256/x-novelwriter-project.png => scaled/mime-novelwriter-256.png} (100%) rename setup/icons/{32x32/x-novelwriter-project.png => scaled/mime-novelwriter-32.png} (100%) rename setup/icons/{32x32@2x/x-novelwriter-project.png => scaled/mime-novelwriter-32@2.png} (100%) rename setup/icons/{48x48/x-novelwriter-project.png => scaled/mime-novelwriter-48.png} (100%) rename setup/icons/{512x512/x-novelwriter-project.png => scaled/mime-novelwriter-512.png} (100%) rename setup/icons/{64x64/x-novelwriter-project.png => scaled/mime-novelwriter-64.png} (100%) rename setup/icons/{96x96/x-novelwriter-project.png => scaled/mime-novelwriter-96.png} (100%) diff --git a/.gitignore b/.gitignore index 830a409a..66c21d61 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.spec *.egg-info setup.iss +novelwriter.desktop # Documentation /docs/build/ diff --git a/setup.py b/setup.py index c3c5710b..da2a6c34 100755 --- a/setup.py +++ b/setup.py @@ -140,14 +140,17 @@ def buildSampleZip(): # Create Launcher # =============================================================================================== # -def makeLauncherLinux(): +def xdgInstall(): """Will attempt to install icons and make a launcher. """ print("") - print("Creating Launcher") - print("=================") + print("XDG Install") + print("===========") print("") + # Find Executable(s) + # ================== + exOpts = [] testExec = shutil.which("novelWriter") @@ -185,95 +188,94 @@ def makeLauncherLinux(): sys.exit(1) print("Using executable: %s " % useExec) + print("") + + # Create and Install Launcher + # =========================== - # Read the Template desktopData = "" with open(os.path.join("setup", "novelwriter.desktop"), mode="r") as inFile: desktopData = inFile.read() desktopData = desktopData.replace(r"%%exec%%", useExec) - desktopFile = "/usr/share/applications/novelwriter.desktop" - try: - with open(desktopFile, mode="w+") as outFile: - outFile.write(desktopData) - print("Wrote file: %s" % desktopFile) - except Exception as e: - print("Error: Could not write novelwriter.desktop file.") - print(str(e)) - sys.exit(1) + desktopFile = os.path.join(os.getcwd(), "novelwriter.desktop") + with open(desktopFile, mode="w+") as outFile: + outFile.write(desktopData) + + exCode = subprocess.call( + ["xdg-desktop-menu", "install", "--novendor", "./novelwriter.desktop"] + ) + if exCode == 0: + print("Installed menu desktop file") + else: + print(f"Error {exCode}: Could not install menu desktop file") + + exCode = subprocess.call( + ["xdg-desktop-icon", "install", "--novendor", "./novelwriter.desktop"] + ) + if exCode == 0: + print("Installed icon desktop file") + else: + print(f"Error {exCode}: Could not install icon desktop file") print("") - # Copy Icons + # Install MimeType + # ================ - iconDirs = [ - "/usr/share/icons/hicolor/24x24/apps", - "/usr/share/icons/hicolor/48x48/apps", - "/usr/share/icons/hicolor/96x96/apps", - "/usr/share/icons/hicolor/256x256/apps", - "/usr/share/icons/hicolor/512x512/apps", - "/usr/share/icons/hicolor/scalable/apps", - "/usr/share/icons/hicolor/scalable/mimetypes", - ] - for iconDir in iconDirs: - if not os.path.isdir: - try: - os.mkdir(iconDir) - print("Created folder: %s" % iconDir) - except Exception as e: - print("Error: Could not make folder: %s" % iconDir) - print(str(e)) - - copyList = [( - "setup/icons/24x24/novelwriter.png", - "/usr/share/icons/hicolor/24x24/apps/novelwriter.png" - ), ( - "setup/icons/48x48/novelwriter.png", - "/usr/share/icons/hicolor/48x48/apps/novelwriter.png" - ), ( - "setup/icons/96x96/novelwriter.png", - "/usr/share/icons/hicolor/96x96/apps/novelwriter.png" - ), ( - "setup/icons/256x256/novelwriter.png", - "/usr/share/icons/hicolor/256x256/apps/novelwriter.png" - ), ( - "setup/icons/512x512/novelwriter.png", - "/usr/share/icons/hicolor/512x512/apps/novelwriter.png" - ), ( - "setup/icons/novelwriter.svg", - "/usr/share/icons/hicolor/scalable/apps/novelwriter.svg" - ), ( - "setup/icons/x-novelwriter-project.svg", - "/usr/share/icons/hicolor/scalable/mimetypes/application-x-novelwriter-project.svg" - ), ( - "setup/mime/x-novelwriter-project.xml", - "/usr/share/mime/packages/x-novelwriter-project.xml" - )] - for srcFile, dstFile in copyList: - try: - shutil.copyfile(srcFile, dstFile) - print("Copied file to: %s" % dstFile) - except Exception as e: - print("Error: Could not copy file: %s" % srcFile) - print(str(e)) + exCode = subprocess.call([ + "xdg-mime", "install", + "setup/mime/x-novelwriter-project.xml" + ]) + if exCode == 0: + print("Installed mimetype") + else: + print(f"Error {exCode}: Could not install mimetype") print("") - # Update System - try: - subprocess.call(["update-mime-database", "/usr/share/mime/"]) - print("Updated mime database.") - except Exception as e: - print("Error: Filed to update mime database.") - print(str(e)) + # Install Icons + # ============= - try: - subprocess.call(["update-icon-caches", "/usr/share/icons/*"]) - print("Updated icon cache.") - except Exception as e: - print("Error: Filed to update icon cache.") - print(str(e)) + sizeArr = ["16", "22", "24", "32", "48", "96", "128", "256", "512"] + + # App Icon + for aSize in sizeArr: + exCode = subprocess.call([ + "xdg-icon-resource", "install", + "--novendor", "--noupdate", + "--context", "apps", + "--size", aSize, + f"setup/icons/scaled/icon-novelwriter-{aSize}.png", + "novelwriter" + ]) + if exCode == 0: + print(f"Installed app icon size {aSize}") + else: + print(f"Error {exCode}: Could not install app icon size {aSize}") + + # Mimetype + for aSize in sizeArr: + exCode = subprocess.call([ + "xdg-icon-resource", "install", + "--noupdate", + "--context", "mimetypes", + "--size", aSize, + f"setup/icons/scaled/mime-novelwriter-{aSize}.png", + "application-x-novelwriter-project" + ]) + if exCode == 0: + print(f"Installed mime icon size {aSize}") + else: + print(f"Error {exCode}: Could not install mime icon size {aSize}") + + # Update Cache + exCode = subprocess.call(["xdg-icon-resource", "forceupdate"]) + if exCode == 0: + print("Updated icon cache") + else: + print("Error {exCode}: Could not update icon cache") print("") print("Done!") @@ -293,10 +295,10 @@ if __name__ == "__main__": "======================\n" "This tool provides some additional setup commands for novelWriter.\n" "\n" - "help Print the help message.\n" - "qthelp Build the help documentation for use with the QtAssistant.\n" - "sample Build the sample project as a zip file.\n" - "launcher Install launcher icons for freedesktop systems.\n" + "help Print the help message.\n" + "qthelp Build the help documentation for use with the QtAssistant.\n" + "sample Build the sample project as a zip file.\n" + "xdg-install Install launcher and icons for freedesktop systems.\n" ) if "help" in sys.argv: @@ -312,9 +314,13 @@ if __name__ == "__main__": sys.argv.remove("sample") buildSampleZip() - if "launcher" in sys.argv: - sys.argv.remove("launcher") - makeLauncherLinux() + if "xdg-install" in sys.argv: + sys.argv.remove("xdg-install") + if not sys.platform.startswith("win32"): + xdgInstall() + else: + print("ERROR: xdg-install cannot be used on Windows") + sys.exit(1) if len(sys.argv) <= 1: # Nothing more to do diff --git a/setup/icons/1024x1024/novelwriter.png b/setup/icons/scaled/icon-novelwriter-1024.png similarity index 100% rename from setup/icons/1024x1024/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-1024.png diff --git a/setup/icons/128x128/novelwriter.png b/setup/icons/scaled/icon-novelwriter-128.png similarity index 100% rename from setup/icons/128x128/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-128.png diff --git a/setup/icons/16x16/novelwriter.png b/setup/icons/scaled/icon-novelwriter-16.png similarity index 100% rename from setup/icons/16x16/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-16.png diff --git a/setup/icons/16x16@2x/novelwriter.png b/setup/icons/scaled/icon-novelwriter-16@2.png similarity index 100% rename from setup/icons/16x16@2x/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-16@2.png diff --git a/setup/icons/18x18@2x/novelwriter.png b/setup/icons/scaled/icon-novelwriter-18@2.png similarity index 100% rename from setup/icons/18x18@2x/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-18@2.png diff --git a/setup/icons/scaled/icon-novelwriter-22.png b/setup/icons/scaled/icon-novelwriter-22.png new file mode 100644 index 0000000000000000000000000000000000000000..27ca5f32cfc4a75a4e925e5449b44df0a2b44ee5 GIT binary patch literal 985 zcmV;~119{5P)s5hpsa3O>MrMx>=pOByQ;Nu#MIB=;scYdP5ao|DrS+;H|jXRour^__36@5qVs z=i{N~%($18@ol05dQr1q|H4aBy(5!RrX_h4|b`YvDqi8k#xR9UlGI0e8zj)_^~<-!qCkL$7cO(%c8DP)wvwnTSYkZrQ>(MRIr%6%CqJMwGD>r(!}e<* zvas)986RI?h5lx)la$)285z_{1MD8X?l`g8%Hlx?k({yd0c?yO(BNVxtR8yjn^#8!p+)o1iWgtyPo z7~Kna*0|UOETG*poL!nfeco+QL()$0yWT#d_(g$ol~ zhdjU$ksyP^mA7QqOciJ}(5Yh-=Im_uQyInF#jY*t%}@RV_IVrt*u~%f00000NkvXX Hu0mjfXL-uX literal 0 HcmV?d00001 diff --git a/setup/icons/24x24/novelwriter.png b/setup/icons/scaled/icon-novelwriter-24.png similarity index 100% rename from setup/icons/24x24/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-24.png diff --git a/setup/icons/256x256/novelwriter.png b/setup/icons/scaled/icon-novelwriter-256.png similarity index 100% rename from setup/icons/256x256/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-256.png diff --git a/setup/icons/32x32/novelwriter.png b/setup/icons/scaled/icon-novelwriter-32.png similarity index 100% rename from setup/icons/32x32/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-32.png diff --git a/setup/icons/48x48/novelwriter.png b/setup/icons/scaled/icon-novelwriter-48.png similarity index 100% rename from setup/icons/48x48/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-48.png diff --git a/setup/icons/512x512/novelwriter.png b/setup/icons/scaled/icon-novelwriter-512.png similarity index 100% rename from setup/icons/512x512/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-512.png diff --git a/setup/icons/32x32@2x/novelwriter.png b/setup/icons/scaled/icon-novelwriter-64.png similarity index 100% rename from setup/icons/32x32@2x/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-64.png diff --git a/setup/icons/96x96/novelwriter.png b/setup/icons/scaled/icon-novelwriter-96.png similarity index 100% rename from setup/icons/96x96/novelwriter.png rename to setup/icons/scaled/icon-novelwriter-96.png diff --git a/setup/icons/64x64/novelwriter.png b/setup/icons/scaled/icon-novelwriter32@2.png similarity index 100% rename from setup/icons/64x64/novelwriter.png rename to setup/icons/scaled/icon-novelwriter32@2.png diff --git a/setup/icons/1024x1024/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-1024.png similarity index 100% rename from setup/icons/1024x1024/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-1024.png diff --git a/setup/icons/128x128/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-128.png similarity index 100% rename from setup/icons/128x128/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-128.png diff --git a/setup/icons/16x16/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-16.png similarity index 100% rename from setup/icons/16x16/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-16.png diff --git a/setup/icons/16x16@2x/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-16@2.png similarity index 100% rename from setup/icons/16x16@2x/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-16@2.png diff --git a/setup/icons/18x18@2x/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-18@2.png similarity index 100% rename from setup/icons/18x18@2x/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-18@2.png diff --git a/setup/icons/scaled/mime-novelwriter-22.png b/setup/icons/scaled/mime-novelwriter-22.png new file mode 100644 index 0000000000000000000000000000000000000000..384e2ca4b9cff0e599d47515b4b0f74c9fc5118d GIT binary patch literal 986 zcmV<0110>4P)d+xoT_r2$y zbDzYuEi5cF_6X*e)4MY>GlvwIWOOz*Hhvu#7#No% z$%F_YN;X~B5ke4)#mHnbnUj-~;Pmu#$_lm_o$Bi9CPh)$e)ERE=I4=b+&~tBTp|Iv z9Fo_|w-XcmFg}hf%LpN`*=%%mb-AL^Xl!X|soknvHl<6FB+D`f@7~dvPNRPOh!PG{ zb$CeC@iF#KpGduY$>yt9mEiC& zcDtSS_I5M&mzS4+mjoBye8c1ghq#G*nfkw;P1u_{kI6@7-hg(W5-2MPNg5LrV)Iv$H6Qf}$wsx=!Ey`|P}Zi+prs zZcIBIbdHRagyx093b)y8=6fK7z+G3z=@LpU+njEDU%w8f9;952w=! zfZOe+rlyAa`g(?jhH$xDG&eW1v$Mn0)D+=x*brvY&9YfrTU+hz?R`+GbSssx5Q0b~ z^4r+h*hF58lgZ?>?d|QX!{KNwRcVEw!nuo!i^EhZ_1y6N3$d4|d1`T3+5i9m07*qo IM6N<$f(rfLQUCw| literal 0 HcmV?d00001 diff --git a/setup/icons/24x24/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-24.png similarity index 100% rename from setup/icons/24x24/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-24.png diff --git a/setup/icons/256x256/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-256.png similarity index 100% rename from setup/icons/256x256/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-256.png diff --git a/setup/icons/32x32/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-32.png similarity index 100% rename from setup/icons/32x32/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-32.png diff --git a/setup/icons/32x32@2x/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-32@2.png similarity index 100% rename from setup/icons/32x32@2x/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-32@2.png diff --git a/setup/icons/48x48/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-48.png similarity index 100% rename from setup/icons/48x48/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-48.png diff --git a/setup/icons/512x512/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-512.png similarity index 100% rename from setup/icons/512x512/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-512.png diff --git a/setup/icons/64x64/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-64.png similarity index 100% rename from setup/icons/64x64/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-64.png diff --git a/setup/icons/96x96/x-novelwriter-project.png b/setup/icons/scaled/mime-novelwriter-96.png similarity index 100% rename from setup/icons/96x96/x-novelwriter-project.png rename to setup/icons/scaled/mime-novelwriter-96.png