From a376a52c3a052bd3b367c288cca6b81248f3870a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Fdez?= Date: Thu, 9 Jul 2020 02:02:34 +0200 Subject: [PATCH] easier user font paths with Device.home_dir --- frontend/device/sdl/device.lua | 4 +- frontend/ui/elements/font_settings.lua | 73 +++++++++----------------- 2 files changed, 28 insertions(+), 49 deletions(-) diff --git a/frontend/device/sdl/device.lua b/frontend/device/sdl/device.lua index 007ff95c7..0a53a72b3 100644 --- a/frontend/device/sdl/device.lua +++ b/frontend/device/sdl/device.lua @@ -72,6 +72,7 @@ end local Device = Generic:new{ model = "SDL", isSDL = yes, + home_dir = os.getenv("HOME"), hasKeyboard = yes, hasKeys = yes, hasDPad = yes, @@ -115,7 +116,6 @@ local AppImage = Device:new{ hasMultitouch = no, hasOTAUpdates = yes, isDesktop = yes, - home_dir = os.getenv("HOME"), } local Emulator = Device:new{ @@ -133,12 +133,12 @@ local Emulator = Device:new{ local Linux = Device:new{ model = "Linux", isDesktop = yes, - home_dir = os.getenv("HOME"), } local UbuntuTouch = Device:new{ model = "UbuntuTouch", hasFrontlight = yes, + home_dir = nil, } function Device:init() diff --git a/frontend/ui/elements/font_settings.lua b/frontend/ui/elements/font_settings.lua index c3aa64cb7..eb135b700 100644 --- a/frontend/ui/elements/font_settings.lua +++ b/frontend/ui/elements/font_settings.lua @@ -5,54 +5,27 @@ local _ = require("gettext") --[[ Font settings for desktop linux, mac and android ]]-- -local ANDROID_SYSTEM_FONT_DIR = "/system/fonts" -local LINUX_SYSTEM_FONT_DIR = "/usr/share/fonts" -local DESKTOP_USER_FONT_DIR = "/.local/share/fonts" - --- get primary storage on Android -local function getAndroidPrimaryStorage() - local A, android = pcall(require, "android") - if not A then return end - local path = android.getExternalStoragePath() - if path ~= "Unknown" then - -- use the external storage identified by the app - return path - else - -- unable to identify external storage. Use defaults - return "/sdcard" - end -end - --- user font path, should be rw. On linux/mac it goes under $HOME. --- on Android it goes in the primary storage (internal/sd) -local function getUserDir() - if Device:isDesktop() or Device:isEmulator() then - local home = os.getenv("HOME") - if home then return home..DESKTOP_USER_FONT_DIR end - elseif Device:isAndroid() then - local p = getAndroidPrimaryStorage() - return p.."/koreader/fonts;"..p.."/fonts" - end -end - --- system (ttf) fonts are available on linux and android but not on mac -local function getSystemDir() - if Device:isDesktop() or Device:isEmulator() then - if util.pathExists(LINUX_SYSTEM_FONT_DIR) then - return LINUX_SYSTEM_FONT_DIR - else return nil end - elseif Device:isAndroid() then - return ANDROID_SYSTEM_FONT_DIR +local function getDir(isUser) + local home = Device.home_dir + if isUser and not home then return end + if Device:isAndroid() then + if isUser then + return home .. "/fonts;" .. home .. "/koreader/fonts" + else + return "/system/fonts" + end + elseif Device:isDesktop() or Device:isEmulator() then + if jit.os == "OSX" then + return isUser and home .. "/Library/fonts" or "/Library/fonts" + else + return isUser and home .. "/.local/share/fonts" or "/usr/share/fonts" + end end end -local function usesSystemFonts() - return G_reader_settings:isTrue("system_fonts") -end - local function openFontDir() if not Device:canOpenLink() then return end - local user_dir = getUserDir() + local user_dir = getDir(true) local openable = util.pathExists(user_dir) if not openable and user_dir then logger.info("Font path not found, making one in ", user_dir) @@ -65,16 +38,22 @@ local function openFontDir() Device:openLink(user_dir) end +local function usesSystemFonts() + return G_reader_settings:isTrue("system_fonts") +end + local FontSettings = {} function FontSettings:getPath() + local user, system = getDir(true), getDir() if usesSystemFonts() then - local system_path = getSystemDir() - if system_path ~= nil then - return getUserDir()..";"..system_path + if user and system then + return user .. ";" .. system + elseif system then + return system end end - return getUserDir() + return user end function FontSettings:getSystemFontMenuItems()