gitxelectron 1.1.9 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23912,7 +23912,27 @@ const translations = {
23912
23912
  commitMessagePlaceholder: "Enter commit message...",
23913
23913
  success: "Success",
23914
23914
  error: "Error",
23915
- aiFixFailed: "AI auto-heal failed. Please fix conflicts manually."
23915
+ aiFixFailed: "AI auto-heal failed. Please fix conflicts manually.",
23916
+ enableSpaceScene: "Enable Space Scene",
23917
+ spaceSceneDesc: "Show live events and games on lockscreens",
23918
+ changeLockscreenPin: "Change Lockscreen PIN",
23919
+ changePinDesc: "Set a new 3-character PIN for your lockscreen",
23920
+ savePin: "Save PIN",
23921
+ saved: "Saved!",
23922
+ githubAccounts: "GitHub Accounts",
23923
+ manageAccounts: "Manage your authenticated accounts",
23924
+ addAccount: "+ Add Account",
23925
+ noAccountsLinked: "No accounts linked yet.",
23926
+ logout: "Logout",
23927
+ logoutDesc: "Sign out of all GitHub accounts on this device",
23928
+ signOut: "Sign Out",
23929
+ newWindow: "New Window",
23930
+ universalPush: "Universal Push",
23931
+ collaborationRepo: "Collaboration Repo",
23932
+ localPath: "LOCAL PATH",
23933
+ repositorySetup: "Repository Setup",
23934
+ commitHistory: "Commit History",
23935
+ syncedFromGithub: "Synced automatically from your GitHub Account"
23916
23936
  },
