Upload via GUI (32 Dateien)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user