diff --git a/src/Airmap/AirMapManager.h b/src/Airmap/AirMapManager.h
index 99f85ee..6b36b81 100644
--- a/src/Airmap/AirMapManager.h
+++ b/src/Airmap/AirMapManager.h
@@ -32,7 +32,6 @@
Q_DECLARE_LOGGING_CATEGORY(AirMapManagerLog)
-
/**
* @class LifetimeChecker
* Base class which helps to check if an object instance still exists.
diff --git a/src/Airmap/AirspaceControl.qml b/src/Airmap/AirspaceControl.qml
index dea3cdd..3f601db 100644
--- a/src/Airmap/AirspaceControl.qml
+++ b/src/Airmap/AirspaceControl.qml
@@ -18,8 +18,10 @@ Item {
width: parent.width
height: colapsed ? colapsedRect.height : expandedRect.height
- property bool colapsed: true
- property bool showColapse: true
+ property bool colapsed: true
+ property bool showColapse: true
+
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5
readonly property color _colorOrange: "#d75e0d"
@@ -63,6 +65,15 @@ Item {
color: _colorWhite
anchors.verticalCenter: parent.verticalCenter
}
+ Item {
+ width: ScreenTools.defaultFontPixelWidth
+ height: 1
+ }
+ AirspaceWeather {
+ iconHeight: ScreenTools.defaultFontPixelWidth * 2.5
+ visible: _activeVehicle && _activeVehicle.airspaceController.hasWeather
+ anchors.verticalCenter: parent.verticalCenter
+ }
}
QGCColoredImage {
width: height
@@ -125,6 +136,14 @@ Item {
font.pointSize: ScreenTools.smallFontPointSize
}
}
+ Item {
+ width: ScreenTools.defaultFontPixelWidth
+ height: 1
+ }
+ AirspaceWeather {
+ visible: _activeVehicle && _activeVehicle.airspaceController.hasWeather && showColapse
+ anchors.verticalCenter: parent.verticalCenter
+ }
}
QGCColoredImage {
width: height
@@ -142,6 +161,12 @@ Item {
onClicked: colapsed = true
}
}
+ AirspaceWeather {
+ visible: _activeVehicle && _activeVehicle.airspaceController.hasWeather && !showColapse
+ anchors.right: parent.right
+ anchors.rightMargin: ScreenTools.defaultFontPixelWidth
+ anchors.verticalCenter: parent.verticalCenter
+ }
}
//-- Contents (Brown Box)
Rectangle {
diff --git a/src/Airmap/AirspaceController.cc b/src/Airmap/AirspaceController.cc
index d81d763..ec56728 100644
--- a/src/Airmap/AirspaceController.cc
+++ b/src/Airmap/AirspaceController.cc
@@ -7,14 +7,46 @@
*
****************************************************************************/
+#include "AirMapManager.h"
#include "AirspaceController.h"
#include "AirspaceManagement.h"
#include "QGCApplication.h"
#include "QGCQGeoCoordinate.h"
+#define WEATHER_UPDATE_DISTANCE 50000 //-- 50km threshold for weather updates
+#define WEATHER_UPDATE_TIME 30 * 60 * 60 * 1000 //-- 30 minutes threshold for weather updates
+
AirspaceController::AirspaceController(QObject* parent)
: QObject(parent)
, _manager(qgcApp()->toolbox()->airspaceManager())
+ , _weatherTemp(0)
+ , _hasWeather(false)
+{
+ connect(_manager, &AirspaceManager::weatherUpdate, this, &AirspaceController::_weatherUpdate);
+}
+
+void AirspaceController::setROI(QGeoCoordinate center, double radius)
{
+ _manager->setROI(center, radius);
+ //-- If first time or we've moved more than WEATHER_UPDATE_DISTANCE, ask for weather updates.
+ if(!_lastRoiCenter.isValid() || _lastRoiCenter.distanceTo(center) > WEATHER_UPDATE_DISTANCE) {
+ _lastRoiCenter = center;
+ _manager->requestWeatherUpdate(center);
+ _weatherTime.start();
+ } else {
+ //-- Check weather once every WEATHER_UPDATE_TIME
+ if(_weatherTime.elapsed() > WEATHER_UPDATE_TIME) {
+ _manager->requestWeatherUpdate(center);
+ _weatherTime.start();
+ }
+ }
}
+void AirspaceController::_weatherUpdate(bool success, QGeoCoordinate, WeatherInformation weather)
+{
+ qCDebug(AirMapManagerLog)<<"Weather Info:"<< success << weather.condition << weather.temperature;
+ _hasWeather = success;
+ _weatherIcon = QStringLiteral("qrc:/airmapweather/") + weather.condition + QStringLiteral(".svg");
+ _weatherTemp = weather.temperature;
+ emit weatherChanged();
+}
diff --git a/src/Airmap/AirspaceController.h b/src/Airmap/AirspaceController.h
index b97c6a8..905a692 100644
--- a/src/Airmap/AirspaceController.h
+++ b/src/Airmap/AirspaceController.h
@@ -20,10 +20,13 @@ public:
AirspaceController(QObject* parent = NULL);
~AirspaceController() = default;
- Q_PROPERTY(QmlObjectListModel* polygons READ polygons CONSTANT) ///< List of PolygonAirspaceRestriction objects
- Q_PROPERTY(QmlObjectListModel* circles READ circles CONSTANT) ///< List of CircularAirspaceRestriction objects
+ Q_PROPERTY(QmlObjectListModel* polygons READ polygons CONSTANT) ///< List of PolygonAirspaceRestriction objects
+ Q_PROPERTY(QmlObjectListModel* circles READ circles CONSTANT) ///< List of CircularAirspaceRestriction objects
+ Q_PROPERTY(QString weatherIcon READ weatherIcon NOTIFY weatherChanged)
+ Q_PROPERTY(int weatherTemp READ weatherTemp NOTIFY weatherChanged)
+ Q_PROPERTY(bool hasWeather READ hasWeather NOTIFY weatherChanged)
- Q_INVOKABLE void setROI(QGeoCoordinate center, double radius) { _manager->setROI(center, radius); }
+ Q_INVOKABLE void setROI(QGeoCoordinate center, double radius);
QmlObjectListModel* polygons() { return _manager->polygonRestrictions(); }
QmlObjectListModel* circles() { return _manager->circularRestrictions(); }
@@ -31,6 +34,22 @@ public:
Q_PROPERTY(QString providerName READ providerName CONSTANT)
QString providerName() { return _manager->name(); }
+
+ QString weatherIcon () { return _weatherIcon; }
+ int weatherTemp () { return _weatherTemp; }
+ bool hasWeather () { return _hasWeather; }
+
+signals:
+ void weatherChanged ();
+
+private slots:
+ void _weatherUpdate (bool success, QGeoCoordinate coordinate, WeatherInformation weather);
+
private:
- AirspaceManager* _manager;
+ AirspaceManager* _manager;
+ QGeoCoordinate _lastRoiCenter;
+ QTime _weatherTime;
+ QString _weatherIcon;
+ int _weatherTemp;
+ bool _hasWeather;
};
diff --git a/src/Airmap/AirspaceManagement.h b/src/Airmap/AirspaceManagement.h
index 1a17b6e..5a49c69 100644
--- a/src/Airmap/AirspaceManagement.h
+++ b/src/Airmap/AirspaceManagement.h
@@ -125,15 +125,15 @@ class Vehicle;
struct WeatherInformation
{
- QString condition; ///< The overall weather condition.
- QString icon; ///< The icon or class of icon that should be used for display purposes.
- uint32_t windHeading = 0; ///< The heading in [°].
- uint32_t windSpeed = 0; ///< The speed in [°].
- uint32_t windGusting = 0;
- int32_t temperature = 0; ///< The temperature in [°C].
- float humidity = 0.0;
- uint32_t visibility = 0; ///< Visibility in [m].
- uint32_t precipitation = 0; ///< The probability of precipitation in [%].
+ QString condition; ///< The overall weather condition.
+ QString icon; ///< The icon or class of icon that should be used for display purposes.
+ uint32_t windHeading = 0; ///< The heading in [°].
+ uint32_t windSpeed = 0; ///< The speed in [°].
+ uint32_t windGusting = 0;
+ int32_t temperature = 0; ///< The temperature in [°C].
+ float humidity = 0.0;
+ uint32_t visibility = 0; ///< Visibility in [m].
+ uint32_t precipitation = 0; ///< The probability of precipitation in [%].
};
Q_DECLARE_METATYPE(WeatherInformation);
diff --git a/src/Airmap/AirspaceWeather.qml b/src/Airmap/AirspaceWeather.qml
new file mode 100644
index 0000000..0c822ba
--- /dev/null
+++ b/src/Airmap/AirspaceWeather.qml
@@ -0,0 +1,38 @@
+import QtQuick 2.3
+import QtQuick.Controls 1.2
+import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.2
+import QtQml 2.2
+
+import QGroundControl 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl.Airmap 1.0
+
+Item {
+ height: _activeVehicle && _activeVehicle.airspaceController.hasWeather ? weatherRow.height : 0
+ width: _activeVehicle && _activeVehicle.airspaceController.hasWeather ? weatherRow.width : 0
+ property var iconHeight: ScreenTools.defaultFontPixelWidth * 4
+ property color _colorWhite: "#ffffff"
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+ Row {
+ id: weatherRow
+ spacing: ScreenTools.defaultFontPixelHeight * 0.5
+ QGCColoredImage {
+ width: height
+ height: iconHeight
+ sourceSize.height: height
+ source: _activeVehicle ? _activeVehicle.airspaceController.weatherIcon : ""
+ color: _colorWhite
+ visible: _activeVehicle && _activeVehicle.airspaceController.hasWeather
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ QGCLabel {
+ text: _activeVehicle ? _activeVehicle.airspaceController.weatherTemp + "ºC" : ""
+ color: _colorWhite
+ visible: _activeVehicle && _activeVehicle.airspaceController.hasWeather
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+}
diff --git a/src/Airmap/QGroundControl.Airmap.qmldir b/src/Airmap/QGroundControl.Airmap.qmldir
index 116917d..0196743 100644
--- a/src/Airmap/QGroundControl.Airmap.qmldir
+++ b/src/Airmap/QGroundControl.Airmap.qmldir
@@ -2,3 +2,4 @@ Module QGroundControl.Airmap
AirspaceControl 1.0 AirspaceControl.qml
AirspaceRegulation 1.0 AirspaceRegulation.qml
+AirspaceWeather 1.0 AirspaceWeather.qml
diff --git a/src/Airmap/airmap.qrc b/src/Airmap/airmap.qrc
index 5130d4e..a41b7e2 100644
--- a/src/Airmap/airmap.qrc
+++ b/src/Airmap/airmap.qrc
@@ -3,6 +3,7 @@
QGroundControl.Airmap.qmldir
AirspaceControl.qml
AirspaceRegulation.qml
+ AirspaceWeather.qml
AirmapSettings.qml
@@ -14,4 +15,36 @@
images/expand.svg
images/pencil.svg
+
+ images/weather-icons/clear.svg
+ images/weather-icons/cloudy.svg
+ images/weather-icons/cloudy_wind.svg
+ images/weather-icons/drizzle.svg
+ images/weather-icons/drizzle_day.svg
+ images/weather-icons/drizzle_night.svg
+ images/weather-icons/foggy.svg
+ images/weather-icons/frigid.svg
+ images/weather-icons/hail.svg
+ images/weather-icons/heavy_rain.svg
+ images/weather-icons/hurricane.svg
+ images/weather-icons/isolated_thunderstorms.svg
+ images/weather-icons/mostly_clear.svg
+ images/weather-icons/mostly_cloudy_day.svg
+ images/weather-icons/mostly_cloudy_night.svg
+ images/weather-icons/mostly_sunny.svg
+ images/weather-icons/partly_cloudy_day.svg
+ images/weather-icons/partyly_cloudy_night.svg
+ images/weather-icons/rain.svg
+ images/weather-icons/rain_snow.svg
+ images/weather-icons/scattered_snow_showers_day.svg
+ images/weather-icons/scattered_snow_showers_night.svg
+ images/weather-icons/scattered_thunderstorms_day.svg
+ images/weather-icons/scattered_thunderstorms_night.svg
+ images/weather-icons/snow.svg
+ images/weather-icons/snow_storm.svg
+ images/weather-icons/sunny.svg
+ images/weather-icons/thunderstorm.svg
+ images/weather-icons/tornado.svg
+ images/weather-icons/windy.svg
+
diff --git a/src/Airmap/dummy/AirspaceWeather.qml b/src/Airmap/dummy/AirspaceWeather.qml
new file mode 100644
index 0000000..a48aacc
--- /dev/null
+++ b/src/Airmap/dummy/AirspaceWeather.qml
@@ -0,0 +1,4 @@
+import QtQuick 2.3
+Item {
+ property var iconHeight: 0
+}
diff --git a/src/Airmap/dummy/QGroundControl.Airmap.qmldir b/src/Airmap/dummy/QGroundControl.Airmap.qmldir
index 116917d..0196743 100644
--- a/src/Airmap/dummy/QGroundControl.Airmap.qmldir
+++ b/src/Airmap/dummy/QGroundControl.Airmap.qmldir
@@ -2,3 +2,4 @@ Module QGroundControl.Airmap
AirspaceControl 1.0 AirspaceControl.qml
AirspaceRegulation 1.0 AirspaceRegulation.qml
+AirspaceWeather 1.0 AirspaceWeather.qml
diff --git a/src/Airmap/dummy/airmap_dummy.qrc b/src/Airmap/dummy/airmap_dummy.qrc
index 173e9aa..364d9ca 100644
--- a/src/Airmap/dummy/airmap_dummy.qrc
+++ b/src/Airmap/dummy/airmap_dummy.qrc
@@ -3,5 +3,6 @@
QGroundControl.Airmap.qmldir
AirspaceControl.qml
AirspaceRegulation.qml
+ AirspaceWeather.qml
diff --git a/src/Airmap/images/weather-icons/clear.svg b/src/Airmap/images/weather-icons/clear.svg
new file mode 100755
index 0000000..5a34322
--- /dev/null
+++ b/src/Airmap/images/weather-icons/clear.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/cloudy.svg b/src/Airmap/images/weather-icons/cloudy.svg
new file mode 100755
index 0000000..33b8f68
--- /dev/null
+++ b/src/Airmap/images/weather-icons/cloudy.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/cloudy_wind.svg b/src/Airmap/images/weather-icons/cloudy_wind.svg
new file mode 100755
index 0000000..350f6bd
--- /dev/null
+++ b/src/Airmap/images/weather-icons/cloudy_wind.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/drizzle.svg b/src/Airmap/images/weather-icons/drizzle.svg
new file mode 100755
index 0000000..4e3b411
--- /dev/null
+++ b/src/Airmap/images/weather-icons/drizzle.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/drizzle_day.svg b/src/Airmap/images/weather-icons/drizzle_day.svg
new file mode 100755
index 0000000..62c8adc
--- /dev/null
+++ b/src/Airmap/images/weather-icons/drizzle_day.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/drizzle_night.svg b/src/Airmap/images/weather-icons/drizzle_night.svg
new file mode 100755
index 0000000..7a95b95
--- /dev/null
+++ b/src/Airmap/images/weather-icons/drizzle_night.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/foggy.svg b/src/Airmap/images/weather-icons/foggy.svg
new file mode 100755
index 0000000..4c77893
--- /dev/null
+++ b/src/Airmap/images/weather-icons/foggy.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/frigid.svg b/src/Airmap/images/weather-icons/frigid.svg
new file mode 100755
index 0000000..3fbea9a
--- /dev/null
+++ b/src/Airmap/images/weather-icons/frigid.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/hail.svg b/src/Airmap/images/weather-icons/hail.svg
new file mode 100755
index 0000000..58f3ede
--- /dev/null
+++ b/src/Airmap/images/weather-icons/hail.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/heavy_rain.svg b/src/Airmap/images/weather-icons/heavy_rain.svg
new file mode 100755
index 0000000..c955fa1
--- /dev/null
+++ b/src/Airmap/images/weather-icons/heavy_rain.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/hurricane.svg b/src/Airmap/images/weather-icons/hurricane.svg
new file mode 100755
index 0000000..1a10107
--- /dev/null
+++ b/src/Airmap/images/weather-icons/hurricane.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/isolated_thunderstorms.svg b/src/Airmap/images/weather-icons/isolated_thunderstorms.svg
new file mode 100755
index 0000000..c486070
--- /dev/null
+++ b/src/Airmap/images/weather-icons/isolated_thunderstorms.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/mostly_clear.svg b/src/Airmap/images/weather-icons/mostly_clear.svg
new file mode 100755
index 0000000..9946586
--- /dev/null
+++ b/src/Airmap/images/weather-icons/mostly_clear.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/mostly_cloudy_day.svg b/src/Airmap/images/weather-icons/mostly_cloudy_day.svg
new file mode 100755
index 0000000..c820b41
--- /dev/null
+++ b/src/Airmap/images/weather-icons/mostly_cloudy_day.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/mostly_cloudy_night.svg b/src/Airmap/images/weather-icons/mostly_cloudy_night.svg
new file mode 100755
index 0000000..673b54c
--- /dev/null
+++ b/src/Airmap/images/weather-icons/mostly_cloudy_night.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/mostly_sunny.svg b/src/Airmap/images/weather-icons/mostly_sunny.svg
new file mode 100755
index 0000000..047ccc4
--- /dev/null
+++ b/src/Airmap/images/weather-icons/mostly_sunny.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/partly_cloudy_day.svg b/src/Airmap/images/weather-icons/partly_cloudy_day.svg
new file mode 100755
index 0000000..456db3b
--- /dev/null
+++ b/src/Airmap/images/weather-icons/partly_cloudy_day.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/partyly_cloudy_night.svg b/src/Airmap/images/weather-icons/partyly_cloudy_night.svg
new file mode 100755
index 0000000..79374a2
--- /dev/null
+++ b/src/Airmap/images/weather-icons/partyly_cloudy_night.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/rain.svg b/src/Airmap/images/weather-icons/rain.svg
new file mode 100755
index 0000000..a7ee9ed
--- /dev/null
+++ b/src/Airmap/images/weather-icons/rain.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/rain_snow.svg b/src/Airmap/images/weather-icons/rain_snow.svg
new file mode 100755
index 0000000..21c2f32
--- /dev/null
+++ b/src/Airmap/images/weather-icons/rain_snow.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/scattered_snow_showers_day.svg b/src/Airmap/images/weather-icons/scattered_snow_showers_day.svg
new file mode 100755
index 0000000..ddaa563
--- /dev/null
+++ b/src/Airmap/images/weather-icons/scattered_snow_showers_day.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/scattered_snow_showers_night.svg b/src/Airmap/images/weather-icons/scattered_snow_showers_night.svg
new file mode 100755
index 0000000..11cf9fc
--- /dev/null
+++ b/src/Airmap/images/weather-icons/scattered_snow_showers_night.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/scattered_thunderstorms_day.svg b/src/Airmap/images/weather-icons/scattered_thunderstorms_day.svg
new file mode 100755
index 0000000..22c68ef
--- /dev/null
+++ b/src/Airmap/images/weather-icons/scattered_thunderstorms_day.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/scattered_thunderstorms_night.svg b/src/Airmap/images/weather-icons/scattered_thunderstorms_night.svg
new file mode 100755
index 0000000..dd6c2e2
--- /dev/null
+++ b/src/Airmap/images/weather-icons/scattered_thunderstorms_night.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/snow.svg b/src/Airmap/images/weather-icons/snow.svg
new file mode 100755
index 0000000..26f3fcb
--- /dev/null
+++ b/src/Airmap/images/weather-icons/snow.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/snow_storm.svg b/src/Airmap/images/weather-icons/snow_storm.svg
new file mode 100755
index 0000000..1049f19
--- /dev/null
+++ b/src/Airmap/images/weather-icons/snow_storm.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/sunny.svg b/src/Airmap/images/weather-icons/sunny.svg
new file mode 100755
index 0000000..a5b2d49
--- /dev/null
+++ b/src/Airmap/images/weather-icons/sunny.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/thunderstorm.svg b/src/Airmap/images/weather-icons/thunderstorm.svg
new file mode 100755
index 0000000..57973e8
--- /dev/null
+++ b/src/Airmap/images/weather-icons/thunderstorm.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/tornado.svg b/src/Airmap/images/weather-icons/tornado.svg
new file mode 100755
index 0000000..529b698
--- /dev/null
+++ b/src/Airmap/images/weather-icons/tornado.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/Airmap/images/weather-icons/windy.svg b/src/Airmap/images/weather-icons/windy.svg
new file mode 100755
index 0000000..5b77480
--- /dev/null
+++ b/src/Airmap/images/weather-icons/windy.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file