23917
23937
  es: {
23918
23938
  settings: "Configuración",
@@ -23938,7 +23958,27 @@ const translations = {
23938
23958
  commitMessagePlaceholder: "Escriba el mensaje de confirmación...",
23939
23959
  success: "Éxito",
23940
23960
  error: "Error",
23941
- aiFixFailed: "La autoreparación de IA falló. Por favor solucione los conflictos manualmente."
23961
+ aiFixFailed: "La autoreparación de IA falló. Por favor solucione los conflictos manualmente.",
23962
+ enableSpaceScene: "Habilitar Escena Espacial",
23963
+ spaceSceneDesc: "Mostrar eventos en vivo y juegos en pantallas de bloqueo",
23964
+ changeLockscreenPin: "Cambiar PIN de Pantalla de Bloqueo",
23965
+ changePinDesc: "Establezca un nuevo PIN de 3 caracteres",
23966
+ savePin: "Guardar PIN",
23967
+ saved: "¡Guardado!",
23968
+ githubAccounts: "Cuentas de GitHub",
23969
+ manageAccounts: "Administre sus cuentas autenticadas",
23970
+ addAccount: "+ Agregar Cuenta",
23971
+ noAccountsLinked: "No hay cuentas vinculadas aún.",
23972
+ logout: "Cerrar Sesión",
23973
+ logoutDesc: "Cerrar sesión de todas las cuentas de GitHub en este dispositivo",
23974
+ signOut: "Desconectar",
23975
+ newWindow: "Nueva Ventana",
23976
+ universalPush: "Push Universal",
23977
+ collaborationRepo: "Repo de Colaboración",
23978
+ localPath: "RUTA LOCAL",
23979
+ repositorySetup: "Configuración de Repositorio",
23980
+ commitHistory: "Historial de Commits",
23981
+ syncedFromGithub: "Sincronizado automáticamente desde su cuenta de GitHub"
23942
23982
  },
23943
23983
  pt: {
23944
23984
  settings: "Configurações",
@@ -23964,7 +24004,27 @@ const translations = {
23964
24004
  commitMessagePlaceholder: "Digite a mensagem de confirmação...",
23965
24005
  success: "Sucesso",
23966
24006
  error: "Erro",
23967
- aiFixFailed: "A cura automática de IA falhou. Corrija os conflitos manualmente."
24007
+ aiFixFailed: "A cura automática de IA falhou. Corrija os conflitos manualmente.",
24008
+ enableSpaceScene: "Habilitar Cena Espacial",
24009
+ spaceSceneDesc: "Mostrar eventos ao vivo e jogos na tela de bloqueio",
24010
+ changeLockscreenPin: "Alterar PIN da Tela de Bloqueio",
24011
+ changePinDesc: "Defina um novo PIN de 3 caracteres",
24012
+ savePin: "Salvar PIN",
24013
+ saved: "Salvo!",
24014
+ githubAccounts: "Contas do GitHub",
24015
+ manageAccounts: "Gerencie suas contas autenticadas",
24016
+ addAccount: "+ Adicionar Conta",
24017
+ noAccountsLinked: "Nenhuma conta vinculada ainda.",
24018
+ logout: "Sair",
24019
+ logoutDesc: "Sair de todas as contas do GitHub neste dispositivo",
24020
+ signOut: "Desconectar",
24021
+ newWindow: "Nova Janela",
24022
+ universalPush: "Push Universal",
24023
+ collaborationRepo: "Repositório de Colaboração",
24024
+ localPath: "CAMINHO LOCAL",
24025
+ repositorySetup: "Configuração do Repositório",
24026
+ commitHistory: "Histórico de Commits",
24027
+ syncedFromGithub: "Sincronizado automaticamente da sua conta do GitHub"
23968
24028
  },
23969
24029
  fr: {
23970
24030
  settings: "Paramètres",
@@ -23990,7 +24050,27 @@ const translations = {
23990
24050
  commitMessagePlaceholder: "Entrez le message de validation...",
23991
24051
  success: "Succès",
23992
24052
  error: "Erreur",
23993
- aiFixFailed: "L'auto-réparation a échoué. Veuillez corriger les conflits manuellement."
24053
+ aiFixFailed: "L'auto-réparation a échoué. Veuillez corriger les conflits manuellement.",
24054
+ enableSpaceScene: "Activer la scène spatiale",
24055
+ spaceSceneDesc: "Afficher les événements en direct sur les écrans de verrouillage",
24056
+ changeLockscreenPin: "Modifier le code PIN",
24057
+ changePinDesc: "Définissez un nouveau code PIN à 3 caractères",
24058
+ savePin: "Enregistrer PIN",
24059
+ saved: "Enregistré !",
24060
+ githubAccounts: "Comptes GitHub",
24061
+ manageAccounts: "Gérez vos comptes authentifiés",
24062
+ addAccount: "+ Ajouter un compte",
24063
+ noAccountsLinked: "Aucun compte lié pour le moment.",
24064
+ logout: "Déconnexion",
24065
+ logoutDesc: "Se déconnecter de tous les comptes GitHub sur cet appareil",
24066
+ signOut: "Se déconnecter",
24067
+ newWindow: "Nouvelle fenêtre",
24068
+ universalPush: "Push Universel",
24069
+ collaborationRepo: "Dépôt de collaboration",
24070
+ localPath: "CHEMIN LOCAL",
24071
+ repositorySetup: "Configuration du dépôt",
24072
+ commitHistory: "Historique des commits",
24073
+ syncedFromGithub: "Synchronisé automatiquement depuis votre compte GitHub"
23994
24074
  },
23995
24075
  ro: {
23996
24076
  settings: "Setări",
@@ -24016,7 +24096,27 @@ const translations = {
24016
24096
  commitMessagePlaceholder: "Introduceți mesajul de confirmare...",
24017
24097
  success: "Succes",
24018
24098
  error: "Eroare",
24019
- aiFixFailed: "Auto-repararea IA a eșuat. Vă rugăm să reparați manual conflictele."
24099
+ aiFixFailed: "Auto-repararea IA a eșuat. Vă rugăm să reparați manual conflictele.",
24100
+ enableSpaceScene: "Activează scena spațială",
24101
+ spaceSceneDesc: "Afișează evenimente live și jocuri pe ecranele de blocare",
24102
+ changeLockscreenPin: "Schimbă PIN-ul ecranului",
24103
+ changePinDesc: "Setează un nou PIN de 3 caractere",
24104
+ savePin: "Salvează PIN",
24105
+ saved: "Salvat!",
24106
+ githubAccounts: "Conturi GitHub",
24107
+ manageAccounts: "Gestionează conturile autentificate",
24108
+ addAccount: "+ Adaugă cont",
24109
+ noAccountsLinked: "Niciun cont conectat încă.",
24110
+ logout: "Deconectare",
24111
+ logoutDesc: "Deconectați-vă de la toate conturile GitHub pe acest dispozitiv",
24112
+ signOut: "Ieșire",
24113
+ newWindow: "Fereastră nouă",
24114
+ universalPush: "Push Universal",
24115
+ collaborationRepo: "Repo de colaborare",
24116
+ localPath: "CALE LOCALĂ",
24117
+ repositorySetup: "Configurare depozit",
24118
+ commitHistory: "Istoric confirmări",
24119
+ syncedFromGithub: "Sincronizat automat din contul tău GitHub"
24020
24120
  },
24021
24121
  hi: {
24022
24122
  settings: "सेटिंग्स",
@@ -24042,7 +24142,27 @@ const translations = {
24042
24142
  commitMessagePlaceholder: "कमिट संदेश दर्ज करें...",
24043
24143
  success: "सफलता",
24044
24144
  error: "त्रुटि",
24045
- aiFixFailed: "AI ऑटो-हील विफल रहा। कृपया विवादों को मैन्युअल रूप से ठीक करें।"
24145
+ aiFixFailed: "AI ऑटो-हील विफल रहा। कृपया विवादों को मैन्युअल रूप से ठीक करें।",
24146
+ enableSpaceScene: "स्पेस सीन सक्षम करें",
24147
+ spaceSceneDesc: "लॉकस्क्रीन पर लाइव इवेंट और गेम दिखाएं",
24148
+ changeLockscreenPin: "लॉकस्क्रीन पिन बदलें",
24149
+ changePinDesc: "लॉकस्क्रीन के लिए नया 3-वर्ण का पिन सेट करें",
24150
+ savePin: "पिन सहेजें",
24151
+ saved: "सहेजा गया!",
24152
+ githubAccounts: "गिटहब अकाउंट्स",
24153
+ manageAccounts: "अपने प्रमाणित खातों को प्रबंधित करें",
24154
+ addAccount: "+ खाता जोड़ें",
24155
+ noAccountsLinked: "अभी तक कोई खाता लिंक नहीं किया गया है।",
24156
+ logout: "लॉग आउट",
24157
+ logoutDesc: "इस डिवाइस के सभी गिटहब खातों से साइन आउट करें",
24158
+ signOut: "साइन आउट",
24159
+ newWindow: "नई विंडो",
24160
+ universalPush: "यूनिवर्सल पुश",
24161
+ collaborationRepo: "कोलैबोरेशन रेपो",
24162
+ localPath: "लोकल पाथ",
24163
+ repositorySetup: "रिपॉजिटरी सेटअप",
24164
+ commitHistory: "कमिट इतिहास",
24165
+ syncedFromGithub: "आपके गिटहब खाते से स्वचालित रूप से सिंक किया गया"
24046
24166
  },
24047
24167
  bn: {
24048
24168
  settings: "সেটিংস",
@@ -24068,7 +24188,27 @@ const translations = {
24068
24188
  commitMessagePlaceholder: "কমিট মেসেজ লিখুন...",
24069
24189
  success: "সফলতা",
24070
24190
  error: "ত্রুটি",
24071
- aiFixFailed: "AI অটো-হিল ব্যর্থ হয়েছে। অনুগ্রহ করে নিজে সংঘাতগুলি ঠিক করুন।"
24191
+ aiFixFailed: "AI অটো-হিল ব্যর্থ হয়েছে। অনুগ্রহ করে নিজে সংঘাতগুলি ঠিক করুন।",
24192
+ enableSpaceScene: "স্পেস সিন চালু করুন",
24193
+ spaceSceneDesc: "লকস্ক্রিনে লাইভ ইভেন্ট এবং গেম দেখান",
24194
+ changeLockscreenPin: "লকস্ক্রিন পিন পরিবর্তন করুন",
24195
+ changePinDesc: "লকস্ক্রিনের জন্য একটি নতুন ৩-অক্ষরের পিন সেট করুন",
24196
+ savePin: "পিন সেভ করুন",
24197
+ saved: "সংরক্ষিত!",
24198
+ githubAccounts: "গিটহাব অ্যাকাউন্টসমূহ",
24199
+ manageAccounts: "আপনার যাচাইকৃত অ্যাকাউন্টগুলি পরিচালনা করুন",
24200
+ addAccount: "+ অ্যাকাউন্ট যোগ করুন",
24201
+ noAccountsLinked: "এখনও কোনো অ্যাকাউন্ট লিঙ্ক করা হয়নি।",
24202
+ logout: "লগআউট",
24203
+ logoutDesc: "এই ডিভাইসের সমস্ত গিটহাব অ্যাকাউন্ট থেকে সাইন আউট করুন",
24204
+ signOut: "সাইন আউট",
24205
+ newWindow: "নতুন উইন্ডো",
24206
+ universalPush: "ইউনিভার্সাল পুশ",
24207
+ collaborationRepo: "কোলাবোরেশন রিপো",
24208
+ localPath: "লোকাল পাথ",
24209
+ repositorySetup: "রিপোজিটরি সেটআপ",
24210
+ commitHistory: "কমিট ইতিহাস",
24211
+ syncedFromGithub: "আপনার গিটহাব অ্যাকাউন্ট থেকে স্বয়ংক্রিয়ভাবে সিঙ্ক করা হয়েছে"
24072
24212
  },
24073
24213
  te: {
24074
24214
  settings: "సెట్టింగులు",
@@ -24094,7 +24234,27 @@ const translations = {
24094
24234
  commitMessagePlaceholder: "కమిట్ సందేశాన్ని నమోదు చేయండి...",
24095
24235
  success: "విజయం",
24096
24236
  error: "లోపం",
24097
- aiFixFailed: "AI ఆటో-హీల్ విఫలమైంది. దయచేసి సమస్యలను మీరే పరిష్కరించండి."
24237
+ aiFixFailed: "AI ఆటో-హీల్ విఫలమైంది. దయచేసి సమస్యలను మీరే పరిష్కరించండి.",
24238
+ enableSpaceScene: "స్పేస్ సీన్‌ని ప్రారంభించండి",
24239
+ spaceSceneDesc: "లాక్‌స్క్రీన్‌లలో లైవ్ ఈవెంట్‌లు మరియు గేమ్‌లను చూపించు",
24240
+ changeLockscreenPin: "లాక్‌స్క్రీన్ PIN ని మార్చండి",
24241
+ changePinDesc: "లాక్‌స్క్రీన్ కోసం కొత్త 3-అక్షరాల PIN ని సెట్ చేయండి",
24242
+ savePin: "PIN సేవ్ చేయి",
24243
+ saved: "సేవ్ చేయబడింది!",
24244
+ githubAccounts: "GitHub ఖాతాలు",
24245
+ manageAccounts: "మీ ఖాతాలను నిర్వహించండి",
24246
+ addAccount: "+ ఖాతాను జోడించు",
24247
+ noAccountsLinked: "ఇంకా ఖాతాలు లింక్ చేయబడలేదు.",
24248
+ logout: "లాగ్అవుట్",
24249
+ logoutDesc: "ఈ పరికరంలో అన్ని GitHub ఖాతాల నుండి సైన్ అవుట్ చేయండి",
24250
+ signOut: "సైన్ అవుట్",
24251
+ newWindow: "కొత్త విండో",
24252
+ universalPush: "యూనివర్సల్ పుష్",
24253
+ collaborationRepo: "సహకార రెపో",
24254
+ localPath: "స్థానిక మార్గం",
24255
+ repositorySetup: "రిపోజిటరీ సెటప్",
24256
+ commitHistory: "కమిట్ చరిత్ర",
24257
+ syncedFromGithub: "మీ GitHub ఖాతా నుండి స్వయంచాలకంగా సమకాలీకరించబడింది"
24098
24258
  },
24099
24259
  ta: {
24100
24260
  settings: "அமைப்புகள்",
@@ -24120,7 +24280,27 @@ const translations = {
24120
24280
  commitMessagePlaceholder: "Commit செய்தியை உள்ளிடவும்...",
24121
24281
  success: "வெற்றி",
24122
24282
  error: "பிழை",
24123
- aiFixFailed: "AI தானியங்கி சரிசெய்தல் தோல்வியடைந்தது. முரண்பாடுகளை நீங்களே சரிசெய்யவும்."
24283
+ aiFixFailed: "AI தானியங்கி சரிசெய்தல் தோல்வியடைந்தது. முரண்பாடுகளை நீங்களே சரிசெய்யவும்.",
24284
+ enableSpaceScene: "விண்வெளி காட்சியை இயக்கு",
24285
+ spaceSceneDesc: "பூட்டுத் திரைகளில் நேரடி நிகழ்வுகள் மற்றும் கேம்களைக் காட்டு",
24286
+ changeLockscreenPin: "பூட்டுத் திரை PIN ஐ மாற்றவும்",
24287
+ changePinDesc: "உங்கள் பூட்டுத் திரைக்கு புதிய 3 எழுத்து PIN ஐ அமைக்கவும்",
24288
+ savePin: "PIN ஐ சேமி",
24289
+ saved: "சேமிக்கப்பட்டது!",
24290
+ githubAccounts: "GitHub கணக்குகள்",
24291
+ manageAccounts: "உங்கள் அங்கீகரிக்கப்பட்ட கணக்குகளை நிர்வகிக்கவும்",
24292
+ addAccount: "+ கணக்கைச் சேர்",
24293
+ noAccountsLinked: "இன்னும் கணக்குகள் இணைக்கப்படவில்லை.",
24294
+ logout: "வெளியேறு",
24295
+ logoutDesc: "இந்தச் சாதனத்தில் உள்ள அனைத்து GitHub கணக்குகளிலிருந்தும் வெளியேறவும்",
24296
+ signOut: "வெளியேறு",
24297
+ newWindow: "புதிய சாளரம்",
24298
+ universalPush: "யுனிவர்சல் புஷ்",
24299
+ collaborationRepo: "ஒத்துழைப்பு ரெப்போ",
24300
+ localPath: "உள்ளூர் பாதை",
24301
+ repositorySetup: "களஞ்சிய அமைப்பு",
24302
+ commitHistory: "Commit வரலாறு",
24303
+ syncedFromGithub: "உங்கள் GitHub கணக்கிலிருந்து தானாக ஒத்திசைக்கப்பட்டது"
24124
24304
  }
24125
24305
  };
24126
24306
  const LANGUAGES = [
@@ -24433,6 +24613,7 @@ function App() {
24433
24613
  const [autoSyncLogs, setAutoSyncLogs] = reactExports.useState([]);
24434
24614
  const [showAutoSyncLogs, setShowAutoSyncLogs] = reactExports.useState(false);
24435
24615
  const [isRefreshing, setIsRefreshing] = reactExports.useState(false);
24616
+ const refreshLockRef = reactExports.useRef(false);
24436
24617
  const [showWelcomeWizard, setShowWelcomeWizard] = reactExports.useState(false);
24437
24618
  const [newPin, setNewPin] = reactExports.useState("");
24438
24619
  const [pinChangeSuccess, setPinChangeSuccess] = reactExports.useState(false);
@@ -24597,7 +24778,7 @@ function App() {
24597
24778
  if (isRepo && repoPath) {
24598
24779
  interval = setInterval(() => {
24599
24780
  refreshRepoState();
24600
- }, 3e4);
24781
+ }, 12e4);
24601
24782
  }
24602
24783
  return () => {
24603
24784
  if (interval) clearInterval(interval);
@@ -24763,6 +24944,8 @@ function App() {
24763
24944
  }
24764
24945
  };
24765
24946
  const refreshRepoState = async () => {
24947
+ if (refreshLockRef.current) return;
24948
+ refreshLockRef.current = true;
24766
24949
  setIsRefreshing(true);
24767
24950
  try {
24768
24951
  setErrorMsg("");
@@ -24776,28 +24959,6 @@ function App() {
24776
24959
  setDeletedHistory(dh);
24777
24960
  } catch (err) {
24778
24961
  }
24779
- try {
24780
- const b = await window.api.getBranches();
24781
- setBranches(b);
24782
- const updatedStatus = await window.api.getStatus();
24783
- setStatus(updatedStatus);
24784
- if (autoSyncEnabled && updatedStatus.behind > 0) {
24785
- const remotes2 = await window.api.getRemotes();
24786
- if (remotes2.length > 0) {
24787
- try {
24788
- showToast(`Auto-Push: Downloading ${updatedStatus.behind} remote change(s)...`, "info");
24789
- await window.api.pullFromRemote(remotes2[0].name, b.current);
24790
- showToast("Auto-Push: Successfully synchronized remote changes!", "success");
24791
- const finalStatus = await window.api.getStatus();
24792
- setStatus(finalStatus);
24793
- } catch (e) {
24794
- console.error("Auto-Push Pull failed:", e);
24795
- }
24796
- }
24797
- }
24798
- } catch (e) {
24799
- setBranches({ current: "No commits yet", all: [] });
24800
- }
24801
24962
  const auth = await window.api.getAuthStatus();
24802
24963
  setAuthStatus(auth);
24803
24964
  const accs = await window.api.getAccounts();
@@ -24829,32 +24990,58 @@ function App() {
24829
24990
  } else {
24830
24991
  setRemoteUrl(null);
24831
24992
  }
24832
- if (auth.status === "Verified") {
24833
- if (remotes.length > 0) {
24834
- const remoteUrl2 = remotes[0].refs.push;
24835
- const hasPerm = await window.api.verifyPushPermission(remoteUrl2);
24836
- setPushPermission(hasPerm);
24837
- try {
24838
- const invs = await window.api.getUserInvitations();
24839
- setInvitations(invs || []);
24840
- } catch (e) {
24841
- console.error("Failed to fetch invitations", e);
24993
+ const deferredRemotes = remotes;
24994
+ (async () => {
24995
+ try {
24996
+ const b = await window.api.getBranches();
24997
+ setBranches(b);
24998
+ const updatedStatus = await window.api.getStatus();
24999
+ setStatus(updatedStatus);
25000
+ if (autoSyncEnabled && updatedStatus.behind > 0) {
25001
+ if (deferredRemotes.length > 0) {
25002
+ try {
25003
+ showToast(`Auto-Push: Downloading ${updatedStatus.behind} remote change(s)...`, "info");
25004
+ await window.api.pullFromRemote(deferredRemotes[0].name, b.current);
25005
+ showToast("Auto-Push: Successfully synchronized remote changes!", "success");
25006
+ const finalStatus = await window.api.getStatus();
25007
+ setStatus(finalStatus);
25008
+ } catch (e) {
25009
+ console.error("Auto-Push Pull failed:", e);
25010
+ }
25011
+ }
24842
25012
  }
24843
- try {
24844
- const collabData = await window.api.getCollaborators(remoteUrl2);
24845
- setRepoCollaborators(collabData.collaborators || []);
24846
- if (remoteUrl2 && repoPath) {
24847
- const cleaned = remoteUrl2.replace("https://github.com/", "").replace(/\.git$/, "");
24848
- saveMapping(cleaned, repoPath);
25013
+ } catch (e) {
25014
+ setBranches({ current: "No commits yet", all: [] });
25015
+ }
25016
+ })();
25017
+ if (auth.status === "Verified") {
25018
+ if (deferredRemotes.length > 0) {
25019
+ const remoteUrl2 = deferredRemotes[0].refs.push;
25020
+ (async () => {
25021
+ try {
25022
+ const hasPerm = await window.api.verifyPushPermission(remoteUrl2);
25023
+ setPushPermission(hasPerm);
25024
+ } catch (e) {
25025
+ console.error("Failed to verify push permission", e);
24849
25026
  }
24850
- if (collabData.collaborators?.length > 1 || collabData.invitations?.length > 0) {
24851
- window.api.getCollaboratedRepos().then((repos) => setCollaboratedRepos(repos || [])).catch(() => {
24852
- });
25027
+ try {
25028
+ const invs = await window.api.getUserInvitations();
25029
+ setInvitations(invs || []);
25030
+ } catch (e) {
25031
+ console.error("Failed to fetch invitations", e);
24853
25032
  }
24854
- } catch (e) {
24855
- console.error("Failed to fetch collaborators", e);
24856
- setRepoCollaborators([]);
24857
- }
25033
+ try {
25034
+ const collabData = await window.api.getCollaborators(remoteUrl2);
25035
+ setRepoCollaborators(collabData.collaborators || []);
25036
+ if (remoteUrl2 && repoPath) {
25037
+ const cleaned = remoteUrl2.replace("https://github.com/", "").replace(/\.git$/, "");
25038
+ saveMapping(cleaned, repoPath);
25039
+ }
25040
+ } catch (e) {
25041
+ console.error("Failed to fetch collaborators", e);
25042
+ setRepoCollaborators([]);
25043
+ }
25044
+ })();
24858
25045
  } else {
24859
25046
  setPushPermission(true);
24860
25047
  }
@@ -24892,6 +25079,7 @@ function App() {
24892
25079
  }
24893
25080
  } finally {
24894
25081
  setIsRefreshing(false);
25082
+ refreshLockRef.current = false;
24895
25083
  }
24896
25084
  };
24897
25085
  const handleCreateBranchSubmit = async (name, base) => {
@@ -25157,11 +25345,6 @@ function App() {
25157
25345
  setShowSettings(true);
25158
25346
  };
25159
25347
  const saveSettings = async () => {
25160
- try {
25161
- await window.api.setGitConfig("user.name", gitConfig.name);
25162
- await window.api.setGitConfig("user.email", gitConfig.email);
25163
- } catch (e) {
25164
- }
25165
25348
  setShowSettings(false);
25166
25349
  };
25167
25350
  const viewDiff = async (file, staged) => {
@@ -25409,8 +25592,8 @@ function App() {
25409
25592
  {
25410
25593
  type: "text",
25411
25594
  value: gitConfig.name,
25412
- onChange: (e) => setGitConfig({ ...gitConfig, name: e.target.value }),
25413
- className: "w-full bg-canvas border border-border rounded-md p-2 text-primary focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent transition-all"
25595
+ readOnly: true,
25596
+ className: "w-full bg-canvas border border-border rounded-md p-2 text-primary opacity-60 cursor-not-allowed focus:outline-none"
25414
25597
  }
25415
25598
  )
25416
25599
  ] }),
@@ -25421,10 +25604,11 @@ function App() {
25421
25604
  {
25422
25605
  type: "email",
25423
25606
  value: gitConfig.email,
25424
- onChange: (e) => setGitConfig({ ...gitConfig, email: e.target.value }),
25425
- className: "w-full bg-canvas border border-border rounded-md p-2 text-primary focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent transition-all"
25607
+ readOnly: true,
25608
+ className: "w-full bg-canvas border border-border rounded-md p-2 text-primary opacity-60 cursor-not-allowed focus:outline-none"
25426
25609
  }
25427
- )
25610
+ ),
25611
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-brand mt-1", children: t("syncedFromGithub") })
25428
25612
  ] }),
25429
25613
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-3 mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
25430
25614
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
@@ -25452,8 +25636,8 @@ function App() {
25452
25636
  ] }) }),
25453
25637
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-3 mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
25454
25638
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25455
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: "Enable Space Scene" }),
25456
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: "Show live events and games on lockscreens" })
25639
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: t("enableSpaceScene") }),
25640
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("spaceSceneDesc") })
25457
25641
  ] }),
