diff --git a/main.py b/main.py deleted file mode 100644 index 66e957d..0000000 --- a/main.py +++ /dev/null @@ -1,270 +0,0 @@ -import os -import exifread -import json -import gettext -import tkinter as tk -from PixelfedAPI import * -from tkinter import filedialog, Menu, Toplevel -from PIL import Image, ImageTk, ExifTags -from PIL.ExifTags import TAGS -from PIL.PngImagePlugin import PngImageFile, PngInfo - -class ImageUploaderApp: - def __init__(self, root): - serverURL = self.get_setting_serverURL - serverAccesskey = self.get_setting_accessKey - self.Pixelfed = PixelfedAPI(serverURL, serverAccesskey) - - self.root = root - self.root.title("Pixelfed Uploader") - - self.image_paths = [] - self.current_index = 0 - - self.create_menu() - - self.button_frame = tk.Frame(self.root) - self.prev_button = tk.Button(self.button_frame, text="Previous", command=self.show_previous_image) - self.prev_button.pack(side=tk.LEFT) - self.canvas = tk.Canvas(self.button_frame, width=400, height=400) - self.canvas.pack(side=tk.LEFT) - self.next_button = tk.Button(self.button_frame, text="Next", command=self.show_next_image) - self.next_button.pack(side=tk.RIGHT) - self.button_frame.pack() - - self.description_label = tk.Label(self.root, text="Post Content:") - self.description_label.pack() - - self.description_text = tk.Text(self.root, height=10, wrap=tk.WORD) - self.description_text.pack() - - self.description_length_var = tk.StringVar() - self.description_length_label = tk.Label(self.root, textvariable=self.description_length_var) - self.description_length_label.pack() - - self.description_text.bind("", self.update_description_length) - - self.tag_text_label = tk.Label(self.root, text="Tags:") - self.tag_text_label.pack() - - self.tag_text = tk.Text(self.root, height=5, wrap=tk.WORD) - self.tag_text.pack() - - defaultTags = self.getTags() - self.tag_text.delete("1.0", tk.END) - self.tag_text.insert(tk.END, defaultTags) - - #self.alt_text_label = tk.Label(self.root, text="Alt-Text:") - #self.alt_text_label.pack() - - #self.alt_text = tk.Text(self.root, height=10, wrap=tk.WORD) - #self.alt_text.pack() - - #self.alt_length_var = tk.StringVar() - #self.alt_length_label = tk.Label(self.root, textvariable=self.alt_length_var) - #self.alt_length_label.pack() - - #self.alt_text.bind("", self.update_alt_length) - - self.upload_button = tk.Button(self.root, text="Upload", command=self.upload_image) - self.upload_button.pack() - - self.open_folder() - - def open_folder(self): - self.load_images() - - def create_menu(self): - self.menu_bar = Menu(self.root) - self.root.config(menu=self.menu_bar) - - self.file_menu = Menu(self.menu_bar, tearoff=0) - self.menu_bar.add_cascade(label="File", menu=self.file_menu) - self.file_menu.add_command(label="Open Folder", command=self.load_images) - self.file_menu.add_command(label="Settings", command=self.open_settings) - - def open_settings(self): - settings_window = Toplevel(self.root) - settings_window.title("Settings") - settings_window.geometry("500x250") - - server_url_label = tk.Label(settings_window, text="Server-URL:") - server_url_label.pack() - server_url_entry = tk.Entry(settings_window, width=50) - server_url_entry.pack() - - access_key_label = tk.Label(settings_window, text="API AccessKey:") - access_key_label.pack() - access_key_entry = tk.Entry(settings_window, width=50) - access_key_entry.pack() - - image_folder_label = tk.Label(settings_window, text="Default Folder:") - image_folder_label.pack() - image_folder_entry = tk.Entry(settings_window, width=50) - image_folder_entry.pack() - - enableLogVar = tk.BooleanVar() - enableLog_label = tk.Label(settings_window, text="Log:") - enableLog_label.pack() - enableLog = tk.Checkbutton(settings_window, variable=enableLogVar) - enableLog.pack() - - save_button = tk.Button(settings_window, text="Speichern", command=lambda: self.save_settings(server_url_entry.get(), access_key_entry.get(), image_folder_entry.get(), enableLogVar.get())) - save_button.pack() - - config = self.load_config() - if config: - server_url_entry.insert(0, config.get("server_url", "")) - access_key_entry.insert(0, config.get("access_token", "")) - image_folder_entry.insert(0, config.get("image_path", "")) - - def load_config(self): - try: - with open("config.json", "r") as config_file: - settings = json.load(config_file) - return settings - except FileNotFoundError: - return {} - - def get_config_File(self): - config = self.load_config() - - return config - - def get_setting_serverURL(self): - config = self.get_config_File() - url = config.get("server_url") - - return url - - def get_setting_accessKey(self): - config = self.get_config_File() - accessToken = config.get("access_token") - - return accessToken - - def get_setting_imageFolder(self): - config = self.get_config_File() - imagedir = config.get("image_path") - - return imagedir - - def get_setting_log(self): - config = self.get_config_File() - isLogEnable = config.get("log") - - return isLogEnable - - def save_settings(self, server_url, access_key, image_path, log=False): - settings = { - "server_url": server_url, - "access_token": access_key, - "image_path": image_path, - "log": log - } - - with open("config.json", "w") as config_file: - json.dump(settings, config_file) - - print("Settings have been saved.") - - def update_description_length(self, event): - description = self.description_text.get("1.0", tk.END) - description_length = len(description) - self.description_length_var.set(f"({description_length})") - - def update_alt_length(self, event): - alt = self.alt_text.get("1.0", tk.END) - alt_length = len(alt) - self.alt_length_var.set(f"({alt_length})") - - def load_images(self): - imagedir = self.get_setting_imageFolder() - if not imagedir: - folder_path = filedialog.askdirectory() - else: - folder_path = imagedir - - if folder_path: - self.image_paths = [os.path.join(folder_path, filename) for filename in os.listdir(folder_path) if filename.lower().endswith(('.jpg', '.jpeg'))] - self.current_index = 0 - self.show_current_image() - - def show_current_image(self): - if self.image_paths: - image_path = self.image_paths[self.current_index] - image = Image.open(image_path) - image.thumbnail((400, 400)) - photo = ImageTk.PhotoImage(image) - self.canvas.create_image(0, 0, anchor=tk.NW, image=photo) - self.canvas.image = photo - - description = self.getItemDescription(image_path) - self.description_text.delete("1.0", tk.END) - self.description_text.insert(tk.END, description) - - def getItemDescription(self, filename): - type = Image.open(filename) - - exif_tags = open(filename, 'rb') - tags = exifread.process_file(exif_tags) - - exif_array = [] - - if type.format != "PNG": - for i in tags: - compile = i, str(tags[i]) - exif_array.append(compile) - - if type.format == "PNG": - image = PngImageFile(filename) - metadata = PngInfo() - - for i in image.text: - compile = i, str(image.text[i]) - exif_array.append(compile) - - Description = exif_array[0][1] - return Description - - def getTags(self): - try: - file = open('tags.txt','r') - fileContent = file.read() - file.close - return fileContent - except Exception as e: - print("Error reading File:", e) - return "" - - def show_previous_image(self): - if self.image_paths: - self.current_index = (self.current_index - 1) % len(self.image_paths) - self.show_current_image() - - def show_next_image(self): - if self.image_paths: - self.current_index = (self.current_index + 1) % len(self.image_paths) - self.show_current_image() - - def upload_image(self): - description = self.description_text.get("1.0", tk.END) - description = description + self.tag_text.get("1.0", tk.END) - #alt_text = self.alt_text.get("1.0", tk.END) - selected_image_path = self.image_paths[self.current_index] - - media = self.Pixelfed.mediaUpload(selected_image_path) - if media: - mediaID = media.get("id") - #self.Pixelfed.createNewPost(mediaID, description, alt_text) - self.Pixelfed.createNewPost(mediaID, description) - - print("Post created:") - print("Content:", description) - #print("Alt-Text:", alt_text) - print("Image:", selected_image_path) - -if __name__ == "__main__": - root = tk.Tk() - app = ImageUploaderApp(root) - root.mainloop()