diff --git a/app/diario-bordo.html b/app/diario-bordo.html index 43731dc..5833c85 100644 --- a/app/diario-bordo.html +++ b/app/diario-bordo.html @@ -5794,24 +5794,50 @@ async function ensureBleNativeReady(){ _bleNativeInitialized=true; } -// Copia log diagnóstico pro clipboard -async function copyDiagLog(){ +// Mostra log num modal pro usuário copiar/compartilhar manualmente +// (navigator.clipboard crasha em alguns WebViews Capacitor / Samsung One UI) +function copyDiagLog(){ const el=document.getElementById('bt-diag'); if(!el){toast('Log vazio');return} - // Extrai texto puro (innerText preserva quebras de linha) const txt=`Shivao v${APP_VERSION} · log diagnóstico\n\n`+(el.innerText||el.textContent||'').trim(); - try{ - if(navigator.clipboard?.writeText){ - await navigator.clipboard.writeText(txt); - toast('✓ Log copiado · cole no chat'); - }else{ - // Fallback: textarea hack - const ta=document.createElement('textarea'); - ta.value=txt;document.body.appendChild(ta);ta.select(); - document.execCommand('copy');ta.remove(); - toast('✓ Log copiado'); - } - }catch(e){toast('Erro ao copiar: '+e.message)} + let modal=document.getElementById('bt-log-modal'); + if(modal)modal.remove(); + modal=document.createElement('div'); + modal.id='bt-log-modal'; + modal.style.cssText='position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.85);display:flex;flex-direction:column;padding:16px;backdrop-filter:blur(8px)'; + // safe escape + const esc=txt.replace(/&/g,'&').replace(//g,'>'); + modal.innerHTML=` +
+
+

📋 Log diagnóstico

+ +
+

Toque dentro da caixa e segure pra selecionar tudo. Ou toque ↗ Compartilhar pra enviar via WhatsApp.

+ +
+ +
+
+ `; + document.body.appendChild(modal); + // Auto-seleciona o texto + setTimeout(()=>{ + const ta=document.getElementById('bt-log-textarea'); + if(ta){ta.focus();try{ta.select()}catch{}} + },200); +} + +async function bmsShareLog(){ + const ta=document.getElementById('bt-log-textarea'); + if(!ta)return; + if(navigator.share){ + try{ + await navigator.share({title:'Shivao log diagnóstico',text:ta.value}); + }catch(e){/* user cancelou */} + }else{ + toast('Compartilhar não disponível · use seleção manual'); + } } // Diagnóstico visível: mostra cada passo no card BLE @@ -6303,7 +6329,7 @@ async function removeBluetoothDevice(id){ renderBluetoothCard(); } -const APP_VERSION='1.10.7'; +const APP_VERSION='1.10.8'; function renderBluetoothCard(){ const el=document.getElementById('bt-list'); const supportEl=document.getElementById('bt-support'); diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index f69740d..9c56606 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "br.com.pontualtech.shivao" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 23 - versionName "1.10.7" + versionCode 24 + versionName "1.10.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/mobile/package.json b/mobile/package.json index 1b3a604..40c67ae 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -1,6 +1,6 @@ { "name": "shivao-mobile", - "version": "1.10.7", + "version": "1.10.8", "description": "Shivao app nativo (Capacitor wrapper Android/iOS)", "main": "index.js", "type": "module", diff --git a/server/public/index.html b/server/public/index.html index 43731dc..5833c85 100644 --- a/server/public/index.html +++ b/server/public/index.html @@ -5794,24 +5794,50 @@ async function ensureBleNativeReady(){ _bleNativeInitialized=true; } -// Copia log diagnóstico pro clipboard -async function copyDiagLog(){ +// Mostra log num modal pro usuário copiar/compartilhar manualmente +// (navigator.clipboard crasha em alguns WebViews Capacitor / Samsung One UI) +function copyDiagLog(){ const el=document.getElementById('bt-diag'); if(!el){toast('Log vazio');return} - // Extrai texto puro (innerText preserva quebras de linha) const txt=`Shivao v${APP_VERSION} · log diagnóstico\n\n`+(el.innerText||el.textContent||'').trim(); - try{ - if(navigator.clipboard?.writeText){ - await navigator.clipboard.writeText(txt); - toast('✓ Log copiado · cole no chat'); - }else{ - // Fallback: textarea hack - const ta=document.createElement('textarea'); - ta.value=txt;document.body.appendChild(ta);ta.select(); - document.execCommand('copy');ta.remove(); - toast('✓ Log copiado'); - } - }catch(e){toast('Erro ao copiar: '+e.message)} + let modal=document.getElementById('bt-log-modal'); + if(modal)modal.remove(); + modal=document.createElement('div'); + modal.id='bt-log-modal'; + modal.style.cssText='position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.85);display:flex;flex-direction:column;padding:16px;backdrop-filter:blur(8px)'; + // safe escape + const esc=txt.replace(/&/g,'&').replace(//g,'>'); + modal.innerHTML=` +
+
+

📋 Log diagnóstico

+ +
+

Toque dentro da caixa e segure pra selecionar tudo. Ou toque ↗ Compartilhar pra enviar via WhatsApp.

+ +
+ +
+
+ `; + document.body.appendChild(modal); + // Auto-seleciona o texto + setTimeout(()=>{ + const ta=document.getElementById('bt-log-textarea'); + if(ta){ta.focus();try{ta.select()}catch{}} + },200); +} + +async function bmsShareLog(){ + const ta=document.getElementById('bt-log-textarea'); + if(!ta)return; + if(navigator.share){ + try{ + await navigator.share({title:'Shivao log diagnóstico',text:ta.value}); + }catch(e){/* user cancelou */} + }else{ + toast('Compartilhar não disponível · use seleção manual'); + } } // Diagnóstico visível: mostra cada passo no card BLE @@ -6303,7 +6329,7 @@ async function removeBluetoothDevice(id){ renderBluetoothCard(); } -const APP_VERSION='1.10.7'; +const APP_VERSION='1.10.8'; function renderBluetoothCard(){ const el=document.getElementById('bt-list'); const supportEl=document.getElementById('bt-support'); diff --git a/server/src/index.js b/server/src/index.js index ebd6fe0..3d923d5 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -347,7 +347,7 @@ app.get('/.well-known/assetlinks.json', (req, res) => { }); // Atalho: /apk redireciona pra última APK release no Forgejo -const LATEST_APK_URL = 'https://git.pontualtech.work/karlao/shivao-projeto/releases/download/v1.10.7/Shivao-v1.10.7.apk'; +const LATEST_APK_URL = 'https://git.pontualtech.work/karlao/shivao-projeto/releases/download/v1.10.8/Shivao-v1.10.8.apk'; app.get('/apk', (req, res) => res.redirect(302, LATEST_APK_URL)); // Página A4 imprimível com QR Code + instruções (cola no barco/marina)