25458
25642
  /* @__PURE__ */ jsxRuntimeExports.jsx(
25459
25643
  "button",
@@ -25476,8 +25660,8 @@ function App() {
25476
25660
  ] }) }),
25477
25661
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-3 mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
25478
25662
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25479
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: "Change Lockscreen PIN" }),
25480
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: "Set a new 3-character PIN for your lockscreen" })
25663
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: t("changeLockscreenPin") }),
25664
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("changePinDesc") })
25481
25665
  ] }),
25482
25666
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2", children: [
25483
25667
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -25506,7 +25690,7 @@ function App() {
25506
25690
  },
25507
25691
  disabled: newPin.length !== 3,
25508
25692
  className: "px-3 py-1 bg-accent/10 text-accent text-xs font-semibold rounded hover:bg-accent/20 transition-colors disabled:opacity-50",
25509
- children: pinChangeSuccess ? "Saved!" : "Save PIN"
25693
+ children: pinChangeSuccess ? t("saved") : t("savePin")
25510
25694
  }
25511
25695
  )
25512
25696
  ] })
@@ -25514,8 +25698,8 @@ function App() {
25514
25698
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/50 pt-4 mt-2", children: [
25515
25699
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-3", children: [
25516
25700
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25517
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-secondary", children: "GitHub Accounts" }),
25518
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: "Manage your authenticated accounts" })
25701
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-secondary", children: t("githubAccounts") }),
25702
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("manageAccounts") })
25519
25703
  ] }),
