diff --git a/src/api/anilistapi.py b/src/api/anilistapi.py
new file mode 100644
index 0000000..0ed44e3
--- /dev/null
+++ b/src/api/anilistapi.py
@@ -0,0 +1,21 @@
+from anilistapi import AnilistAPI
+
+
+class anilistAPI(AnilistAPI):
+ __name__ = "AnilistAPI"
+
+ def __init__(self):
+ super().__init__()
+
+ def getSeries(self, title):
+ search = title
+ manga = self.search_manga(search)
+
+ if manga:
+ return manga
+ else:
+ return None
+
+ def get_metadata(self, manga_id):
+ metadata = self.get_manga(manga_id)
+ return metadata
diff --git a/src/logic/metadataHandlers.py b/src/logic/metadataHandlers.py
new file mode 100644
index 0000000..4a69219
--- /dev/null
+++ b/src/logic/metadataHandlers.py
@@ -0,0 +1,121 @@
+from komgapi.schemas import Metadata, AlternateTitle, Link
+
+# from comicvineapi import Issue
+from anilistapi.schemas.manga import Manga
+
+# import hasattr to check if a field exists in the metadata
+from builtins import hasattr
+from komconfig import KomConfig
+
+config = KomConfig()
+
+# def handleComicVine(metadata: Issue) -> Metadata:
+# """
+# Handle metadata from ComicVineAPI.
+
+# Args:
+# metadata (Issue): Metadata from ComicVineAPI.
+
+# Returns:
+# Metadata: Metadata in a format that can be used by KOMGA.
+# """
+# return Metadata()
+
+
+def anilistAgeRating(metadata: Manga) -> int:
+ if metadata.isAdult:
+ return 18
+ else:
+ if metadata.tags is not None:
+ for tag in metadata.tags:
+ if tag.isAdult:
+ return 18
+ if "Ecchi" in metadata.tags:
+ return 16
+ else:
+ return 12
+ return 12
+
+
+def anilistStatus(metadata: Manga) -> str:
+ match metadata.status:
+ case "RELEASING":
+ return "ONGOING"
+ case "FINISHED":
+ return "ENDED"
+
+
+def readingDirection(metadata: Manga) -> str:
+ if metadata.countryOfOrigin == "JP":
+ return "RIGHT_TO_LEFT"
+
+
+def description(metadata: Manga) -> str:
+ if config.komtagger.sanitize_description:
+ desc = metadata.description
+ if desc:
+ desc = desc.split("\n
\n(")[0]
+ desc = desc.replace("
", "")
+ return desc
+ return metadata.description
+
+
+def handleAnilist(metadata: Manga) -> Metadata:
+ """Handle Metadata from Anilist
+
+ Args:
+ metadata (Manga): Metadata from Anilist
+
+ Returns:
+ Metadata: Metadata in a format that can be used by KOMGA
+ """
+ links = []
+ if hasattr(metadata, "externalLinks") and metadata.externalLinks:
+ for link in metadata.externalLinks:
+ links.append(
+ Link(url=link.url.replace(" ", "%20"), label=link.site).__dict__
+ )
+ # synonyms = [
+ # AlternateTitle(title=alt, label="Synonym") for alt in metadata.synonyms
+ # ]
+ alternateTitles = []
+ # alternateTitles is a list of dicts, use key as label and value as title
+
+ for alternate in metadata.title.alternateTitles:
+ # alternate is a dict, set label from dict key, and value from dict value
+ label = list(alternate.keys())[0]
+ title = alternate[label]
+ if title is not None:
+ alt_Title = {"label": label, "title": title}
+ alternateTitles.append(alt_Title)
+
+ # alternateTitles.extend(synonyms)
+ return Metadata(
+ status=anilistStatus(metadata),
+ statusLock=True,
+ title=metadata.title,
+ titleLock=True,
+ titleSort=metadata.title,
+ titleSortLock=True,
+ summary=description(metadata),
+ summaryLock=True,
+ readingDirection=readingDirection(metadata),
+ readingDirectionLock=True,
+ publisherLock=True,
+ ageRating=anilistAgeRating(metadata),
+ ageRatingLock=True,
+ language="en",
+ languageLock=True,
+ genres=metadata.genres,
+ genresLock=True,
+ tags=[tag.name for tag in metadata.tags] if metadata.tags else None,
+ tagsLock=True,
+ totalBookCount=metadata.volumes if metadata.volumes else None,
+ totalBookCountLock=True if metadata.volumes else False,
+ sharingLabels=[None],
+ sharingLabelsLock=False,
+ links=links,
+ linksLock=True,
+ alternateTitles=alternateTitles,
+ alternateTitlesLock=True,
+ )
diff --git a/src/utils.py b/src/utils.py
new file mode 100644
index 0000000..9e8f03b
--- /dev/null
+++ b/src/utils.py
@@ -0,0 +1,4 @@
+def write(name, file):
+ with open(f"{file}.txt", "a") as f:
+ # add a new line
+ f.write(name + "\n")