From 5ddd309bce8d60a6eb0ef4f8e47d5ea050ef46da Mon Sep 17 00:00:00 2001 From: Lionel Dricot Date: Wed, 16 Mar 2022 09:47:53 +0100 Subject: [PATCH] links were broken in v full --- CHANGELOG | 1 + offpunk.py | 45 +++++++++++++++------------------------------ 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 41307b4..fb31609 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ - "cp url X" will copy the URL of link X (suggested by Eoin Carney) - HTML renderering of
 has been improved
 - "fold" has been removed as it doesn’t work well anyway with our width.
+- Improved clipboard URL detection an fixed crash when binary in clipboard
 - Fixed crash when chafa is not installed (Thanks Xavier Hinault for the report)
 - Fixed crash when python-readability not installed (Thanks Nic for the report)
 
diff --git a/offpunk.py b/offpunk.py
index d4061e0..df5b3a7 100755
--- a/offpunk.py
+++ b/offpunk.py
@@ -353,10 +353,10 @@ class AbstractRenderer():
         return [[self.url,self.get_mime(),self.get_title()]]
     def is_valid(self):
         return self.validity
-    def get_links(self):
+    def get_links(self,mode="links_only"):
         if self.links == None :
-            prepared_body = self.prepare(self.body,mode="links_only")
-            results = self.render(prepared_body,mode="links_only")
+            prepared_body = self.prepare(self.body,mode=mode)
+            results = self.render(prepared_body,mode=mode)
             if results:
                 self.links = results[1]
         return self.links
@@ -1018,7 +1018,6 @@ class GeminiItem():
         self.name = name
         self.mime = None
         self.renderer = None
-        self.links = None
         self.body = None
         parsed = urllib.parse.urlparse(self.url)
         if "./" in url or url[0] == "/":
@@ -1142,7 +1141,6 @@ class GeminiItem():
             # If path is too long, we always return True to avoid
             # fetching it.
             if len(cache) > 259:
-                self.links = []
                 print("We return False because path is too long")
                 return False
             if os.path.exists(cache) and not os.path.isdir(cache):
@@ -1196,8 +1194,13 @@ class GeminiItem():
     
     # This method is used to load once the list of links in a gi
     # Links can be followed, after a space, by a description/title
-    def __make_links(self,links):
-        self.links = []
+    def get_links(self):
+        links = []
+        toreturn = []
+        if not self.renderer:
+            self._set_renderer()
+        if self.renderer:
+            links = self.renderer.get_links()
         for l in links:
             #split between link and potential name
             splitted = l.split(maxsplit=1)
@@ -1207,27 +1210,17 @@ class GeminiItem():
                     newgi = GeminiItem(url,splitted[1])
                 else:
                     newgi = GeminiItem(url)
-                self.links.append(newgi)
-
-    def get_links(self):
-        if self.links == None:
-            if not self.renderer:
-                self._set_renderer()
-            if self.renderer:
-                self.__make_links(self.renderer.get_links())
-            else:
-                self.links = []
-        return self.links
+                toreturn.append(newgi)
+        return toreturn
 
     def get_link(self,nb):
         # == None allows to return False, even if the list is empty
-        if self.links == None:
-            self.get_links()
-        if len(self.links) < nb:
+        links = self.get_links()
+        if len(links) < nb:
             print("Index too high! No link %s for %s" %(nb,self.url))
             return None
         else:
-            return self.links[nb-1]
+            return links[nb-1]
 
     def get_subscribe_links(self):
         if not self.renderer:
@@ -1565,7 +1558,6 @@ class GeminiClient(cmd.Cmd):
             "width" : 80,
             "auto_follow_redirects" : True,
             "tls_mode" : "tofu",
-            "https_everywhere": False,
             "archives_size" : 200,
             "history_size" : 200,
             "max_size_download" : 20,
@@ -1632,12 +1624,6 @@ class GeminiClient(cmd.Cmd):
             self._go_to_gi(new_gi)
             return
         
-        if gi.scheme == "http" and self.options["https_everywhere"] :
-            newurl = "https" + gi.url[4:]
-            new_gi = GeminiItem(newurl,name=gi.name)
-            self._go_to_gi(new_gi)
-            return
-
         # Use cache or mark as to_fetch if resource is not cached
         # Why is this code useful ? It set the mimetype !
         if self.offline_only:
@@ -1648,7 +1634,6 @@ class GeminiClient(cmd.Cmd):
                     print("%s not available, marked for syncing"%gi.url)
                 else:
                     print("%s already marked for syncing"%gi.url)
-                #self.gi = gi
                 return
         # check if local file exists.
         if gi.local and not os.path.exists(gi.path):