From 96d794798fa24b68ecb27dc386ff530086f9b366 Mon Sep 17 00:00:00 2001
From: JMARyA <jmarya@hydrar.de>
Date: Thu, 7 Mar 2024 01:09:25 +0100
Subject: [PATCH] update + fixes

---
 .config/yazi/plugins/7z.yazi/init.lua       |  1 +
 .config/yazi/plugins/imdl.yazi/init.lua     |  1 +
 .config/yazi/plugins/pdf2text.yazi/init.lua | 63 +++++++++++++++++++++
 .config/yazi/yazi.toml                      | 10 +++-
 4 files changed, 72 insertions(+), 3 deletions(-)
 create mode 100644 .config/yazi/plugins/pdf2text.yazi/init.lua

diff --git a/.config/yazi/plugins/7z.yazi/init.lua b/.config/yazi/plugins/7z.yazi/init.lua
index 128bdc4..c9165a7 100644
--- a/.config/yazi/plugins/7z.yazi/init.lua
+++ b/.config/yazi/plugins/7z.yazi/init.lua
@@ -4,6 +4,7 @@ function M:peek()
 	local child = Command("7z")
 			:args({
 				"l",
+				"-ba",
 				tostring(self.file.url),
 			})
 			:stdout(Command.PIPED)
diff --git a/.config/yazi/plugins/imdl.yazi/init.lua b/.config/yazi/plugins/imdl.yazi/init.lua
index c81a64c..2fbb443 100644
--- a/.config/yazi/plugins/imdl.yazi/init.lua
+++ b/.config/yazi/plugins/imdl.yazi/init.lua
@@ -3,6 +3,7 @@ local M = {}
 function M:peek()
 	local child = Command("imdl")
 			:args({
+				"-t",
 				"torrent",
                 "show",
 				tostring(self.file.url),
diff --git a/.config/yazi/plugins/pdf2text.yazi/init.lua b/.config/yazi/plugins/pdf2text.yazi/init.lua
new file mode 100644
index 0000000..1e2f9aa
--- /dev/null
+++ b/.config/yazi/plugins/pdf2text.yazi/init.lua
@@ -0,0 +1,63 @@
+local M = {}
+
+function M:peek()
+	local child = Command("pdftotext")
+			:args({
+				tostring(self.file.url),
+                "-"
+			})
+			:stdout(Command.PIPED)
+			:stderr(Command.PIPED)
+			:spawn()
+
+	if not child then
+		return self:fallback_to_builtin()
+	end
+
+	local limit = self.area.h
+	local i, lines = 0, ""
+	repeat
+		local next, event = child:read_line()
+		if event == 1 then
+			return self:fallback_to_builtin()
+		elseif event ~= 0 then
+			break
+		end
+
+		i = i + 1
+		if i > self.skip then
+			lines = lines .. next
+		end
+	until i >= self.skip + limit
+
+	child:start_kill()
+	if self.skip > 0 and i < self.skip + limit then
+		ya.manager_emit(
+			"peek",
+			{ tostring(math.max(0, i - limit)), only_if = tostring(self.file.url), upper_bound = "" }
+		)
+	else
+		lines = lines:gsub("\t", string.rep(" ", PREVIEW.tab_size))
+		ya.preview_widgets(self, { ui.Paragraph.parse(self.area, lines) })
+	end
+end
+
+function M:seek(units)
+	local h = cx.active.current.hovered
+	if h and h.url == self.file.url then
+		local step = math.floor(units * self.area.h / 10)
+		ya.manager_emit("peek", {
+			tostring(math.max(0, cx.active.preview.skip + step)),
+			only_if = tostring(self.file.url),
+		})
+	end
+end
+
+function M:fallback_to_builtin()
+	local _, bound = ya.preview_code(self)
+	if bound then
+		ya.manager_emit("peek", { tostring(bound), only_if = tostring(self.file.url), upper_bound = "" })
+	end
+end
+
+return M
\ No newline at end of file
diff --git a/.config/yazi/yazi.toml b/.config/yazi/yazi.toml
index 0b23632..654ac03 100644
--- a/.config/yazi/yazi.toml
+++ b/.config/yazi/yazi.toml
@@ -30,7 +30,7 @@ play = [
 ]
 info = [
 	{ exec = '''ffprobe -hide_banner "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show ffprobe info", for = "unix" },
-	{ exec = '''ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show duration", for = "unix"}
+	{ exec = '''printf "'${1##*/}' Duration: ";ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show duration", for = "unix"}
 ]
 
 [open]
@@ -96,7 +96,7 @@ previewers = [
 	# Video
 	{ mime = "video/*", exec = "video" },
 	# PDF
-	{ mime = "application/pdf", exec = "pdf" },
+	{ mime = "application/pdf", exec = "pdf2text" },
 	# Archive
 	{ mime = "application/zip",             exec = "7z" },
 	{ mime = "application/gzip",            exec = "7z" },
@@ -109,8 +109,12 @@ previewers = [
 	{ mime = "application/x-bittorrent;",   exec = "imdl" },
 	{ name = "*.torrent",   exec = "imdl" },
 
-	{ mime = "application/octet-stream", exec = "hexyl" },
+	# File Ext
+	# Switch ROM
+	{ name = "*.nsp", exec = "file" },
+
 	# Fallback
+	{ mime = "application/octet-stream", exec = "hexyl" },
 	{ name = "*", exec = "file" },
 ]