Redirect generation patches, support as ActivityPub post URLs

This commit is contained in:
octospacc 2022-10-18 16:43:21 +02:00
parent 8ffad6c99c
commit 4cbb29d6ed
5 changed files with 27 additions and 18 deletions

View File

@ -40,7 +40,8 @@ Needed for Gemtext output support:
## Features roadmap
- [ ] Showing percentage of build process
- [ ] Page redirects / Alt URLs (+ ActivityPub URL overrides)
- [x] Progress bars for the build process!
- [x] Multithreading
- [x] Differential building
- [ ] Overriding internal HTML snippets for template-specific ones

View File

@ -246,13 +246,14 @@ def Main(Args, FeedEntries):
DestFile = f"{OutDir}/{URL}"
if DestFile not in FinalPaths:
DestURL = f"{GetPathLevels(URL)}{StripExt(File)}.html"
mkdirps(os.path.dirname(DestFile))
WriteFile(
DestFile,
RedirectPageTemplate.format(
DestURL=DestURL,
TitlePrefix=f"{SiteName} - " if SiteName else '',
StrClick=Locale["ClickHere"],
StrRedirect=Locale["IfNotRedirected"]))
StrClick=Locale['ClickHere'],
StrRedirect=Locale['IfNotRedirected']))
if Flags['GemtextOutput']:
logging.info("Generating Gemtext")

View File

@ -61,28 +61,30 @@ def MastodonShare(Flags, Pages, Locale):
Pages.sort()
for File, Content, Titles, Meta, ContentHTML, SlimHTML, Description, Image in Pages:
if (not TypeFilter or (TypeFilter and (Meta['Type'] == TypeFilter or TypeFilter == '*'))) and (not CategoryFilter or (CategoryFilter and (CategoryFilter in Meta['Categories'] or CategoryFilter == '*'))):
Desc = ''
Parse = BeautifulSoup(ContentHTML, 'html.parser')
Paragraphs = Parse.p.get_text().split('\n')
Read = '...' + Locale['ReadFullPost'] + ':\n'
URL = f"{SiteDomain}/{StripExt(File)}.html"
for p in Paragraphs:
if p and len(Read+Desc+p)+25 < 500:
Desc += p + '\n\n'
else:
if Desc:
break
else:
Desc = p[:500-25-5-len(Read)] + '...'
DoPost = True
for p in Posts:
if p['Link'] == URL:
if p['Link'] in [URL]+Meta['URL']:
DoPost = False
break
if DoPost and Meta['Feed'] == 'True' and (not HoursLimit or (Meta['CreatedOn'] and time.time() - time.mktime(date_parse(Meta['CreatedOn']).timetuple()) < 60*60*HoursLimit)):
Desc = ''
Paragraphs = MkSoup(ContentHTML).p.get_text().split('\n')
Read = '...' + Locale['ReadFullPost'] + ':\n'
for p in Paragraphs:
if p and len(Read+Desc+p)+25 < 500:
Desc += p + '\n\n'
else:
if Desc:
break
else:
Desc = p[:500-25-5-len(Read)] + '...'
if not SaidPosting:
print("[I] Posting to Mastodon")
SaidPosting = True
time.sleep(5) # Prevent flooding
Post = MastodonGetLinkFromPost(
Post=MastodonDoPost(
@ -92,4 +94,5 @@ def MastodonShare(Flags, Pages, Locale):
Domain=SiteDomain)
if Post:
Posts += [Post]
return Posts

View File

@ -53,6 +53,9 @@ def LoadFromDir(Dir, Matchs):
Contents.update({File: ReadFile(f"{Dir}/{File}")})
return Contents
def mkdirps(Dir):
return Path(Dir).mkdir(parents=True, exist_ok=True)
def StripExt(Path):
return ".".join(Path.split('.')[:-1])
@ -162,4 +165,6 @@ def PrintProcPercentDots(Proc, DivMult=1):
Div = 5 * DivMult # 100/5 = 20 chars
Num, Count = Proc['Num'], Proc['Count']
if int(((Num/Count)*100)/Div) != int((((Num+1)/Count)*100)/Div):
os.system('printf "="') # For some reason print() without newline breaks here (doesn't print everytime)
os.system('printf "="') # Using sys shell since for some reason print() without newline breaks here (doesn't print everytime)
return True
return False

1
TODO
View File

@ -5,7 +5,6 @@
- Support for YAML header in Markdown
- Support for HTML comment lines (<!-- -->) in any format
- Support for rST and AsciiDoc (?)
- Showing build percentage as dots
- Posts in draft state (will not be compiled) / show unlisted status for posts with Index = False
- Check if external tools (pug-cli, html2gmi) are installed
- Static code syntax highlighing