25520
25704
  /* @__PURE__ */ jsxRuntimeExports.jsx(
25521
25705
  "button",
@@ -25526,11 +25710,11 @@ function App() {
25526
25710
  handleStartAuth();
25527
25711
  },
25528
25712
  className: "px-3 py-1.5 bg-brand/10 hover:bg-brand/20 text-brand text-xs font-semibold rounded-md border border-brand/20 transition-colors",
25529
- children: "+ Add Account"
25713
+ children: t("addAccount")
25530
25714
  }
25531
25715
  )
25532
25716
  ] }),
25533
- accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center p-4 border border-dashed border-border/50 rounded-lg bg-surface/50", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60", children: "No accounts linked yet." }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2 max-h-32 overflow-y-auto pr-1 custom-scrollbar", children: accounts.map((acc) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
25717
+ accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center p-4 border border-dashed border-border/50 rounded-lg bg-surface/50", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60", children: t("noAccountsLinked") }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2 max-h-32 overflow-y-auto pr-1 custom-scrollbar", children: accounts.map((acc) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
25534
25718
  "div",
25535
25719
  {
25536
25720
  className: "flex items-center justify-between p-2 border border-border rounded-lg bg-canvas",
@@ -25568,8 +25752,8 @@ function App() {
25568
25752
  ] }),
