diff --git a/code/handlers/RSShandler.lua b/code/handlers/RSShandler.lua index 1d4279d..85a18fb 100644 --- a/code/handlers/RSShandler.lua +++ b/code/handlers/RSShandler.lua @@ -7,12 +7,14 @@ 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 return { content_type = "application/rss+xml", layout = require "views.rss" } end diff --git a/code/hotmixes/utils.lua b/code/hotmixes/utils.lua index a8252a3..87aefb9 100644 --- a/code/hotmixes/utils.lua +++ b/code/hotmixes/utils.lua @@ -26,6 +26,7 @@ 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 = {} @@ -60,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 @@ -120,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_files( 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') diff --git a/code/views/rss.etlua b/code/views/rss.etlua index 75ce4aa..df11d33 100644 --- a/code/views/rss.etlua +++ b/code/views/rss.etlua @@ -1,17 +1,23 @@ - - + + - <%= titles['name'] %> https://<%= titles['url'] %> + en-us + Intergalactic FM Latest uploads + no + <% for i, file in ipairs(latestpath) do %> <%= latestname[i] %> - <%= datapath .. file:gsub("#", "%%23") %> + + <%= datapath .. file %> + <%= latestdate[i] %> ]]> - <%= datapath .. file:gsub("#", "%%23") %> <% end %>