diff --git a/lib/entities/PizzaRecipe/pizza_recipe.dart b/lib/entities/PizzaRecipe/pizza_recipe.dart index 1392c89..60a43a7 100644 --- a/lib/entities/PizzaRecipe/pizza_recipe.dart +++ b/lib/entities/PizzaRecipe/pizza_recipe.dart @@ -94,6 +94,9 @@ class PizzaRecipe extends HiveObject { } static Future fromParsedYaml(YamlMap recipe) async { + if (recipe.containsKey("recipe")){ + recipe = recipe["recipe"] as YamlMap; + } final String name = recipe["name"] as String; final String? image = recipe.containsKey("image") ? recipe["image"] as String : null; final String description = recipe["description"] as String; diff --git a/lib/main.dart b/lib/main.dart index c935319..a0417f2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -45,9 +45,12 @@ Future main() async { await Hive.openBox(PizzaEvent.hiveName); final pizzaRecipesBox = await Hive.openBox(PizzaRecipe.hiveName); - + if (pizzaRecipesBox.isEmpty){ - pizzaRecipesBox.addAll(await getRecipes()); + pizzaRecipesBox.addAll(await getRecipesFromGithub()); + } + if (pizzaRecipesBox.isEmpty){ + pizzaRecipesBox.addAll(await getLocalRecipes()); } // notification init diff --git a/lib/util.dart b/lib/util.dart index 8ef05d2..edfdc55 100644 --- a/lib/util.dart +++ b/lib/util.dart @@ -1,10 +1,13 @@ import 'dart:convert'; import 'package:flutter/services.dart' show rootBundle; + +import 'package:http/http.dart' as http; import 'package:intl/intl.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/pizza_recipe.dart'; +import 'package:yaml/yaml.dart'; -Future> getRecipes() async { +Future> getLocalRecipes() async { final manifestContent = await rootBundle.loadString('AssetManifest.json'); final Map manifestMap = json.decode(manifestContent) as Map; final List fileList = manifestMap.keys.toList(); @@ -18,6 +21,32 @@ Future> getRecipes() async { return pizzaRecipes; } +Future> getRecipesFromGithub() async { + const String initialRecipeListUrl = "https://raw.githubusercontent.com/broodjeaap/PizzaRecipes/master/app_init/recipes.yaml"; + + final uri = Uri.parse(initialRecipeListUrl); + if (!uri.isAbsolute){ + return const []; + } + final response = await http.get(uri); + if (response.statusCode != 200) { + return const []; + } + + final yamlBody = response.body; + if (!yamlBody.startsWith("recipes:")){ + return const []; + } + final rootYaml = loadYaml(yamlBody) as YamlMap; + final recipeList = rootYaml["recipes"] as YamlList; + final returnRecipeList = []; + for (final recipe in recipeList){ + returnRecipeList.add(await PizzaRecipe.fromParsedYaml(recipe as YamlMap)); + } + return returnRecipeList; + return const []; +} + Future loadAsset(String path) async { return rootBundle.loadString(path); }