~santi698/gazette/gazette

« back to all changes in this revision

Viewing changes to src/Services/Weather.vala

  • Committer: Santiago Ocamica
  • Date: 2013-04-20 15:41:05 UTC
  • Revision ID: santi6982@gmail.com-20130420154105-k1mjehjt5xubz7ae
Implemented auto-reload

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
{
56
56
        string unit;
57
57
        string text;
58
 
 
 
58
    Soup.SessionSync session;
 
59
    Soup.Message message;
59
60
        Settings settings;
 
61
        ShadowedLabel label;
60
62
 
61
63
        public Weather ()
62
64
        {
63
65
                base ("weather");
64
66
 
65
67
                settings = new Settings ("org.pantheon.gazette.weather");
66
 
 
 
68
        label = new ShadowedLabel("");
67
69
                unit = settings.get_string ("weather-unit") == "Fahrenheit" ? "f" : "c";
68
70
 
69
71
                string id = settings.get_int ("weather-id").to_string();
70
72
                var url = "http://weather.yahooapis.com/forecastrss";
71
73
                url += "?u=" + unit;
72
74
                url += "&w=" + id;
73
 
                
74
 
                var session = new Soup.SessionAsync ();
75
 
                var message = new Soup.Message ("GET", url);
76
 
 
77
 
                session.queue_message (message, (session, m) => {
78
 
                        var data = (string)m.response_body.data;
 
75
                stdout.printf("%s",url);
 
76
                session = new Soup.SessionSync ();
 
77
                message = new Soup.Message ("GET", url);
 
78
                add_child (label);
 
79
        }
 
80
 
 
81
        public override void create ()
 
82
        {
 
83
 
 
84
        }
 
85
 
 
86
        public string[] get_attributes (string data, string tagname, string [] attrs, int offset = 0)
 
87
        {
 
88
                var start = data.index_of ("<" + tagname, offset) + tagname.length + 1;
 
89
                var end = data.index_of ("/>", start);
 
90
                var tmp_data = data.substring (start, end - start);
 
91
 
 
92
                var res = new string[attrs.length];
 
93
                for (var i = 0; i < attrs.length; i++) {
 
94
                                res[i] = get_attribute_value (tmp_data, attrs[i]);
 
95
                }
 
96
                return res;
 
97
        }
 
98
 
 
99
        public string get_attribute_value (string data, string attr)
 
100
        {
 
101
                var start = data.index_of (attr + "=\"") + attr.length + 2;
 
102
                var end = data.index_of ("\"", start);
 
103
 
 
104
                return data.substring (start, end - start);
 
105
        }
 
106
        public override bool update() {
 
107
            session.queue_message(message, (session, m) => {
 
108
            var data = (string)message.response_body.data;
79
109
 
80
110
                        var current = get_attributes (data, "yweather:condition", {"temp", "text", "code"});
81
111
                        var forecast = get_attributes (data, "yweather:forecast", {"day", "date", "low", "high", "text", "code"},
98
128
 
99
129
                                "<span face='Raleway' font='21'>" + forecast[2] + " - " + forecast[3] +"°"+unit.up()+"      </span>"+
100
130
                                "<span face='Raleway' font='21'>" + forecast2[2] + " - " + forecast2[3] +"°"+unit.up()+"      </span>";
101
 
                });
102
 
        }
103
 
 
104
 
        public override void create ()
105
 
        {
106
 
                var label = new ShadowedLabel (text);
107
 
                add_child (label);
108
 
        }
109
 
 
110
 
        public string[] get_attributes (string data, string tagname, string [] attrs, int offset = 0)
111
 
        {
112
 
                var start = data.index_of ("<" + tagname, offset) + tagname.length + 1;
113
 
                var end = data.index_of ("/>", start);
114
 
                var tmp_data = data.substring (start, end - start);
115
 
 
116
 
                var res = new string[attrs.length];
117
 
                for (var i = 0; i < attrs.length; i++) {
118
 
                                res[i] = get_attribute_value (tmp_data, attrs[i]);
119
 
                }
120
 
                return res;
121
 
        }
122
 
 
123
 
        public string get_attribute_value (string data, string attr)
124
 
        {
125
 
                var start = data.index_of (attr + "=\"") + attr.length + 2;
126
 
                var end = data.index_of ("\"", start);
127
 
 
128
 
                return data.substring (start, end - start);
 
131
                        label.label = text;
 
132
            });
 
133
            return true;
129
134
        }
130
135
}
131
136