]> git.scottworley.com Git - paperdoorknob/commitdiff
Follow 'Next Thread →' links
authorScott Worley <scottworley@scottworley.com>
Fri, 26 Jan 2024 07:27:15 +0000 (23:27 -0800)
committerScott Worley <scottworley@scottworley.com>
Fri, 26 Jan 2024 07:27:15 +0000 (23:27 -0800)
glowfic.py
glowfic_test.py

index ef71eef019e8005b4c2bbf8a34ab49b0362f3e85..94fbd34bcfa00c4041d4fe74c5796775c162ca60 100644 (file)
@@ -5,7 +5,7 @@
 # Free Software Foundation, version 3.
 
 
-from dataclasses import dataclass
+import dataclasses
 import itertools
 from urllib.parse import parse_qsl, urlencode, urljoin, urlparse, urlunparse
 
@@ -40,7 +40,7 @@ def flatURL(url: str) -> str:
     return urlunparse(u._replace(query=urlencode(qs)))
 
 
-@dataclass(frozen=True)
+@dataclasses.dataclass(frozen=True)
 class Chunk:
     icon: str | None
     character: Tag | None
@@ -116,6 +116,9 @@ class Thread:
             self._spec.texout.write(
                 self._spec.texfilter(renderChunk(self._spec.texifier, chunk)))
         self._spec.log('')
+        next_url = self.next_thread()
+        if next_url is not None:
+            Thread(dataclasses.replace(self._spec, url=next_url)).emit()
 
 
 def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk:
index befd0b57a584d6a18624dbd48b7352b17dafa053..d3fb2ddb9d627720dff02c86a01d099ae19dc985 100644 (file)
@@ -4,6 +4,7 @@
 # under the terms of the GNU General Public License as published by the
 # Free Software Foundation, version 3.
 
+import dataclasses
 from io import BytesIO
 from sys import stderr
 import unittest
@@ -164,6 +165,36 @@ class TestEmit(unittest.TestCase):
 \glowhead{}{}{}{}B
 ''')
 
+    def testEmitTwoThreads(self) -> None:
+        buf = BytesIO()
+        spec = dataclasses.replace(spec_for_testing(b'', buf), fetcher=FakeFetcher({
+            'https://fake/test': b'''<html><body>
+              <div class="post-navheader">
+                <a class="view-button-link" href="/page2"><div class="view-button">Next Post &raquo;</div></a>
+              </div></body></html>''',
+            'https://fake/test?view=flat': b'''<html><body>
+              <div class="post-container post-post"><div class="post-content">A</div></div>
+              <div class="flat-post-replies">
+                <div class="post-container post-reply"><div class="post-content">B</div></div>
+              </div>
+            </body></html>''',
+            'https://fake/page2': b'''<html><body></body></html>''',
+            'https://fake/page2?view=flat': b'''<html><body>
+              <div class="post-container post-post"><div class="post-content">C</div></div>
+              <div class="flat-post-replies">
+                <div class="post-container post-reply"><div class="post-content">D</div></div>
+                <div class="post-container post-reply"><div class="post-content">E</div></div>
+              </div>
+            </body></html>''',
+        }))
+        Thread(spec).emit()
+        self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A
+\glowhead{}{}{}{}B
+\glowhead{}{}{}{}C
+\glowhead{}{}{}{}D
+\glowhead{}{}{}{}E
+''')
+
 
 if __name__ == '__main__':
     unittest.main()