From ce1e00f220351e9d7c00608464973a5cec493a39 Mon Sep 17 00:00:00 2001 From: jollyz88 Date: Thu, 8 Aug 2024 07:30:07 +0000 Subject: [PATCH] Add sorter --- sorter | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 sorter diff --git a/sorter b/sorter new file mode 100644 index 0000000..539d779 --- /dev/null +++ b/sorter @@ -0,0 +1,113 @@ +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()) \ No newline at end of file