mirror of
https://gitlab.com/octtspacc/staticoso
synced 2025-04-26 07:38:57 +02:00
63 lines
2.7 KiB
Python
63 lines
2.7 KiB
Python
""" ================================== |
|
|
| This file is part of |
|
|
| staticoso |
|
|
| Just a simple Static Site Generator |
|
|
| |
|
|
| Licensed under the AGPLv3 license |
|
|
| Copyright (C) 2022-2023, OctoSpacc |
|
|
| ================================== """
|
|
|
|
# TODO: Either switch feed generation lib, or rewrite the 'lxml' module, so that no modules have to be compiled and the program is 100% portable
|
|
|
|
from Libs.feedgen.feed import FeedGenerator
|
|
from Modules.Utils import *
|
|
|
|
def MakeFeed(Flags:dict, Pages:list, FullSite=False):
|
|
f = NameSpace(Flags)
|
|
CategoryFilter = Flags['FeedCategoryFilter']
|
|
MaxEntries = Flags['FeedEntries']
|
|
|
|
Feed = FeedGenerator()
|
|
Link = Flags['SiteDomain'] if Flags['SiteDomain'] else ' '
|
|
Feed.id(Link)
|
|
Feed.title(Flags['SiteName'] if Flags['SiteName'] else 'Untitled Site')
|
|
Feed.link(href=Link, rel='alternate')
|
|
Feed.description(Flags['SiteTagline'] if Flags['SiteTagline'] else ' ')
|
|
if Flags['SiteDomain']:
|
|
Feed.logo(Flags['SiteDomain'] + '/favicon.png')
|
|
Feed.language(Flags['SiteLang'])
|
|
|
|
DoPages = []
|
|
for e in Pages:
|
|
if FullSite or (not FullSite and MaxEntries != 0 and e[3]['Type'] == 'Post' and e[3]['Feed'] == 'True'): # No entry limit if site feed
|
|
DoPages += [e]
|
|
MaxEntries -= 1
|
|
DoPages.reverse()
|
|
|
|
for File, Content, Titles, Meta, ContentHTML, SlimHTML, Description, Image in DoPages:
|
|
if FullSite or (not FullSite and Meta['Type'] == 'Post' and (not CategoryFilter or (CategoryFilter and (CategoryFilter in Meta['Categories'] or CategoryFilter == '*')))):
|
|
Entry = Feed.add_entry()
|
|
FileName = File.split('/')[-1]
|
|
File = f"{StripExt(File)}.html"
|
|
Content = ReadFile(f"{Flags['OutDir']}/{File}")
|
|
Link = Flags['SiteDomain'] + '/' + File if Flags['SiteDomain'] else ' '
|
|
CreatedOn = GetFullDate(Meta['CreatedOn'])
|
|
EditedOn = GetFullDate(Meta['EditedOn'])
|
|
Entry.id(Link)
|
|
Title = Meta['Title'] if Meta['Title'] else Titles[0].lstrip('#') if Titles else FileName
|
|
Entry.title(Title.lstrip().rstrip())
|
|
Entry.description(Description)
|
|
Entry.link(href=Link, rel='alternate')
|
|
if not FullSite: # Avoid making an enormous site feed file...
|
|
Entry.content(ContentHTML, type='html')
|
|
if CreatedOn:
|
|
Entry.pubDate(CreatedOn)
|
|
EditedOn = EditedOn if EditedOn else CreatedOn if CreatedOn and not EditedOn else '1970-01-01T00:00+00:00'
|
|
Entry.updated(EditedOn)
|
|
|
|
if not os.path.exists(f"{Flags['OutDir']}/feed"):
|
|
os.mkdir(f"{Flags['OutDir']}/feed")
|
|
FeedType = 'site.' if FullSite else ''
|
|
Feed.atom_file(f"{Flags['OutDir']}/feed/{FeedType}atom.xml", pretty=(not Flags['MinifyOutput']))
|
|
Feed.rss_file(f"{Flags['OutDir']}/feed/{FeedType}rss.xml", pretty=(not Flags['MinifyOutput']))
|