first commit

main
Ben 1 year ago
commit 6ad943b8a5

@ -0,0 +1,16 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for PhotoPrism
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +luci-lib-taskd
define Package/luci-app-photoprism/conffiles
/etc/config/photoprism
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

@ -0,0 +1,7 @@
module("luci.controller.photoprism", package.seeall)
function index()
entry({"admin", "apps", "photoprism"}, alias("admin", "apps", "photoprism", "config"), _("PhotoPrism"), 30).dependent = true
entry({"admin", "apps", "photoprism", "config"}, cbi("photoprism"))
end

@ -0,0 +1,63 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local photoprism_model = require "luci.model.photoprism"
local m, s, o
m = taskd.docker_map("photoprism", "photoprism", "/usr/libexec/apps/photoprism.sh",
translate("PhotoPrism"),
translate("PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. ")
.. translate("Default User:") .. ' admin '
.. translate("Official website:") .. ' <a href=\"https://photoprism.app/\" target=\"_blank\">https://photoprism.app/</a>')
s = m:section(SimpleSection, translate("Service Status"), translate("PhotoPrism status:"))
s:append(Template("photoprism/status"))
s = m:section(TypedSection, "main", translate("Setup"), translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "http_port", translate("HTTP Port").."<b>*</b>")
o.rmempty = false
o.default = "2342"
o.datatype = "string"
o:depends("hostnet", 0)
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o:value("photoprism/photoprism:latest", "photoprism/photoprism:latest")
o:value("photoprism/photoprism:221105-armv7", "photoprism/photoprism:221105-armv7")
o.default = "photoprism/photoprism:latest"
o = s:option(Value, "password", translate("Default Password").."<b>*</b>")
o.password = true
o.rmempty = false
o.datatype = "string"
local blocks = photoprism_model.blocks()
local home = photoprism_model.home()
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
local paths, default_path = photoprism_model.find_paths(blocks, home, "Configs")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
o = s:option(Value, "picture_path", translate("Photo path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
local paths, default_path = photoprism_model.find_paths(blocks, home, "Public")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
return m

@ -0,0 +1,57 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local photoprism = {}
photoprism.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
photoprism.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
photoprism.find_paths = function(blocks, home_dirs, path_name)
local appname = '/PhotoPrism'
local default_path = ''
local configs = {}
if #blocks == 0 then
return configs, default_path
else
if path_name == "Public" then
appname = '/Photo'
end
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. appname)
end
local without_conf_dir = "/root/" .. path_name .. appname
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return photoprism

@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/apps/photoprism.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:PhotoPrism is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:PhotoPrism is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/apps/photoprism.sh port"))
if port == "" then
port="2342"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open PhotoPrism%>" onclick="window.open('http://'+location.hostname+':<%=port%>', '_blank')">
</div>
</div>
<% end %>

@ -0,0 +1,47 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Official website:"
msgstr "官方网站:"
msgid "PhotoPrism® is an AI-Powered Photos App for the Decentralized Web."
msgstr "PhotoPrism® PhotoPrism 是一个 AI 驱动的相册管理应用。"
msgid "Config path"
msgstr "配置文件路径"
msgid "HTTP Port"
msgstr "HTTP 端口"
msgid "Service Status"
msgstr "服务状态"
msgid "Photoprism status:"
msgstr "Photoprism 的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "Photoprism is running"
msgstr "Photoprism 运行中"
msgid "Photoprism is not running"
msgstr "Photoprism 未运行"
msgid "Open Photoprism"
msgstr "打开 Photoprism"
msgid "Photo path"
msgstr "相册路径"
msgid "Default Password"
msgstr "初始密码"
msgid "Default User:"
msgstr "默认用户:"

@ -0,0 +1 @@
zh-cn

@ -0,0 +1,6 @@
config main
option 'http_port' '2342'
option 'image_name' 'photoprism/photoprism'
option 'config_path' ''
option 'password' ''

@ -0,0 +1,76 @@
#!/bin/sh
ACTION=${1}
shift 1
do_install() {
local http_port=`uci get photoprism.@main[0].http_port 2>/dev/null`
local image_name=`uci get photoprism.@main[0].image_name 2>/dev/null`
local config=`uci get photoprism.@main[0].config_path 2>/dev/null`
local picture=`uci get photoprism.@main[0].picture_path 2>/dev/null`
local password=`uci get photoprism.@main[0].password 2>/dev/null`
[ -z "$image_name" ] && image_name="photoprism/photoprism:latest"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f photoprism
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
[ -z "$http_port" ] && http_port=2342
local cmd="docker run --restart=unless-stopped -d -v \"$config:/photoprism/storage\" -p $http_port:2342 \
-e PHOTOPRISM_UPLOAD_NSFW=\"true\" \
-e PHOTOPRISM_ADMIN_PASSWORD=\"$password\" "
local tz="`uci get system.@system[0].zonename`"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
[ -z "$picture" ] || cmd="$cmd -v \"$picture:/photoprism/originals\""
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name photoprism \"$image_name\""
echo "$cmd"
eval "$cmd"
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the photoprism"
echo " upgrade Upgrade the photoprism"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the photoprism"
echo " status PhotoPrism status"
echo " port PhotoPrism port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f photoprism
;;
"start" | "stop" | "restart")
docker ${ACTION} photoprism
;;
"status")
docker ps --all -f 'name=photoprism' --format '{{.State}}'
;;
"port")
docker ps --all -f 'name=photoprism' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*' | sed 's/0.0.0.0://'
;;
*)
usage
exit 1
;;
esac

@ -0,0 +1,11 @@
{
"luci-app-photoprism": {
"description": "Grant UCI access for luci-app-photoprism",
"read": {
"uci": [ "photoprism" ]
},
"write": {
"uci": [ "photoprism" ]
}
}
}
Loading…
Cancel
Save