summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-minidlna/luasrc/model/cbi/minidlna.lua
blob: 41e2826ee7d007a349a840d3980b10397b389c7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
--[[
LuCI - Lua Configuration Interface - miniDLNA support

Copyright 2012 Gabor Juhos <juhosg@openwrt.org>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

$Id$
]]--

local m, s, o

m = Map("minidlna", translate("miniDLNA"),
	translate("MiniDLNA is server software with the aim of being fully compliant with DLNA/UPnP-AV clients."))

m:section(SimpleSection).template  = "minidlna_status"

s = m:section(TypedSection, "minidlna", "miniDLNA Settings")
s.addremove = false
s.anonymous = true

s:tab("general", translate("General Settings"))
s:tab("advanced", translate("Advanced Settings"))

o = s:taboption("general", Flag, "enabled", translate("Enable:"))
o.rmempty = false

function o.cfgvalue(self, section)
	return luci.sys.init.enabled("minidlna") and self.enabled or self.disabled
end

function o.write(self, section, value)
	if value == "1" then
		luci.sys.init.enable("minidlna")
		luci.sys.call("/etc/init.d/minidlna start >/dev/null")
	else
		luci.sys.call("/etc/init.d/minidlna stop >/dev/null")
		luci.sys.init.disable("minidlna")
	end

	return Flag.write(self, section, value)
end

o = s:taboption("general", Value, "port", translate("Port:"),
	translate("Port for HTTP (descriptions, SOAP, media transfer) traffic."))
o.datatype = "port"
o.default = 8200


o = s:taboption("general", Value, "interface", translate("Interfaces:"),
	translate("Network interfaces to serve."))

o.template = "cbi/network_ifacelist"
o.widget   = "checkbox"
o.nocreate = true

function o.cfgvalue(self, section)
	local rv = { }
	local val = Value.cfgvalue(self, section)
	if val then
		local ifc
		for ifc in val:gmatch("[^,%s]+") do
			rv[#rv+1] = ifc
		end
	end
	return rv
end

function o.write(self, section, value)
	local rv = { }
	local ifc
	for ifc in luci.util.imatch(value) do
		rv[#rv+1] = ifc
	end
	Value.write(self, section, table.concat(rv, ","))
end


o = s:taboption("general", Value, "friendly_name", translate("Friendly name:"),
	translate("Set this if you want to customize the name that shows up on your clients."))
o.rmempty = true
o.placeholder = "OpenWrt DLNA Server"

o = s:taboption("advanced", Value, "db_dir", translate("Database directory:"),
	translate("Set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache."))
o.rmempty = true
o.placeholder = "/var/cache/minidlna"

o = s:taboption("advanced", Value, "log_dir", translate("Log directory:"),
	translate("Set this if you would like to specify the directory where you want MiniDLNA to store its log file."))
o.rmempty = true
o.placeholder = "/var/log"

s:taboption("advanced", Flag, "inotify", translate("Enable inotify:"),
	translate("Set this to enable inotify monitoring to automatically discover new files."))

s:taboption("advanced", Flag, "enable_tivo", translate("Enable TIVO:"),
	translate("Set this to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO."))
o.rmempty = true

o = s:taboption("advanced", Flag, "strict_dlna", translate("Strict to DLNA standard:"),
	translate("Set this to strictly adhere to DLNA standards. This will allow server-side downscaling of very large JPEG images, which may hurt JPEG serving performance on (at least) Sony DLNA products."))
o.rmempty = true

o = s:taboption("advanced", Value, "presentation_url", translate("Presentation URL:"))
o.rmempty = true
o.placeholder = "http://192.168.1.1/"

o = s:taboption("advanced", Value, "notify_interval", translate("Notify interval:"),
	translate("Notify interval in seconds."))
o.datatype = "uinteger"
o.placeholder = 900

o = s:taboption("advanced", Value, "serial", translate("Announced serial number:"),
	translate("Serial number the miniDLNA daemon will report to clients in its XML description."))
o.placeholder = "12345678"

s:taboption("advanced", Value, "model_number", translate("Announced model number:"),
	translate("Model number the miniDLNA daemon will report to clients in its XML description."))
o.placholder = "1"

o = s:taboption("advanced", Value, "minissdpsocket", translate("miniSSDP socket:"),
	translate("Specify the path to the MiniSSDPd socket."))
o.rmempty = true
o.placeholder = "/var/run/minissdpd.sock"

o = s:taboption("general", ListValue, "root_container", translate("Root container:"))
o:value(".", translate("Standard container"))
o:value("B", translate("Browse directory"))
o:value("M", translate("Music"))
o:value("V", translate("Video"))
o:value("P", translate("Pictures"))


s:taboption("general", DynamicList, "media_dir", translate("Media directories:"),
	translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."))


o = s:taboption("general", DynamicList, "album_art_names", translate("Album art names:"),
	translate("This is a list of file names to check for when searching for album art."))
o.rmempty = true
o.placeholder = "Cover.jpg"

function o.cfgvalue(self, section)
	local rv = { }

	local val = Value.cfgvalue(self, section)
	if type(val) == "table" then
		val = table.concat(val, "/")
	elseif not val then
		val = ""
	end

	local file
	for file in val:gmatch("[^/%s]+") do
		rv[#rv+1] = file
	end

	return rv
end

function o.write(self, section, value)
	local rv = { }
	local file
	for file in luci.util.imatch(value) do
		rv[#rv+1] = file
	end
	Value.write(self, section, table.concat(rv, "/"))
end


return m