Upload-Freigabe: Link-Button generiert automatisch Kurz-URL via is.gd

This commit is contained in:
2026-06-06 01:41:28 +02:00
parent 96acfd9f8e
commit 9cfbd00728

View File

@@ -220,11 +220,33 @@ function UploadShareManager({ toast }) {
setShortening(null); setShortening(null);
}; };
const copyLink = (token) => { const copyLink = async (shareId, token) => {
// Wenn Kurz-URL vorhanden, die nehmen - sonst generieren
if (shortUrls[shareId]) {
navigator.clipboard?.writeText(shortUrls[shareId]).catch(()=>{});
setCopied(token); setTimeout(()=>setCopied(null),2500);
return;
}
// Kurz-URL erst generieren
setShortening(shareId);
const url = `${window.location.origin}/u/${token}`; const url = `${window.location.origin}/u/${token}`;
navigator.clipboard?.writeText(url).then(()=>{ setCopied(token); setTimeout(()=>setCopied(null),2000); }).catch(()=>{ try {
toast(url); const r = await fetch(`https://is.gd/create.php?format=simple&url=${encodeURIComponent(url)}`);
}); const short = await r.text();
if (short.startsWith('http')) {
setShortUrls(p=>({...p,[shareId]:short.trim()}));
navigator.clipboard?.writeText(short.trim()).catch(()=>{});
setCopied(token); setTimeout(()=>setCopied(null),2500);
} else {
// Fallback auf Original-URL
navigator.clipboard?.writeText(url).catch(()=>{});
setCopied(token); setTimeout(()=>setCopied(null),2500);
}
} catch {
navigator.clipboard?.writeText(url).catch(()=>{});
setCopied(token); setTimeout(()=>setCopied(null),2500);
}
setShortening(null);
}; };
const loadLogs = () => { const loadLogs = () => {
@@ -336,22 +358,15 @@ function UploadShareManager({ toast }) {
<div style={{display:'flex',gap:5,flexShrink:0}}> <div style={{display:'flex',gap:5,flexShrink:0}}>
{!!s.is_active && !expired && ( {!!s.is_active && !expired && (
<> <>
<button onClick={()=>copyLink(s.token)} <button onClick={()=>copyLink(s.id,s.token)}
style={{...S.btn(copied===s.token?'#4ecdc4':'#ffe66d',copied!==s.token),fontSize:10,padding:'4px 10px'}}> style={{...S.btn(copied===s.token?'#4ecdc4':'#ffe66d',copied!==s.token),fontSize:10,padding:'4px 10px'}}>
{copied===s.token?'✓ Kopiert':'📋 Link'} {shortening===s.id?'…':copied===s.token?'✓ Kopiert':'📋 Link'}
</button> </button>
{sharePws[s.id] && ( {sharePws[s.id] && (
<button onClick={()=>{ navigator.clipboard?.writeText(sharePws[s.id]).then(()=>toast('Passwort kopiert ✓')).catch(()=>toast(sharePws[s.id])); }} <button onClick={()=>{ navigator.clipboard?.writeText(sharePws[s.id]).then(()=>toast('Passwort kopiert ✓')).catch(()=>toast(sharePws[s.id])); }}
style={{...S.btn('#ffe66d',true),fontSize:10,padding:'4px 10px'}}>🔑 PW</button> style={{...S.btn('#ffe66d',true),fontSize:10,padding:'4px 10px'}}>🔑 PW</button>
)} )}
{shortUrls[s.id]
? <button onClick={()=>{ navigator.clipboard?.writeText(shortUrls[s.id]).then(()=>toast('Kurz-URL kopiert ✓')).catch(()=>{}); }}
style={{...S.btn('#4ecdc4',true),fontSize:10,padding:'4px 10px'}}>🔗 Kurz</button>
: <button onClick={()=>shorten(s.id,s.token)} disabled={shortening===s.id}
style={{background:'rgba(255,255,255,0.05)',border:'1px solid rgba(255,255,255,0.15)',borderRadius:6,color:'rgba(255,255,255,0.5)',cursor:shortening===s.id?'default':'pointer',fontFamily:'monospace',fontSize:10,padding:'4px 10px'}}>
{shortening===s.id?'…':'🔗↓'}
</button>
}
</> </>
)} )}
{!!s.is_active && ( {!!s.is_active && (