gitextract_t2ij2trf/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ └── lint.yml ├── .gitignore ├── .swiftformat ├── .swiftlint.yml ├── CONTRIBUTING.md ├── DatWeatherDoe/ │ ├── API/ │ │ ├── NetworkClient.swift │ │ ├── Response/ │ │ │ ├── AirQuality.swift │ │ │ ├── ForecastData.swift │ │ │ ├── ForecastTemperatureData.swift │ │ │ ├── SunriseSunsetData.swift │ │ │ ├── TemperatureData.swift │ │ │ ├── WeatherAPIResponse.swift │ │ │ ├── WeatherAPIResponseParser.swift │ │ │ └── WindData.swift │ │ ├── WeatherData.swift │ │ └── WeatherError.swift │ ├── Config/ │ │ ├── APIKeyParser.swift │ │ ├── ConfigManager.swift │ │ └── ConfigOptions.swift │ ├── DatWeatherDoeApp.swift │ ├── Localization/ │ │ └── en.xcloc/ │ │ ├── Localized Contents/ │ │ │ └── en.xliff │ │ ├── Source Contents/ │ │ │ └── DatWeatherDoe/ │ │ │ ├── Resources/ │ │ │ │ └── en.lproj/ │ │ │ │ └── InfoPlist.strings │ │ │ └── UI/ │ │ │ └── Base.lproj/ │ │ │ └── MainMenu.xib │ │ └── contents.json │ ├── Reachability/ │ │ └── WeatherReachability.swift │ ├── Resources/ │ │ ├── Assets.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── DatWeatherDoe.entitlements │ │ ├── DevelopmentAssets/ │ │ │ └── TestData.swift │ │ ├── Info.plist │ │ └── Localization/ │ │ └── Localizable.xcstrings │ ├── UI/ │ │ ├── Configure/ │ │ │ ├── ConfigureOptionsView.swift │ │ │ ├── ConfigureUnitOptionsView.swift │ │ │ ├── ConfigureValueSeparatorOptionsView.swift │ │ │ ├── ConfigureView.swift │ │ │ ├── ConfigureViewModel.swift │ │ │ ├── ConfigureWeatherOptionsView.swift │ │ │ └── Options/ │ │ │ ├── MeasurementUnit.swift │ │ │ ├── RefreshInterval.swift │ │ │ ├── TemperatureUnit.swift │ │ │ ├── WeatherConditionPosition.swift │ │ │ └── WeatherSource.swift │ │ ├── Decorator/ │ │ │ ├── Condition/ │ │ │ │ ├── WeatherCondition.swift │ │ │ │ ├── WeatherConditionBuilder.swift │ │ │ │ └── WeatherConditionTextMapper.swift │ │ │ ├── Text/ │ │ │ │ ├── HumidityTextBuilder.swift │ │ │ │ ├── SunriseAndSunsetTextBuilder.swift │ │ │ │ ├── Temperature/ │ │ │ │ │ ├── TemperatureForecastTextBuilder.swift │ │ │ │ │ ├── TemperatureFormatter.swift │ │ │ │ │ ├── TemperatureTextBuilder.swift │ │ │ │ │ └── TemperatureWithDegreesCreator.swift │ │ │ │ ├── UVIndexTextBuilder.swift │ │ │ │ └── WeatherTextBuilder.swift │ │ │ └── WeatherDataBuilder.swift │ │ ├── Forecaster/ │ │ │ └── WeatherForecaster.swift │ │ ├── Menu Bar/ │ │ │ ├── CustomButton.swift │ │ │ ├── DropdownIcon.swift │ │ │ ├── MenuOptionsView.swift │ │ │ ├── MenuView.swift │ │ │ ├── NonInteractiveMenuOptionView.swift │ │ │ └── WindSpeedFormatter.swift │ │ └── Status Bar/ │ │ └── StatusBarView.swift │ └── ViewModel/ │ ├── Parser/ │ │ ├── CityWeatherResultParser.swift │ │ └── ZipCodeWeatherResultParser.swift │ ├── Repository/ │ │ ├── Coordinates/ │ │ │ ├── LocationCoordinatesWeatherRepository.swift │ │ │ ├── LocationParser.swift │ │ │ └── LocationValidator.swift │ │ ├── System/ │ │ │ ├── SystemLocationFetcher.swift │ │ │ ├── SystemLocationWeatherRepository.swift │ │ │ └── Task+Retry.swift │ │ ├── WeatherRepositoryFactory.swift │ │ ├── WeatherRepositoryType.swift │ │ ├── WeatherURLBuilder.swift │ │ └── WeatherValidatorType.swift │ ├── WeatherDataFormatter.swift │ ├── WeatherViewModel.swift │ └── WeatherViewModelType.swift ├── DatWeatherDoe.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm/ │ │ └── Package.resolved │ └── xcshareddata/ │ └── xcschemes/ │ └── DatWeatherDoe.xcscheme ├── DatWeatherDoeTests/ │ ├── API/ │ │ └── Repository/ │ │ ├── Location/ │ │ │ └── Coordinates/ │ │ │ └── LocationValidatorTests.swift │ │ └── WeatherURLBuilderTests.swift │ ├── DatWeatherDoe.xctestplan │ └── UI/ │ └── Configure/ │ └── Options/ │ ├── RefreshIntervalTests.swift │ ├── TemperatureUnitTests.swift │ └── WeatherSourceTests.swift ├── LICENSE └── README.md