/
controller.py
130 lines (104 loc) · 4.19 KB
/
controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from view import GUIFeedReader, GUILogin
from model import Feader, Feed
import os
class FeedReader(object):
feaders = []; feeds = []
# For GUILogin window:
def __init__(self):
self.gui_login = GUILogin()
self.gui_login.button_login.connect('clicked', self.load_user_urls)
self.gui_login.run_gtk()
def load_user_urls(self, button):
self.gui = GUIFeedReader()
try:
self.user_file_name = os.getcwd() + '/user_files/' + self.gui_login.edit_login.get_text() + '.txt'
except IOError:
self.user_file_name = os.getcwd() + '/GTKSimpleFeedReader/user_files/' + self.gui_login.edit_login.get_text() + '.txt'
user_file = open(self.user_file_name, "r")
user_url_list = user_file.readlines()
for url in user_url_list: self.add_feader(url)
self.gui_login.window.destroy()
self.start_FeedReader()
# For GUIFeedReader window:
def start_FeedReader(self):
self.gui.combo_feaders.append_text('Todos')
self.connect_FeedReader_events()
self.gui.run_gtk()
def connect_FeedReader_events(self):
self.gui.button_add.connect('clicked', self.get_url_to_feader)
self.gui.button_refresh.connect('clicked', self.refresh_feeds)
self.gui.combo_feaders.connect('changed', self.select_feader)
self.gui.combo_feeds.connect('changed', self.select_feed)
def get_url_to_feader(self, button):
url = self.gui.edit_add_feader.get_text()
# self.clear_data_from([self.gui.edit_add_feader])
# solution for now:
self.gui.edit_add_feader.set_text('')
#-----------------
self.add_feader(url)
self.add_feader_url_to_file(url)
def add_feader(self, url):
new_feader = Feader(url)
self.feaders.append(new_feader)
self.gui.combo_feaders.append_text(new_feader.title)
self.add_feader_feeds(new_feader)
def add_feader_url_to_file(self, url):
user_file = open(self.user_file_name, "a")
user_file.write(url + '\n')
user_file.close()
def add_feader_feeds(self, new_feader):
self.feeds.extend(new_feader.get_feeds())
self.feeds = self.__quicksort(self.feeds)
self.add_feeds_to_combo_from()
def __quicksort(self, list_feeds):
if len(list_feeds) <= 1: return list_feeds
middle = list_feeds[0].date
return self.__quicksort([feed for feed in list_feeds if feed.date > middle]) + \
[feed for feed in list_feeds if feed.date == middle] + \
self.__quicksort([feed for feed in list_feeds if feed.date < middle])
def add_feeds_to_combo_from(self, feader=None):
# self.clear_data_from([self.gui.combo_feeds.get_model()])
# solution for now:
model = self.gui.combo_feeds.get_model()
model.clear()
# -----------------
if feader == None: feeds_list = self.feeds
else: feeds_list = feader.get_feeds()
for feed in feeds_list: self.gui.combo_feeds.append_text(feed.title)
def select_feader(self, combobox):
if self.gui.combo_feaders.get_active_text() == 'Todos': self.add_feeds_to_combo_from()
else:
feader_selected = [feader for feader in self.feaders if feader.title == self.gui.combo_feaders.get_active_text()]
# se retornar vazio a funcao add_feeds_to_combo_from() coloca todos os feeds na combo
self.add_feeds_to_combo_from(feader_selected[0])
def select_feed(self, combobox):
if self.gui.combo_feeds.get_active_text() != '':
feed_selected = [feed.description for feed in self.feeds if feed.title == self.gui.combo_feeds.get_active_text()]
self.gui.webview.load_html_string(feed_selected[0], '')
# self.gui.buffer.set_text(feed_selected[0])
def refresh_feeds(self, btn):
# self.clear_data_from([self.feeds, self.combo_feeds.get_model()])
# solution for now:
self.feeds = []
model = self.gui.combo_feeds.get_model()
model.clear()
# ----------------
for feader in self.feaders:
feader.reset()
self.feeds.extend(feader.get_feeds())
# Doesn't work yet:
def clear_data_from(self, objs):
# dict_clear_function = {
# 'list': lambda obj: clear_list(obj),
# 'gtk.Entry': lambda obj: obj.set_text(''),
# 'gtk.combo_box_new_text': lambda obj: obj.clear(),
# }
# for obj in objs: dict_clear_function.get(type(obj))()
# def clear_list(l): l = []
for obj in objs:
if type(obj) == 'list': obj = []
elif type(obj) == 'gtk.Entry': obj.set_text('')
elif type(obj) == 'gtk.ListStore': obj.clear()
else: pass