Ver código fonte

Use sendFile, refactor mimetypes

Zed 6 anos atrás
pai
commit
cfcd471ffc
3 arquivos alterados com 8 adições e 22 exclusões
  1. 3 1
      src/nitter.nim
  2. 5 11
      src/routes/media.nim
  3. 0 10
      src/utils.nim

+ 3 - 1
src/nitter.nim

@@ -1,4 +1,4 @@
-import asyncdispatch
+import asyncdispatch, mimetypes
 from net import Port
 
 import jester
@@ -55,4 +55,6 @@ routes:
   extend status, ""
   extend media, ""
 
+settings.mimes.register("1500x500", "image/jpeg")
+
 runForever()

+ 5 - 11
src/routes/media.nim

@@ -1,4 +1,4 @@
-import asyncfile, uri, strutils, httpclient, os
+import asyncfile, uri, strutils, httpclient, os, mimetypes
 
 import jester, regex
 
@@ -32,14 +32,7 @@ proc createMediaRouter*(cfg: Config) =
         except:
           discard
 
-      if not existsFile(filename):
-        halt Http404
-
-      let file = openAsync(filename)
-      let buf = await readAll(file)
-      file.close()
-
-      resp buf, mimetype(filename)
+      sendFile(filename)
 
     get "/gif/@url":
       cond "http" in @"url"
@@ -60,7 +53,7 @@ proc createMediaRouter*(cfg: Config) =
       if content.len == 0:
         halt Http404
 
-      resp content, mimetype(url)
+      resp content, settings.mimes.getMimetype(url.split(".")[^1])
 
     get "/video/@sig/@url":
       cond "http" in @"url"
@@ -83,4 +76,5 @@ proc createMediaRouter*(cfg: Config) =
         content = proxifyVideo(content, prefs.proxyVideos)
 
       client.close()
-      resp content, mimetype(url)
+      let ext = parseUri(url).path.split(".")[^1]
+      resp content, settings.mimes.getMimetype(ext)

+ 0 - 10
src/utils.nim

@@ -11,16 +11,6 @@ const
     "video.twimg.com"
   ]
 
-proc mimetype*(filename: string): string =
-  if ".png" in filename:
-    "image/" & "png"
-  elif ".jpg" in filename or ".jpeg" in filename or "1500x500" in filename:
-    "image/" & "jpg"
-  elif ".mp4" in filename:
-    "video/" & "mp4"
-  else:
-    "text/plain"
-
 proc getHmac*(data: string): string =
   ($hmac(sha256, key, data))[0 .. 12]