Een dating-app op basis van brieven, niet van gezichten!
Deze repository wordt als momentopname gepubliceerd: een clone bevat de volledige inhoud, maar geen commitgeschiedenis.
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 };
};