diff options
-rw-r--r-- | hello-fusepy.py | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/hello-fusepy.py b/hello-fusepy.py index 13a0968..ff9fd42 100644 --- a/hello-fusepy.py +++ b/hello-fusepy.py @@ -15,7 +15,7 @@ from fuse import ( fuse_exit, fuse_get_context, ) - +import urllib.parse class APIChoice(enum.Enum): ACTIVITYPUB = "ActivityPub" @@ -23,6 +23,7 @@ class APIChoice(enum.Enum): api_url_ap_template = "https://{server}/users/{user}/outbox?page=true" +api_url_m_lookup_template = "https://{server}/api/v1/accounts/lookup" class Status(object): @@ -62,12 +63,32 @@ class ActivityPubStatusProvider(StatusProvider): if s["type"] == "Create" ] +class MastodonStatusProvider(StatusProvider): + def __init__(self, server: str, user: str): + self.server = server + self.user = user + self.userid = 0 + + def load_statuses(self) -> list[Status]: + url = api_url_m_lookup_template.format(server=self.server) + url += "?" + urllib.parse.urlencode({"acct": self.user}) + res = requests.get(url) + if res.status_code == 404: + return self._fallback_not_found() + res.raise_for_status() + user = res.json() + self.userid = user["id"] + return self._fallback_not_found() + class HelloWorld(Operations, LoggingMixIn): def __init__(self, api: APIChoice, server: str, user: str): self.statuses: list[Status] = [] self.fd = 0 self.api = api - self.status_provider = ActivityPubStatusProvider(server, user) + if api == APIChoice.MASTODON: + self.status_provider = MastodonStatusProvider(server, user) + else: + self.status_provider = ActivityPubStatusProvider(server, user) def getattr(self, path, fh=None): (uid, gid, _) = fuse_get_context() @@ -143,9 +164,6 @@ def parse_arguments(): else: parser.error("Must choose either ActivityPub or Mastodon API") - if args.api_choice != APIChoice.ACTIVITYPUB: - raise NotImplementedError("Not supported yet") - return args def main(args): |