-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
101 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# -*- coding: utf-8 -*- | ||
""" | ||
Implements searching functionality for mastodon | ||
Used for searching for statuses (posts) or possibly hashtags | ||
""" | ||
|
||
import logging | ||
import time | ||
from pubsub import pub | ||
|
||
from .base import BaseBuffer | ||
import widgetUtils | ||
from wxUI import commonMessageDialogs | ||
|
||
|
||
log = logging.getLogger("controller.buffers.mastodon.search") | ||
|
||
|
||
class SearchBuffer(BaseBuffer): | ||
"""Search buffer | ||
There are some methods of the Base Buffer that can't be used here | ||
""" | ||
|
||
def start_stream(self, mandatory: bool=False, play_sound: bool=True, avoid_autoreading: bool=False) -> None: | ||
"""Start streaming | ||
Parameters: | ||
- mandatory [bool]: Force start stream if True | ||
- play_sound [bool]: Specifies whether to play sound after receiving posts | ||
avoid_autoreading [bool]: Reads the posts if set to True | ||
returns [None | int]: Number of posts received | ||
""" | ||
log.debug(f"Starting streamd for buffer {self.name} account {self.account} and type {self.type}") | ||
log.debug(f"Args: {self.args}, Kwargs: {self.kwargs}") | ||
|
||
current_time = time.time() | ||
if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory==True: | ||
self.execution_time = current_time | ||
|
||
min_id = None | ||
if self.name in self.session.db and len(self.session.db[self.name]) > 0: | ||
if self.session.settings["general"]["reverse_timelines"]: | ||
min_id = self.session.db[self.name][0].id | ||
else: | ||
min_id = self.session.db[self.name][-1].id | ||
try: | ||
results = getattr(self.session.api, self.function)(min_id=min_id, **self.kwargs) | ||
except Exception as mess: | ||
log.exception(f"Error while receiving search posts {mess}") | ||
return | ||
|
||
# Results is either in results.statuses or results.hashtags. | ||
results = results.statuses if results.statuses else results.hashtags | ||
results.reverse() | ||
num_of_items = self.session.order_buffer(self.name, results) | ||
log.debug(f"Number of items retrieved: {num_of_items}") | ||
self.put_items_on_list(num_of_items) | ||
|
||
if hasattr(self, "finished_timeline") and self.finished_timeline == False: | ||
pub.sendMessage("core.change_buffer_title", name=self.session.get_name(), buffer=self.name, title=_("{}-searchterm").format(self.kwargs['q'])) | ||
self.finished_timeline = True | ||
|
||
# playsound and autoread | ||
if num_of_items > 0: | ||
if self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True: | ||
self.session.sound.play(self.sound) | ||
if avoid_autoreading == False and mandatory == True and self.name in self.session.settings["other_buffers"]["autoread_buffers"]: | ||
self.auto_read(num_of_items) | ||
|
||
return num_of_items | ||
|
||
def remove_buffer(self, force: bool=False) -> bool: | ||
"""Performs clean-up tasks before removing buffer | ||
Parameters: | ||
- force [bool]: Force removes buffer if true | ||
Returns [bool]: True proceed with removing buffer or False abort | ||
removing buffer | ||
""" | ||
# Ask user | ||
if not force: | ||
response = commonMessageDialogs.remove_buffer() | ||
else: | ||
response = widgetUtils.YES | ||
|
||
if response == widgetUtils.NO: | ||
return False | ||
|
||
# remove references of this buffer in db and settings | ||
if self.name in self.session.db: | ||
self.session.db.pop(self.name) | ||
if self.kwargs.get('q') in self.session.settings['other_buffers']['post_searches']: | ||
self.session.settings['other_buffers']['post_searches'].remove(self.kwargs['q']) | ||
|
||
return True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters