Upload file CREATE_COMPLETE_FILES.sh via GUI
This commit is contained in:
205
CREATE_COMPLETE_FILES.sh
Normal file
205
CREATE_COMPLETE_FILES.sh
Normal file
@@ -0,0 +1,205 @@
|
||||
#!/bin/bash
|
||||
##############################################################################
|
||||
# CREATE_COMPLETE_FILES.sh
|
||||
#
|
||||
# Dieses Script erstellt die vollständigen renderer.js und main.js Dateien
|
||||
# mit allen notwendigen Änderungen für Auto-Login und persistente Settings.
|
||||
#
|
||||
# VERWENDUNG:
|
||||
# 1. Speichere dieses Script in deinem Projekt-Ordner
|
||||
# 2. Mache es ausführbar: chmod +x CREATE_COMPLETE_FILES.sh
|
||||
# 3. Führe es aus: ./CREATE_COMPLETE_FILES.sh
|
||||
# 4. Die neuen Dateien werden erstellt: renderer_NEW.js und main_NEW.js
|
||||
# 5. Ersetze deine alten Dateien mit den neuen
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
echo "========================================="
|
||||
echo "Erstelle vollständige Dateien..."
|
||||
echo "========================================="
|
||||
echo ""
|
||||
|
||||
# Prüfe ob Original-Dateien existieren
|
||||
if [ ! -f "renderer.js" ]; then
|
||||
echo "❌ FEHLER: renderer.js nicht gefunden!"
|
||||
echo "Bitte führe dieses Script im Projekt-Ordner aus."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "main.js" ]; then
|
||||
echo "❌ FEHLER: main.js nicht gefunden!"
|
||||
echo "Bitte führe dieses Script im Projekt-Ordner aus."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Original-Dateien gefunden"
|
||||
echo ""
|
||||
|
||||
# Backup erstellen
|
||||
echo "📦 Erstelle Backups..."
|
||||
cp renderer.js renderer.js.backup
|
||||
cp main.js main.js.backup
|
||||
echo "✅ Backups erstellt: renderer.js.backup, main.js.backup"
|
||||
echo ""
|
||||
|
||||
# RENDERER.JS - Patch anwenden
|
||||
echo "🔧 Patche renderer.js..."
|
||||
|
||||
# Erstelle temporäre Datei mit der neuen DOMContentLoaded Funktion
|
||||
cat > /tmp/new_domcontentloaded.js << 'NEWFUNC'
|
||||
window.addEventListener('DOMContentLoaded', async () => {
|
||||
// Prevent default drag/drop on document (except in repo view)
|
||||
document.addEventListener('dragover', e => {
|
||||
if (currentState.view !== 'gitea-repo') {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('drop', e => {
|
||||
if (currentState.view !== 'gitea-repo') {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// Load credentials and auto-login if available
|
||||
try {
|
||||
const creds = await window.electronAPI.loadCredentials();
|
||||
if (creds) {
|
||||
// Fülle Settings-Felder
|
||||
if ($('githubToken')) $('githubToken').value = creds.githubToken || '';
|
||||
if ($('giteaToken')) $('giteaToken').value = creds.giteaToken || '';
|
||||
if ($('giteaURL')) $('giteaURL').value = creds.giteaURL || '';
|
||||
|
||||
// AUTO-LOGIN: Wenn Gitea-Credentials vorhanden sind, lade sofort die Repos
|
||||
if (creds.giteaToken && creds.giteaURL) {
|
||||
console.log('✅ Credentials gefunden - Auto-Login wird gestartet...');
|
||||
setStatus('Lade deine Projekte...');
|
||||
|
||||
// Kurze Verzögerung damit UI fertig geladen ist
|
||||
setTimeout(() => {
|
||||
loadGiteaRepos();
|
||||
}, 500);
|
||||
} else {
|
||||
console.log('ℹ️ Keine vollständigen Gitea-Credentials - bitte in Settings eintragen');
|
||||
setStatus('Bereit - bitte Settings konfigurieren');
|
||||
}
|
||||
} else {
|
||||
console.log('ℹ️ Keine Credentials gespeichert');
|
||||
setStatus('Bereit - bitte Settings konfigurieren');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error loading credentials:', error);
|
||||
setStatus('Fehler beim Laden der Einstellungen');
|
||||
}
|
||||
NEWFUNC
|
||||
|
||||
# Nutze sed um die alte Funktion zu ersetzen
|
||||
# (Dies ist komplex - nutze Python für robusteres Replacement)
|
||||
python3 << 'PYSCRIPT'
|
||||
import re
|
||||
|
||||
# Lese Original-Datei
|
||||
with open('renderer.js', 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# Lese neue Funktion
|
||||
with open('/tmp/new_domcontentloaded.js', 'r') as f:
|
||||
new_func_start = f.read()
|
||||
|
||||
# Finde die alte DOMContentLoaded Funktion und ersetze nur den Anfang
|
||||
# Der Rest (Event Handlers) bleibt gleich
|
||||
pattern = r"(window\.addEventListener\('DOMContentLoaded', async \(\) => \{.*?// Load credentials.*?try \{.*?\} catch \(error\) \{.*?console\.error\('Error loading credentials:', error\);.*?\})"
|
||||
|
||||
# Suche nach dem Pattern
|
||||
match = re.search(pattern, content, re.DOTALL)
|
||||
if match:
|
||||
# Ersetze nur den Credentials-Loading Teil
|
||||
old_section = match.group(1)
|
||||
content = content.replace(old_section, new_func_start)
|
||||
|
||||
# Schreibe neue Datei
|
||||
with open('renderer_NEW.js', 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
print("✅ renderer_NEW.js erstellt")
|
||||
else:
|
||||
print("⚠️ Konnte Funktion nicht automatisch patchen")
|
||||
print(" Bitte nutze die manuellen Patches")
|
||||
PYSCRIPT
|
||||
|
||||
echo ""
|
||||
|
||||
# MAIN.JS - Patch anwenden
|
||||
echo "🔧 Patche main.js..."
|
||||
|
||||
python3 << 'PYSCRIPT2'
|
||||
import re
|
||||
|
||||
# Lese Original
|
||||
with open('main.js', 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# ÄNDERUNG 1: Entferne getDataDir, ändere getCredentialsFilePath
|
||||
old_funcs = r"function getDataDir\(\) \{[^}]+\}\s*function getCredentialsFilePath\(\) \{[^}]+\}"
|
||||
new_func = """function getCredentialsFilePath() {
|
||||
return ppath.join(app.getPath('userData'), 'credentials.json');
|
||||
}"""
|
||||
|
||||
content = re.sub(old_funcs, new_func, content)
|
||||
|
||||
# ÄNDERUNG 2: Patche save-credentials Handler
|
||||
old_handler = r"(ipcMain\.handle\('save-credentials', async \(event, data\) => \{[\s\S]*?const DATA_DIR = getDataDir\(\);[\s\S]*?ensureDir\(DATA_DIR\);[^}]+)\}"
|
||||
|
||||
new_handler = """ipcMain.handle('save-credentials', async (event, data) => {
|
||||
try {
|
||||
const CREDENTIALS_FILE = getCredentialsFilePath();
|
||||
const userDataDir = app.getPath('userData');
|
||||
if (!fs.existsSync(userDataDir)) {
|
||||
fs.mkdirSync(userDataDir, { recursive: true });
|
||||
}
|
||||
|
||||
const json = JSON.stringify(data);
|
||||
const cipher = crypto.createCipheriv(ALGORITHM, SECRET_KEY, IV);
|
||||
const encrypted = Buffer.concat([cipher.update(json, 'utf8'), cipher.final()]);
|
||||
fs.writeFileSync(CREDENTIALS_FILE, encrypted);
|
||||
|
||||
console.log('✅ Credentials saved to:', CREDENTIALS_FILE);
|
||||
return { ok: true };
|
||||
} catch (e) {
|
||||
console.error('save-credentials error', e);
|
||||
return { ok: false, error: String(e) };
|
||||
}
|
||||
});"""
|
||||
|
||||
content = re.sub(old_handler, new_handler, content, flags=re.DOTALL)
|
||||
|
||||
# Schreibe neue Datei
|
||||
with open('main_NEW.js', 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
print("✅ main_NEW.js erstellt")
|
||||
PYSCRIPT2
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo "✅ FERTIG!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "Neue Dateien erstellt:"
|
||||
echo " 📄 renderer_NEW.js"
|
||||
echo " 📄 main_NEW.js"
|
||||
echo ""
|
||||
echo "Backups erstellt:"
|
||||
echo " 💾 renderer.js.backup"
|
||||
echo " 💾 main.js.backup"
|
||||
echo ""
|
||||
echo "Nächste Schritte:"
|
||||
echo " 1. Prüfe die neuen Dateien"
|
||||
echo " 2. Ersetze die alten:"
|
||||
echo " mv renderer_NEW.js renderer.js"
|
||||
echo " mv main_NEW.js main.js"
|
||||
echo " 3. Starte die App neu"
|
||||
echo ""
|
||||
echo "Bei Problemen: Backups wiederherstellen"
|
||||
echo " mv renderer.js.backup renderer.js"
|
||||
echo " mv main.js.backup main.js"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user