Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e33ad712e | |||
| 7ed0a1863d | |||
| 49a8626708 | |||
| 223d62f2a3 | |||
| c2577ad3dc | |||
| ea3ff90349 | |||
| 49cc36ef31 | |||
| fe70315a63 | |||
| 3aec58719b | |||
| b86f583f42 | |||
| ae1eca427f |
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Wasted Audio
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
+7
-4
@@ -16,21 +16,24 @@ if string.find(ngx.var.host, "panamaracing.club") then
|
||||
name = "Panama Racing Club Archive",
|
||||
url = "panamaracing.club",
|
||||
css = "panamaracing.css",
|
||||
header = "panamaracing.club_header.png"
|
||||
header = "panamaracing.club_header.png",
|
||||
feed = "panamaracing.club"
|
||||
}
|
||||
elseif string.find(ngx.var.host, "videohotmix.net") then
|
||||
page_titles = {
|
||||
name = "Hotmix Video Archive",
|
||||
url = "videohotmix.net",
|
||||
css = "videohotmix.css",
|
||||
header = "videohotmix.net-logo.png"
|
||||
header = "videohotmix.net-logo.png",
|
||||
feed = "videohotmix"
|
||||
}
|
||||
elseif string.find(ngx.var.host, "hotmixxx.com") then
|
||||
page_titles = {
|
||||
name = "Hotmix Video Archive",
|
||||
url = "videohotmix.net",
|
||||
css = "videohotmix.css",
|
||||
header = "videohotmix.net-logo.png"
|
||||
header = "videohotmix.net-logo.png",
|
||||
feed = "hotmixxx"
|
||||
}
|
||||
else
|
||||
page_titles = {
|
||||
@@ -49,7 +52,7 @@ app:get("/latest.json", function(self)
|
||||
return handlers.Latesthandler(self)
|
||||
end)
|
||||
|
||||
app:get("/latest.xml", function(self)
|
||||
app:get("/latest.rss", function(self)
|
||||
self.titles = page_titles
|
||||
return handlers.RSShandler(self)
|
||||
end)
|
||||
|
||||
@@ -7,12 +7,15 @@ local hotmixes = autoload("hotmixes")
|
||||
local function RSShandler(self)
|
||||
|
||||
local path = config.get().mount .. self.titles.url
|
||||
local latest_path, latest_name = hotmixes.utils.these_latest( path )
|
||||
local latest_path, latest_name, latest_size, latest_date = hotmixes.utils.rss_latest( path )
|
||||
|
||||
local host = self.req.parsed_url.scheme .. '://' .. self.req.parsed_url.host
|
||||
self.datapath = host .. '/data/' .. self.titles.url .. '/'
|
||||
self.latestpath = latest_path
|
||||
self.latestname = latest_name
|
||||
self.latestsize = latest_size
|
||||
self.latestdate = latest_date
|
||||
self.datenow = hotmixes.utils.rss_date_now()
|
||||
|
||||
return { content_type = "application/rss+xml", layout = require "views.rss" }
|
||||
end
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
local to_json = require("lapis.util").to_json
|
||||
local autoload = require("lapis.util").autoload
|
||||
local escape = require("lapis.util").escape
|
||||
local config = require("lapis.config")
|
||||
local hotmixes = autoload("hotmixes")
|
||||
|
||||
@@ -11,14 +9,14 @@ local function Roothandler(self)
|
||||
local latest_path, latest_name = hotmixes.utils.these_latest( path )
|
||||
|
||||
self.total = hotmixes.utils.total_files_dir( path )
|
||||
self.uri = hotmixes.utils.request_path:sub(2) -- remove leading slash
|
||||
self.uri = hotmixes.utils.request_path
|
||||
self.path = '/data/' .. self.titles.url .. hotmixes.utils.request_path
|
||||
self.dirs = stuff.dirs
|
||||
self.files = stuff.files
|
||||
self.images = stuff.images
|
||||
self.latestpath = latest_path
|
||||
self.latestname = latest_name
|
||||
self.functions = { escape = escape }
|
||||
self.functions = { hotesc = hotmixes.utils.hotesc }
|
||||
|
||||
if self.titles['url'] == "panamaracing.club" then
|
||||
return { render = "root", layout = require "views.prc_layout" }
|
||||
|
||||
+78
-1
@@ -26,10 +26,15 @@ local data_path = data_dir .. request_path
|
||||
|
||||
local type_image = { jpg=true, jpeg=true, png=true, gif=true }
|
||||
local type_media = { mp3=true, flac=true, wav=true, mp4=true }
|
||||
local type_audio = { mp3=true, flac=true, wav=true }
|
||||
local type_allowed = { jpg=true, jpeg=true, png=true, gif=true, mp3=true, flac=true, wav=true, mp4=true }
|
||||
|
||||
local utils = {}
|
||||
|
||||
local function hotesc ( str )
|
||||
return escape(str):gsub("%%2f", "/"):gsub("%%2d", "-"):gsub("%%2e", ".")
|
||||
end
|
||||
|
||||
utils['request_path'] = request_path
|
||||
utils['data_path'] = data_path
|
||||
|
||||
@@ -56,6 +61,19 @@ utils['latest_files'] = function( directory )
|
||||
return t
|
||||
end
|
||||
|
||||
utils['latest_audio'] = function( directory )
|
||||
local i, t, popen = 0, {}, io.popen
|
||||
local pfile = popen('find -L "'..directory..'" -type f ! -name \'*.filepart\' ! -name \'*.mp4\' ! -name \'*.png\' ! -name \'*.jpg\' ! -name \'*.jpeg\' ! -name \'*.gif\' -printf \'%C@ %p\n\'| sort -nr | head -7 | cut -f2- -d" "| sed s:"'..directory..'/"::')
|
||||
for filename in pfile:lines() do
|
||||
if utils.match_ext ( filename, type_audio ) then
|
||||
i = i + 1
|
||||
t[i] = filename
|
||||
end
|
||||
end
|
||||
pfile:close()
|
||||
return t
|
||||
end
|
||||
|
||||
utils['these_files'] = function( path )
|
||||
local files, dirs, images = {}, {}, {}
|
||||
for file in lfs.dir( path ) do
|
||||
@@ -84,12 +102,17 @@ utils['these_files'] = function( path )
|
||||
return stuff
|
||||
end
|
||||
|
||||
utils['hotesc'] = function( str )
|
||||
return hotesc(str)
|
||||
end
|
||||
|
||||
utils['these_latest'] = function( path )
|
||||
-- list last 10 modified files in our directory
|
||||
local latest_path, latest_name = {}, {}
|
||||
|
||||
for i, file_path in ipairs( utils.latest_files( path ) ) do
|
||||
table.insert( latest_path, escape(file_path))
|
||||
local escpath = hotesc(file_path)
|
||||
table.insert( latest_path, escpath )
|
||||
|
||||
local temp = ""
|
||||
local result = ""
|
||||
@@ -111,6 +134,51 @@ utils['these_latest'] = function( path )
|
||||
return latest_path, latest_name
|
||||
end
|
||||
|
||||
|
||||
utils['rss_latest'] = function( path )
|
||||
local latest_path, latest_name, latest_size, latest_date = {}, {}, {}, {}
|
||||
|
||||
for i, file_path in ipairs( utils.latest_audio( path ) ) do
|
||||
local popen = io.popen
|
||||
|
||||
-- get the size of the file
|
||||
local psize = popen('wc -c <'..path..'/'..file_path)
|
||||
for size in psize:lines() do
|
||||
ngx.log(ngx.INFO, size)
|
||||
table.insert( latest_size, size)
|
||||
end
|
||||
psize:close()
|
||||
|
||||
-- get the date of the file
|
||||
local pdate = popen('date -d @$(stat -c "%Y" '..path..'/'..file_path..') "+%a, %-d %b %Y %H:%M:%S %Z"')
|
||||
for date in pdate:lines() do
|
||||
table.insert( latest_date, date )
|
||||
end
|
||||
pdate:close()
|
||||
|
||||
local escpath = hotesc(file_path)
|
||||
table.insert( latest_path, escpath )
|
||||
|
||||
local temp = ""
|
||||
local result = ""
|
||||
for i = file_path:len(), 1, -1 do
|
||||
if file_path:sub(i,i) ~= "/" then
|
||||
temp = temp..file_path:sub(i,i)
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
for j = temp:len(), 1, -1 do
|
||||
result = result..temp:sub(j,j)
|
||||
end
|
||||
|
||||
table.insert( latest_name, result )
|
||||
end
|
||||
|
||||
return latest_path, latest_name, latest_size, latest_date
|
||||
end
|
||||
|
||||
utils['total_files_dir'] = function( path )
|
||||
local i, t, popen = 0, {}, io.popen
|
||||
local pfile = popen('find "'..path..'" -type f | wc -l')
|
||||
@@ -122,4 +190,13 @@ utils['total_files_dir'] = function( path )
|
||||
return t
|
||||
end
|
||||
|
||||
utils['rss_date_now'] = function()
|
||||
local popen = io.popen
|
||||
local pdate = popen('date "+%a, %-d %b %Y %H:%M:%S %Z"')
|
||||
for date in pdate:lines() do
|
||||
return date
|
||||
end
|
||||
pdate:close()
|
||||
end
|
||||
|
||||
return utils
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
<% for i, dir in ipairs(dirs) do %>
|
||||
<br>
|
||||
<a href="<%- functions.escape(uri .. dir) %>" class="djsection"><span><%= dir %></span></a>
|
||||
<a href="<%- functions.hotesc(uri .. dir) %>" class="djsection"><span><%= dir %></span></a>
|
||||
<br>
|
||||
<% end %>
|
||||
<br>
|
||||
|
||||
<% for i, file in ipairs(files) do %>
|
||||
<a class="amixlink" href="<%- functions.escape(path .. file):gsub("%%2f", "/") %>">
|
||||
<a class="amixlink" href="<%- functions.hotesc(path .. file) %>">
|
||||
<span class="mixlink"><%= file %></span>
|
||||
</a>
|
||||
<br>
|
||||
|
||||
+27
-6
@@ -1,17 +1,38 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
xmlns:podcast="https://podcastindex.org/namespace/1.0"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
|
||||
<channel>
|
||||
<atom:link href="https://<%= titles['url'] %>/latest.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://<%= titles['url'] %>/latest.rss"
|
||||
rel="self" type="application/rss+xml" />
|
||||
<title><%= titles['name'] %></title>
|
||||
<link>https://<%= titles['url'] %></link>
|
||||
<description>Latest uploads</description>
|
||||
<language>en-us</language>
|
||||
<itunes:author>Intergalactic FM</itunes:author>
|
||||
<itunes:owner>
|
||||
<itunes:name>Intergalactic FM</itunes:name>
|
||||
</itunes:owner>
|
||||
<description>Latest audio uploads on <%= titles['name'] %></description>
|
||||
<itunes:summary>Latest audio uploads on <%= titles['name'] %></itunes:summary>
|
||||
<itunes:explicit>false</itunes:explicit>
|
||||
<itunes:category text="Music">
|
||||
<itunes:category text="Electronic"/>
|
||||
</itunes:category>
|
||||
<itunes:image href="https://intergalactic.fm/themes/custom/ifm/logo.svg"/>
|
||||
<lastBuildDate><%= datenow %></lastBuildDate>
|
||||
<podcast:guid>intergalactic-fm-<%= titles['feed'] %>-feed</podcast:guid>
|
||||
|
||||
<% for i, file in ipairs(latestpath) do %>
|
||||
<item>
|
||||
<title><%= latestname[i] %></title>
|
||||
<link><%= datapath .. file:gsub("#", "%%23") %></link>
|
||||
<enclosure url="<%= datapath .. file %>" length="<%= latestsize[i] %>" type="audio/mpeg"/>
|
||||
<guid><%= datapath .. file %></guid>
|
||||
<pubDate><%= latestdate[i] %></pubDate>
|
||||
<description><![CDATA[<%= latestname[i] %>]]></description>
|
||||
<guid><%= datapath .. file:gsub("#", "%%23") %></guid>
|
||||
<itunes:explicit>false</itunes:explicit>
|
||||
</item>
|
||||
<% end %>
|
||||
</channel>
|
||||
|
||||
Reference in New Issue
Block a user