25569
25753
  authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-danger/20 pt-4 mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
25570
25754
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25571
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-danger", children: "Logout" }),
25572
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: "Sign out of all GitHub accounts on this device" })
25755
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-danger", children: t("logout") }),
25756
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("logoutDesc") })
25573
25757
  ] }),
25574
25758
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
25575
25759
  "button",
@@ -25592,7 +25776,7 @@ function App() {
25592
25776
  className: "px-4 py-1.5 bg-danger/10 hover:bg-danger/20 text-danger text-xs font-bold rounded-md border border-danger/30 hover:border-danger/50 transition-all flex items-center gap-2",
25593
25777
  children: [
25594
25778
  /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }),
25595
- "Sign Out"
25779
+ t("signOut")
25596
25780
  ]
25597
25781
  }
25598
25782
  )
@@ -25604,7 +25788,7 @@ function App() {
25604
25788
  {
25605
25789
  onClick: () => setShowSettings(false),
25606
25790
  className: "px-4 py-2 bg-surface-hover border border-border rounded-md transition-colors font-medium text-sm",
25607
- children: "Cancel"
25791
+ children: t("cancel")
25608
25792
  }
25609
25793
  ),
25610
25794
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -25612,7 +25796,7 @@ function App() {
25612
25796
  {
25613
25797
  onClick: saveSettings,
25614
25798
  className: "px-4 py-2 bg-brand hover:bg-brand-hover border border-white/10 rounded-md transition-all font-medium text-white text-sm shadow-sm",
25615
- children: "Save"
25799
+ children: t("save")
25616
25800
  }
25617
25801
  )
