Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
c10e853564 | |||
cd043d093f | |||
6db01f7f9f | |||
8460d56d55 | |||
8fedbe4607 | |||
e069c47242 | |||
aba0f2d1d5 | |||
af6cb7f08a |
Binary file not shown.
Before Width: | Height: | Size: 53 KiB |
BIN
build/icon/128/AniTrack.png
Normal file
BIN
build/icon/128/AniTrack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
BIN
build/icon/32/AniTrack.png
Normal file
BIN
build/icon/32/AniTrack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
build/icon/48/AniTrack.png
Normal file
BIN
build/icon/48/AniTrack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
BIN
build/icon/64/AniTrack.png
Normal file
BIN
build/icon/64/AniTrack.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
26
build/install_linux.sh
Executable file
26
build/install_linux.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# copy desktop file
|
||||||
|
if [ -e "~/.local/share/applications/AniTrack.desktop" ]; then
|
||||||
|
if [ -d "~/.local/share/applications/" ]; then
|
||||||
|
cp ./AniTrack.desktop ~/.local/share/applications/
|
||||||
|
else
|
||||||
|
mkdir -p ~/.local/share/applications/
|
||||||
|
cp ./AniTrack.desktop ~/.local/share/applications/
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# copy icons to xdg folders
|
||||||
|
for size in 32 48 64 128; do
|
||||||
|
xdg-icon-resource install --novendor --context apps --size $size ./icon/$size/AniTrack.png AniTrack
|
||||||
|
done
|
||||||
|
|
||||||
|
# copy AniTrack Binary to $HOME/Applications/
|
||||||
|
if ! [ -d "~/Applications" ]; then
|
||||||
|
mkdir -p ~/Applications
|
||||||
|
cp ./bin/AniTrack ~/Applications/
|
||||||
|
elif ! [[ -e ~/Applications/AniTrack ]]; then
|
||||||
|
cp ./bin/AniTrack ~/Applications/
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "AniTrack has been successfully installed."
|
@ -1,80 +1,93 @@
|
|||||||
export interface AniListCurrentUserWatchList {
|
export interface AniListCurrentUserWatchList {
|
||||||
data: {
|
data: {
|
||||||
Page: {
|
Page: {
|
||||||
pageInfo: {
|
pageInfo: {
|
||||||
total: number
|
total: number;
|
||||||
perPage: number
|
perPage: number;
|
||||||
currentPage: number
|
currentPage: number;
|
||||||
lastPage: number
|
lastPage: number;
|
||||||
hasNextPage: boolean
|
hasNextPage: boolean;
|
||||||
},
|
};
|
||||||
mediaList: MediaList[]
|
mediaList: MediaList[];
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AniListGetSingleAnime {
|
export interface AniListGetSingleAnime {
|
||||||
data: {
|
data: {
|
||||||
MediaList: MediaList
|
MediaList: MediaList;
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MediaList {
|
export interface MediaList {
|
||||||
id: number
|
id: number;
|
||||||
mediaId: number
|
mediaId: number;
|
||||||
userId: number
|
userId: number;
|
||||||
media: {
|
media: {
|
||||||
id: number
|
id: number;
|
||||||
idMal: number
|
idMal: number;
|
||||||
title: {
|
title: {
|
||||||
romaji: string
|
romaji: string;
|
||||||
english?: string
|
english?: string;
|
||||||
native: string
|
native: string;
|
||||||
}
|
};
|
||||||
description: string
|
description: string;
|
||||||
coverImage: {
|
coverImage: {
|
||||||
large: string
|
large: string;
|
||||||
}
|
};
|
||||||
season: string
|
season: string;
|
||||||
seasonYear: number
|
seasonYear: number;
|
||||||
status: string
|
status: string;
|
||||||
episodes?: number
|
episodes?: number;
|
||||||
nextAiringEpisode?: {
|
nextAiringEpisode?: {
|
||||||
airingAt: number
|
airingAt: number;
|
||||||
timeUntilAiring: number
|
timeUntilAiring: number;
|
||||||
episode: number
|
episode: number;
|
||||||
}
|
};
|
||||||
}
|
tags: [
|
||||||
status: string
|
{
|
||||||
startedAt: {
|
id: number;
|
||||||
year: number
|
name: string;
|
||||||
month: number
|
description: string;
|
||||||
day: number
|
rank: number;
|
||||||
}
|
isMediaSpoiler: boolean;
|
||||||
completedAt: {
|
isAdult: boolean;
|
||||||
year?: number
|
},
|
||||||
month?: number
|
];
|
||||||
day?: number
|
isAdult: boolean;
|
||||||
}
|
};
|
||||||
notes?: string
|
status: string;
|
||||||
progress: number
|
startedAt: {
|
||||||
score: number
|
year: number;
|
||||||
repeat: number
|
month: number;
|
||||||
user: {
|
day: number;
|
||||||
id: number
|
};
|
||||||
name: string
|
completedAt: {
|
||||||
avatar: {
|
year?: number;
|
||||||
large: string
|
month?: number;
|
||||||
medium: string
|
day?: number;
|
||||||
}
|
};
|
||||||
statistics: {
|
notes?: string;
|
||||||
anime: {
|
progress: number;
|
||||||
count: number
|
score: number;
|
||||||
statuses: [{
|
repeat: number;
|
||||||
status: string
|
user: {
|
||||||
count: number
|
id: number;
|
||||||
}]
|
name: string;
|
||||||
}
|
avatar: {
|
||||||
}
|
large: string;
|
||||||
}
|
medium: string;
|
||||||
}
|
};
|
||||||
|
statistics: {
|
||||||
|
anime: {
|
||||||
|
count: number;
|
||||||
|
statuses: [
|
||||||
|
{
|
||||||
|
status: string;
|
||||||
|
count: number;
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
simklLoggedIn,
|
simklLoggedIn,
|
||||||
} from "../helperModules/GlobalVariablesAndHelperFunctions.svelte";
|
} from "../helperModules/GlobalVariablesAndHelperFunctions.svelte";
|
||||||
import { push } from "svelte-spa-router";
|
import { push } from "svelte-spa-router";
|
||||||
import { Button } from "flowbite-svelte";
|
|
||||||
import type { AniListGetSingleAnime } from "../anilist/types/AniListCurrentUserWatchListType";
|
import type { AniListGetSingleAnime } from "../anilist/types/AniListCurrentUserWatchListType";
|
||||||
import Rating from "./Rating.svelte";
|
import Rating from "./Rating.svelte";
|
||||||
import {
|
import {
|
||||||
@ -42,6 +41,7 @@
|
|||||||
import { AddAnimeServiceToTable } from "../helperModules/AddAnimeServiceToTable.svelte";
|
import { AddAnimeServiceToTable } from "../helperModules/AddAnimeServiceToTable.svelte";
|
||||||
import { CheckIfAniListLoggedInAndLoadWatchList } from "../helperModules/CheckIfAniListLoggedInAndLoadWatchList.svelte";
|
import { CheckIfAniListLoggedInAndLoadWatchList } from "../helperModules/CheckIfAniListLoggedInAndLoadWatchList.svelte";
|
||||||
import Datepicker from "./Datepicker.svelte";
|
import Datepicker from "./Datepicker.svelte";
|
||||||
|
import { Badge } from "flowbite-svelte";
|
||||||
const re = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/;
|
const re = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/;
|
||||||
|
|
||||||
let isAniListLoggedIn: boolean;
|
let isAniListLoggedIn: boolean;
|
||||||
@ -216,6 +216,8 @@
|
|||||||
/* TODO in future when you inevitably add tags to typescript, until Anilist fixes the api bug
|
/* TODO in future when you inevitably add tags to typescript, until Anilist fixes the api bug
|
||||||
where tags break the SaveMediaListEntry return, you'll want to use this delete line
|
where tags break the SaveMediaListEntry return, you'll want to use this delete line
|
||||||
delete value.data.MediaList.media.tags */
|
delete value.data.MediaList.media.tags */
|
||||||
|
value.data.MediaList.media.tags =
|
||||||
|
currentAniListAnime.data.MediaList.media.tags;
|
||||||
aniListAnime.update((newValue) => {
|
aniListAnime.update((newValue) => {
|
||||||
newValue = value;
|
newValue = value;
|
||||||
return newValue;
|
return newValue;
|
||||||
@ -448,7 +450,6 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<form on:submit|preventDefault={handleSubmit} class="container pt-3 pb-10">
|
<form on:submit|preventDefault={handleSubmit} class="container pt-3 pb-10">
|
||||||
{console.log(startingAnilistStatusOption)}
|
|
||||||
<h1 class="text-white font-bold text-left text-xl pb-3">
|
<h1 class="text-white font-bold text-left text-xl pb-3">
|
||||||
{title}
|
{title}
|
||||||
</h1>
|
</h1>
|
||||||
@ -553,6 +554,17 @@
|
|||||||
statusOptions[2];
|
statusOptions[2];
|
||||||
completedAtDate = new Date();
|
completedAtDate = new Date();
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
currentAniListAnime.data.MediaList
|
||||||
|
.progress -
|
||||||
|
1 ===
|
||||||
|
0
|
||||||
|
) {
|
||||||
|
startingAnilistStatusOption =
|
||||||
|
statusOptions[0];
|
||||||
|
if (startedAtDate === null)
|
||||||
|
startedAtDate = new Date();
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
class="bg-gray-700 hover:bg-gray-600 border-gray-600 border rounded-e-lg p-3 h-11 focus:ring-gray-700 focus:ring-2 focus:outline-none"
|
class="bg-gray-700 hover:bg-gray-600 border-gray-600 border rounded-e-lg p-3 h-11 focus:ring-gray-700 focus:ring-2 focus:outline-none"
|
||||||
>
|
>
|
||||||
@ -816,8 +828,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="flex m-5">
|
||||||
<h3 class="text-2xl">Summary</h3>
|
<div>
|
||||||
<p>{@html currentAniListAnime.data.MediaList.media.description}</p>
|
<h3 class="text-2xl">Tags</h3>
|
||||||
|
<div class="mt-2">
|
||||||
|
{#each currentAniListAnime.data.MediaList.media.tags as tag}
|
||||||
|
<div>
|
||||||
|
<Badge large border color="blue" class="m-1 w-40"
|
||||||
|
>{tag.name}</Badge
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ml-5">
|
||||||
|
<h3 class="text-2xl">Summary</h3>
|
||||||
|
<p class="rounded border border-gray-700 p-2 mt-2">
|
||||||
|
{@html currentAniListAnime.data.MediaList.media.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -12,6 +12,6 @@
|
|||||||
},
|
},
|
||||||
"info": {
|
"info": {
|
||||||
"productName": "AniTrack",
|
"productName": "AniTrack",
|
||||||
"productVersion": "0.1.8"
|
"productVersion": "0.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user