##// END OF EJS Templates
Limit favorite threads count
Limit favorite threads count

File last commit:

r1626:a034f64b default
r1626:a034f64b default
Show More
settingsmanager.py
199 lines | 6.1 KiB | text/x-python | PythonLexer
neko259
Limit favorite threads count
r1626 from boards import settings
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 from boards.models import Tag
neko259
Fixed last post link in new favorite posts api
r1346 from boards.models.thread import FAV_THREAD_NO_UPDATES
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
neko259
Tripcode collision preventer
r1297 MAX_TRIPCODE_COLLISIONS = 50
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 __author__ = 'neko259'
SESSION_SETTING = 'setting'
neko259
Cleaned up some code
r905 # Remove this, it is not used any more cause there is a user's permission
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 PERMISSION_MODERATE = 'moderator'
SETTING_THEME = 'theme'
SETTING_FAVORITE_TAGS = 'favorite_tags'
neko259
Favorite threads with new posts counter
r1323 SETTING_FAVORITE_THREADS = 'favorite_threads'
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 SETTING_HIDDEN_TAGS = 'hidden_tags'
SETTING_PERMISSIONS = 'permissions'
neko259
User notifications (BB-59)
r990 SETTING_USERNAME = 'username'
SETTING_LAST_NOTIFICATION_ID = 'last_notification'
neko259
Setting for image view mode: in post (simple) or in popup
r1122 SETTING_IMAGE_VIEWER = 'image_viewer'
neko259
Added ability to reset tripcode
r1296 SETTING_TRIPCODE = 'tripcode'
neko259
Added image aliases to upload the same images (like "fake" or "gtfo")
r1500 SETTING_IMAGES = 'images_aliases'
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
DEFAULT_THEME = 'md'
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 class SettingsManager:
"""
Base settings manager class. get_setting and set_setting methods should
be overriden.
"""
def __init__(self):
pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
neko259
If we are trying to open a hidden tag page, show its threads
r1064 def get_theme(self) -> str:
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 theme = self.get_setting(SETTING_THEME)
if not theme:
theme = DEFAULT_THEME
self.set_setting(SETTING_THEME, theme)
return theme
def set_theme(self, theme):
self.set_setting(SETTING_THEME, theme)
def has_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if permissions:
return permission in permissions
else:
return False
neko259
Setting for image view mode: in post (simple) or in popup
r1122 def get_setting(self, setting, default=None):
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
def set_setting(self, setting, value):
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
def add_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if not permissions:
permissions = [permission]
else:
neko259
Added login and logout for moderators
r729 permissions.append(permission)
self.set_setting(SETTING_PERMISSIONS, permissions)
def del_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if not permissions:
permissions = []
else:
permissions.remove(permission)
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_PERMISSIONS, permissions)
neko259
If we are trying to open a hidden tag page, show its threads
r1064 def get_fav_tags(self) -> list:
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 tag_names = self.get_setting(SETTING_FAVORITE_TAGS)
tags = []
if tag_names:
neko259
Fixed loading tag threads when hidden tags exist
r1195 tags = list(Tag.objects.filter(name__in=tag_names))
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 return tags
def add_fav_tag(self, tag):
tags = self.get_setting(SETTING_FAVORITE_TAGS)
if not tags:
tags = [tag.name]
else:
if not tag.name in tags:
tags.append(tag.name)
neko259
Sort favorite and hidden tags when updating the list
r789
tags.sort()
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_FAVORITE_TAGS, tags)
def del_fav_tag(self, tag):
tags = self.get_setting(SETTING_FAVORITE_TAGS)
if tag.name in tags:
tags.remove(tag.name)
self.set_setting(SETTING_FAVORITE_TAGS, tags)
neko259
If we are trying to open a hidden tag page, show its threads
r1064 def get_hidden_tags(self) -> list:
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 tag_names = self.get_setting(SETTING_HIDDEN_TAGS)
tags = []
if tag_names:
neko259
Fixed loading tag threads when hidden tags exist
r1195 tags = list(Tag.objects.filter(name__in=tag_names))
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
return tags
def add_hidden_tag(self, tag):
tags = self.get_setting(SETTING_HIDDEN_TAGS)
if not tags:
tags = [tag.name]
else:
if not tag.name in tags:
tags.append(tag.name)
neko259
Sort favorite and hidden tags when updating the list
r789
tags.sort()
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_HIDDEN_TAGS, tags)
def del_hidden_tag(self, tag):
tags = self.get_setting(SETTING_HIDDEN_TAGS)
if tag.name in tags:
tags.remove(tag.name)
self.set_setting(SETTING_HIDDEN_TAGS, tags)
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730
neko259
Favorite threads with new posts counter
r1323 def get_fav_threads(self) -> dict:
return self.get_setting(SETTING_FAVORITE_THREADS, default=dict())
def add_or_read_fav_thread(self, opening_post):
threads = self.get_fav_threads()
neko259
Limit favorite threads count
r1626
max_fav_threads = settings.get_int('View', 'MaxFavoriteThreads')
if (str(opening_post.id) in threads) or (len(threads) < max_fav_threads):
thread = opening_post.get_thread()
# Don't check for new posts if the thread is archived already
if thread.is_archived():
last_id = FAV_THREAD_NO_UPDATES
else:
last_id = thread.get_replies().last().id
threads[str(opening_post.id)] = last_id
self.set_setting(SETTING_FAVORITE_THREADS, threads)
neko259
Favorite threads with new posts counter
r1323
def del_fav_thread(self, opening_post):
threads = self.get_fav_threads()
if self.thread_is_fav(opening_post):
del threads[str(opening_post.id)]
self.set_setting(SETTING_FAVORITE_THREADS, threads)
def thread_is_fav(self, opening_post):
return str(opening_post.id) in self.get_fav_threads()
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730
neko259
Subscribe to a multiple of users for notifications
r1429 def get_notification_usernames(self):
neko259
Allow spaces in the notification usernames setting
r1452 names = set()
neko259
Fixed error 500 if the user does not have notification username
r1453 name_list = self.get_setting(SETTING_USERNAME)
if name_list is not None:
name_list = name_list.strip()
if len(name_list) > 0:
names = name_list.lower().split(',')
names = set(name.strip() for name in names)
neko259
Allow spaces in the notification usernames setting
r1452 return names
neko259
Subscribe to a multiple of users for notifications
r1429
neko259
Added image aliases to upload the same images (like "fake" or "gtfo")
r1500 def get_image_by_alias(self, alias):
images = self.get_setting(SETTING_IMAGES)
if images is not None and len(images) > 0:
return images.get(alias)
def add_image_alias(self, alias, image):
images = self.get_setting(SETTING_IMAGES)
if images is None:
images = dict()
images.put(alias, image)
neko259
Subscribe to a multiple of users for notifications
r1429
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 class SessionSettingsManager(SettingsManager):
"""
Session-based settings manager. All settings are saved to the user's
session.
"""
def __init__(self, session):
SettingsManager.__init__(self)
self.session = session
neko259
Setting for image view mode: in post (simple) or in popup
r1122 def get_setting(self, setting, default=None):
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 if setting in self.session:
return self.session[setting]
else:
neko259
Added ability to reset tripcode
r1296 self.set_setting(setting, default)
neko259
Setting for image view mode: in post (simple) or in popup
r1122 return default
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730
def set_setting(self, setting, value):
self.session[setting] = value
neko259
User notifications (BB-59)
r990
def get_settings_manager(request) -> SettingsManager:
"""
Get settings manager based on the request object. Currently only
session-based manager is supported. In the future, cookie-based or
database-based managers could be implemented.
"""
return SessionSettingsManager(request.session)