25618
25802
  ] })
@@ -26281,7 +26465,7 @@ function App() {
26281
26465
  )
26282
26466
  }
26283
26467
  ),
26284
- "New Window"
26468
+ t("newWindow")
26285
26469
  ]
26286
26470
  }
26287
26471
  ),
@@ -26292,13 +26476,14 @@ function App() {
26292
26476
  className: "w-full bg-gradient-to-r from-blue-600/20 to-purple-600/20 hover:from-blue-600/40 hover:to-purple-600/40 text-primary font-medium py-2 px-4 rounded-md transition-all border border-blue-500/30 text-sm flex items-center justify-center gap-2 shadow-sm",
26293
26477
  children: [
26294
26478
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-base", children: "🚀" }),
26295
- " Universal Push"
26479
+ " ",
26480
+ t("universalPush")
26296
26481
  ]
26297
26482
  }
26298
26483
  )
26299
26484
  ] }),
26300
26485
  collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4", children: [
26301
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary font-semibold mb-2 uppercase tracking-wider px-1", children: "Collaboration Repo" }),
26486
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary font-semibold mb-2 uppercase tracking-wider px-1", children: t("collaborationRepo") }),
26302
26487
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-1 max-h-40 overflow-y-auto pr-1 custom-scrollbar", children: collaboratedRepos.map((repo) => {
26303
26488
  const saved = collabMappings[repo.full_name];
