65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
|
|
class ImageFolder:
|
|
SUPPORTED_EXTS = {".png", ".jpg", ".jpeg", ".bmp", ".gif"}
|
|
|
|
def __init__(self, folder_path, start_file=None):
|
|
"""
|
|
folder_path: Path to scan for images
|
|
start_file: optional file path to set as the initial index
|
|
"""
|
|
self.folder_path = Path(folder_path)
|
|
self.files = []
|
|
self.index = 0
|
|
|
|
self.scan_folder()
|
|
|
|
# If a specific start file was given, set index to that
|
|
if start_file:
|
|
try:
|
|
self.index = [f["path"] for f in self.files].index(str(Path(start_file)))
|
|
except ValueError:
|
|
pass # if not found, just leave at 0
|
|
|
|
def scan_folder(self):
|
|
"""Populate self.files with image metadata"""
|
|
if not self.folder_path.exists():
|
|
self.files = []
|
|
return
|
|
|
|
all_files = [
|
|
f for f in self.folder_path.iterdir()
|
|
if f.suffix.lower() in self.SUPPORTED_EXTS and f.is_file()
|
|
]
|
|
|
|
self.files = [
|
|
{
|
|
"path": str(f),
|
|
"name": f.name,
|
|
"size": f.stat().st_size,
|
|
"modified": datetime.fromtimestamp(f.stat().st_mtime),
|
|
"chunks": {}, # placeholder for PNG/genAI metadata
|
|
}
|
|
for f in sorted(all_files, key=lambda x: x.name.lower())
|
|
]
|
|
self.index = 0
|
|
|
|
def current(self):
|
|
if self.files:
|
|
return self.files[self.index]
|
|
return None
|
|
|
|
def next(self):
|
|
if not self.files:
|
|
return None
|
|
self.index = (self.index + 1) % len(self.files)
|
|
return self.current()
|
|
|
|
def prev(self):
|
|
if not self.files:
|
|
return None
|
|
self.index = (self.index - 1) % len(self.files)
|
|
return self.current()
|