##// END OF EJS Templates
Limit favorite threads count
neko259 -
r1626:a034f64b default
parent child Browse files
Show More
@@ -1,195 +1,199 b''
1 from boards import settings
1 2 from boards.models import Tag
2 3 from boards.models.thread import FAV_THREAD_NO_UPDATES
3 4
4 5 MAX_TRIPCODE_COLLISIONS = 50
5 6
6 7 __author__ = 'neko259'
7 8
8 9 SESSION_SETTING = 'setting'
9 10
10 11 # Remove this, it is not used any more cause there is a user's permission
11 12 PERMISSION_MODERATE = 'moderator'
12 13
13 14 SETTING_THEME = 'theme'
14 15 SETTING_FAVORITE_TAGS = 'favorite_tags'
15 16 SETTING_FAVORITE_THREADS = 'favorite_threads'
16 17 SETTING_HIDDEN_TAGS = 'hidden_tags'
17 18 SETTING_PERMISSIONS = 'permissions'
18 19 SETTING_USERNAME = 'username'
19 20 SETTING_LAST_NOTIFICATION_ID = 'last_notification'
20 21 SETTING_IMAGE_VIEWER = 'image_viewer'
21 22 SETTING_TRIPCODE = 'tripcode'
22 23 SETTING_IMAGES = 'images_aliases'
23 24
24 25 DEFAULT_THEME = 'md'
25 26
26 27
27 28 class SettingsManager:
28 29 """
29 30 Base settings manager class. get_setting and set_setting methods should
30 31 be overriden.
31 32 """
32 33 def __init__(self):
33 34 pass
34 35
35 36 def get_theme(self) -> str:
36 37 theme = self.get_setting(SETTING_THEME)
37 38 if not theme:
38 39 theme = DEFAULT_THEME
39 40 self.set_setting(SETTING_THEME, theme)
40 41
41 42 return theme
42 43
43 44 def set_theme(self, theme):
44 45 self.set_setting(SETTING_THEME, theme)
45 46
46 47 def has_permission(self, permission):
47 48 permissions = self.get_setting(SETTING_PERMISSIONS)
48 49 if permissions:
49 50 return permission in permissions
50 51 else:
51 52 return False
52 53
53 54 def get_setting(self, setting, default=None):
54 55 pass
55 56
56 57 def set_setting(self, setting, value):
57 58 pass
58 59
59 60 def add_permission(self, permission):
60 61 permissions = self.get_setting(SETTING_PERMISSIONS)
61 62 if not permissions:
62 63 permissions = [permission]
63 64 else:
64 65 permissions.append(permission)
65 66 self.set_setting(SETTING_PERMISSIONS, permissions)
66 67
67 68 def del_permission(self, permission):
68 69 permissions = self.get_setting(SETTING_PERMISSIONS)
69 70 if not permissions:
70 71 permissions = []
71 72 else:
72 73 permissions.remove(permission)
73 74 self.set_setting(SETTING_PERMISSIONS, permissions)
74 75
75 76 def get_fav_tags(self) -> list:
76 77 tag_names = self.get_setting(SETTING_FAVORITE_TAGS)
77 78 tags = []
78 79 if tag_names:
79 80 tags = list(Tag.objects.filter(name__in=tag_names))
80 81 return tags
81 82
82 83 def add_fav_tag(self, tag):
83 84 tags = self.get_setting(SETTING_FAVORITE_TAGS)
84 85 if not tags:
85 86 tags = [tag.name]
86 87 else:
87 88 if not tag.name in tags:
88 89 tags.append(tag.name)
89 90
90 91 tags.sort()
91 92 self.set_setting(SETTING_FAVORITE_TAGS, tags)
92 93
93 94 def del_fav_tag(self, tag):
94 95 tags = self.get_setting(SETTING_FAVORITE_TAGS)
95 96 if tag.name in tags:
96 97 tags.remove(tag.name)
97 98 self.set_setting(SETTING_FAVORITE_TAGS, tags)
98 99
99 100 def get_hidden_tags(self) -> list:
100 101 tag_names = self.get_setting(SETTING_HIDDEN_TAGS)
101 102 tags = []
102 103 if tag_names:
103 104 tags = list(Tag.objects.filter(name__in=tag_names))
104 105
105 106 return tags
106 107
107 108 def add_hidden_tag(self, tag):
108 109 tags = self.get_setting(SETTING_HIDDEN_TAGS)
109 110 if not tags:
110 111 tags = [tag.name]
111 112 else:
112 113 if not tag.name in tags:
113 114 tags.append(tag.name)
114 115
115 116 tags.sort()
116 117 self.set_setting(SETTING_HIDDEN_TAGS, tags)
117 118
118 119 def del_hidden_tag(self, tag):
119 120 tags = self.get_setting(SETTING_HIDDEN_TAGS)
120 121 if tag.name in tags:
121 122 tags.remove(tag.name)
122 123 self.set_setting(SETTING_HIDDEN_TAGS, tags)
123 124
124 125 def get_fav_threads(self) -> dict:
125 126 return self.get_setting(SETTING_FAVORITE_THREADS, default=dict())
126 127
127 128 def add_or_read_fav_thread(self, opening_post):
128 129 threads = self.get_fav_threads()
129 thread = opening_post.get_thread()
130 # Don't check for new posts if the thread is archived already
131 if thread.is_archived():
132 last_id = FAV_THREAD_NO_UPDATES
133 else:
134 last_id = thread.get_replies().last().id
135 threads[str(opening_post.id)] = last_id
136 self.set_setting(SETTING_FAVORITE_THREADS, threads)
130
131 max_fav_threads = settings.get_int('View', 'MaxFavoriteThreads')
132 if (str(opening_post.id) in threads) or (len(threads) < max_fav_threads):
133 thread = opening_post.get_thread()
134 # Don't check for new posts if the thread is archived already
135 if thread.is_archived():
136 last_id = FAV_THREAD_NO_UPDATES
137 else:
138 last_id = thread.get_replies().last().id
139 threads[str(opening_post.id)] = last_id
140 self.set_setting(SETTING_FAVORITE_THREADS, threads)
137 141
138 142 def del_fav_thread(self, opening_post):
139 143 threads = self.get_fav_threads()
140 144 if self.thread_is_fav(opening_post):
141 145 del threads[str(opening_post.id)]
142 146 self.set_setting(SETTING_FAVORITE_THREADS, threads)
143 147
144 148 def thread_is_fav(self, opening_post):
145 149 return str(opening_post.id) in self.get_fav_threads()
146 150
147 151 def get_notification_usernames(self):
148 152 names = set()
149 153 name_list = self.get_setting(SETTING_USERNAME)
150 154 if name_list is not None:
151 155 name_list = name_list.strip()
152 156 if len(name_list) > 0:
153 157 names = name_list.lower().split(',')
154 158 names = set(name.strip() for name in names)
155 159 return names
156 160
157 161 def get_image_by_alias(self, alias):
158 162 images = self.get_setting(SETTING_IMAGES)
159 163 if images is not None and len(images) > 0:
160 164 return images.get(alias)
161 165
162 166 def add_image_alias(self, alias, image):
163 167 images = self.get_setting(SETTING_IMAGES)
164 168 if images is None:
165 169 images = dict()
166 170 images.put(alias, image)
167 171
168 172
169 173 class SessionSettingsManager(SettingsManager):
170 174 """
171 175 Session-based settings manager. All settings are saved to the user's
172 176 session.
173 177 """
174 178 def __init__(self, session):
175 179 SettingsManager.__init__(self)
176 180 self.session = session
177 181
178 182 def get_setting(self, setting, default=None):
179 183 if setting in self.session:
180 184 return self.session[setting]
181 185 else:
182 186 self.set_setting(setting, default)
183 187 return default
184 188
185 189 def set_setting(self, setting, value):
186 190 self.session[setting] = value
187 191
188 192
189 193 def get_settings_manager(request) -> SettingsManager:
190 194 """
191 195 Get settings manager based on the request object. Currently only
192 196 session-based manager is supported. In the future, cookie-based or
193 197 database-based managers could be implemented.
194 198 """
195 199 return SessionSettingsManager(request.session)
@@ -1,41 +1,42 b''
1 1 [Version]
2 2 Version = 3.1.0 Mitsumune
3 3 SiteName = Neboard DEV
4 4
5 5 [Cache]
6 6 # Timeout for caching, if cache is used
7 7 CacheTimeout = 600
8 8
9 9 [Forms]
10 10 # Max post length in characters
11 11 MaxTextLength = 30000
12 12 MaxFileSize = 8000000
13 13 LimitFirstPosting = true
14 14 LimitPostingSpeed = false
15 15 PowDifficulty = 0
16 16 # Delay in seconds
17 17 PostingDelay = 30
18 18
19 19 [Messages]
20 20 # Thread bumplimit
21 21 MaxPostsPerThread = 10
22 22 ThreadArchiveDays = 300
23 23 AnonymousMode = false
24 24
25 25 [View]
26 26 DefaultTheme = md
27 27 DefaultImageViewer = simple
28 28 LastRepliesCount = 3
29 29 ThreadsPerPage = 3
30 30 ImagesPerPageGallery = 20
31 MaxFavoriteThreads = 20
31 32
32 33 [Storage]
33 34 # Enable archiving threads instead of deletion when the thread limit is reached
34 35 ArchiveThreads = true
35 36
36 37 [External]
37 38 # Thread update
38 39 WebsocketsEnabled = false
39 40
40 41 [RSS]
41 42 MaxItems = 20
General Comments 0
You need to be logged in to leave comments. Login now