From 6f5df7dd5510601f83ffd0b7c3f10b5837bdf176 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Mon, 24 Apr 2023 10:47:34 +0200 Subject: [PATCH] Fixed allergen duplicates being stored in the database and shown to the user multiple times --- .../com/denizk0461/studip/data/StwParser.kt | 42 +++++++++---------- app/src/main/res/values-de/strings.xml | 12 +++--- app/src/main/res/values/strings.xml | 12 +++--- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/denizk0461/studip/data/StwParser.kt b/app/src/main/java/com/denizk0461/studip/data/StwParser.kt index fd8a5f9..5d4bb5d 100644 --- a/app/src/main/java/com/denizk0461/studip/data/StwParser.kt +++ b/app/src/main/java/com/denizk0461/studip/data/StwParser.kt @@ -209,24 +209,18 @@ class StwParser { .replace(">", ">") .replace("<", "<") - // All allergens will be collected here - var allergens: String = "" - - /* - * Used to determine whether any allergens have already been found in the item. Should this - * be the case, a delimiter is added. - */ - var hasAllergens: Boolean = false - /* * Allergens are stored in super tags. Example: * 4, a1, a4, c, g * This is the start index of the opening tag (inclusive). */ - var indexSupOpen = 0 + var indexSupOpen: Int // This is the end index of the closing tag (exclusive) - var indexSupClose = 0 + var indexSupClose: Int + + // This list collects the individual items without the tags and commas + val allergens = mutableListOf() /* * The Studierendenwerk's website lists allergens, but they are invisible, rendering them @@ -234,29 +228,33 @@ class StwParser { * TODO implement allergen functionality */ while (text.contains("")) { - // Add a delimiter if allergens have already been added - if (hasAllergens) allergens += "," // Set indices for the tags indexSupOpen = text.indexOf("") indexSupClose = text.indexOf("") // Add allergens - allergens += text.substring(indexSupOpen + 5 until indexSupClose) + allergens.addAll( + text.substring(indexSupOpen + 5 until indexSupClose) + // Remove redundant whitespace + .replace(" ", "") + /* + * Split individual strings with multiple allergens so that duplicates can be + * filtered out later. + */ + .split(",") + ) // Remove allergens from the title of the offer text = text.substring(0 until indexSupOpen) + text.substring((indexSupClose + 6) until text.length) - - /* - * Make sure that the delimiter will be added if more than one instance of allergens is - * found. - */ - hasAllergens = true } - // Return the stripped and updated HTML string - return Pair(text, allergens) + /* + * Return the stripped and updated HTML string and join the allergen list to a cohesive + * string without duplication. + */ + return Pair(text, allergens.distinct().joinToString(",")) } /** diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c3d5e2c..49c7d03 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -50,12 +50,12 @@ tierisches Lab - Weizen - Roggen - Gerste - Hafer - Dinkel - Kamut + Gluten (Weizen) + Gluten (Roggen) + Gluten (Gerste) + Gluten (Hafer) + Gluten (Dinkel) + Gluten (Kamut) Krebstiere Eier Fisch diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1cab1af..1f1783d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,12 +50,12 @@ animal rennet - wheat - rye - barley - oats - spelt - kamut + gluten (wheat) + gluten (rye) + gluten (barley) + gluten (oats) + gluten (spelt) + gluten (kamut) crustaceans eggs fish