changeset 11:a62e5e4a4f02

Implementing networking
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Tue, 13 Jul 2021 12:14:42 +0100
parents ed35ef4738b9
children 81f4e0a3b1eb
files Simoleon.xcodeproj/project.pbxproj Simoleon.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate Simoleon/Assets.xcassets/Colours/Shadow.colorset/Contents.json Simoleon/ContentView.swift Simoleon/CurrencyConversion.swift Simoleon/Helpers/BigFlagsPair.swift Simoleon/Helpers/CurrencyConversion.swift Simoleon/Helpers/CurrencyRow.swift Simoleon/Helpers/FlagPair.swift Simoleon/Helpers/MainCurrencyRow.swift Simoleon/Helpers/SearchBar.swift Simoleon/Helpers/SearchCurrencyRow.swift Simoleon/Helpers/SmallFlagsPair.swift Simoleon/Models/CurrencyMetadataModel.swift Simoleon/Models/CurrencyModel.swift Simoleon/Models/CurrencyQuoteModel.swift Simoleon/Resources/Currencies.json Simoleon/Resources/CurrencyMetadata.json Simoleon/Resources/PopularCurrencyPairs.json
diffstat 19 files changed, 1231 insertions(+), 1190 deletions(-) [+]
line wrap: on
line diff
--- a/Simoleon.xcodeproj/project.pbxproj	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon.xcodeproj/project.pbxproj	Tue Jul 13 12:14:42 2021 +0100
@@ -7,15 +7,13 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		9555932C269B0390000FD726 /* BigFlagsPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9555932B269B0390000FD726 /* BigFlagsPair.swift */; };
-		95559330269B08CE000FD726 /* MainCurrencyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9555932F269B08CE000FD726 /* MainCurrencyRow.swift */; };
 		95559333269B0965000FD726 /* CurrencyQuoteModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95559332269B0965000FD726 /* CurrencyQuoteModel.swift */; };
 		95559337269B0A7B000FD726 /* CurrencyQuoteData.json in Resources */ = {isa = PBXBuildFile; fileRef = 95559336269B0A7B000FD726 /* CurrencyQuoteData.json */; };
 		9555933A269B0AB8000FD726 /* ParseJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95559339269B0AB8000FD726 /* ParseJson.swift */; };
-		9555933D269B0E0A000FD726 /* Currencies.json in Resources */ = {isa = PBXBuildFile; fileRef = 9555933C269B0E0A000FD726 /* Currencies.json */; };
-		9555933F269B0E47000FD726 /* CurrencyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9555933E269B0E47000FD726 /* CurrencyModel.swift */; };
+		9555933D269B0E0A000FD726 /* CurrencyMetadata.json in Resources */ = {isa = PBXBuildFile; fileRef = 9555933C269B0E0A000FD726 /* CurrencyMetadata.json */; };
+		9555933F269B0E47000FD726 /* CurrencyMetadataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9555933E269B0E47000FD726 /* CurrencyMetadataModel.swift */; };
 		956C28CA269B5893005A4595 /* CurrencyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956C28C9269B5893005A4595 /* CurrencyRow.swift */; };
-		956C28CC269B58A0005A4595 /* SmallFlagsPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956C28CB269B58A0005A4595 /* SmallFlagsPair.swift */; };
+		956C28CC269B58A0005A4595 /* FlagPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956C28CB269B58A0005A4595 /* FlagPair.swift */; };
 		95C02C8B269B61680061DD6D /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 95C02C8A269B61680061DD6D /* Alamofire */; };
 		95C5B2282697752600941585 /* SimoleonApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5B2272697752600941585 /* SimoleonApp.swift */; };
 		95C5B22A2697752600941585 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5B2292697752600941585 /* ContentView.swift */; };
@@ -29,6 +27,7 @@
 		95E137CD269C9A0600D2C5DC /* SearchCurrencyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E137CC269C9A0600D2C5DC /* SearchCurrencyRow.swift */; };
 		95E137CF269C9D8B00D2C5DC /* CurrencyConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E137CE269C9D8B00D2C5DC /* CurrencyConversion.swift */; };
 		95E137D1269C9F0D00D2C5DC /* SingleFlag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E137D0269C9F0D00D2C5DC /* SingleFlag.swift */; };
+		95EC0013269D90AD00C35E5E /* PopularCurrencyPairs.json in Resources */ = {isa = PBXBuildFile; fileRef = 95EC0012269D90AD00C35E5E /* PopularCurrencyPairs.json */; };
 		95FE659C269AFB54008745DE /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FE659B269AFB54008745DE /* SearchBar.swift */; };
 /* End PBXBuildFile section */
 
@@ -50,15 +49,13 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		9555932B269B0390000FD726 /* BigFlagsPair.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BigFlagsPair.swift; sourceTree = "<group>"; };
-		9555932F269B08CE000FD726 /* MainCurrencyRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainCurrencyRow.swift; sourceTree = "<group>"; };
 		95559332269B0965000FD726 /* CurrencyQuoteModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyQuoteModel.swift; sourceTree = "<group>"; };
 		95559336269B0A7B000FD726 /* CurrencyQuoteData.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = CurrencyQuoteData.json; sourceTree = "<group>"; };
 		95559339269B0AB8000FD726 /* ParseJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseJson.swift; sourceTree = "<group>"; };
-		9555933C269B0E0A000FD726 /* Currencies.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Currencies.json; sourceTree = "<group>"; };
-		9555933E269B0E47000FD726 /* CurrencyModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyModel.swift; sourceTree = "<group>"; };
+		9555933C269B0E0A000FD726 /* CurrencyMetadata.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = CurrencyMetadata.json; sourceTree = "<group>"; };
+		9555933E269B0E47000FD726 /* CurrencyMetadataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyMetadataModel.swift; sourceTree = "<group>"; };
 		956C28C9269B5893005A4595 /* CurrencyRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyRow.swift; sourceTree = "<group>"; };
-		956C28CB269B58A0005A4595 /* SmallFlagsPair.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallFlagsPair.swift; sourceTree = "<group>"; };
+		956C28CB269B58A0005A4595 /* FlagPair.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlagPair.swift; sourceTree = "<group>"; };
 		95C5B2242697752600941585 /* Simoleon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Simoleon.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		95C5B2272697752600941585 /* SimoleonApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimoleonApp.swift; sourceTree = "<group>"; };
 		95C5B2292697752600941585 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
@@ -77,6 +74,7 @@
 		95E137CC269C9A0600D2C5DC /* SearchCurrencyRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCurrencyRow.swift; sourceTree = "<group>"; };
 		95E137CE269C9D8B00D2C5DC /* CurrencyConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyConversion.swift; sourceTree = "<group>"; };
 		95E137D0269C9F0D00D2C5DC /* SingleFlag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleFlag.swift; sourceTree = "<group>"; };
+		95EC0012269D90AD00C35E5E /* PopularCurrencyPairs.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = PopularCurrencyPairs.json; sourceTree = "<group>"; };
 		95FE659B269AFB54008745DE /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -110,7 +108,7 @@
 			isa = PBXGroup;
 			children = (
 				95559332269B0965000FD726 /* CurrencyQuoteModel.swift */,
-				9555933E269B0E47000FD726 /* CurrencyModel.swift */,
+				9555933E269B0E47000FD726 /* CurrencyMetadataModel.swift */,
 			);
 			path = Models;
 			sourceTree = "<group>";
@@ -126,8 +124,9 @@
 		9555933B269B0DF9000FD726 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				9555933C269B0E0A000FD726 /* Currencies.json */,
+				9555933C269B0E0A000FD726 /* CurrencyMetadata.json */,
 				95DD4ABA269B33810027CA1F /* CurrencyPairs.json */,
+				95EC0012269D90AD00C35E5E /* PopularCurrencyPairs.json */,
 			);
 			path = Resources;
 			sourceTree = "<group>";