26304
26489
  const isMissing = saved && pathExistenceMap[repo.full_name] === false;
@@ -26324,7 +26509,7 @@ function App() {
26324
26509
  }) })
26325
26510
  ] }),
26326
26511
  repoPath && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas p-3 rounded-md border border-border mb-4", children: [
26327
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary font-semibold mb-1", children: "LOCAL PATH" }),
26512
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary font-semibold mb-1", children: t("localPath") }),
26328
26513
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-mono text-accent truncate", title: repoPath, children: repoPath.split("\\").pop() })
26329
26514
  ] }),
26330
26515
  repoPath && !isRepo && /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -26332,7 +26517,7 @@ function App() {
26332
26517
  {
26333
26518
  onClick: () => setShowSetupWizard(true),
26334
26519
  className: "bg-brand hover:bg-brand-hover text-white font-semibold py-2 px-4 rounded-md transition-all mb-4 text-sm w-full border border-white/10",
26335
- children: "Repository Setup"
26520
+ children: t("repositorySetup")
26336
26521
  }
26337
26522
  ),
26338
26523
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-auto space-y-2", children: [
@@ -26360,7 +26545,7 @@ function App() {
26360
26545
  )
26361
26546
  }
26362
26547
  ),
26363
- "Collaboration Repo",
26548
+ t("collaborationRepo"),
26364
26549
  collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-auto bg-brand/20 text-brand text-[10px] font-bold px-1.5 py-0.5 rounded-full", children: collaboratedRepos.length })
26365
26550
  ]
26366
26551
  }
@@ -26389,7 +26574,7 @@ function App() {
26389
26574
  )
26390
26575
  }
26391
26576
  ),
26392
- "Commit History"
26577
+ t("commitHistory")
26393
26578
  ]
26394
26579
  }
26395
26580
  ),
@@ -21,8 +21,8 @@
21
21
  href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
22
22
  rel="stylesheet"
23
23
  />
24
- <script type="module" crossorigin src="./assets/index-j4GZkdPL.js"></script>
25
- <link rel="stylesheet" crossorigin href="./assets/index-BHcqstpr.css">
24
+ <script type="module" crossorigin src="./assets/index-ChfAIvyi.js"></script>
25
+ <link rel="stylesheet" crossorigin href="./assets/index-BAXzLIAI.css">
26
26
  </head>
27
27
 
28
28
  <body class="bg-gray-900 text-white font-sans antialiased overflow-hidden">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitxelectron",
3
- "version": "1.1.9",
3
+ "version": "1.2.1",
4
4
  "description": "An elegant, completely silent auto-syncing Git client. Works as a desktop app and npm CLI tool.",
5
5
  "main": "./out/main/index.js",
6
6
  "files": [