diff --git a/firka/assets/images/cactus_error_screen.png b/firka/assets/images/cactus_error_screen.png new file mode 100644 index 0000000..00f5acf Binary files /dev/null and b/firka/assets/images/cactus_error_screen.png differ diff --git a/firka/assets/images/logos/dave_error.png b/firka/assets/images/logos/dave_error.png new file mode 100644 index 0000000..6c9709f Binary files /dev/null and b/firka/assets/images/logos/dave_error.png differ diff --git a/firka/assets/swears/DirtyWords.xml b/firka/assets/swears/DirtyWords.xml new file mode 100644 index 0000000..42aee3e --- /dev/null +++ b/firka/assets/swears/DirtyWords.xml @@ -0,0 +1,369 @@ + + + + + Aberált + Aberrált + Abortuszmaradék + Abszolút hülye + Agyalágyult + Agyatlan + Agybatetovált + Ágybavizelős + Agyfasz + Agyhalott + Agyonkúrt + Agyonvert + Agyrákos + AIDS-es + Alapvetően fasz + Animalsex-mániás + Antibarom + Aprófaszú + Arcbarakott + Aszaltfaszú + Aszott + Átbaszott + Azt a kurva de fasz + Balatonberényben napvilágot látott + Balfasz + Balfészek + Baromfifasz + Basz-o-matic + Baszhatatlan + Basznivaló + Bebaszott + Befosi + Békapicsa + Bélböfi + Beleiből kiforgatott + Bélszél + Bronz térdű + Brunya + Büdös szájú + Büdösszájú + Búvalbaszott + Buzeráns + Buzernyák + Buzi + Buzikurva + Cafat + Cafka + Céda + Cérnafaszú + Cottonfej + Csempe szobában felneveltetett + Cseszett + Csibefasz + Csipszar + Csirkefaszú + Csitri + Csöcs + Csöcsfej + Csöppszar + Csőszkunyhóban elrejtett + Csupaszfarkú + Cuncipunci + Deformáltfaszú + Dekorált pofájú + Döbbenetesen segg + Dobseggű + Dughatatlan + Dunyhavalagú + Duplafaszú + Ebfasz + Egyszerűen fasz + Elbaszott + Eleve hülye + Extrahülye + Fafogú rézfűrésszel megsebzett + Fantasztikusan segg + Fasszopó + Fasz + Fasz-emulátor + Faszagyú + Faszarc + Faszfej + Faszfészek + Faszkalap + Faszkarika + Faszkedvelő + Faszkópé + Faszogány + Faszpörgettyű + Faszsapka + Faszszagú + Faszszopó + Fasztalan + Fasztarisznya + Fasztengely + Fasztolvaj + Faszváladék + Faszverő + Félrebaszott + Félrefingott + Félreszart + Félribanc + Fing + Fölcsinált + Fölfingott + Fos + Foskemence + Fospisztoly + Fospumpa + Fostalicska + Fütyi + Fütyinyalogató + Fütykös + Geci + Gecinyelő + Geciszaró + Geciszívó + Genny + Gennyesszájú + Gennygóc + Genyac + Genyó + Gólyafos + Görbefaszú + Gyennyszopó + Gyíkfing + Hájpacni + Hatalmas nagy fasz + Hátbabaszott + Házikurva + Hererákos + Hígagyú + Hihetetlenül fasz + Hikomat + Hímnőstény + Hímringyó + Hiperstrici + Hitler-imádó + Hitlerista + Hivatásos balfasz + Hú de segg + Hugyagyú + Hugyos + Hugytócsa + Hüje + Hüle + Hülye + Hülyécske + Hülyegyerek + Inkubátor-szökevény + Integrált barom + Ionizált faszú + IQ bajnok + IQ fighter + IQ hiányos + Irdatlanul köcsög + Íveltfaszú + Jajj de barom + Jókora fasz + Kaka + Kakamatyi + Kaki + Kaksi + Kecskebaszó + Kellően fasz + Képlékeny faszú + Keresve sem található fasz + Kétfaszú + Kétszer agyonbaszott + Ki-bebaszott + Kibaszott + Kifingott + Kiherélt + Kikakkantott + Kikészült + Kimagaslóan fasz + Kimondhatatlan pöcs + Kis szaros + Kisfütyi + Klotyószagú + Ködmönbe bújtatott + Kojak-faszú + Kopárfaszú + Korlátolt gecizésű + Kotonszökevény + Középszar + Kretén + Kuki + Kula + Kunkorított faszú + Kurva + Kurvaanyjú + Kurvapecér + Kutyakaki + Kutyapina + Kutyaszar + Lankadtfaszú + Lebaszirgált + Lebaszott + Lecseszett + Leírhatatlanul segg + Lemenstruált + Leokádott + Lepkefing + Leprafészek + Leszart + Leszbikus + Lőcs + Lőcsgéza + Lófasz + Lógócsöcsű + Lóhugy + Lotyó + Lucskos + Lugnya + Lyukasbelű + Lyukasfaszú + Lyukát vakaró + Lyuktalanított + Mamutsegg + Maszturbációs görcs + Maszturbagép + Maszturbáltatott + Megfingatott + Megkettyintett + Megkúrt + Megszopatott + Mesterséges faszú + Méteres kékeres + Mikrotökű + Mocskos + Mojfing + Műfaszú + Muff + Multifasz + Műtöttpofájú + Náci + Nagyfejű + Nikotinpatkány + Nimfomániás + Nuna + Nunci + Nuncóka + Nyalábfasz + Nyelestojás + Nyúlszar + Oltári nagy fasz + Ondónyelő + Orbitálisan hülye + Ordenálé + Összebaszott + Ötcsillagos fasz + Óvszerezett + Pénisz + Peremesfaszú + Picsa + Picsafej + Picsameresztő + Picsánnyalt + Picsánrugott + Picsányi + Pikkelypáncélt hordó + Pina + Pisa + Pisaszagú + Pisis + Pöcs + Pöcsfej + Porbafingó + Pornóbuzi + Pornómániás + Pudvás + Pudváslikú + Puhafaszú + Punci + Puncimókus + Puncis + Punciutáló + Puncivirág + Qki + Qrva + Qtyaszar + Rabló + Rágcsáltfaszú + Redva + Rendkívül fasz + Repedtsarkú + Rétó-román + Rézhasú + Ribanc + Riherongy + Ritka fogú + Rivalizáló + Rőfös fasz + Rojtospicsájú + Rongyospinájú + Roppant hülye + Rossz kurva + Saját nemével kefélő + Segg + Seggarc + Seggdugó + Seggfej + Seggnyaló + Seggszőr + Seggtorlasz + Sikoltozásokba öltöztetett + Strici + Suttyó + Sutyerák + Szálkafaszú + Szar + Szaralak + Szárazfing + Szarbojler + Szarcsimbók + Szarevő + Szarfaszú + Szarházi + Szarjankó + Szarnivaló + Szarosvalagú + Szarrá vágott + Szarrágó + Szarszagú + Szarszájú + Szartragacs + Szarzsák + Szégyencsicska + Szifiliszes + Szivattyús kurva + Szófosó + Szokatlanul fasz + Szop-o-matic + Szopógép + Szopógörcs + Szopós kurva + Szopottfarkú + Szűklyukú + Szultán udvarát megjárt + Szúnyogfaszni + Szuperbuzi + Szuperkurva + Szűzhártya-repedéses + Szűzkurva + Szűzpicsa + Szűzpunci + Tetves + Tikfos + Tikszar + Tompatökű + Törpefaszú + Toszatlan + Toszott + Totálisan hülye + Tyű de picsa + Tyúkfasznyi + Tyúkszar + Vadfasz + Valag + Valagváladék + Végbélféreg + Xar + Zsugorított faszú + diff --git a/firka/lib/helpers/swear_generator.dart b/firka/lib/helpers/swear_generator.dart new file mode 100644 index 0000000..701dcbe --- /dev/null +++ b/firka/lib/helpers/swear_generator.dart @@ -0,0 +1,50 @@ +import 'dart:math'; +import 'package:flutter/services.dart' show rootBundle; +import 'package:xml/xml.dart'; + +List _nouns = []; +List _adjectives = []; + +Future loadDirtyWords() async { + final xmlString = await rootBundle.loadString('assets/swears/DirtyWords.xml'); + final document = XmlDocument.parse(xmlString); + + for (final node in document.findAllElements('Word')) { + final type = node.getAttribute('type'); + final text = node.text.trim(); + + if (type == 'f') { + _nouns.add(text); + } else if (type == 'm') { + _adjectives.add(text); + } + } +} + +String generateSwearSentence( + {int words = 3, bool capitalize = true, bool exclamation = true}) { + if (words < 1) { + throw ArgumentError('Words must be at least 1'); + } + + final random = Random(); + + // if we only need one word, return a noun, that's the one that fits the most + if (words == 1) { + final word = _nouns[random.nextInt(_nouns.length)].toLowerCase(); + return (capitalize ? word[0].toUpperCase() + word.substring(1) : word) + + (exclamation ? '!' : ''); + } + + final chosenNouns = List.generate( + words - 1, + (_) => _nouns[random.nextInt(_nouns.length)], + ); + + final adjective = _adjectives[random.nextInt(_adjectives.length)]; + + final swear = '${chosenNouns.join(', ')} $adjective'.toLowerCase(); + + return (capitalize ? swear[0].toUpperCase() + swear.substring(1) : swear) + + (exclamation ? '!' : ''); +} diff --git a/firka/lib/main.dart b/firka/lib/main.dart index 5b1514c..455ea95 100644 --- a/firka/lib/main.dart +++ b/firka/lib/main.dart @@ -12,6 +12,7 @@ import 'package:firka/helpers/db/widget.dart'; import 'package:firka/helpers/extensions.dart'; import 'package:firka/helpers/firka_bundle.dart'; import 'package:firka/helpers/settings.dart'; +import 'package:firka/helpers/swear_generator.dart'; import 'package:firka/l10n/app_localizations_hu.dart'; import 'package:firka/ui/model/style.dart'; import 'package:firka/ui/phone/pages/error/error_page.dart'; @@ -351,6 +352,10 @@ void main() async { })(); } + logger.finest('loading dirty words'); + await loadDirtyWords(); + logger.finest('loaded dirty words'); + // Run App Initialization runApp(InitializationScreen()); }, (error, stackTrace) { diff --git a/firka/lib/ui/phone/pages/error/error_page.dart b/firka/lib/ui/phone/pages/error/error_page.dart index fba2a75..c693e6e 100644 --- a/firka/lib/ui/phone/pages/error/error_page.dart +++ b/firka/lib/ui/phone/pages/error/error_page.dart @@ -1,4 +1,8 @@ +import 'package:firka/ui/model/style.dart'; import 'package:flutter/material.dart'; +import 'package:firka/helpers/image_preloader.dart'; +import 'package:firka/helpers/firka_bundle.dart'; +import 'package:firka/helpers/swear_generator.dart'; class ErrorPage extends StatelessWidget { final String exception; @@ -7,6 +11,126 @@ class ErrorPage extends StatelessWidget { @override Widget build(BuildContext context) { + return Scaffold( + backgroundColor: appStyle.colors.background, + body: Padding( + padding: const EdgeInsets.symmetric(vertical: 64, horizontal: 24), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column(children: [ + SizedBox(height: 48), + Container( + width: 50, + height: 50, + clipBehavior: Clip.antiAlias, + decoration: ShapeDecoration( + image: DecorationImage( + image: PreloadedImageProvider(FirkaBundle(), + ('assets/images/logos/dave_error.png')), + fit: BoxFit.cover, + ), + shape: ContinuousRectangleBorder(), + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 24, horizontal: 32), + child: Column(children: [ + Text( + 'e-Kréta, te', + style: appStyle.fonts.H_16px + .copyWith(color: appStyle.colors.textSecondary), + textAlign: TextAlign.center, + ), + Text( + //'a,', + generateSwearSentence(), + style: appStyle.fonts.H_H2.copyWith( + color: appStyle.colors.textPrimary, + fontSize: 24), + textAlign: TextAlign.center, + ), + ])), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 32), + child: Text( + "Valami probléma történt, ez természetesen az EduDev Zrt. hibája minden esetben", + style: appStyle.fonts.B_14R.copyWith( + color: appStyle.colors.textSecondary, + ), + textAlign: TextAlign.center, + ), + ), + ]), + Column( + children: [ + Stack(children: [ + Container( + height: 300, + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + color: appStyle.colors.card, + borderRadius: BorderRadius.circular(12)), + child: Text(exception, + style: appStyle.fonts.B_14R.copyWith( + color: appStyle.colors.textPrimary, + fontFamily: 'RobotoMono'))), + Positioned( + bottom: 0, + right: 16, + child: Container( + width: 60, + height: 76, + clipBehavior: Clip.antiAlias, + decoration: ShapeDecoration( + image: DecorationImage( + image: PreloadedImageProvider(FirkaBundle(), + ('assets/images/cactus_error_screen.png')), + fit: BoxFit.cover, + colorFilter: ColorFilter.srgbToLinearGamma()), + shape: ContinuousRectangleBorder(), + ), + ), + ) + ]), + SizedBox( + height: 20, + ), + ElevatedButton( + // TODO: report bug + onPressed: () => Navigator.pop(context), + style: ElevatedButton.styleFrom( + foregroundColor: appStyle.colors.textPrimary, + backgroundColor: appStyle.colors.accent, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 1, + shadowColor: appStyle.colors.shadowColor, + minimumSize: Size.fromHeight(48)), + child: Text("Hiba jelentése", + style: appStyle.fonts.H_18px + .copyWith(fontWeight: FontWeight.w700))), + SizedBox( + height: 8, + ), + ElevatedButton( + onPressed: () => Navigator.pop(context), + style: ElevatedButton.styleFrom( + foregroundColor: appStyle.colors.textSecondary, + backgroundColor: + appStyle.colors.buttonSecondaryFill, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 1, + shadowColor: appStyle.colors.shadowColor, + minimumSize: Size.fromHeight(48)), + child: Text("Vissza", style: appStyle.fonts.B_16R)) + ], + ) + ]))); + return Scaffold( appBar: AppBar( title: Text('Error Occurred'), diff --git a/firka/pubspec.yaml b/firka/pubspec.yaml index c64f3c4..96702a5 100644 --- a/firka/pubspec.yaml +++ b/firka/pubspec.yaml @@ -69,6 +69,7 @@ dependencies: logging: ^1.3.0 share_plus: ^11.1.0 url_launcher: ^6.3.2 + xml: ^6.6.1 dev_dependencies: flutter_test: @@ -103,6 +104,9 @@ flutter: - assets/icons/ - assets/majesticons/ - assets/firka.i + - assets/swears/DirtyWords.xml + - assets/images/cactus_error_screen.png + - assets/images/logos/dave_error.png fonts: - family: Montserrat