import { storeNaam } from "./platform"; /* * Van een afgewezen plugin-aanroep naar een zin waar de lezer iets aan heeft. * * De codes komen uit de plugins zelf en staan hier met opzet uitgeschreven: @capacitor/geolocation * nummert ze OS-PLUG-GLOC-00xx (zie GeolocationErrors.kt), Capacitor's eigen brug gebruikt * UNIMPLEMENTED en UNAVAILABLE, en onze eigen Postbode-plugin weigert met een boodschap zonder code. * Drie herkomsten, dus drie manieren om te herkennen — vandaar zowel op code als op een stuk tekst. * * De regel voor de zinnen: zeg wat er aan de hand is en, als de gebruiker er iets aan kan doen, wat. * Kan hij er niets aan doen, zeg dat dan ook — "dit ligt aan deze versie van de app" is een beter * antwoord dan een aansporing die nergens toe leidt. Wat we niet herkennen tonen we zoals het is; * dan staat er tenminste iets dat door te geven valt, in plaats van "er ging iets mis". */ /* @capacitor/geolocation, GeolocationErrors.kt */ const GEOLOCATIE = { "OS-PLUG-GLOC-0002": "Je toestel kon geen positie bepalen.", "OS-PLUG-GLOC-0003": "De app heeft geen toestemming voor je locatie.", "OS-PLUG-GLOC-0007": "Locatie staat uit op je toestel — zet hem aan bij de snelle instellingen.", "OS-PLUG-GLOC-0009": "De vraag om locatie aan te zetten is afgewezen.", "OS-PLUG-GLOC-0010": "Het duurde te lang om je positie te bepalen. Binnenshuis gebeurt dat; buiten of bij een raam lukt het meestal wel.", "OS-PLUG-GLOC-0011": "Deze app-versie vraagt de locatie verkeerd op.", "OS-PLUG-GLOC-0014": "Google Play-services heeft eerst aandacht nodig op dit toestel.", "OS-PLUG-GLOC-0015": "Google Play-services werkt niet op dit toestel.", "OS-PLUG-GLOC-0016": "De locatie-instellingen van dit toestel lieten het niet toe.", "OS-PLUG-GLOC-0017": "Locatie én netwerklocatie staan allebei uit op je toestel.", "OS-PLUG-GLOC-0018": "Deze app-versie vraagt geen locatietoestemming aan.", }; /* * De bezorging. Capacitor's twee eigen codes, en daarnaast drie boodschappen zonder code: die van * onze plugin zelf, en twee die Capacitor tekstueel afgeeft als de app verkeerd in elkaar zit. */ const MELDING = [ { code: "UNIMPLEMENTED", zin: "Deze app-versie kent deze instelling nog niet." }, { code: "UNAVAILABLE", zin: "Deze instelling werkt niet op dit toestel." }, { bevat: "apiUrl en token", zin: "De app is niet ingelogd, of kent het adres van de server niet." }, { bevat: "PermissionCallback", zin: "Deze app-versie kan geen toestemming vragen — een fout in de app, niet in je toestel." }, { bevat: "Missing the following permissions", zin: "Deze app-versie vraagt geen toestemming voor meldingen aan." }, ]; /* * De kassa (@capgo/native-purchases). Hier valt niet op een code te matchen, want die is er niet: * de plugin gooit bij élk niet-OK antwoord van Play dezelfde zin — "Purchase is not purchased" — * of je nu zelf afhaakt, het netwerk wegvalt of je het product al bezit. Play's responseCode, waar * het verschil in zit, gooit hij weg (NativePurchasesPlugin.java, onPurchasesUpdated). * * Die ene zin kan dus niet zeggen wat er gebeurde, en dan hoort de tekst niet te doen alsof. Wat we * wel kunnen is de kant kiezen die het minst kwaad kan: verreweg de meeste van die antwoorden zijn * iemand die de betaalkaart wegtikt, en die een rode storing voorschotelen is erger dan een echte * storing rustig brengen. Vandaar `zacht`: het scherm brengt hem dan als mededeling, niet als fout. */ const BETALING = [ { bevat: "Purchase is not purchased", zacht: true, zin: () => "De betaling is niet afgerond, dus er is geen account aangemaakt. Heb je hem zelf afgebroken, " + "dan is er niets gebeurd; zo niet, probeer het dan zo nog eens.", }, { bevat: "Purchase is pending", zacht: true, zin: () => "De betaling loopt nog — sommige betaalmethodes doen er langer over. Zodra hij rond is, kun je " + "het account hier aanmaken.", }, { bevat: "Product not found", zin: () => `${storeNaam()} kent dit product niet. Dat kan aan het land of aan het account liggen.`, }, { bevat: "Billing is not available", zin: () => "Betalen kan niet op dit toestel." }, { bevat: "Billing service unavailable", zin: () => `${storeNaam()} is nu niet bereikbaar. Controleer je verbinding en probeer het zo nog eens.`, }, /* De drie controles die de plugin zelf doet voor hij begint: die kunnen alleen aan ons liggen */ { bevat: "is empty", zin: () => "De app vroeg de betaling verkeerd op — dit ligt aan deze versie van de app." }, { bevat: "quantity is less than", zin: () => "De app vroeg de betaling verkeerd op — dit ligt aan deze versie van de app." }, ]; /* Wat er staat als we het niet herkennen: de code als die er is, anders de kale boodschap */ const onbekend = (fout) => { const bericht = fout?.message ? String(fout.message) : "onbekende fout"; return fout?.code ? `${bericht} (${fout.code})` : bericht; }; /* Een afgewezen locatie-aanvraag (@capacitor/geolocation gooit; `fout` is de uitzondering) */ export const locatieFout = (fout) => GEOLOCATIE[fout?.code] ?? onbekend(fout); /* Een afgewezen Postbode-aanroep (`fout` is het { code, message } uit lib/postbode.js) */ export const meldingFout = (fout) => { const bericht = fout?.message ? String(fout.message) : ""; const treffer = MELDING.find( (m) => (m.code && m.code === fout?.code) || (m.bevat && bericht.includes(m.bevat)) ); return treffer ? treffer.zin : onbekend(fout); }; /* * Een afgewezen aanroep van de kassa. Geeft { zin, zacht } terug — `zacht` betekent: breng dit als * mededeling en niet als storing. Wat we niet herkennen is per definitie niet zacht: van een fout * die we niet kennen mogen we niet aannemen dat er niets aan de hand is. */ export const betalingFout = (fout) => { const bericht = fout?.message ? String(fout.message) : ""; const treffer = BETALING.find((b) => bericht.includes(b.bevat)); return treffer ? { zin: treffer.zin(), zacht: treffer.zacht === true } : { zin: onbekend(fout), zacht: false }; };