diff --git a/README.md b/README.md index 883f9b9..768438f 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/Source/Build.py b/Source/Build.py index 6e6b500..93c6470 100755 --- a/Source/Build.py +++ b/Source/Build.py @@ -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") diff --git a/Source/Modules/ActivityPub.py b/Source/Modules/ActivityPub.py index fa31da3..94e51b9 100644 --- a/Source/Modules/ActivityPub.py +++ b/Source/Modules/ActivityPub.py @@ -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 diff --git a/Source/Modules/Utils.py b/Source/Modules/Utils.py index b169d9a..15ea789 100644 --- a/Source/Modules/Utils.py +++ b/Source/Modules/Utils.py @@ -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 diff --git a/TODO b/TODO index 3040477..8790723 100644 --- a/TODO +++ b/TODO @@ -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