File size: 4,761 Bytes
772b344
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

import os
import shutil
import random
import gradio as gr
from modules.utils.file_utils import _get_all_image_paths

def apply_renaming_from_configlist(progress=gr.Progress(), folder_paths_str="", configlist_file="", renaming_type="Rastgele"):
    """Liste dosyasından rastgele isim seçip dosyaları adlandırır."""
    folder_paths = [p.strip() for p in folder_paths_str.split('\n') if p.strip()]
    if not folder_paths: return "⚠️ Klasör yolu girin.", gr.update(value="⚠️ İptal.", visible=True)
    if not configlist_file or not os.path.exists(configlist_file): return "❌ Liste dosyası seçilmedi.", gr.update(value="❌ Hata.", visible=True)

    try:
        with open(configlist_file, 'r', encoding='utf-8') as f: name_list = [line.strip() for line in f if line.strip()]
    except Exception as e: return f"❌ Dosya okuma hatası: {e}", gr.update(value="❌ Hata.", visible=True)

    if not name_list: return "⚠️ Liste boş.", gr.update(value="⚠️ İptal.", visible=True)

    output_messages = ["ℹ️ Liste bazlı adlandırma başladı."]
    renamed_count = 0
    all_image_paths = _get_all_image_paths(folder_paths)
    total = len(all_image_paths)
    
    if total == 0: return "⚠️ Resim bulunamadı.", gr.update(value="⚠️ Resim Yok.", visible=True)

    # İsim listesini karıştır (Rastgele mod ise)
    if renaming_type == "Rastgele": random.shuffle(name_list)
    
    # Yeterli isim var mı?
    if len(name_list) < total: output_messages.append("⚠️ Uyarı: İsim listesi dosya sayısından az, bazıları tekrar edebilir veya işlenmeyebilir.")

    for i, file_path in enumerate(all_image_paths):
        if i >= len(name_list): break # İsim bitti
        filename = os.path.basename(file_path)
        progress((i / total), desc=f"Adlandırılıyor: {filename}")
        
        ext = os.path.splitext(filename)[1]
        new_base = name_list[i].replace(' ', '_').replace(',', '_')
        new_name = f"{new_base}{ext}"
        new_path = os.path.join(os.path.dirname(file_path), new_name)
        
        if file_path != new_path:
            try:
                shutil.move(file_path, new_path)
                renamed_count += 1
            except Exception as e: output_messages.append(f"❌ Hata ({filename}): {e}")

    return "\n".join(output_messages), gr.update(value=f"✅ {renamed_count} dosya adlandırıldı.", visible=True)

def apply_custom_renaming(progress=gr.Progress(), folder_paths_str: str="", pattern: str="", start_number: int=1, digit_count: int=3):
    """

    Dosyaları şablon + numara mantığıyla adlandırır.

    Pattern içinde {Number} olmalıdır. Örn: "Adoptable {Number}"

    """
    folder_paths = [p.strip() for p in folder_paths_str.split('\n') if p.strip()]
    if not folder_paths: return "⚠️ Klasör yolu girin.", gr.update(value="⚠️ İptal.", visible=True)
    if not pattern or "{Number}" not in pattern: return "❌ Şablon '{Number}' içermelidir!", gr.update(value="❌ Hatalı Şablon.", visible=True)

    renamed_count = 0
    curr_num = int(start_number)
    output_messages = [f"ℹ️ Şablonlu adlandırma: '{pattern}', Başlangıç: {curr_num}"]
    
    # Her klasör için ayrı işlem (Sıralamayı korumak için)
    for folder in folder_paths:
        if not os.path.isdir(folder): continue
        images = [f for f in os.listdir(folder) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.webp'))]
        images.sort() # İsme göre sırala
        
        if not images: continue
        
        for i, img_name in enumerate(images):
            progress(0, desc=f"Adlandırılıyor: {img_name}") # Basit progress
            
            ext = os.path.splitext(img_name)[1]
            num_str = str(curr_num).zfill(int(digit_count))
            new_base = pattern.replace("{Number}", num_str).strip()
            new_name = f"{new_base}{ext}"
            
            old_path = os.path.join(folder, img_name)
            new_path = os.path.join(folder, new_name)
            
            if old_path != new_path:
                try:
                    if os.path.exists(new_path) and old_path.lower() != new_path.lower():
                        output_messages.append(f"⚠️ Çakışma: '{new_name}' zaten var. Atlandı.")
                    else:
                        shutil.move(old_path, new_path)
                        renamed_count += 1
                except Exception as e: output_messages.append(f"❌ Hata ({img_name}): {e}")
            
            curr_num += 1

    return "\n".join(output_messages), gr.update(value=f"✅ {renamed_count} dosya adlandırıldı. Son No: {curr_num-1}", visible=True)