Fix previous commit
[debian/pino.git] / src / favorites_view_list.vala
1 /* favorites_view_list.vala
2  *
3  * Copyright (C) 2009-2010  troorl
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Author:
19  *      troorl <troorl@gmail.com>
20  */
21
22 using Gtk;
23 using Auth;
24 using RestAPI;
25 using Gee;
26 using Xml;
27
28 public class FavoritesViewList : TimelineList {
29         
30         public FavoritesViewList(Window _parent, Accounts _accounts, Template _template) {
31                 base(_parent, _accounts, TimelineType.FAVORITES, _template, 0, null);
32                 
33                 need_more_button = false; //no "more" button
34         }
35         
36         //private override void get_older(){}
37         
38         public override ArrayList<Status>? update() {
39                 ArrayList<Status> result = null;
40                 string since_id = "";
41                 bool first_time = true;
42                 
43                 if(lst.size > 0) {
44                         since_id = lst.get(0).id;
45                         first_time = false;
46                 }
47                 
48                 try {
49                         result = api.get_timeline(_items_count, null, since_id);
50                 } catch(RestError e) {
51                         updating_error(e.message);
52                         return result;
53                 } catch(ParseError e) {
54                         updating_error(e.message);
55                         return result;
56                 }
57                 
58                 debug("SIZE: %d", result.size);
59                 
60                 if(result.size > 0) { //if we got some statuses
61                         
62                         if(lst.size == 0) {
63                                 lst.add_all(result);
64                         } else {
65                                 int i = 0;
66                                 foreach(Status status in result) { //insert statuses at the start of the list
67                                         lst.insert(i, status);
68                                         i++;
69                                 }
70                         }
71                 }
72                 
73                 refresh(true);
74                 
75                 finish_update(); //send signal
76                 
77                 if(first_time)
78                         result.clear();
79                 
80                 return result;
81         }
82         
83         public void get_older_public() {
84                 get_older();
85         }
86         
87         /* get older statuses */
88         protected override void get_older() {
89                 debug("more");
90                 if(lst.size == 0)
91                         return;
92                 
93                 ArrayList<RestAPI.Status> result;
94                 string max_id = lst.get(lst.size - 1).id;
95                 
96                 try {
97                         result = api.get_timeline(_items_count, null, "", max_id);
98                 } catch(RestError e) {
99                         more.set_enabled(true);
100                         updating_error(e.message);
101                         return;
102                 } catch(ParseError e) {
103                         more.set_enabled(true);
104                         updating_error(e.message);
105                         return;
106                 }
107                 
108                 if(result.size < 2) {
109                         more.set_enabled(true);
110                         return;
111                 }
112                 
113                 lst.add_all(result.slice(1, result.size -1));
114                 
115                 finish_update(); //send signal
116                 
117                 refresh(true);
118         }
119 }