Mercurial > public > simoleon
changeset 11:a62e5e4a4f02
Implementing networking
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" + } +}