@@ -157,6 +156,7 @@
 			children = (
 				95C5B2272697752600941585 /* SimoleonApp.swift */,
 				95C5B2292697752600941585 /* ContentView.swift */,
+				95E137CE269C9D8B00D2C5DC /* CurrencyConversion.swift */,
 				95C5B22B2697752700941585 /* Assets.xcassets */,
 				95C5B2302697752700941585 /* Persistence.swift */,
 				95C5B2352697752700941585 /* Info.plist */,
@@ -201,13 +201,10 @@
 			isa = PBXGroup;
 			children = (
 				95FE659B269AFB54008745DE /* SearchBar.swift */,
-				9555932B269B0390000FD726 /* BigFlagsPair.swift */,
-				956C28CB269B58A0005A4595 /* SmallFlagsPair.swift */,
+				956C28CB269B58A0005A4595 /* FlagPair.swift */,
 				95E137D0269C9F0D00D2C5DC /* SingleFlag.swift */,
-				9555932F269B08CE000FD726 /* MainCurrencyRow.swift */,
 				956C28C9269B5893005A4595 /* CurrencyRow.swift */,
 				95E137CC269C9A0600D2C5DC /* SearchCurrencyRow.swift */,
-				95E137CE269C9D8B00D2C5DC /* CurrencyConversion.swift */,
 			);
 			path = Helpers;
 			sourceTree = "<group>";
@@ -322,9 +319,10 @@
 			buildActionMask = 2147483647;
 			files = (
 				95559337269B0A7B000FD726 /* CurrencyQuoteData.json in Resources */,
+				95EC0013269D90AD00C35E5E /* PopularCurrencyPairs.json in Resources */,
 				95DD4ABB269B33810027CA1F /* CurrencyPairs.json in Resources */,
 				95C5B22F2697752700941585 /* Preview Assets.xcassets in Resources */,
-				9555933D269B0E0A000FD726 /* Currencies.json in Resources */,
+				9555933D269B0E0A000FD726 /* CurrencyMetadata.json in Resources */,
 				95C5B22C2697752700941585 /* Assets.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -351,13 +349,11 @@
 			buildActionMask = 2147483647;
 			files = (
 				956C28CA269B5893005A4595 /* CurrencyRow.swift in Sources */,
-				956C28CC269B58A0005A4595 /* SmallFlagsPair.swift in Sources */,
-				9555933F269B0E47000FD726 /* CurrencyModel.swift in Sources */,
-				95559330269B08CE000FD726 /* MainCurrencyRow.swift in Sources */,
+				956C28CC269B58A0005A4595 /* FlagPair.swift in Sources */,
+				9555933F269B0E47000FD726 /* CurrencyMetadataModel.swift in Sources */,
 				95C5B2312697752700941585 /* Persistence.swift in Sources */,
 				9555933A269B0AB8000FD726 /* ParseJson.swift in Sources */,
 				95E137CD269C9A0600D2C5DC /* SearchCurrencyRow.swift in Sources */,
-				9555932C269B0390000FD726 /* BigFlagsPair.swift in Sources */,
 				95E137CF269C9D8B00D2C5DC /* CurrencyConversion.swift in Sources */,
 				95C5B22A2697752600941585 /* ContentView.swift in Sources */,
 				95FE659C269AFB54008745DE /* SearchBar.swift in Sources */,
Binary file Simoleon.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/Assets.xcassets/Colours/Shadow.colorset/Contents.json	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,33 @@
+{
+  "colors" : [
+    {
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0.694",
+          "green" : "0.808",
+          "red" : "0.804"
+        }
+      },
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "platform" : "ios",
+        "reference" : "secondarySystemBackgroundColor"
+      },
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
--- a/Simoleon/ContentView.swift	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon/ContentView.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -6,12 +6,87 @@
 //
 
 import SwiftUI
+import Alamofire
 
 struct ContentView: View {
+    @State private var showingView = false
+    @State private var text = ""
+    @State private var isEditing = false
+    @State private var popularCurrencyPairs = [CurrencyQuoteModel()]
+    @State private var selectedCurrencyQuote: CurrencyQuoteModel? = nil
+    let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
+    
     var body: some View {
-        Text("Hello world")
+        if showingView {
+            NavigationView {
+                ScrollView(showsIndicators: false) {
+                    VStack(spacing: 20) {
+                        SearchBar(text: $text, isEditing: $isEditing)
+                            .padding(.vertical)
+                        
+                        ForEach(popularCurrencyPairs, id: \.self) { currencyQuote in
+                            CurrencyRow(currencyQuote: currencyQuote)
+                                .onTapGesture { self.selectedCurrencyQuote = currencyQuote }
+                                .padding(.bottom)
+                        }
+                    }
+                    .sheet(item: self.$selectedCurrencyQuote) { currencyQuote in
+                        CurrencyConversion(currencyQuote: currencyQuote)
+                    }
+                }
+                .navigationTitle("Simoleon")
+                .toolbar {
+                    ToolbarItem(placement: .primaryAction) {
+                        Button(action: {  }) {
+                            Image(systemName: "gearshape")
+                        }
+                    }
+                    
+                    ToolbarItem(placement: .cancellationAction) {
+                        if isEditing {
+                            Button("Cancel", action: {
+                                text = ""
+                                isEditing = false
+                                UIApplication.shared.dismissKeyboard()
+                            })
+                        }
+                    }
+                }
+            }
+        } else {
+            ProgressView()
+                .onAppear(perform: requestPopularCurrencies)
+        }
+    }
+    
+    /*
+     Request API popular currency pairs
+     */
+    private func requestPopularCurrencies() {
+        let popularCurrencyPairsArray: [String] = parseJson("PopularCurrencyPairs.json")
+        let popularCurrencyPairsString = popularCurrencyPairsArray.joined(separator: ",")
+        let quotes = popularCurrencyPairsString.replacingOccurrences(of: "/", with: "-")
+        let url = "https://api.simoleon.app/quotes=\(quotes)"
+        
+        // Request popular currencies
+        AF.request(url).responseDecodable(of: [CurrencyQuoteModel].self) { response in
+            if let popularCurrencyPairs = response.value {
+                self.popularCurrencyPairs = popularCurrencyPairs
+                self.showingView = true
+            } else {
+                // Handle error
+            }
+        }
     }
 }
+/*
+ Dismiss keyboard on cancel textfield
+ */
+extension UIApplication {
+      func dismissKeyboard() {
+          sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
+      }
+  }
 
 
 struct ContentView_Previews: PreviewProvider {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/CurrencyConversion.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,105 @@
+//
+//  CurrencyConversion.swift
+//  Simoleon
+//
+//  Created by Dennis Concepción Martín on 12/07/2021.
+//
+
+import SwiftUI
+
+struct CurrencyConversion: View {
+    var currencyQuote: CurrencyQuoteModel
+    let currenciesMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
+    @State private var inputAmount: String = "100"
+    @Environment(\.presentationMode) private var currencyConversionPresentation
+    
+    var body: some View {
+        NavigationView {
+            ScrollView(showsIndicators: false) {
+                VStack(spacing: 20) {
+                    let symbols = currencyQuote.symbol!.split(separator: "/")
+                    // MARK: - First currency row
+                    VStack {
+                        RoundedRectangle(cornerRadius: 10)
+                            .rectangleModifier(Color("Shadow"), 80)
+                        
+                        RoundedRectangle(cornerRadius: 10)
+                            .rectangleModifier(Color(.systemBackground), 80)
+                            .overlay(
+                                HStack {
+                                    SingleFlag(flag: currenciesMetadata[String(symbols[0])]!.flag)
+                                    Text(String(symbols[0]))
+                                        .fontWeight(.semibold)
+                                        .padding(.leading)
+                                    
+                                    TextField("Amount", text: $inputAmount)
+                                        .keyboardType(.decimalPad)
+                                        .padding(.leading)
+                                }
+                                .padding(.horizontal)
+                            )
+                            .offset(x: -10.0, y: -100.0)
+                            .padding(.bottom, -100)
+                    }
+                    .padding(.leading, 10)
+                    .padding([.horizontal, .bottom])
+                    
+                    // MARK: - Second currency row
+                    VStack {
+                        RoundedRectangle(cornerRadius: 10)
+                            .rectangleModifier(Color("Shadow"), 80)
+
+                        RoundedRectangle(cornerRadius: 10)
+                            .rectangleModifier(Color(.systemBackground), 80)
+                            .overlay(
+                                HStack {
+                                    SingleFlag(flag: currenciesMetadata[String(symbols[1])]!.flag)
+                                    Text(String(symbols[1]))
+                                        .fontWeight(.semibold)
+                                        .padding(.leading)
+                                    
+                                    Text("\(makeConversion(inputAmount), specifier: "%.2f")")
+                                        .padding(.leading)
+                                    Spacer()
+                                }
+                                .padding(.horizontal)
+                            )
+                            .offset(x: -10.0, y: -100.0)
+                            .padding(.bottom, -100)
+                    }
+                    .padding(.leading, 10)
+                    .padding(.horizontal)
+                    
+                }
+                .padding(.vertical)
+            }
+            .navigationTitle("Conversion")
+            .toolbar {
+                ToolbarItem(placement: .cancellationAction) {
+                    Button("Cancel", action: { currencyConversionPresentation.wrappedValue.dismiss() })
+                }
+            }
+        }
+    }
+    
+    /*
+     Make currency conversion
+     */
+    private func makeConversion(_ inputAmount: String) -> Float {
+        if inputAmount.isEmpty {  /// Avoid nil error when string is empty
+            return 0
+        } else {
+            let conversion = Float(inputAmount)!  * currencyQuote.price!
+            
+            return conversion
+        }
+    }
+}
+
+struct CurrencyConversion_Previews: PreviewProvider {
+    static var previews: some View {
+        let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
+        
+        CurrencyConversion(currencyQuote: currencyQuote)
+    }
+}
--- a/Simoleon/Helpers/BigFlagsPair.swift	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-//
-//  BigFlagsPair.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 11/07/2021.
-//
-
-import SwiftUI
-
-struct BigFlagsPair: View {
-    var mainCurrencyFlag: String
-    var secondaryCurrencyFlag: String
-    
-    var body: some View {
-        VStack {
-            Image(secondaryCurrencyFlag)
-                .flagModifier(80)
-            
-            Image(mainCurrencyFlag)
-                .flagModifier(80)
-                .offset(x: 40, y: -60)
-                .padding(.bottom, -60)
-                
-                
-        }
-        .padding(.trailing, 40)
-    }
-}
-extension Image {
-    func flagModifier(_ size: CGFloat) -> some View {
-        self
-            .resizable()
-            .aspectRatio(contentMode: .fill)
-            .clipShape(Circle())
-            .overlay(Circle().stroke(Color("FlagBorder"), lineWidth: 2))
-            .frame(width: size, height: size)
-    }
-}
-
-struct FlagsPair_Previews: PreviewProvider {
-    static var previews: some View {
-        BigFlagsPair(mainCurrencyFlag: "GB", secondaryCurrencyFlag: "US")
-    }
-}
--- a/Simoleon/Helpers/CurrencyConversion.swift	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-//
-//  CurrencyConversion.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 12/07/2021.
-//
-
-import SwiftUI
-
-struct CurrencyConversion: View {
-    var currencyQuote: CurrencyQuoteModel
-    let currencies: [String: CurrencyModel] = parseJson("Currencies.json")
-    @State private var inputAmount: Float = 100
-    
-    var body: some View {
-        VStack {
-            let symbols = currencyQuote.symbol.split(separator: "/")
-            // MARK: - First currency row
-            VStack {
-                RoundedRectangle(cornerRadius: 10)
-                    .rectangleModifier(Color("Bone"), 80)
-                
-                RoundedRectangle(cornerRadius: 10)
-                    .rectangleModifier(Color(.systemBackground), 80)
-                    .overlay(
-                        HStack {
-                            SingleFlag(flag: currencies[String(symbols[0])]!.flag)
-                            Text(String(symbols[0]))
-                                .fontWeight(.semibold)
-                                .padding(.leading)
-                            
-                            TextField("Amount", value: $inputAmount, formatter: NumberFormatter())
-                                .padding(.leading)
-                        }
-                        .padding(.horizontal)
-                    )
-                    .offset(x: -10.0, y: -100.0)
-                    .padding(.bottom, -100)
-            }
-            .padding(.leading, 10)
-            .padding([.horizontal, .bottom])
-            
-            // MARK: - Second currency row
-            VStack {
-                RoundedRectangle(cornerRadius: 10)
-                    .rectangleModifier(Color("Bone"), 80)
-
-                RoundedRectangle(cornerRadius: 10)
-                    .rectangleModifier(Color(.systemBackground), 80)
-                    .overlay(
-                        HStack {
-                            SingleFlag(flag: currencies[String(symbols[1])]!.flag)
-                            Text(String(symbols[1]))
-                                .fontWeight(.semibold)
-                                .padding(.leading)
-                            
-                            let conversion = inputAmount * currencyQuote.price
-                            Text("\(conversion, specifier: "%.2f")")
-                                .padding(.leading)
-                            Spacer()
-                        }
-                        .padding(.horizontal)
-                    )
-                    .offset(x: -10.0, y: -100.0)
-                    .padding(.bottom, -100)
-            }
-            .padding(.leading, 10)
-            .padding(.horizontal)
-        }
-    }
-}
-
-struct CurrencyConversion_Previews: PreviewProvider {
-    static var previews: some View {
-        let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
-        
-        CurrencyConversion(currencyQuote: currencyQuote)
-    }
-}
--- a/Simoleon/Helpers/CurrencyRow.swift	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon/Helpers/CurrencyRow.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -9,22 +9,22 @@
 
 struct CurrencyRow: View {
     var currencyQuote: CurrencyQuoteModel
-    let currencies: [String: CurrencyModel] = parseJson("Currencies.json")
+    let currenciesMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
     
     var body: some View {
-        VStack {
+        VStack(alignment: .leading) {
             RoundedRectangle(cornerRadius: 10)
-                .rectangleModifier(Color("Bone"), 100)
+                .rectangleModifier(Color("Shadow"), 100)
             
             RoundedRectangle(cornerRadius: 10)
                 .rectangleModifier(Color(.systemBackground), 100)
                 .overlay(
                     HStack {
-                        let symbols = currencyQuote.symbol.split(separator: "/")
-                        let mainCurrencyFlag = currencies[String(symbols[0])]!.flag
-                        let secondaryCurrencyFlag = currencies[String(symbols[1])]!.flag
+                        let symbols = currencyQuote.symbol!.split(separator: "/")
+                        let mainCurrencyFlag = currenciesMetadata[String(symbols[0])]!.flag
+                        let secondaryCurrencyFlag = currenciesMetadata[String(symbols[1])]!.flag
                         
-                        SmallFlagsPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag)
+                        FlagPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag)
                         
                         VStack(alignment: .leading) {
                             Text("\(String(symbols[0]))")
@@ -37,7 +37,7 @@
                         
                         VStack(alignment: .leading) {
                             Text("Bid")
-                            Text("\(currencyQuote.bid, specifier: "%.4f")")
+                            Text("\(currencyQuote.bid!, specifier: "%.4f")")
                                 .fontWeight(.semibold)
                                 
                         }
@@ -45,11 +45,14 @@
                         
                         VStack(alignment: .leading) {
                             Text("Ask")
-                            Text("\(currencyQuote.ask, specifier: "%.4f")")
+                            Text("\(currencyQuote.ask!, specifier: "%.4f")")
                                 .fontWeight(.semibold)
                                 
                         }
+                        
+                        Spacer()
                     }
+                    .padding(.horizontal)
                 )
                 .offset(x: -10.0, y: -120.0)
                 .padding(.bottom, -120)
@@ -58,6 +61,15 @@
         .padding(.horizontal)
     }
 }
+extension RoundedRectangle {
+    func rectangleModifier(_ colour: Color, _ height: CGFloat) -> some View {
+        self
+            .strokeBorder(Color("Border"), lineWidth: 2)
+            .background(RoundedRectangle(cornerRadius: 10).foregroundColor(colour))
+            .frame(height: height)
+            
+    }
+}
 
 struct CurrencyRow_Previews: PreviewProvider {
     static var previews: some View {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/Helpers/FlagPair.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,44 @@
+//
+//  FlagPair.swift
+//  Simoleon
+//
+//  Created by Dennis Concepción Martín on 11/07/2021.
+//
+
+import SwiftUI
+
+struct FlagPair: View {
+    var mainCurrencyFlag: String
+    var secondaryCurrencyFlag: String
+    
+    var body: some View {
+        VStack {
+            Image(secondaryCurrencyFlag)
+                .flagModifier(50)
+            
+            Image(mainCurrencyFlag)
+                .flagModifier(50)
+                .offset(x: 20, y: -40)
+                .padding(.bottom, -40)
+                
+                
+        }
+        .padding(.trailing, 20)
+    }
+}
+extension Image {
+    func flagModifier(_ size: CGFloat) -> some View {
+        self
+            .resizable()
+            .aspectRatio(contentMode: .fill)
+            .clipShape(Circle())
+            .overlay(Circle().stroke(Color("FlagBorder"), lineWidth: 2))
+            .frame(width: size, height: size)
+    }
+}
+
+struct SmallFlagsPair_Previews: PreviewProvider {
+    static var previews: some View {
+        FlagPair(mainCurrencyFlag: "GB", secondaryCurrencyFlag: "US")
+    }
+}
--- a/Simoleon/Helpers/MainCurrencyRow.swift	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-//
-//  MainCurrencyRow.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 11/07/2021.
-//
-
-import SwiftUI
-
-struct MainCurrencyRow: View {
-    var currencyQuote: CurrencyQuoteModel
-    let currencies: [String: CurrencyModel] = parseJson("Currencies.json")
-    
-    var body: some View {
-        VStack {
-            RoundedRectangle(cornerRadius: 10)
-                .rectangleModifier(Color("Bone"), 250)
-            
-            RoundedRectangle(cornerRadius: 10)
-                .rectangleModifier(Color(.systemBackground), 250)
-                .overlay(
-                    VStack {
-                        let symbols = currencyQuote.symbol.split(separator: "/")
-                        let mainCurrencyFlag = currencies[String(symbols[0])]!.flag
-                        let SecondaryCurrencyFlag = currencies[String(symbols[1])]!.flag
-                        HStack {
-                        BigFlagsPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: SecondaryCurrencyFlag)
-                            
-                            VStack(alignment: .leading) {
-                                Text("Bid")
-                                    .font(.title3)
-                                
-                                Text("\(currencyQuote.bid, specifier: "%.4f")")
-                                    .font(.title3)
-                                    .fontWeight(.semibold)
-                            }
-                            .padding(.horizontal)
-                            
-                            VStack(alignment: .leading) {
-                                Text("Ask")
-                                    .font(.title3)
-                                
-                                Text("\(currencyQuote.ask, specifier: "%.4f")")
-                                    .font(.title3)
-                                    .fontWeight(.semibold)
-                            }
-                            .padding(.trailing)
-                        }
-                        
-                        Text("100 \(String(symbols[0])) is worth \(currencyQuote.ask*100, specifier: "%.2f") \(String(symbols[1]))")
-                            .font(.title3)
-                            .fontWeight(.semibold)
-                            .padding()
-                    }
-                )
-                .offset(x: -10, y: -270)
-                .padding(.bottom, -270)
-        }
-        .padding(.leading, 10)
-        .padding(.horizontal)
-    }
-}
-extension RoundedRectangle {
-    func rectangleModifier(_ colour: Color, _ height: CGFloat) -> some View {
-        self
-            .strokeBorder(Color("Border"), lineWidth: 2)
-            .background(RoundedRectangle(cornerRadius: 10).foregroundColor(colour))
-            .frame(height: height)
-            
-    }
-}
-
-struct MainCurrencyRow_Previews: PreviewProvider {
-    static var previews: some View {
-        let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
-        
-        MainCurrencyRow(currencyQuote: currencyQuote)
-    }
-}
--- a/Simoleon/Helpers/SearchBar.swift	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon/Helpers/SearchBar.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -14,7 +14,7 @@
     var body: some View {
         VStack {
             Capsule()
-                .capsuleModifier(Color("Bone"))
+                .capsuleModifier(Color("Shadow"))
                 
             Capsule()
                 .capsuleModifier(Color(.systemBackground))
@@ -24,6 +24,7 @@
                             .padding(.leading, 55)
                             .padding(.trailing)
                             .padding(.vertical, 25)  /// Expand tapable area
+                            .onTapGesture { isEditing = true }
                             .contentShape(Capsule())
                         
                         Image(systemName: "magnifyingglass.circle")
@@ -32,10 +33,10 @@
                             .padding(.leading)
                     }
                 )
-                .offset(x: -7, y: -90)
-                .padding(.bottom, -90)
+                .offset(x: -5, y: -77)
+                .padding(.bottom, -78)
         }
-        .padding(.leading, 7)
+        .padding(.leading, 5)
         .padding(.horizontal)
         
     }
@@ -45,7 +46,7 @@
         self
             .strokeBorder(Color("Border"), lineWidth: 2)
             .background(Capsule().foregroundColor(colour))
-            .frame(height: 70)
+            .frame(height: 60)
     }
 }
 
--- a/Simoleon/Helpers/SearchCurrencyRow.swift	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon/Helpers/SearchCurrencyRow.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -9,30 +9,30 @@
 
 struct SearchCurrencyRow: View {
     var currencyPair: String
-    let currencies: [String: CurrencyModel] = parseJson("Currencies.json")
+    let currenciesMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
     
     var body: some View {
         VStack {
             RoundedRectangle(cornerRadius: 10)
-                .rectangleModifier(Color("Bone"), 100)
+                .rectangleModifier(Color("Shadow"), 100)
             
             RoundedRectangle(cornerRadius: 10)
                 .rectangleModifier(Color(.systemBackground), 100)
                 .overlay(
                     HStack {
                         let symbols = currencyPair.split(separator: "/")
-                        let mainCurrencyFlag = currencies[String(symbols[0])]!.flag
-                        let secondaryCurrencyFlag = currencies[String(symbols[1])]!.flag
+                        let mainCurrencyFlag = currenciesMetadata[String(symbols[0])]!.flag
+                        let secondaryCurrencyFlag = currenciesMetadata[String(symbols[1])]!.flag
                         
-                        SmallFlagsPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag)
+                        FlagPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag)
                         
                         VStack(alignment: .leading) {
                             Text("\(currencyPair)")
                                 .fontWeight(.semibold)
                             
                             Group {
-                                Text("\(currencies[String(symbols[0])]!.name)")
-                                Text("\(currencies[String(symbols[1])]!.name)")
+                                Text("\(currenciesMetadata[String(symbols[0])]!.name)")
+                                Text("\(currenciesMetadata[String(symbols[1])]!.name)")
                             }
                             .font(.callout)
                             .opacity(0.7)
--- a/Simoleon/Helpers/SmallFlagsPair.swift	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-//
-//  SmallFlagsPair.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 11/07/2021.
-//
-
-import SwiftUI
-
-struct SmallFlagsPair: View {
-    var mainCurrencyFlag: String
-    var secondaryCurrencyFlag: String
-    
-    var body: some View {
-        VStack {
-            Image(secondaryCurrencyFlag)
-                .flagModifier(50)
-            
-            Image(mainCurrencyFlag)
-                .flagModifier(50)
-                .offset(x: 20, y: -40)
-                .padding(.bottom, -40)
-                
-                
-        }
-        .padding(.trailing, 20)
-    }
-}
-
-struct SmallFlagsPair_Previews: PreviewProvider {
-    static var previews: some View {
-        SmallFlagsPair(mainCurrencyFlag: "GB", secondaryCurrencyFlag: "US")
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/Models/CurrencyMetadataModel.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,13 @@
+//
+//  CurrencyMetadataModel.swift
+//  Simoleon
+//
+//  Created by Dennis Concepción Martín on 11/07/2021.
+//
+
+import SwiftUI
+
+struct CurrencyMetadataModel: Codable {
+    var name: String
+    var flag: String
+}
--- a/Simoleon/Models/CurrencyModel.swift	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-//
-//  CurrencyModel.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 11/07/2021.
-//
-
-import SwiftUI
-
-struct CurrencyModel: Codable {
-    var name: String
-    var flag: String
-}
--- a/Simoleon/Models/CurrencyQuoteModel.swift	Mon Jul 12 17:44:55 2021 +0100
+++ b/Simoleon/Models/CurrencyQuoteModel.swift	Tue Jul 13 12:14:42 2021 +0100
@@ -7,12 +7,13 @@
 
 import SwiftUI
 
-struct CurrencyQuoteModel: Codable {
-    var symbol: String
-    var price: Float
-    var bid: Float
-    var ask: Float
-    var timeStamp: Int
+struct CurrencyQuoteModel: Codable, Hashable {
+    var id: UUID?
+    var symbol: String?
+    var price: Float?
+    var bid: Float?
+    var ask: Float?
+    var timeStamp: Int?
     
     private enum CodingKeys: String, CodingKey {
         case symbol = "s"
@@ -22,3 +23,4 @@
         case timeStamp = "t"
     }
 }
+extension CurrencyQuoteModel: Identifiable {}
--- a/Simoleon/Resources/Currencies.json	Mon Jul 12 17:44:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,892 +0,0 @@
-{
-    "AED":
-    {
-        "name": "United Arab Emirates dirham",
-        "flag": "AE"
-    },
-    "AFN":
-    {
-        "name": "Afghan afghani",
-        "flag": "AF"
-    },
-    "ALL":
-    {
-        "name": "Albanian lek",
-        "flag": "AL"
-    },
-    "AMD":
-    {
-        "name": "Armenian dram",
-        "flag": "AM"
-    },
-    "ANG":
-    {
-        "name": "Netherlands Antillean guilder",
-        "flag": "CW"
-    },
-    "AOA":
-    {
-        "name": "Angolan kwanza",
-        "flag": "AO"
-    },
-    "ARE":
-    {
-        "name": "AREG",
-        "flag": "AR"
-    },
-    "ARS":
-    {
-        "name": "Argentine peso",
-        "flag": "AR"
-    },
-    "AUD":
-    {
-        "name": "Australian dollar",
-        "flag": "AU"
-    },
-    "AUN":
-    {
-        "name": "Australian nugget",
-        "flag": "AU"
-    },
-    "AWG":
-    {
-        "name": "Aruban florin",
-        "flag": "AW"
-    },
-    "BAM":
-    {
-        "name": "Bosnia and Herzegovina convertible mark",
-        "flag": "BA"
-    },
-    "BBD":
-    {
-        "name": "Barbados dollar",
-        "flag": "BB"
-    },
-    "BDT":
-    {
-        "name": "Bangladeshi taka",
-        "flag": "BD"
-    },
-    "BGN":
-    {
-        "name": "Bulgarian lev",
-        "flag": "BG"
-    },
-    "BHD":
-    {
-        "name": "Bahraini dinar",
-        "flag": "BH"
-    },
-    "BIF":
-    {
-        "name": "Burundian franc",
-        "flag": "BI"
-    },
-    "BMD":
-    {
-        "name": "Bermudian dollar",
-        "flag": "BM"
-    },
-    "BND":
-    {
-        "name": "Brunei dollar",
-        "flag": "BN"
-    },
-    "BOB":
-    {
-        "name": "Boliviano",
-        "flag": "BO"
-    },
-    "BRI":
-    {
-        "name": "Britannia",
-        "flag": "BR"
-    },
-    "BRL":
-    {
-        "name": "Brazilian real",
-        "flag": "BR"
-    },
-    "BSD":
-    {
-        "name": "Bahamian dollar",
-        "flag": "BS"
-    },
-    "BTN":
-    {
-        "name": "Bhutanese ngultrum",
-        "flag": "BT"
-    },
-    "BWP":
-    {
-        "name": "Botswana pula",
-        "flag": "BW"
-    },
-    "BYN":
-    {
-        "name": "Belarusian ruble",
-        "flag": "BY"
-    },
-    "BZD":
-    {
-        "name": "Belize dollar",
-        "flag": "BZ"
-    },
-    "CAD":
-    {
-        "name": "Canadian dollar",
-        "flag": "CA"
-    },
-    "CDF":
-    {
-        "name": "Congolese franc",
-        "flag": "CD"
-    },
-    "CHF":
-    {
-        "name": "Swiss franc",
-        "flag": "CH"
-    },
-    "CLF":
-    {
-        "name": "Chilean Unit of Account",
-        "flag": "CL"
-    },
-    "CLP":
-    {
-        "name": "Chilean peso",
-        "flag": "CL"
-    },
-    "CNH":
-    {
-        "name": "Chinese yuan",
-        "flag": "CN"
-    },
-    "CNY":
-    {
-        "name": "Chinese yuan",
-        "flag": "CN"
-    },
-    "COP":
-    {
-        "name": "Colombian peso",
-        "flag": "CO"
-    },
-    "CRC":
-    {
-        "name": "Costa Rican colon",
-        "flag": "CR"
-    },
-    "CUP":
-    {
-        "name": "Cuban peso",
-        "flag": "CU"
-    },
-    "CVE":
-    {
-        "name": "Cape Verde escudo",
-        "flag": "CV"
-    },
-    "CYP":
-    {
-        "name": "Cypriot pound",
-        "flag": "CY"
-    },
-    "CZK":
-    {
-        "name": "Czech koruna",
-        "flag": "CZ"
-    },
-    "DJF":
-    {
-        "name": "Djiboutian franc",
-        "flag": "DJ"
-    },
-    "DKK":
-    {
-        "name": "Danish krone",
-        "flag": "DK"
-    },
-    "DOE":
-    {
-        "name": "Double Eagle",
-        "flag": "DO"
-    },
-    "DOP":
-    {
-        "name": "Dominican peso",
-        "flag": "DO"
-    },
-    "DZD":
-    {
-        "name": "Algerian dinar",
-        "flag": "DZ"
-    },
-    "EGP":
-    {
-        "name": "Egyptian pound",
-        "flag": "EG"
-    },
-    "ETB":
-    {
-        "name": "Ethiopian birr",
-        "flag": "ET"
-    },
-    "EUR":
-    {
-        "name": "Euro",
-        "flag": "EU"
-    },
-    "FJD":
-    {
-        "name": "Fiji dollar",
-        "flag": "FJ"
-    },
-    "FRN":
-    {
-        "name": "French Napoleon",
-        "flag": "FR"
-    },
-    "GBP":
-    {
-        "name": "Pound sterling",
-        "flag": "GB"
-    },
-    "GEL":
-    {
-        "name": "Georgian lari",
-        "flag": "GE"
-    },
-    "GHS":
-    {
-        "name": "Ghanaian cedi",
-        "flag": "GH"
-    },
-    "GMD":
-    {
-        "name": "Gambian dalasi",
-        "flag": "GM"
-    },
-    "GNF":
-    {
-        "name": "Guinean franc",
-        "flag": "GN"
-    },
-    "GTQ":
-    {
-        "name": "Guatemalan quetzal",
-        "flag": "GT"
-    },
-    "GYD":
-    {
-        "name": "Guyanese dollar",
-        "flag": "GY"
-    },
-    "HKD":
-    {
-        "name": "Hong Kong dollar",
-        "flag": "HK"
-    },
-    "HNL":
-    {
-        "name": "Honduran lempira",
-        "flag": "HN"
-    },
-    "HRK":
-    {
-        "name": "Croatian kuna",
-        "flag": "HR"
-    },
-    "HTG":
-    {
-        "name": "Haitian gourde",
-        "flag": "HT"
-    },
-    "HUF":
-    {
-        "name": "Hungarian forint",
-        "flag": "HU"
-    },
-    "IDR":
-    {
-        "name": "Indonesian rupiah",
-        "flag": "ID"
-    },
-    "ILS":
-    {
-        "name": "Israeli new shekel",
-        "flag": "IL"
-    },
-    "INR":
-    {
-        "name": "Indian rupee",
-        "flag": "IN"
-    },
-    "IQD":
-    {
-        "name": "Iraqi dinar",
-        "flag": "IQ"
-    },
-    "IRR":
-    {
-        "name": "Iranian rial",
-        "flag": "IR"
-    },
-    "ISK":
-    {
-        "name": "Icelandic króna",
-        "flag": "IS"
-    },
-    "JMD":
-    {
-        "name": "Jamaican dollar",
-        "flag": "JM"
-    },
-    "JOD":
-    {
-        "name": "Jordanian dinar",
-        "flag": "JO"
-    },
-    "JPY":
-    {
-        "name": "Japanese yen",
-        "flag": "JP"
-    },
-    "KES":
-    {
-        "name": "Kenyan shilling",
-        "flag": "KE"
-    },
-    "KHR":
-    {
-        "name": "Cambodian riel",
-        "flag": "KH"
-    },
-    "KMF":
-    {
-        "name": "Comoro franc",
-        "flag": "KM"
-    },
-    "KRU":
-    {
-        "name": "South African Krugerrand",
-        "flag": "KR"
-    },
-    "KRW":
-    {
-        "name": "South Korean won",
-        "flag": "KR"
-    },
-    "KWD":
-    {
-        "name": "Kuwaiti dinar",
-        "flag": "KW"
-    },
-    "KYD":
-    {
-        "name": "Cayman Islands dollar",
-        "flag": "KY"
-    },
-    "KZT":
-    {
-        "name": "Kazakhstani tenge",
-        "flag": "KZ"
-    },
-    "LAK":
-    {
-        "name": "Lao kip",
-        "flag": "LA"
-    },
-    "LBP":
-    {
-        "name": "Lebanese pound",
-        "flag": "LB"
-    },
-    "LFX":
-    {
-        "name": "Khazanah Sukuk",
-        "flag": "MY"
-    },
-    "LKR":
-    {
-        "name": "Sri Lankan rupee",
-        "flag": "LK"
-    },
-    "LRD":
-    {
-        "name": "Liberian dollar",
-        "flag": "LR"
-    },
-    "LSL":
-    {
-        "name": "Lesotho loti",
-        "flag": "LS"
-    },
-    "LTL":
-    {
-        "name": "Lithuanian litas",
-        "flag": "LT"
-    },
-    "LYD":
-    {
-        "name": "Libyan dinar",
-        "flag": "LY"
-    },
-    "M5P":
-    {
-        "name": "Mexican 50 peso",
-        "flag": "MX"
-    },
-    "MAD":
-    {
-        "name": "Moroccan dirham",
-        "flag": "MA"
-    },
-    "MAL":
-    {
-        "name": "Maple Leaf",
-        "flag": "MA"
-    },
-    "MDL":
-    {
-        "name": "Moldovan leu",
-        "flag": "MD"
-    },
-    "MGA":
-    {
-        "name": "Malagasy ariary",
-        "flag": "MG"
-    },
-    "MKD":
-    {
-        "name": "Macedonian denar",
-        "flag": "MK"
-    },
-    "MMK":
-    {
-        "name": "Myanma kyat",
-        "flag": "MM"
-    },
-    "MOP":
-    {
-        "name": "Macanese pataca",
-        "flag": "MO"
-    },
-    "MRU":
-    {
-        "name": "Mauritanian Ouguiya",
-        "flag": "MR"
-    },
-    "MTL":
-    {
-        "name": "Maltese lira",
-        "flag": "MT"
-    },
-    "MUR":
-    {
-        "name": "Mauritian rupee",
-        "flag": "MU"
-    },
-    "MVR":
-    {
-        "name": "Maldivian rufiyaa",
-        "flag": "MV"
-    },
-    "MWK":
-    {
-        "name": "Malawian kwacha",
-        "flag": "MW"
-    },
-    "MXN":
-    {
-        "name": "Mexican peso",
-        "flag": "MX"
-    },
-    "MYR":
-    {
-        "name": "Malaysian ringgit",
-        "flag": "MY"
-    },
-    "MZN":
-    {
-        "name": "Mozambican metical",
-        "flag": "MZ"
-    },
-    "NAD":
-    {
-        "name": "Namibian dollar",
-        "flag": "NA"
-    },
-    "NBL":
-    {
-        "name": "Isle Of Man noble",
-        "flag": "IM"
-    },
-    "NGN":
-    {
-        "name": "Nigerian naira",
-        "flag": "NG"
-    },
-    "NIO":
-    {
-        "name": "Nicaraguan córdoba",
-        "flag": "NI"
-    },
-    "NOK":
-    {
-        "name": "Norwegian krone",
-        "flag": "NO"
-    },
-    "NPR":
-    {
-        "name": "Nepalese rupee",
-        "flag": "NP"
-    },
-    "NSO":
-    {
-        "name": "New Sovereign",
-        "flag": "GB"
-    },
-    "NZD":
-    {
-        "name": "New Zealand dollar",
-        "flag": "NZ"
-    },
-    "OMR":
-    {
-        "name": "Omani rial",
-        "flag": "OM"
-    },
-    "OSO":
-    {
-        "name": "Old Sovereign",
-        "flag": "GB"
-    },
-    "PAB":
-    {
-        "name": "Panamanian balboa",
-        "flag": "PA"
-    },
-    "PEN":
-    {
-        "name": "Peruvian nuevo sol",
-        "flag": "PE"
-    },
-    "PGK":
-    {
-        "name": "Papua New Guinean kina",
-        "flag": "PG"
-    },
-    "PHP":
-    {
-        "name": "Philippine peso",
-        "flag": "PH"
-    },
-    "PKR":
-    {
-        "name": "Pakistani rupee",
-        "flag": "PK"
-    },
-    "PLN":
-    {
-        "name": "Polish złoty",
-        "flag": "PL"
-    },
-    "PYG":
-    {
-        "name": "Paraguayan guaraní",
-        "flag": "PY"
-    },
-    "QAR":
-    {
-        "name": "Qatari riyal",
-        "flag": "QA"
-    },
-    "RON":
-    {
-        "name": "Romanian new leu",
-        "flag": "RO"
-    },
-    "RSD":
-    {
-        "name": "Serbian dinar",
-        "flag": "RS"
-    },
-    "RUB":
-    {
-        "name": "Russian rouble",
-        "flag": "RU"
-    },
-    "RWF":
-    {
-        "name": "Rwandan franc",
-        "flag": "RW"
-    },
-    "SAR":
-    {
-        "name": "Saudi riyal",
-        "flag": "SA"
-    },
-    "SBD":
-    {
-        "name": "Solomon Islands dollar",
-        "flag": "SB"
-    },
-    "SCR":
-    {
-        "name": "Seychelles rupee",
-        "flag": "SC"
-    },
-    "SDG":
-    {
-        "name": "Sudanese pound",
-        "flag": "SD"
-    },
-    "SEK":
-    {
-        "name": "Swedish krona",
-        "flag": "SE"
-    },
-    "SGD":
-    {
-        "name": "Singapore dollar",
-        "flag": "SG"
-    },
-    "SHP":
-    {
-        "name": "Saint Helena pound",
-        "flag": "SH"
-    },
-    "SLL":
-    {
-        "name": "Sierra Leonean leone",
-        "flag": "SL"
-    },
-    "SOS":
-    {
-        "name": "Somali shilling",
-        "flag": "SO"
-    },
-    "SRD":
-    {
-        "name": "Surinamese dollar",
-        "flag": "SR"
-    },
-    "STN":
-    {
-        "name": "Sao Tomean Dobra",
-        "flag": "ST"
-    },
-    "SVC":
-    {
-        "name": "Salvadoran colón",
-        "flag": "SV"
-    },
-    "SZL":
-    {
-        "name": "Swazi lilangeni",
-        "flag": "SZ"
-    },
-    "THB":
-    {
-        "name": "Thai baht",
-        "flag": "TH"
-    },
-    "TJS":
-    {
-        "name": "Tajikistani somoni",
-        "flag": "TJ"
-    },
-    "TMT":
-    {
-        "name": "Turkmenistani manat",
-        "flag": "TM"
-    },
-    "TND":
-    {
-        "name": "Tunisian dinar",
-        "flag": "TN"
-    },
-    "TOP":
-    {
-        "name": "Tongan paʻanga",
-        "flag": "TO"
-    },
-    "TRY":
-    {
-        "name": "Turkish lira",
-        "flag": "TR"
-    },
-    "TTD":
-    {
-        "name": "Trinidad and Tobago dollar",
-        "flag": "TT"
-    },
-    "TWD":
-    {
-        "name": "New Taiwan dollar",
-        "flag": "TW"
-    },
-    "TZS":
-    {
-        "name": "Tanzanian shilling",
-        "flag": "TZ"
-    },
-    "UAH":
-    {
-        "name": "Ukrainian hryvnia",
-        "flag": "UA"
-    },
-    "UGX":
-    {
-        "name": "Ugandan shilling",
-        "flag": "UG"
-    },
-    "USD":
-    {
-        "name": "United States dollar",
-        "flag": "US"
-    },
-    "UYU":
-    {
-        "name": "Uruguayan peso",
-        "flag": "UY"
-    },
-    "UZS":
-    {
-        "name": "Uzbekistan som",
-        "flag": "UZ"
-    },
-    "VES":
-    {
-        "name": "Venezuelan Bolivar Soberano",
-        "flag": "VE"
-    },
-    "VND":
-    {
-        "name": "Vietnamese dong",
-        "flag": "VN"
-    },
-    "VRL":
-    {
-        "name": "Vreneli 10F.",
-        "flag": "CH"
-    },
-    "VRN":
-    {
-        "name": "Vreneli 20F",
-        "flag": "CH"
-    },
-    "XAG":
-    {
-        "name": "Silver (one troy ounce)",
-        "flag": "XAG"
-    },
-    "XAGK":
-    {
-        "name": "Silver (kg)",
-        "flag": "XAG"
-    },
-    "XAU":
-    {
-        "name": "Gold (one troy ounce)",
-        "flag": "XAU"
-    },
-    "XAUK":
-    {
-        "name": "Gold (kg)",
-        "flag": "XAU"
-    },
-    "XCD":
-    {
-        "name": "East Caribbean dollar",
-        "flag": "AI"
-    },
-    "XOF":
-    {
-        "name": "CFA Franc BCEAO",
-        "flag": "SN"
-    },
-    "XPD":
-    {
-        "name": "Palladium (one troy ounce)",
-        "flag": "XPD"
-    },
-    "XPDK":
-    {
-        "name": "Palladium (kg)",
-        "flag": "XPD"
-    },
-    "XPF":
-    {
-        "name": "CFP franc",
-        "flag": "PF"
-    },
-    "XPT":
-    {
-        "name": "Platinum (one troy ounce)",
-        "flag": "XPT"
-    },
-    "XPTK":
-    {
-        "name": "Platinum (kg)",
-        "flag": "XPT"
-    },
-    "YER":
-    {
-        "name": "Yemeni rial",
-        "flag": "YE"
-    },
-    "ZAR":
-    {
-        "name": "South African Rand",
-        "flag": "ZA"
-    },
-    "ZMW":
-    {
-        "name": "Zambian kwacha",
-        "flag": "ZM"
-    },
-    "ZWD":
-    {
-        "name": "Zimbabwe dollar",
-        "flag": "ZW"
-    },
-    "DASH":
-    {
-        "name": "DASH cryptocurrency",
-        "flag": "DASH"
-    },
-    "BTC":
-    {
-        "name": "Bitcoin",
-        "flag": "BTC"
-    },
-    "DSH":
-    {
-        "name": "Dash cryptocurrency",
-        "flag": "DASH"
-    },
-    "LTC":
-    {
-        "name": "Litecoin",
-        "flag": "LTC"
-    },
-    "ETH":
-    {
-        "name": "Ethereum",
-        "flag": "ETH"
-    },
-    "BCH":
-    {
-        "name": "Bitcoin Cash",
-        "flag": "BTC"
-    },
-    "XRP":
-    {
-        "name": "XRP cryptocurrency",
-        "flag": "XRP"
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/Resources/CurrencyMetadata.json	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,892 @@
+{
+    "AED":
+    {
+        "name": "United Arab Emirates dirham",
+        "flag": "AE"
+    },
+    "AFN":
+    {
+        "name": "Afghan afghani",
+        "flag": "AF"
+    },
+    "ALL":
+    {
+        "name": "Albanian lek",
+        "flag": "AL"
+    },
+    "AMD":
+    {
+        "name": "Armenian dram",
+        "flag": "AM"
+    },
+    "ANG":
+    {
+        "name": "Netherlands Antillean guilder",
+        "flag": "CW"
+    },
+    "AOA":
+    {
+        "name": "Angolan kwanza",
+        "flag": "AO"
+    },
+    "ARE":
+    {
+        "name": "AREG",
+        "flag": "AR"
+    },
+    "ARS":
+    {
+        "name": "Argentine peso",
+        "flag": "AR"
+    },
+    "AUD":
+    {
+        "name": "Australian dollar",
+        "flag": "AU"
+    },
+    "AUN":
+    {
+        "name": "Australian nugget",
+        "flag": "AU"
+    },
+    "AWG":
+    {
+        "name": "Aruban florin",
+        "flag": "AW"
+    },
+    "BAM":
+    {
+        "name": "Bosnia and Herzegovina convertible mark",
+        "flag": "BA"
+    },
+    "BBD":
+    {
+        "name": "Barbados dollar",
+        "flag": "BB"
+    },
+    "BDT":
+    {
+        "name": "Bangladeshi taka",
+        "flag": "BD"
+    },
+    "BGN":
+    {
+        "name": "Bulgarian lev",
+        "flag": "BG"
+    },
+    "BHD":
+    {
+        "name": "Bahraini dinar",
+        "flag": "BH"
+    },
+    "BIF":
+    {
+        "name": "Burundian franc",
+        "flag": "BI"
+    },
+    "BMD":
+    {
+        "name": "Bermudian dollar",
+        "flag": "BM"
+    },
+    "BND":
+    {
+        "name": "Brunei dollar",
+        "flag": "BN"
+    },
+    "BOB":
+    {
+        "name": "Boliviano",
+        "flag": "BO"
+    },
+    "BRI":
+    {
+        "name": "Britannia",
+        "flag": "BR"
+    },
+    "BRL":
+    {
+        "name": "Brazilian real",
+        "flag": "BR"
+    },
+    "BSD":
+    {
+        "name": "Bahamian dollar",
+        "flag": "BS"
+    },
+    "BTN":
+    {
+        "name": "Bhutanese ngultrum",
+        "flag": "BT"
+    },
+    "BWP":
+    {
+        "name": "Botswana pula",
+        "flag": "BW"
+    },
+    "BYN":
+    {
+        "name": "Belarusian ruble",
+        "flag": "BY"
+    },
+    "BZD":
+    {
+        "name": "Belize dollar",
+        "flag": "BZ"
+    },
+    "CAD":
+    {
+        "name": "Canadian dollar",
+        "flag": "CA"
+    },
+    "CDF":
+    {
+        "name": "Congolese franc",
+        "flag": "CD"
+    },
+    "CHF":
+    {
+        "name": "Swiss franc",
+        "flag": "CH"
+    },
+    "CLF":
+    {
+        "name": "Chilean Unit of Account",
+        "flag": "CL"
+    },
+    "CLP":
+    {
+        "name": "Chilean peso",
+        "flag": "CL"
+    },
+    "CNH":
+    {
+        "name": "Chinese yuan",
+        "flag": "CN"
+    },
+    "CNY":
+    {
+        "name": "Chinese yuan",
+        "flag": "CN"
+    },
+    "COP":
+    {
+        "name": "Colombian peso",
+        "flag": "CO"
+    },
+    "CRC":
+    {
+        "name": "Costa Rican colon",
+        "flag": "CR"
+    },
+    "CUP":
+    {
+        "name": "Cuban peso",
+        "flag": "CU"
+    },
+    "CVE":
+    {
+        "name": "Cape Verde escudo",
+        "flag": "CV"
+    },
+    "CYP":
+    {
+        "name": "Cypriot pound",
+        "flag": "CY"
+    },
+    "CZK":
+    {
+        "name": "Czech koruna",
+        "flag": "CZ"
+    },
+    "DJF":
+    {
+        "name": "Djiboutian franc",
+        "flag": "DJ"
+    },
+    "DKK":
+    {
+        "name": "Danish krone",
+        "flag": "DK"
+    },
+    "DOE":
+    {
+        "name": "Double Eagle",
+        "flag": "DO"
+    },
+    "DOP":
+    {
+        "name": "Dominican peso",
+        "flag": "DO"
+    },
+    "DZD":
+    {
+        "name": "Algerian dinar",
+        "flag": "DZ"
+    },
+    "EGP":
+    {
+        "name": "Egyptian pound",
+        "flag": "EG"
+    },
+    "ETB":
+    {
+        "name": "Ethiopian birr",
+        "flag": "ET"
+    },
+    "EUR":
+    {
+        "name": "Euro",
+        "flag": "EU"
+    },
+    "FJD":
+    {
+        "name": "Fiji dollar",
+        "flag": "FJ"
+    },
+    "FRN":
+    {
+        "name": "French Napoleon",
+        "flag": "FR"
+    },
+    "GBP":
+    {
+        "name": "Pound sterling",
+        "flag": "GB"
+    },
+    "GEL":
+    {
+        "name": "Georgian lari",
+        "flag": "GE"
+    },
+    "GHS":
+    {
+        "name": "Ghanaian cedi",
+        "flag": "GH"
+    },
+    "GMD":
+    {
+        "name": "Gambian dalasi",
+        "flag": "GM"
+    },
+    "GNF":
+    {
+        "name": "Guinean franc",
+        "flag": "GN"
+    },
+    "GTQ":
+    {
+        "name": "Guatemalan quetzal",
+        "flag": "GT"
+    },
+    "GYD":
+    {
+        "name": "Guyanese dollar",
+        "flag": "GY"
+    },
+    "HKD":
+    {
+        "name": "Hong Kong dollar",
+        "flag": "HK"
+    },
+    "HNL":
+    {
+        "name": "Honduran lempira",
+        "flag": "HN"
+    },
+    "HRK":
+    {
+        "name": "Croatian kuna",
+        "flag": "HR"
+    },
+    "HTG":
+    {
+        "name": "Haitian gourde",
+        "flag": "HT"
+    },
+    "HUF":
+    {
+        "name": "Hungarian forint",
+        "flag": "HU"
+    },
+    "IDR":
+    {
+        "name": "Indonesian rupiah",
+        "flag": "ID"
+    },
+    "ILS":
+    {
+        "name": "Israeli new shekel",
+        "flag": "IL"
+    },
+    "INR":
+    {
+        "name": "Indian rupee",
+        "flag": "IN"
+    },
+    "IQD":
+    {
+        "name": "Iraqi dinar",
+        "flag": "IQ"
+    },
+    "IRR":
+    {
+        "name": "Iranian rial",
+        "flag": "IR"
+    },
+    "ISK":
+    {
+        "name": "Icelandic króna",
+        "flag": "IS"
+    },
+    "JMD":
+    {
+        "name": "Jamaican dollar",
+        "flag": "JM"
+    },
+    "JOD":
+    {
+        "name": "Jordanian dinar",
+        "flag": "JO"
+    },
+    "JPY":
+    {
+        "name": "Japanese yen",
+        "flag": "JP"
+    },
+    "KES":
+    {
+        "name": "Kenyan shilling",
+        "flag": "KE"
+    },
+    "KHR":
+    {
+        "name": "Cambodian riel",
+        "flag": "KH"
+    },
+    "KMF":
+    {
+        "name": "Comoro franc",
+        "flag": "KM"
+    },
+    "KRU":
+    {
+        "name": "South African Krugerrand",
+        "flag": "KR"
+    },
+    "KRW":
+    {
+        "name": "South Korean won",
+        "flag": "KR"
+    },
+    "KWD":
+    {
+        "name": "Kuwaiti dinar",
+        "flag": "KW"
+    },
+    "KYD":
+    {
+        "name": "Cayman Islands dollar",
+        "flag": "KY"
+    },
+    "KZT":
+    {
+        "name": "Kazakhstani tenge",
+        "flag": "KZ"
+    },
+    "LAK":
+    {
+        "name": "Lao kip",
+        "flag": "LA"
+    },
+    "LBP":
+    {
+        "name": "Lebanese pound",
+        "flag": "LB"
+    },
+    "LFX":
+    {
+        "name": "Khazanah Sukuk",
+        "flag": "MY"
+    },
+    "LKR":
+    {
+        "name": "Sri Lankan rupee",
+        "flag": "LK"
+    },
+    "LRD":
+    {
+        "name": "Liberian dollar",
+        "flag": "LR"
+    },
+    "LSL":
+    {
+        "name": "Lesotho loti",
+        "flag": "LS"
+    },
+    "LTL":
+    {
+        "name": "Lithuanian litas",
+        "flag": "LT"
+    },
+    "LYD":
+    {
+        "name": "Libyan dinar",
+        "flag": "LY"
+    },
+    "M5P":
+    {
+        "name": "Mexican 50 peso",
+        "flag": "MX"
+    },
+    "MAD":
+    {
+        "name": "Moroccan dirham",
+        "flag": "MA"
+    },
+    "MAL":
+    {
+        "name": "Maple Leaf",
+        "flag": "MA"
+    },
+    "MDL":
+    {
+        "name": "Moldovan leu",
+        "flag": "MD"
+    },
+    "MGA":
+    {
+        "name": "Malagasy ariary",
+        "flag": "MG"
+    },
+    "MKD":
+    {
+        "name": "Macedonian denar",
+        "flag": "MK"
+    },
+    "MMK":
+    {
+        "name": "Myanma kyat",
+        "flag": "MM"
+    },
+    "MOP":
+    {
+        "name": "Macanese pataca",
+        "flag": "MO"
+    },
+    "MRU":
+    {
+        "name": "Mauritanian Ouguiya",
+        "flag": "MR"
+    },
+    "MTL":
+    {
+        "name": "Maltese lira",
+        "flag": "MT"
+    },
+    "MUR":
+    {
+        "name": "Mauritian rupee",
+        "flag": "MU"
+    },
+    "MVR":
+    {
+        "name": "Maldivian rufiyaa",
+        "flag": "MV"
+    },
+    "MWK":
+    {
+        "name": "Malawian kwacha",
+        "flag": "MW"
+    },
+    "MXN":
+    {
+        "name": "Mexican peso",
+        "flag": "MX"
+    },
+    "MYR":
+    {
+        "name": "Malaysian ringgit",
+        "flag": "MY"
+    },
+    "MZN":
+    {
+        "name": "Mozambican metical",
+        "flag": "MZ"
+    },
+    "NAD":
+    {
+        "name": "Namibian dollar",
+        "flag": "NA"
+    },
+    "NBL":
+    {
+        "name": "Isle Of Man noble",
+        "flag": "IM"
+    },
+    "NGN":
+    {
+        "name": "Nigerian naira",
+        "flag": "NG"
+    },
+    "NIO":
+    {
+        "name": "Nicaraguan córdoba",
+        "flag": "NI"
+    },
+    "NOK":
+    {
+        "name": "Norwegian krone",
+        "flag": "NO"
+    },
+    "NPR":
+    {
+        "name": "Nepalese rupee",
+        "flag": "NP"
+    },
+    "NSO":
+    {
+        "name": "New Sovereign",
+        "flag": "GB"
+    },
+    "NZD":
+    {
+        "name": "New Zealand dollar",
+        "flag": "NZ"
+    },
+    "OMR":
+    {
+        "name": "Omani rial",
+        "flag": "OM"
+    },
+    "OSO":
+    {
+        "name": "Old Sovereign",
+        "flag": "GB"
+    },
+    "PAB":
+    {
+        "name": "Panamanian balboa",
+        "flag": "PA"
+    },
+    "PEN":
+    {
+        "name": "Peruvian nuevo sol",
+        "flag": "PE"
+    },
+    "PGK":
+    {
+        "name": "Papua New Guinean kina",
+        "flag": "PG"
+    },
+    "PHP":
+    {
+        "name": "Philippine peso",
+        "flag": "PH"
+    },
+    "PKR":
+    {
+        "name": "Pakistani rupee",
+        "flag": "PK"
+    },
+    "PLN":
+    {
+        "name": "Polish złoty",
+        "flag": "PL"
+    },
+    "PYG":
+    {
+        "name": "Paraguayan guaraní",
+        "flag": "PY"
+    },
+    "QAR":
+    {
+        "name": "Qatari riyal",
+        "flag": "QA"
+    },
+    "RON":
+    {
+        "name": "Romanian new leu",
+        "flag": "RO"
+    },
+    "RSD":
+    {
+        "name": "Serbian dinar",
+        "flag": "RS"
+    },
+    "RUB":
+    {
+        "name": "Russian rouble",
+        "flag": "RU"
+    },
+    "RWF":
+    {
+        "name": "Rwandan franc",
+        "flag": "RW"
+    },
+    "SAR":
+    {
+        "name": "Saudi riyal",
+        "flag": "SA"
+    },
+    "SBD":
+    {
+        "name": "Solomon Islands dollar",
+        "flag": "SB"
+    },
+    "SCR":
+    {
+        "name": "Seychelles rupee",
+        "flag": "SC"
+    },
+    "SDG":
+    {
+        "name": "Sudanese pound",
+        "flag": "SD"
+    },
+    "SEK":
+    {
+        "name": "Swedish krona",
+        "flag": "SE"
+    },
+    "SGD":
+    {
+        "name": "Singapore dollar",
+        "flag": "SG"
+    },
+    "SHP":
+    {
+        "name": "Saint Helena pound",
+        "flag": "SH"
+    },
+    "SLL":
+    {
+        "name": "Sierra Leonean leone",
+        "flag": "SL"
+    },
+    "SOS":
+    {
+        "name": "Somali shilling",
+        "flag": "SO"
+    },
+    "SRD":
+    {
+        "name": "Surinamese dollar",
+        "flag": "SR"
+    },
+    "STN":
+    {
+        "name": "Sao Tomean Dobra",
+        "flag": "ST"
+    },
+    "SVC":
+    {
+        "name": "Salvadoran colón",
+        "flag": "SV"
+    },
+    "SZL":
+    {
+        "name": "Swazi lilangeni",
+        "flag": "SZ"
+    },
+    "THB":
+    {
+        "name": "Thai baht",
+        "flag": "TH"
+    },
+    "TJS":
+    {
+        "name": "Tajikistani somoni",
+        "flag": "TJ"
+    },
+    "TMT":
+    {
+        "name": "Turkmenistani manat",
+        "flag": "TM"
+    },
+    "TND":
+    {
+        "name": "Tunisian dinar",
+        "flag": "TN"
+    },
+    "TOP":
+    {
+        "name": "Tongan paʻanga",
+        "flag": "TO"
+    },
+    "TRY":
+    {
+        "name": "Turkish lira",
+        "flag": "TR"
+    },
+    "TTD":
+    {
+        "name": "Trinidad and Tobago dollar",
+        "flag": "TT"
+    },
+    "TWD":
+    {
+        "name": "New Taiwan dollar",
+        "flag": "TW"
+    },
+    "TZS":
+    {
+        "name": "Tanzanian shilling",
+        "flag": "TZ"
+    },
+    "UAH":
+    {
+        "name": "Ukrainian hryvnia",
+        "flag": "UA"
+    },
+    "UGX":
+    {
+        "name": "Ugandan shilling",
+        "flag": "UG"
+    },
+    "USD":
+    {
+        "name": "United States dollar",
+        "flag": "US"
+    },
+    "UYU":
+    {
+        "name": "Uruguayan peso",
+        "flag": "UY"
+    },
+    "UZS":
+    {
+        "name": "Uzbekistan som",
+        "flag": "UZ"
+    },
+    "VES":
+    {
+        "name": "Venezuelan Bolivar Soberano",
+        "flag": "VE"
+    },
+    "VND":
+    {
+        "name": "Vietnamese dong",
+        "flag": "VN"
+    },
+    "VRL":
+    {
+        "name": "Vreneli 10F.",
+        "flag": "CH"
+    },
+    "VRN":
+    {
+        "name": "Vreneli 20F",
+        "flag": "CH"
+    },
+    "XAG":
+    {
+        "name": "Silver (one troy ounce)",
+        "flag": "XAG"
+    },
+    "XAGK":
+    {
+        "name": "Silver (kg)",
+        "flag": "XAG"
+    },
+    "XAU":
+    {
+        "name": "Gold (one troy ounce)",
+        "flag": "XAU"
+    },
+    "XAUK":
+    {
+        "name": "Gold (kg)",
+        "flag": "XAU"
+    },
+    "XCD":
+    {
+        "name": "East Caribbean dollar",
+        "flag": "AI"
+    },
+    "XOF":
+    {
+        "name": "CFA Franc BCEAO",
+        "flag": "SN"
+    },
+    "XPD":
+    {
+        "name": "Palladium (one troy ounce)",
+        "flag": "XPD"
+    },
+    "XPDK":
+    {
+        "name": "Palladium (kg)",
+        "flag": "XPD"
+    },
+    "XPF":
+    {
+        "name": "CFP franc",
+        "flag": "PF"
+    },
+    "XPT":
+    {
+        "name": "Platinum (one troy ounce)",
+        "flag": "XPT"
+    },
+    "XPTK":
+    {
+        "name": "Platinum (kg)",
+        "flag": "XPT"
+    },
+    "YER":
+    {
+        "name": "Yemeni rial",
+        "flag": "YE"
+    },
+    "ZAR":
+    {
+        "name": "South African Rand",
+        "flag": "ZA"
+    },
+    "ZMW":
+    {
+        "name": "Zambian kwacha",
+        "flag": "ZM"
+    },
+    "ZWD":
+    {
+        "name": "Zimbabwe dollar",
+        "flag": "ZW"
+    },
+    "DASH":
+    {
+        "name": "DASH cryptocurrency",
+        "flag": "DASH"
+    },
+    "BTC":
+    {
+        "name": "Bitcoin",
+        "flag": "BTC"
+    },
+    "DSH":
+    {
+        "name": "Dash cryptocurrency",
+        "flag": "DASH"
+    },
+    "LTC":
+    {
+        "name": "Litecoin",
+        "flag": "LTC"
+    },
+    "ETH":
+    {
+        "name": "Ethereum",
+        "flag": "ETH"
+    },
+    "BCH":
+    {
+        "name": "Bitcoin Cash",
+        "flag": "BTC"
+    },
+    "XRP":
+    {
+        "name": "XRP cryptocurrency",
+        "flag": "XRP"
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Simoleon/Resources/PopularCurrencyPairs.json	Tue Jul 13 12:14:42 2021 +0100
@@ -0,0 +1,9 @@
+[
+    "EUR/USD",
+    "USD/JPY",
+    "USD/GBP",
+    "USD/CHF",
+    "USD/CAD",
+    "AUD/USD",
+    "NZD/USD"
+]