Jollyz/sorter

113 lines
3.9 KiB
Plaintext

import sys
import os
from datetime import datetime
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLineEdit, QLabel, QFileDialog, QProgressBar
from PySide6.QtCore import Qt, QThread, Signal
class FileOrganizer(QThread):
progress = Signal(int)
finished = Signal()
def __init__(self, path):
super().__init__()
self.path = path
def run(self):
files = [f for f in os.listdir(self.path) if os.path.isfile(os.path.join(self.path, f))]
total_files = len(files)
for i, file in enumerate(files):
file_path = os.path.join(self.path, file)
_, extension = os.path.splitext(file)
extension = extension[1:].lower() # Rimuove il punto e converte in minuscolo
# Crea la cartella per l'estensione se non esiste
ext_folder = os.path.join(self.path, extension)
if not os.path.exists(ext_folder):
os.makedirs(ext_folder)
# Ottiene la data di creazione del file
creation_time = os.path.getctime(file_path)
date_folder = datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d')
# Crea la sottocartella per la data se non esiste
date_folder_path = os.path.join(ext_folder, date_folder)
if not os.path.exists(date_folder_path):
os.makedirs(date_folder_path)
# Sposta il file nella cartella appropriata
new_file_path = os.path.join(date_folder_path, file)
os.rename(file_path, new_file_path)
# Aggiorna il progresso
self.progress.emit(int((i + 1) / total_files * 100))
self.finished.emit()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("File Organizer")
self.setGeometry(100, 100, 400, 200)
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout()
central_widget.setLayout(layout)
# Path input
path_layout = QHBoxLayout()
self.path_input = QLineEdit()
path_layout.addWidget(QLabel("Percorso:"))
path_layout.addWidget(self.path_input)
browse_button = QPushButton("Sfoglia")
browse_button.clicked.connect(self.browse_folder)
path_layout.addWidget(browse_button)
layout.addLayout(path_layout)
# Organize button
self.organize_button = QPushButton("Organizza File")
self.organize_button.clicked.connect(self.organize_files)
layout.addWidget(self.organize_button)
# Progress bar
self.progress_bar = QProgressBar()
layout.addWidget(self.progress_bar)
# Status label
self.status_label = QLabel()
layout.addWidget(self.status_label)
def browse_folder(self):
folder = QFileDialog.getExistingDirectory(self, "Seleziona Cartella")
if folder:
self.path_input.setText(folder)
def organize_files(self):
path = self.path_input.text()
if not path or not os.path.isdir(path):
self.status_label.setText("Percorso non valido")
return
self.organize_button.setEnabled(False)
self.status_label.setText("Organizzazione in corso...")
self.progress_bar.setValue(0)
self.organizer = FileOrganizer(path)
self.organizer.progress.connect(self.update_progress)
self.organizer.finished.connect(self.organization_finished)
self.organizer.start()
def update_progress(self, value):
self.progress_bar.setValue(value)
def organization_finished(self):
self.organize_button.setEnabled(True)
self.status_label.setText("Organizzazione completata!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())