🔧 Solusi Shiori Tidak Menampilkan Thumbnail Setelah Import
Jika Anda menggunakan Shiori di Docker dan mengalami masalah thumbnail tidak muncul setelah melakukan import HTML, Anda bisa mengatasi masalah ini dengan cara mengedit database dan memaksa reload konten. Berikut panduan lengkapnya:
⚙️ 1. docker-compose.yml untuk Shiori
version: "3"
services:
shiori:
image: radhifadlillah/shiori:latest
container_name: shiori
ports:
- "8080:8080"
volumes:
- ./shiori-data:/srv/shiori
restart: unless-stopped
📝 2. Script GUI Python untuk Edit URL & Judul Bookmark
import sqlite3
import tkinter as tk
from tkinter import messagebox, simpledialog
DB_PATH = "/media/debian/DATA/Docker/Shiori/shiori-data/shiori.db"
class ShioriEditor(tk.Tk):
def __init__(self):
super().__init__()
self.title("Shiori Bookmark Editor")
self.geometry("700x500")
print(f"[DEBUG] Connecting to database: {DB_PATH}")
self.conn = sqlite3.connect(DB_PATH)
self.cursor = self.conn.cursor()
self.bookmarks = []
self.create_widgets()
self.load_bookmarks()
def create_widgets(self):
frame = tk.Frame(self)
frame.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
self.listbox = tk.Listbox(frame)
self.listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
self.listbox.bind("<>", self.on_select)
scrollbar_y = tk.Scrollbar(frame, orient=tk.VERTICAL)
scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
scrollbar_x = tk.Scrollbar(self, orient=tk.HORIZONTAL)
scrollbar_x.pack(fill=tk.X)
self.listbox.config(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
scrollbar_y.config(command=self.listbox.yview)
scrollbar_x.config(command=self.listbox.xview)
self.btn_edit = tk.Button(self, text="Edit Bookmark", command=self.edit_bookmark)
self.btn_edit.pack(pady=10)
def load_bookmarks(self):
print("[DEBUG] Loading bookmarks from database")
self.bookmarks.clear()
self.listbox.delete(0, tk.END)
# Urutkan ID DESC supaya terbaru di atas
self.cursor.execute("SELECT id, url, title FROM bookmark ORDER BY id DESC")
rows = self.cursor.fetchall()
print(f"[DEBUG] Loaded {len(rows)} bookmarks")
for row in rows:
self.bookmarks.append(row)
display = f"ID: {row[0]} | Title: {row[2]} | URL: {row[1]}"
self.listbox.insert(tk.END, display)
def on_select(self, event):
selection = self.listbox.curselection()
if selection:
index = selection[0]
selected_id = self.bookmarks[index][0]
print(f"[DEBUG] Selected bookmark ID: {selected_id}")
def edit_bookmark(self):
selection = self.listbox.curselection()
if not selection:
messagebox.showwarning("No selection", "Please select a bookmark to edit.")
return
index = selection[0]
bookmark = self.bookmarks[index]
bookmark_id = bookmark[0]
current_url = bookmark[1]
current_title = bookmark[2]
print(f"[DEBUG] Editing bookmark ID: {bookmark_id}")
print(f"[DEBUG] Current URL: {current_url}")
print(f"[DEBUG] Current Title: {current_title}")
new_url = simpledialog.askstring("Edit URL", "Enter new URL:", initialvalue=current_url)
if new_url is None:
print("[DEBUG] Edit URL cancelled")
return
new_title = simpledialog.askstring("Edit Title", "Enter new Title:", initialvalue=current_title)
if new_title is None:
print("[DEBUG] Edit Title cancelled")
return
print(f"[DEBUG] New URL: {new_url}")
print(f"[DEBUG] New Title: {new_title}")
try:
self.cursor.execute(
"UPDATE bookmark SET url=?, title=? WHERE id=?",
(new_url, new_title, bookmark_id)
)
self.conn.commit()
print(f"[DEBUG] Bookmark ID {bookmark_id} updated successfully")
messagebox.showinfo("Success", "Bookmark updated successfully.")
self.load_bookmarks()
except sqlite3.IntegrityError as e:
print(f"[ERROR] IntegrityError: {e}")
messagebox.showerror("Error", f"Failed to update bookmark.\n{e}")
except sqlite3.OperationalError as e:
print(f"[ERROR] OperationalError: {e}")
messagebox.showerror("Error", f"Operational error.\n{e}")
if __name__ == "__main__":
app = ShioriEditor()
app.mainloop()
▶️ Jalankan Script Editor
sudo python3 edit.py
📂 3. Import File HTML Bookmark ke Shiori
- Copy file ke dalam container:
sudo docker cp /home/debian/Downloads/04cf454f-b481-46ad-bb36-99d76ebb1755.html shiori:/bookmarks.html
- Masuk ke container Shiori:
sudo docker exec -it shiori sh
- Import file bookmark:
shiori import /bookmarks.html
🔁 4. Memaksa Reload Konten dan Thumbnail
Setelah proses import, jalankan perintah berikut agar Shiori mengambil ulang metadata (termasuk thumbnail):
sudo docker exec -it shiori shiori update
🌐 5. Akses Shiori
Buka browser Anda dan akses:
http://localhost:8080/
✅ Selesai
Dengan langkah-langkah di atas, masalah thumbnail yang tidak muncul setelah impor dapat diatasi dengan cara me-refresh metadata melalui perintah shiori update.