Upload via GUI (32 Dateien)

This commit is contained in:
2026-09-20 12:43:47 +00:00
parent 8b39b7c3a6
commit 86e3bc062f
2 changed files with 103 additions and 21 deletions
+17 -3
View File
@@ -76,9 +76,23 @@ Arbeitest du an **mehreren PCs**, kann MyStart seinen kompletten Datenstand
abgleichen – sofern auf beiden PCs **OneDrive** eingerichtet und angemeldet abgleichen – sofern auf beiden PCs **OneDrive** eingerichtet und angemeldet
ist. ist.
- MyStart legt dazu automatisch `OneDrive\MyStart\sync.json` an. Die Der Abgleich ist **optional und standardmäßig aus**. Einschalten unter
eigentliche Übertragung zwischen den PCs übernimmt OneDrive selbst – **Einstellungen → MyStart → „Zwischen PCs abgleichen“** – auf jedem PC
MyStart schreibt/liest dort nur die Datei. einzeln. Solange er aus ist, wird nichts geschrieben oder gelesen, und der
Status-Punkt in der Reiter-Leiste ist ausgeblendet.
**Ordner:** Standardmäßig wird automatisch dein OneDrive-Ordner erkannt
(`OneDrive\MyStart`). Darunter zeigt die App den aktuell genutzten Ordner an.
Mit **„Ordner wählen…“** kannst du stattdessen einen beliebigen anderen
synchronisierten Ordner nehmen (Dropbox, Google Drive, Netzlaufwerk …),
„Automatisch (OneDrive)“ stellt es zurück. Auf **allen PCs muss derselbe
Ordner** genutzt werden, also dieselbe Cloud-Freigabe.
- MyStart legt dazu im Ordner `OneDrive\MyStart` pro PC eine eigene Datei
`sync-<Rechnername>.json` an (jeder PC schreibt nur seine eigene, damit
OneDrive keine Konfliktkopien erzeugt). Die eigentliche Übertragung
zwischen den PCs übernimmt OneDrive selbst – MyStart schreibt/liest dort
nur diese Dateien.
- Abgeglichen wird **alle 30 Sekunden**, außerdem beim Start und beim - Abgeglichen wird **alle 30 Sekunden**, außerdem beim Start und beim
Schließen der App. Schließen der App.
- Regel bei Änderungen: **die neueste Version gewinnt.** Ändern beide PCs - Regel bei Änderungen: **die neueste Version gewinnt.** Ändern beide PCs
+86 -18
View File
@@ -88,39 +88,98 @@ const trInfra =
const autostartJs = `(function(){ const autostartJs = `(function(){
var A={enabled:false,supported:!!(window.chrome&&window.chrome.webview)}; var A={enabled:false,supported:!!(window.chrome&&window.chrome.webview)};
window.__mystartAutostart=A; window.__mystartAutostart=A;
function paint(){ // Second switch: OneDrive sync, opt-in (off until switched on here).
var tr=document.getElementById('mystart-autostart-track'); var Y={enabled:false,available:true,path:null,custom:false};
var kn=document.getElementById('mystart-autostart-knob'); function paintOne(prefix,on){
var tr=document.getElementById(prefix+'-track');
var kn=document.getElementById(prefix+'-knob');
if(!tr||!kn)return; if(!tr||!kn)return;
tr.style.background=A.enabled?'#2ea043':'#565d68'; tr.style.background=on?'#2ea043':'#565d68';
kn.style.left=A.enabled?'23px':'3px'; kn.style.left=on?'23px':'3px';
}
function paint(){
paintOne('mystart-autostart',A.enabled);
paintOne('mystart-sync',Y.enabled);
var w=document.getElementById('mystart-sync-wrap');
if(w){
w.style.opacity=Y.available?'1':'0.5';
w.style.cursor=Y.available?'pointer':'default';
w.title=Y.available?'':'Kein Sync-Ordner gefunden – bitte unten einen Ordner wählen.';
}
var fp=document.getElementById('mystart-sync-folder-path');
if(fp)fp.textContent=Y.path?('Ordner: '+Y.path+(Y.custom?'':' (automatisch, OneDrive)')):'Kein OneDrive-Ordner gefunden – bitte einen Ordner wählen.';
var rs=document.getElementById('mystart-sync-folder-reset');
if(rs)rs.style.display=Y.custom?'':'none';
} }
if(A.supported){ if(A.supported){
window.chrome.webview.addEventListener('message',function(ev){ window.chrome.webview.addEventListener('message',function(ev){
var d=ev.data;if(d&&d.type==='autostart'){A.enabled=!!d.enabled;paint();} var d=ev.data;if(!d)return;
if(d.type==='autostart'){A.enabled=!!d.enabled;paint();}
else if(d.type==='sync-state'){Y.enabled=!!d.enabled;Y.available=!!d.available;Y.path=d.path||null;Y.custom=!!d.custom;paint();}
}); });
} }
function render(row){ function mkToggle(row,prefix,label,hint,onClick){
var wrap=document.createElement('div'); var wrap=document.createElement('div');
wrap.id=prefix+'-wrap';
wrap.style.cssText='display:flex;align-items:center;gap:10px;margin-top:18px;cursor:pointer;user-select:none;'; wrap.style.cssText='display:flex;align-items:center;gap:10px;margin-top:18px;cursor:pointer;user-select:none;';
var track=document.createElement('div'); var track=document.createElement('div');
track.id='mystart-autostart-track'; track.id=prefix+'-track';
track.style.cssText='position:relative;width:46px;height:26px;border-radius:13px;background:#565d68;flex:0 0 auto;transition:background .15s;box-sizing:border-box;'; track.style.cssText='position:relative;width:46px;height:26px;border-radius:13px;background:#565d68;flex:0 0 auto;transition:background .15s;box-sizing:border-box;';
var knob=document.createElement('div'); var knob=document.createElement('div');
knob.id='mystart-autostart-knob'; knob.id=prefix+'-knob';
knob.style.cssText='position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:left .15s;box-shadow:0 1px 2px rgba(0,0,0,.4);box-sizing:border-box;'; knob.style.cssText='position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:left .15s;box-shadow:0 1px 2px rgba(0,0,0,.4);box-sizing:border-box;';
track.appendChild(knob); track.appendChild(knob);
var txt=document.createElement('span'); var txt=document.createElement('span');
txt.textContent='Mit Windows starten (minimiert)'; txt.textContent=label;
if(!A.supported){wrap.style.opacity='0.5';wrap.style.cursor='default';wrap.title='Nur in der MyStart-App verfügbar.';} if(!A.supported){wrap.style.opacity='0.5';wrap.style.cursor='default';wrap.title='Nur in der MyStart-App verfügbar.';}
wrap.appendChild(track);wrap.appendChild(txt);row.appendChild(wrap); wrap.appendChild(track);wrap.appendChild(txt);row.appendChild(wrap);
paint(); if(hint){
wrap.addEventListener('click',function(){ var h=document.createElement('p');
if(!A.supported)return; h.textContent=hint;
h.style.cssText='margin:6px 0 0 56px;font-size:12px;opacity:.65;';
row.appendChild(h);
}
wrap.addEventListener('click',function(){if(A.supported)onClick();});
}
function render(row){
mkToggle(row,'mystart-autostart','Mit Windows starten (minimiert)',null,function(){
A.enabled=!A.enabled;paint(); A.enabled=!A.enabled;paint();
try{window.chrome.webview.postMessage({type:'autostart-set',value:A.enabled});}catch(e){} try{window.chrome.webview.postMessage({type:'autostart-set',value:A.enabled});}catch(e){}
}); });
if(A.supported){try{window.chrome.webview.postMessage({type:'autostart-get'});}catch(e){}} mkToggle(row,'mystart-sync','Zwischen PCs abgleichen (OneDrive)','Gleicht Lesezeichen und Reiter über einen synchronisierten Ordner ab, standardmäßig OneDrive. Auf jedem PC einzeln einschalten, und auf allen PCs denselben Ordner nutzen.',function(){
if(!Y.available)return;
Y.enabled=!Y.enabled;paint();
try{window.chrome.webview.postMessage({type:'sync-set',value:Y.enabled});}catch(e){}
});
// Which folder the sync files go to: shown, plus pick another / go back to OneDrive.
var fr=document.createElement('div');
fr.style.cssText='margin:8px 0 0 56px;font-size:12px;';
var fpath=document.createElement('div');
fpath.id='mystart-sync-folder-path';
fpath.style.cssText='opacity:.75;word-break:break-all;';
var fbtns=document.createElement('div');
fbtns.style.cssText='display:flex;gap:8px;margin-top:6px;flex-wrap:wrap;';
function mkBtn(text,id,type){
var b=document.createElement('div');
if(id)b.id=id;
b.textContent=text;
b.style.cssText='padding:5px 10px;border-radius:6px;background:rgba(128,128,128,.25);cursor:pointer;user-select:none;';
b.onmouseenter=function(){b.style.background='rgba(128,128,128,.4)';};
b.onmouseleave=function(){b.style.background='rgba(128,128,128,.25)';};
b.addEventListener('click',function(){
if(!A.supported)return;
try{window.chrome.webview.postMessage({type:type});}catch(e){}
});
return b;
}
fbtns.appendChild(mkBtn('Ordner wählen…',null,'sync-browse'));
fbtns.appendChild(mkBtn('Automatisch (OneDrive)','mystart-sync-folder-reset','sync-folder-reset'));
fr.appendChild(fpath);fr.appendChild(fbtns);row.appendChild(fr);
paint();
if(A.supported){
try{window.chrome.webview.postMessage({type:'autostart-get'});}catch(e){}
try{window.chrome.webview.postMessage({type:'sync-get'});}catch(e){}
}
} }
function ensure(){ function ensure(){
var row=document.getElementById('mystart-autostart-row'); var row=document.getElementById('mystart-autostart-row');
@@ -361,19 +420,28 @@ const profilesJs = `(function(){
}catch(e){return false;} }catch(e){return false;}
}; };
var syncDot; var syncDot;
var lastSync=null; // last status from the host, so a re-rendered dot isn't blank
function paintSyncDot(){
if(!syncDot)return;
// Sync is opt-in: no dot at all until it's switched on (Einstellungen -> MyStart).
if(!lastSync||lastSync.enabled===false){syncDot.style.display='none';return;}
syncDot.style.display='';
syncDot.style.background=lastSync.ok?'#2ea043':'#e8b923';
syncDot.title=lastSync.ok?('OneDrive-Sync: '+lastSync.message):('OneDrive-Sync-Problem: '+lastSync.message);
}
function mkSyncDot(){ function mkSyncDot(){
var d=document.createElement('div'); var d=document.createElement('div');
d.style.cssText='width:8px;height:8px;border-radius:50%;background:#565d68;margin-left:6px;flex:0 0 auto;'; d.style.cssText='width:8px;height:8px;border-radius:50%;background:#565d68;margin-left:6px;flex:0 0 auto;';
d.title='OneDrive-Sync: noch kein Status';
syncDot=d; syncDot=d;
paintSyncDot();
return d; return d;
} }
if(window.chrome&&window.chrome.webview){ if(window.chrome&&window.chrome.webview){
window.chrome.webview.addEventListener('message',function(ev){ window.chrome.webview.addEventListener('message',function(ev){
var d=ev.data; var d=ev.data;
if(!d||d.type!=='sync-status'||!syncDot)return; if(!d||d.type!=='sync-status')return;
syncDot.style.background=d.ok?'#2ea043':'#e8b923'; lastSync=d;
syncDot.title=d.ok?('OneDrive-Sync: '+d.message):('OneDrive-Sync-Problem: '+d.message); paintSyncDot();
}); });
} }
var bar; var bar;