diff --git a/Folder_merge/executable/ubuntu/folder_merge_app_new b/Folder_merge/executable/ubuntu/folder_merge_app_new new file mode 100755 index 0000000..e0d6857 Binary files /dev/null and b/Folder_merge/executable/ubuntu/folder_merge_app_new differ diff --git a/Folder_merge/executable/ubuntu/run.txt b/Folder_merge/executable/ubuntu/run.txt new file mode 100644 index 0000000..af5b014 --- /dev/null +++ b/Folder_merge/executable/ubuntu/run.txt @@ -0,0 +1,3 @@ +run this in terminal + +./folder_merge_app_new \ No newline at end of file diff --git a/Folder_merge/executable/win/folder_merge_app_new.exe b/Folder_merge/executable/win/folder_merge_app_new.exe new file mode 100755 index 0000000..6f33797 Binary files /dev/null and b/Folder_merge/executable/win/folder_merge_app_new.exe differ diff --git a/Folder_merge/folder_merge_app_new.py b/Folder_merge/folder_merge_app_new.py old mode 100644 new mode 100755 index 51f49ef..4cff65e --- a/Folder_merge/folder_merge_app_new.py +++ b/Folder_merge/folder_merge_app_new.py @@ -1,142 +1,129 @@ import sys import os -import typing import time - - -from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QFileDialog, QMessageBox,QProgressDialog -from PyQt6.QtCore import QObject, QThread,pyqtSignal,Qt +from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QFileDialog, QMessageBox, QProgressDialog, QLineEdit, QLabel +from PyQt6.QtCore import QThread, pyqtSignal, Qt import merge_all_books - # Thread class to handle folder merging class FolderMergerThread(QThread): - update_progress=pyqtSignal(int) - task_completed=pyqtSignal(str) - + update_progress = pyqtSignal(int) + task_completed = pyqtSignal(str) - def __init__(self,base_dir,sub_folder,output_dir): + def __init__(self, base_dir, sub_folder, output_dir, username): super().__init__() - self.base_dir=base_dir - self.sub_folder=sub_folder - self.output_dir=output_dir - + self.base_dir = base_dir + self.sub_folder = sub_folder + self.output_dir = output_dir + self.username = username def run(self): - try: - results=merge_all_books.merge_folders(self.base_dir,self.sub_folder,self. output_dir) - #print('test line--------------------') - - # Merge JSON files - merge_all_books.merge_json_files(self.base_dir,self.output_dir,"metadata.json") + results = merge_all_books.merge_folders(self.base_dir, self.sub_folder, self.output_dir) + merge_all_books.merge_json_files(self.base_dir, self.output_dir, self.username, "metadata.json") - # simulate progress update - for i in range(1,101): - + # Simulate progress update + for i in range(1, 101): time.sleep(0.05) self.update_progress.emit(i) - self.task_completed.emit("Folders and JSON merged successfully!\nThe merged folders can be found in the Output folder within the Source directory.\nReports are written in report.txt'") - # convert=merge.convert_to_mp3(self.output_dir) - + + self.task_completed.emit("Folders and JSON merged successfully!\nThe merged folders can be found in the Output folder within the Source directory.\nReports are written in report.txt") except Exception as e: - self.task_completed.emit(f"An error occurred: {e}") # Thread class to handle conversion -class FileconversionThread(QThread): +class FileConversionThread(QThread): update_progress = pyqtSignal(int) task_completed = pyqtSignal(str) - def __init__(self,output_dir): + def __init__(self, output_dir): super().__init__() self.output_dir = output_dir def run(self): - try: - converted_result = merge_all_books.convert_to_mp3(self.output_dir) - - - for i in range(1,101): + for i in range(1, 101): time.sleep(0.05) self.update_progress.emit(i) self.task_completed.emit("Files converted to MP3 successfully!") except Exception as e: - self.task_completed.emit(f"An error occured during conversion:{e}") + self.task_completed.emit(f"An error occurred during conversion: {e}") # Main application class - class FolderMergeApp(QWidget): def __init__(self): super().__init__() self.initUI() self.source_folder = None - - # Initalize the user interface def initUI(self): + # Create widgets + self.username_label = QLabel("Username: ") + self.username_input = QLineEdit(self) + self.username_input.setText("all.pm") # Set default value + self.source_button = QPushButton('Source', self) self.merge_button = QPushButton('Merge', self) - self.convert_button = QPushButton('Convert',self) + self.convert_button = QPushButton('Convert', self) # Set styles and sizes for the buttons - self.source_button.setStyleSheet("background-color: lightblue; ; border: 2px solid transparent; border-radius: 5px;") - self.merge_button.setStyleSheet("background-color: lightgreen; ; border: 2px solid transparent; border-radius: 5px;") - self.convert_button.setStyleSheet("background-color: lightcoral; ; border: 2px solid transparent; border-radius: 5px;") + self.source_button.setStyleSheet("background-color: lightblue;color: black; border: 2px solid transparent; border-radius: 5px;") + self.merge_button.setStyleSheet("background-color: lightgreen; color: black;border: 2px solid transparent; border-radius: 5px;") + self.convert_button.setStyleSheet("background-color: lightcoral;color: black; border: 2px solid transparent; border-radius: 5px;") - self.source_button.setFixedSize(120, 30) + self.source_button.setFixedSize(120, 30) self.merge_button.setFixedSize(120, 30) - self.convert_button.setFixedSize(120,30) - - - # Connect buttons clicks to functons + self.convert_button.setFixedSize(120, 30) + # Connect button clicks to functions self.source_button.clicked.connect(self.select_source_folder) self.merge_button.clicked.connect(self.merge_folders) self.convert_button.clicked.connect(self.convert_files) - # Layout the buttons horizontally + # Create a horizontal layout for the username label and input + username_layout = QHBoxLayout() + username_layout.addWidget(self.username_label) + username_layout.addWidget(self.username_input) + + # Layout setup + button_layout = QHBoxLayout() + button_layout.addWidget(self.source_button) + button_layout.addWidget(self.merge_button) + button_layout.addWidget(self.convert_button) - hbox = QHBoxLayout() - hbox.addWidget(self.source_button) - hbox.addWidget(self.merge_button) - hbox.addWidget(self.convert_button) + main_layout = QVBoxLayout() + main_layout.addLayout(username_layout) + main_layout.addLayout(button_layout) - self.setLayout(hbox) + self.setLayout(main_layout) self.setWindowTitle('Folder Merge') self.setGeometry(500, 300, 400, 200) self.show() - # Open a dialog to select the source folder def select_source_folder(self): - print("Opening folder selection dialog...") self.source_folder = QFileDialog.getExistingDirectory(self, 'Select Source Folder', os.path.expanduser("~")) if self.source_folder: - print(f"Selected source folder: {self.source_folder}") msg = QMessageBox() msg.setWindowTitle("Folder Selected") msg.setText(f"Selected source folder: {self.source_folder}") msg.setStandardButtons(QMessageBox.StandardButton.Ok) msg.exec() - else: - print("No folder selected.") - - + print("No folder selected.") - # Start the folder merge process def merge_folders(self): - if not self.source_folder: QMessageBox.warning(self, 'Error', 'Please select a source folder first.') return - - + username = self.username_input.text().strip() + if not username: + QMessageBox.warning(self, ' enter a username!!!.') + return + base_dir = self.source_folder subfolder_name = 'ingredients' output_dir = os.path.join(base_dir, 'output') @@ -145,34 +132,30 @@ def merge_folders(self): QMessageBox.warning(self, 'Error', f'The selected source folder does not exist: {base_dir}') return - # Setup and show the progress dialog - - self.progress_dialog=QProgressDialog("Merging Folders...","Cancel",0,100,self) + self.progress_dialog = QProgressDialog("Merging Folders...", "Cancel", 0, 100, self) self.progress_dialog.setWindowModality(Qt.WindowModality.WindowModal) self.progress_dialog.setAutoClose(True) self.progress_dialog.setValue(0) self.progress_dialog.show() # Start the folder merge thread - self.merge_thread=FolderMergerThread(base_dir,subfolder_name,output_dir) + self.merge_thread = FolderMergerThread(base_dir, subfolder_name, output_dir, username) self.merge_thread.update_progress.connect(self.progress_dialog.setValue) self.merge_thread.task_completed.connect(self.on_task_completed) self.merge_thread.start() def convert_files(self): if not self.source_folder: - QMessageBox.warning(self,'Error','Please select a source folder first') + QMessageBox.warning(self, 'Error', 'Please select a source folder first') return - - output_dir=os.path.join(self.source_folder,'output') + output_dir = os.path.join(self.source_folder, 'output') if not os.path.exists(output_dir): - QMessageBox.warning(self,'Error',f'The output directory doesnot exist') + QMessageBox.warning(self, 'Error', 'The output directory does not exist') return - - self.progress_dialog = QProgressDialog("converting files to mp3...","Cancel",0,0,self) + self.progress_dialog = QProgressDialog("Converting files to MP3...", "Cancel", 0, 0, self) self.progress_dialog.setWindowModality(Qt.WindowModality.WindowModal) self.progress_dialog.setAutoClose(True) self.progress_dialog.setValue(0) @@ -180,16 +163,11 @@ def convert_files(self): self.progress_dialog.setStyleSheet("QProgressBar {min-height: 0px; max-height: 0px;}") - - self.convert_thread = FileconversionThread(output_dir) + self.convert_thread = FileConversionThread(output_dir) self.convert_thread.update_progress.connect(self.progress_dialog.setValue) self.convert_thread.task_completed.connect(self.on_task_completed) self.convert_thread.start() - - - - # Handle the completion of the merge task def on_task_completed(self,message): self.progress_dialog.close() try: @@ -197,8 +175,6 @@ def on_task_completed(self,message): except Exception as e: QMessageBox.critical(self, 'Error',message) - - if __name__ == '__main__': app = QApplication(sys.argv) ex = FolderMergeApp() diff --git a/Folder_merge/merge_all_books.py b/Folder_merge/merge_all_books.py old mode 100644 new mode 100755 index ac39f2f..d47890b --- a/Folder_merge/merge_all_books.py +++ b/Folder_merge/merge_all_books.py @@ -67,7 +67,7 @@ def copy_files(src, dest): # To count chapters in a specific book def count_chapters(prefix, book, output_dir): - luk_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}/{book}') + luk_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}/ingredients/{book}') if not os.path.exists(luk_dir): return 0 chapters = [chapter for chapter in os.listdir(luk_dir) if os.path.isdir(os.path.join(luk_dir, chapter))] @@ -77,7 +77,7 @@ def count_chapters(prefix, book, output_dir): # To count files in a specific chapter def count_files_in_chapter(prefix, book, chapterno, output_dir): - chapter_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}/{book}/{chapterno}') + chapter_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}/ingredients/{book}/{chapterno}') if not os.path.exists(chapter_dir): return 0 files = [file for file in os.listdir(chapter_dir) if os.path.isfile(os.path.join(chapter_dir, file))] @@ -104,15 +104,17 @@ def check_for_duplicates(prefix, subfolder_name, dirs_with_prefix): return duplicates # To merge folders based on unique prefixes +target_base_dir = None def merge_folders(base_dir, subfolder_name, output_dir): + global target_base_dir print(base_dir, subfolder_name) merge_results = [] unique_prefixes = find_unique_prefixes(base_dir) chapter_counts = {prefix: 0 for prefix in unique_prefixes} for prefix in unique_prefixes: - target_base_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}') + target_base_dir = os.path.join(output_dir, f'Merged_without_conversion/{prefix}/ingredients') if not os.path.exists(target_base_dir): os.makedirs(target_base_dir) @@ -162,7 +164,7 @@ def merge_folders(base_dir, subfolder_name, output_dir): print("Files merged successfully!") for prefix in unique_prefixes: - for book in find_book(os.path.join(output_dir, f'Merged_without_conversion/{prefix}')): + for book in find_book(os.path.join(output_dir, f'Merged_without_conversion/{prefix}/ingredients')): chapters = count_chapters(prefix, book, output_dir) total_chapters = len(chapters) merge_results.append(f"{prefix} - {book}: {total_chapters} chapters") @@ -180,11 +182,11 @@ def merge_folders(base_dir, subfolder_name, output_dir): #merge JSON files. -def merge_json_files(base_dir,outputdir,output_filename): +def merge_json_files(base_dir,outputdir,userNamedata,output_filename): print('Merging json files') #print(outputdir) - temp_userName = [] + #temp_userName = [] temp_currentscope = [] c_scope_merged_dict = {} temp_localizedNames = [] @@ -204,8 +206,8 @@ def merge_json_files(base_dir,outputdir,output_filename): tempjson = data1 userName = data1['meta']['generator']['userName'] print(userName) - if userName not in temp_userName: - temp_userName.append(userName) + #if userName not in temp_userName: + # temp_userName.append(userName) currentScope =data1['type']['flavorType']['currentScope'] temp_currentscope.append(currentScope) @@ -242,12 +244,15 @@ def merge_json_files(base_dir,outputdir,output_filename): localizedNames_merged_dict["localizedNames"][key] = value #print(ingredients_merged_dict) - tempjson['meta']['generator']['userName'] = temp_userName + #tempjson['meta']['generator']['userName'] = temp_userName + tempjson['meta']['generator']['userName'] = userNamedata tempjson['localizedNames'] = localizedNames_merged_dict['localizedNames'] tempjson['type']['flavorType']['currentScope'] = c_scope_merged_dict tempjson['ingredients'] = ingredients_merged_dict['ingredients'] - filepath_out = f'{outputdir}/{output_filename}' + #filepath_out = f'{outputdir}/{output_filename}' + ingredients_level_path = os.path.join(target_base_dir, '..') # Moves one level up from 'ingredients' + filepath_out = f'{ingredients_level_path}/{output_filename}' with open(filepath_out, 'w') as file1: json.dump(tempjson, file1, indent=4) @@ -258,7 +263,7 @@ def merge_json_files(base_dir,outputdir,output_filename): # To convert files to mp3 def convert_to_mp3(output_dir): - merged_dir = os.path.join(output_dir, "Merged_without_conversion") + merged_dir = os.path.join(output_dir, "Merged_without_conversion", "ingredients") converted_dir = os.path.join(output_dir, "Merged and Converted") for root, dirs, files in os.walk(merged_dir): for file in files: