1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "settings/lib/ISettingCallback.h"
12 #include "utils/InfoLoader.h"
13 
14 #include <string>
15 
16 #define WEATHER_LABEL_LOCATION   10
17 #define WEATHER_IMAGE_CURRENT_ICON 21
18 #define WEATHER_LABEL_CURRENT_COND 22
19 #define WEATHER_LABEL_CURRENT_TEMP 23
20 #define WEATHER_LABEL_CURRENT_FEEL 24
21 #define WEATHER_LABEL_CURRENT_UVID 25
22 #define WEATHER_LABEL_CURRENT_WIND 26
23 #define WEATHER_LABEL_CURRENT_DEWP 27
24 #define WEATHER_LABEL_CURRENT_HUMI 28
25 
26 static const std::string ICON_ADDON_PATH = "resource://resource.images.weathericons.default";
27 
28 struct ForecastDay
29 {
30   std::string m_icon;
31   std::string m_overview;
32   std::string m_day;
33   std::string m_high;
34   std::string m_low;
35 };
36 
37 #define NUM_DAYS 7
38 
39 class CWeatherInfo
40 {
41 public:
42   ForecastDay forecast[NUM_DAYS];
43 
Reset()44   void Reset()
45   {
46     lastUpdateTime.clear();
47     currentIcon.clear();
48     currentConditions.clear();
49     currentTemperature.clear();
50     currentFeelsLike.clear();
51     currentWind.clear();
52     currentHumidity.clear();
53     currentUVIndex.clear();
54     currentDewPoint.clear();
55 
56     for (ForecastDay& f : forecast)
57     {
58       f.m_icon.clear();
59       f.m_overview.clear();
60       f.m_day.clear();
61       f.m_high.clear();
62       f.m_low.clear();
63     }
64   };
65 
66   std::string lastUpdateTime;
67   std::string location;
68   std::string currentIcon;
69   std::string currentConditions;
70   std::string currentTemperature;
71   std::string currentFeelsLike;
72   std::string currentUVIndex;
73   std::string currentWind;
74   std::string currentDewPoint;
75   std::string currentHumidity;
76   std::string busyString;
77   std::string naIcon;
78 };
79 
80 class CWeatherManager
81 : public CInfoLoader, public ISettingCallback
82 {
83 public:
84   CWeatherManager(void);
85   ~CWeatherManager(void) override;
86   static bool GetSearchResults(const std::string &strSearch, std::string &strResult);
87 
88   std::string GetLocation(int iLocation);
GetLastUpdateTime()89   const std::string &GetLastUpdateTime() const { return m_info.lastUpdateTime; };
90   const ForecastDay &GetForecast(int day) const;
91   bool IsFetched();
92   void Reset();
93 
94   void SetArea(int iLocation);
95   int GetArea() const;
96 protected:
97   CJob *GetJob() const override;
98   std::string TranslateInfo(int info) const override;
99   std::string BusyInfo(int info) const override;
100   void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
101 
102   void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
103   void OnSettingAction(const std::shared_ptr<const CSetting>& setting) override;
104 
105 private:
106 
107   CWeatherInfo m_info;
108 };
109