mirror of
https://codeberg.org/privacy1st/MastodonTootFollower
synced 2025-04-02 11:55:58 +02:00
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
from pathlib import Path
|
|
from mastodon import Mastodon
|
|
|
|
from mastodon_toot_follower import path_util
|
|
|
|
|
|
class App:
|
|
def __init__(self,
|
|
name: str = 'MastodonTootFollower',
|
|
url: str = 'https://git.privacy1st.de/langfingaz/MastodonTootFollower',
|
|
config_dir: Path = None,
|
|
):
|
|
if len(name) <= 0:
|
|
raise ValueError(f'name is too short: {name}')
|
|
if config_dir is None:
|
|
config_dir = Path.home().joinpath('.' + name)
|
|
|
|
self.name = name
|
|
self.url = url
|
|
self.config_dir = config_dir
|
|
self.mastodon_dict: dict[str, Mastodon] = dict()
|
|
|
|
config_dir.mkdir(parents=True, exist_ok=True)
|
|
self._credential_dir().mkdir(parents=True, exist_ok=True)
|
|
self._toot_cache_dir().mkdir(parents=True, exist_ok=True)
|
|
|
|
def _get_mastodon(self, mastodon_instance: str) -> Mastodon:
|
|
if mastodon_instance not in self.mastodon_dict:
|
|
self._create_or_load_credentials(mastodon_instance)
|
|
# Create Mastdon API wrapper object.
|
|
self.mastodon_dict[mastodon_instance] = Mastodon(client_id=self._credential_file(mastodon_instance))
|
|
return self.mastodon_dict[mastodon_instance]
|
|
|
|
def _create_or_load_credentials(self, mastodon_instance: str) -> None:
|
|
cf = self._credential_file(mastodon_instance)
|
|
|
|
# Create application credentials only once and save them.
|
|
if cf.exists():
|
|
return
|
|
Mastodon.create_app(
|
|
client_name=self.name,
|
|
website=self.url,
|
|
api_base_url=mastodon_instance,
|
|
to_file=cf,
|
|
scopes=['read']
|
|
)
|
|
|
|
def _credential_file(self, mastodon_instance: str) -> Path:
|
|
return self._credential_dir().joinpath(path_util.escape(mastodon_instance))
|
|
|
|
def _credential_dir(self) -> Path:
|
|
return self.config_dir.joinpath('credentials')
|
|
|
|
def _toot_cache_dir(self) -> Path:
|
|
return self.config_dir.joinpath('toots')
|