diff --git a/.gitignore b/.gitignore index 44b7bdb..dd7cdb5 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,7 @@ package.json.md5 package-lock.json .idea .env -environment.go \ No newline at end of file +environment.go + +# REST (http files) +http-client.private.env.json diff --git a/AniListFunctions.go b/AniListFunctions.go index 539f5d4..069f2ec 100644 --- a/AniListFunctions.go +++ b/AniListFunctions.go @@ -202,7 +202,7 @@ func (a *App) AniListSearch(query string) any { perPage } media (search: $search, type: $listType) { - id + id idMal title { romaji @@ -415,8 +415,8 @@ func (a *App) AniListUpdateEntry(updateBody AniListUpdateVariables) AniListGetSi }{ Query: ` mutation( - $mediaId:Int, - $progress:Int, + $mediaId:Int, + $progress:Int, $status:MediaListStatus, $score:Float, $repeat:Int, @@ -425,15 +425,15 @@ func (a *App) AniListUpdateEntry(updateBody AniListUpdateVariables) AniListGetSi $completedAt:FuzzyDateInput, ){ SaveMediaListEntry( - mediaId:$mediaId, - progress:$progress, + mediaId:$mediaId, + progress:$progress, status:$status, score:$score, repeat:$repeat, notes:$notes, startedAt:$startedAt completedAt:$completedAt - ){ + ){ id mediaId userId @@ -528,7 +528,7 @@ func (a *App) AniListDeleteEntry(mediaListId int) DeleteAniListReturn { ){ DeleteMediaListEntry( id:$id, - ){ + ){ deleted } } diff --git a/MALUserFunctions.go b/MALUserFunctions.go index 24c837f..d2ddcb3 100644 --- a/MALUserFunctions.go +++ b/MALUserFunctions.go @@ -71,7 +71,6 @@ func (v *CodeVerifier) CodeChallengeS256() string { } func (a *App) CheckIfMyAnimeListLoggedIn() bool { - fmt.Println("check function reached") if (MyAnimeListJWT{} == myAnimeListJwt) { tokenType, tokenErr := myAnimeListRing.Get("MyAnimeListTokenType") expiresIn, expiresInErr := myAnimeListRing.Get("MyAnimeListExpiresIn") @@ -96,7 +95,6 @@ func (a *App) CheckIfMyAnimeListLoggedIn() bool { } func (a *App) MyAnimeListLogin() { - fmt.Println("login function reached") if !a.CheckIfMyAnimeListLoggedIn() { fmt.Println("check logged in function failed") tokenType, tokenErr := myAnimeListRing.Get("MyAnimeListTokenType") diff --git a/SimklFunctions.go b/SimklFunctions.go index a7be06a..156cf4f 100644 --- a/SimklFunctions.go +++ b/SimklFunctions.go @@ -262,7 +262,6 @@ func (a *App) SimklSearch(aniListAnime MediaList) SimklAnime { if len(anime) == 0 { url = "https://api.simkl.com/search/id?mal=" + strconv.Itoa(aniListAnime.Media.IDMal) respBody = SimklHelper("GET", url, nil) - fmt.Println(string(respBody)) err = json.Unmarshal(respBody, &anime) } diff --git a/frontend/index.html b/frontend/index.html index f1320c8..0cc61d9 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,13 +1,16 @@ - + - - - - AniTrack - - -
- - - + + + + AniTrack + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json index 00febc3..2e17b27 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,7 @@ "postcss": "^8.4.45", "svelte": "^4.0.0", "svelte-check": "^3.4.3", - "svelte-headless-table": "^0.18.2", + "svelte-headless-table": "^0.18.3", "svelte-preprocess": "^5.0.3", "svelte-spa-router": "^4.0.1", "tailwind-merge": "^2.5.2", diff --git a/frontend/src/helperComponents/Anime.svelte b/frontend/src/helperComponents/Anime.svelte index 20a0531..8287446 100644 --- a/frontend/src/helperComponents/Anime.svelte +++ b/frontend/src/helperComponents/Anime.svelte @@ -11,7 +11,10 @@ import { Button } from "flowbite-svelte"; import type { AniListGetSingleAnime } from "../anilist/types/AniListCurrentUserWatchListType"; import Rating from "./Rating.svelte"; - import convertAniListDateToString from "../helperFunctions/convertAniListDateToString"; + import { + convertAniListDateToString, + convertAniListDateToDate, + } from "../helperFunctions/convertAniListDateIn"; import AnimeTable from "./AnimeTable.svelte"; import type { MALAnime, @@ -25,7 +28,10 @@ StatusOptions, } from "../helperTypes/StatusTypes"; import type { AniListUpdateVariables } from "../anilist/types/AniListTypes"; - import convertDateStringToAniList from "../helperFunctions/convertDateStringToAniList"; + import { + convertDateStringToAniList, + convertDateToAniList, + } from "../helperFunctions/convertDateToAniList"; import { AniListDeleteEntry, AniListUpdateEntry, @@ -38,6 +44,8 @@ } from "../../wailsjs/go/main/App"; import { AddAnimeServiceToTable } from "../helperModules/AddAnimeServiceToTable.svelte"; import { CheckIfAniListLoggedInAndLoadWatchList } from "../helperModules/CheckIfAniListLoggedInAndLoadWatchList.svelte"; + import Datepicker from "./Datepicker.svelte"; + const re = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/; let isAniListLoggedIn: boolean; let isMalLoggedIn: boolean; @@ -78,10 +86,10 @@ (option) => currentAniListAnime.data.MediaList.status === option.aniList, )[0]; - const startedAtDate = convertAniListDateToString( + let startedAtDate: Date | null = convertAniListDateToDate( currentAniListAnime.data.MediaList.startedAt, ); - const completedAtDate = convertAniListDateToString( + let completedAtDate: Date | null = convertAniListDateToDate( currentAniListAnime.data.MediaList.completedAt, ); @@ -103,19 +111,34 @@ notes: currentAniListAnime.data.MediaList.notes, }); - if (isMalLoggedIn) + if (isMalLoggedIn) { + let startDate = ""; + let finishDate = ""; + if (currentMalAnime.my_list_status.start_date !== "") { + const startArray = re.exec( + currentMalAnime.my_list_status.start_date, + ); + startDate = `${startArray[2]}-${startArray[3]}-${startArray[1]}`; + } + if (currentMalAnime.my_list_status.finish_date !== "") { + const finishArray = re.exec( + currentMalAnime.my_list_status.finish_date, + ); + finishDate = `${finishArray[2]}-${finishArray[3]}-${finishArray[1]}`; + } AddAnimeServiceToTable({ id: `m-${currentMalAnime.id}`, title: currentMalAnime.title, service: "MyAnimeList", progress: currentMalAnime.my_list_status.num_episodes_watched, status: currentMalAnime.my_list_status.status, - startedAt: currentMalAnime.my_list_status.start_date, - completedAt: currentMalAnime.my_list_status.finish_date, + startedAt: startDate, + completedAt: finishDate, score: currentMalAnime.my_list_status.score, repeat: currentMalAnime.my_list_status.num_times_rewatched, notes: currentMalAnime.my_list_status.comments, }); + } if (isSimklLoggedIn && Object.keys(currentSimklAnime).length > 0) AddAnimeServiceToTable({ @@ -137,8 +160,8 @@ rating: number; episodes: number; status: StatusOption; - startedAt: string; - completedAt: string; + startedAt: Date | null; + completedAt: Date | null; repeat: number; notes: string; } = { @@ -150,8 +173,8 @@ mal: "", simkl: "", }, - startedAt: "", - completedAt: "", + startedAt: null, + completedAt: null, repeat: 0, notes: "", }; @@ -188,8 +211,8 @@ score: submitData.rating, repeat: submitData.repeat, notes: submitData.notes, - startedAt: convertDateStringToAniList(submitData.startedAt), - completedAt: convertDateStringToAniList(submitData.completedAt), + startedAt: convertDateToAniList(startedAtDate), + completedAt: convertDateToAniList(completedAtDate), }; await AniListUpdateEntry(body).then( (value: AniListGetSingleAnime) => { @@ -244,6 +267,20 @@ value.my_list_status.comments = malAnimeReturn.comments; return value; }); + let startDate = ""; + let finishDate = ""; + if (currentMalAnime.my_list_status.start_date !== "") { + const startArray = re.exec( + currentMalAnime.my_list_status.start_date, + ); + startDate = `${startArray[2]}-${startArray[3]}-${startArray[1]}`; + } + if (currentMalAnime.my_list_status.finish_date !== "") { + const finishArray = re.exec( + currentMalAnime.my_list_status.finish_date, + ); + finishDate = `${finishArray[2]}-${finishArray[3]}-${finishArray[1]}`; + } AddAnimeServiceToTable({ id: `m-${currentMalAnime.id}`, title: currentMalAnime.title, @@ -251,8 +288,8 @@ progress: currentMalAnime.my_list_status.num_episodes_watched, status: currentMalAnime.my_list_status.status, - startedAt: currentMalAnime.my_list_status.start_date, - completedAt: currentMalAnime.my_list_status.finish_date, + startedAt: startDate, + completedAt: finishDate, score: currentMalAnime.my_list_status.score, repeat: currentMalAnime.my_list_status .num_times_rewatched, @@ -483,8 +520,9 @@ 1) ? 'border-red-500 border-[2px] text-rose-300 focus:ring-red-500 focus:border-red-500' : 'bg-gray-700 hover:bg-gray-600 border-gray-600 text-white focus:ring-blue-500 focus:border-blue-500'} w-24" - bind:value={currentAniListAnime.data.MediaList - .progress} + bind:value={ + currentAniListAnime.data.MediaList.progress + } required /> + -
diff --git a/frontend/src/helperComponents/AnimeTable.svelte b/frontend/src/helperComponents/AnimeTable.svelte index 8aa25b9..76ee5bc 100644 --- a/frontend/src/helperComponents/AnimeTable.svelte +++ b/frontend/src/helperComponents/AnimeTable.svelte @@ -4,19 +4,19 @@ createTable, Render, Subscribe, - } from "svelte-headless-table" + } from "svelte-headless-table"; // @ts-ignore - import { addSortBy } from "svelte-headless-table/plugins" - import { tableItems } from "../helperModules/GlobalVariablesAndHelperFunctions.svelte" - import WebsiteLink from "./WebsiteLink.svelte" + import { addSortBy } from "svelte-headless-table/plugins"; + import { tableItems } from "../helperModules/GlobalVariablesAndHelperFunctions.svelte"; + import WebsiteLink from "./WebsiteLink.svelte"; //when adding sort here is code { sort: addSortBy() } - const table = createTable(tableItems, { sort: addSortBy() }) + const table = createTable(tableItems, { sort: addSortBy() }); const columns = table.createColumns([ table.column({ header: "Service Id", - cell: ({ value }) => createRender(WebsiteLink, {id: value}), + cell: ({ value }) => createRender(WebsiteLink, { id: value }), accessor: "id", }), table.column({ @@ -55,11 +55,11 @@ header: "Notes", accessor: "notes", }), - ]) + ]); //add pluginStates when add sort back const { headerRows, rows, tableAttrs, tableBodyAttrs } = - table.createViewModel(columns) + table.createViewModel(columns);
diff --git a/frontend/src/helperComponents/Datepicker.svelte b/frontend/src/helperComponents/Datepicker.svelte new file mode 100644 index 0000000..e98932a --- /dev/null +++ b/frontend/src/helperComponents/Datepicker.svelte @@ -0,0 +1,481 @@ + + +
+ {#if !inline} +
+ (isOpen = true)} + on:input={handleInputChange} + on:keydown={handleInputKeydown} + {disabled} + {required} + aria-haspopup="dialog" + /> + +
+ {/if} + + {#if isOpen || inline} + + {/if} +
+ + diff --git a/frontend/src/helperFunctions/convertAniListDateIn.ts b/frontend/src/helperFunctions/convertAniListDateIn.ts new file mode 100644 index 0000000..87be12c --- /dev/null +++ b/frontend/src/helperFunctions/convertAniListDateIn.ts @@ -0,0 +1,37 @@ +import moment from "moment"; + +const convertAniListDateToString = (date: { + year?: number; + month?: number; + day?: number; +}): string => { + if ( + date.year === undefined || + (date.year === 0 && date.month === undefined) || + (date.month === 0 && date.day === undefined) || + date.day === 0 + ) { + return ""; + } + const newISODate = new Date(date.year, date.month - 1, date.day); + const newMoment = moment(newISODate); + return newMoment.format("MM-DD-YYYY"); +}; + +const convertAniListDateToDate = (date: { + year?: number; + month?: number; + day?: number; +}): Date | null => { + if ( + date.year === undefined || + (date.year === 0 && date.month === undefined) || + (date.month === 0 && date.day === undefined) || + date.day === 0 + ) { + return null; + } + return new Date(date.year, date.month - 1, date.day); +}; + +export { convertAniListDateToString, convertAniListDateToDate }; diff --git a/frontend/src/helperFunctions/convertAniListDateToString.ts b/frontend/src/helperFunctions/convertAniListDateToString.ts deleted file mode 100644 index e5ba3b1..0000000 --- a/frontend/src/helperFunctions/convertAniListDateToString.ts +++ /dev/null @@ -1,17 +0,0 @@ -import moment from "moment"; - -export default (date: { - year?: number, - month?: number, - day?: number, -}): string => { - if (date.year === undefined || date.year === 0 - && date.month === undefined || date.month === 0 - && date.day === undefined || date.day === 0 - ) { - return "" - } - const newISODate = new Date(date.year, date.month - 1, date.day) - const newMoment = moment(newISODate) - return newMoment.format('YYYY-MM-DD') -} \ No newline at end of file diff --git a/frontend/src/helperFunctions/convertDateStringToAniList.ts b/frontend/src/helperFunctions/convertDateStringToAniList.ts deleted file mode 100644 index fb98ec5..0000000 --- a/frontend/src/helperFunctions/convertDateStringToAniList.ts +++ /dev/null @@ -1,22 +0,0 @@ -type Date = { - year: number, - month: number, - day: number, -} - -export default (date: string): Date => { - if (date === "") { - return { - year: 0, - month: 0, - day: 0, - } - } - const re = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/ - const newDate = re.exec(date) - return { - year: Number(newDate[1]), - month: Number(newDate[2]), - day: Number(newDate[3]) - } -} \ No newline at end of file diff --git a/frontend/src/helperFunctions/convertDateToAniList.ts b/frontend/src/helperFunctions/convertDateToAniList.ts new file mode 100644 index 0000000..73ccdb4 --- /dev/null +++ b/frontend/src/helperFunctions/convertDateToAniList.ts @@ -0,0 +1,39 @@ +type AnilistDate = { + year: number; + month: number; + day: number; +}; + +const convertDateStringToAniList = (date: string): AnilistDate => { + if (date === "") { + return { + year: 0, + month: 0, + day: 0, + }; + } + const re = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/; + const newDate = re.exec(date); + return { + year: Number(newDate[1]), + month: Number(newDate[2]), + day: Number(newDate[3]), + }; +}; + +const convertDateToAniList = (date: Date | null): AnilistDate => { + if (date === null) { + return { + year: 0, + month: 0, + day: 0, + }; + } + return { + year: Number(date.getFullYear()), + month: Number(date.getMonth()) + 1, + day: Number(date.getDate()), + }; +}; + +export { convertDateStringToAniList, convertDateToAniList }; diff --git a/frontend/wailsjs/runtime/runtime.d.ts b/frontend/wailsjs/runtime/runtime.d.ts index 94778df..4445dac 100644 --- a/frontend/wailsjs/runtime/runtime.d.ts +++ b/frontend/wailsjs/runtime/runtime.d.ts @@ -134,7 +134,7 @@ export function WindowIsFullscreen(): Promise; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/go.mod b/go.mod index 02a6a0c..713fed9 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module AniTrack -go 1.23 +go 1.24 require ( github.com/99designs/keyring v1.2.2 github.com/tidwall/gjson v1.18.0 - github.com/wailsapp/wails/v2 v2.9.2 + github.com/wailsapp/wails/v2 v2.10.0 ) require ( @@ -31,7 +31,7 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/samber/lo v1.47.0 // indirect + github.com/samber/lo v1.49.1 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tkrajina/go-reflector v0.5.8 // indirect @@ -39,11 +39,11 @@ require ( github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wailsapp/go-webview2 v1.0.19 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/text v0.22.0 // indirect ) // replace github.com/wailsapp/wails/v2 v2.9.1 => /home/nymusicman/go/pkg/mod diff --git a/go.sum b/go.sum index 882ec03..f12e046 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,9 @@ github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NM github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= @@ -59,8 +60,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= +github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= @@ -82,26 +83,26 @@ github.com/wailsapp/go-webview2 v1.0.19 h1:7U3QcDj1PrBPaxJNCui2k1SkWml+Q5kvFUFyT github.com/wailsapp/go-webview2 v1.0.19/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= -github.com/wailsapp/wails/v2 v2.9.2 h1:Xb5YRTos1w5N7DTMyYegWaGukCP2fIaX9WF21kPPF2k= -github.com/wailsapp/wails/v2 v2.9.2/go.mod h1:uehvlCwJSFcBq7rMCGfk4rxca67QQGsbg5Nm4m9UnBs= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +github.com/wailsapp/wails/v2 v2.10.0 h1:kfpWnfdNL1nXq0PyqAVPPDQY2pxkqcqWab01NGh3a6w= +github.com/wailsapp/wails/v2 v2.10.0/go.mod h1:zrebnFV6MQf9kx8HI4iAv63vsR5v67oS7GTEZ7Pz1TY= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/rest/AniTrack/Get Items/AniChart.http b/rest/AniTrack/Get Items/AniChart.http new file mode 100644 index 0000000..2a17738 --- /dev/null +++ b/rest/AniTrack/Get Items/AniChart.http @@ -0,0 +1,79 @@ +# @name AniChart + +POST https://graphql.anilist.co +Accept: applicaton/json +X-REQUEST-TYPE: Graphql + +query ($page: Int, $perPage: Int, $airingAt_greater:Int) { + Page(page: $page, perPage: $perPage) { + pageInfo { + total + perPage + currentPage + lastPage + hasNextPage + } + airingSchedules(airingAt_greater:$airingAt_greater){ + id + airingAt + timeUntilAiring + episode + mediaId + media{ + id + title{ + english + romaji + native + } + type + format + status + startDate{ + year + month + day + } + endDate{ + year + month + day + } + season + seasonYear + episodes + duration + coverImage{ + medium + large + color + extraLarge + } + bannerImage + genres + averageScore + meanScore + popularity + trending + favourites + tags{ + id + name + description + category + rank + isGeneralSpoiler + isMediaSpoiler + isAdult + } + isAdult + } + } + } +} + +{ + "page": 50, + "perPage": 20, + "airingAt_greater": 1730260800 +} diff --git a/rest/AniTrack/Get Items/AniList Item.http b/rest/AniTrack/Get Items/AniList Item.http new file mode 100644 index 0000000..9da6f8a --- /dev/null +++ b/rest/AniTrack/Get Items/AniList Item.http @@ -0,0 +1,83 @@ +# @name AniList Item + +POST https://graphql.anilist.co +Accept: applicaton/json +X-REQUEST-TYPE: Graphql +Authorization: Bearer {{ANILIST_ACCESS_TOKEN}} + +query ($userId: Int, $mediaId: Int, $listType: MediaType) { + MediaList(mediaId: $mediaId, userId: $userId, type: $listType) { + id + mediaId + userId + media { + id + idMal + tags { + id + name + description + rank + isMediaSpoiler + isAdult + } + title { + romaji + english + native + } + description + coverImage { + large + } + season + seasonYear + status + episodes + nextAiringEpisode { + airingAt + timeUntilAiring + episode + } + isAdult + } + status + startedAt { + year + month + day + } + completedAt { + year + month + day + } + notes + progress + score + repeat + user { + id + name + avatar { + large + medium + } + statistics { + anime { + count + statuses { + status + count + } + } + } + } + } +} + +{ + "userId": 413504, + "mediaId": 170998, + "listType": "ANIME" +} diff --git a/rest/AniTrack/Get Items/AniList MediaList User Query.http b/rest/AniTrack/Get Items/AniList MediaList User Query.http new file mode 100644 index 0000000..426b780 --- /dev/null +++ b/rest/AniTrack/Get Items/AniList MediaList User Query.http @@ -0,0 +1,70 @@ +# @name AniList MediaList User Query + +POST https://graphql.anilist.co +Accept: applicaton/json +X-REQUEST-TYPE: Graphql + +query( + $page: Int + $perPage: Int + $userId: Int + $listType: MediaType + $status: MediaListStatus +) { + Page(page: $page, perPage: $perPage) { + pageInfo { + total + perPage + currentPage + lastPage + hasNextPage + } + mediaList(userId: $userId, type: $listType, status: $status) { + id + mediaId + userId + media { + id + idMal + title { + romaji + english + native + } + description + coverImage { + large + } + season + seasonYear + episodes + } + status + notes + progress + score + repeat + user { + id + statistics { + anime { + count + statuses { + status + count + } + } + } + } + } + } +} + + +{ + "page": 1, + "perPage": 20, + "userId": 413504, + "listType": "ANIME", + "status": "CURRENT" +} diff --git a/rest/AniTrack/Get Items/AniList Search.http b/rest/AniTrack/Get Items/AniList Search.http new file mode 100644 index 0000000..5d18fa5 --- /dev/null +++ b/rest/AniTrack/Get Items/AniList Search.http @@ -0,0 +1,44 @@ +# @name AniList Search + +POST https://graphql.anilist.co +Accept: applicaton/json +X-REQUEST-TYPE: Graphql + +query ($search: String!, $listType: MediaType) { + Page (page: 1, perPage: 100) { + pageInfo { + total + currentPage + lastPage + hasNextPage + perPage + } + media (search: $search, type: $listType) { + id + idMal + title { + romaji + english + native + } + description + coverImage { + large + } + season + seasonYear + status + episodes + nextAiringEpisode{ + airingAt + timeUntilAiring + episode + } + } + } + } + +{ + "search": "dan-da-dan", + "listType": "ANIME" +} diff --git a/rest/AniTrack/Get Items/GetAniListUserWatchingList.http b/rest/AniTrack/Get Items/GetAniListUserWatchingList.http new file mode 100644 index 0000000..1596ca6 --- /dev/null +++ b/rest/AniTrack/Get Items/GetAniListUserWatchingList.http @@ -0,0 +1,93 @@ +# @name GetAniListUserWatchList + +POST https://graphql.anilist.co +Accept: applicaton/json +X-REQUEST-TYPE: Graphql + +query ( + $page: Int + $perPage: Int + $userId: Int + $listType: MediaType + $status: MediaListStatus + $sort: [MediaListSort] +) { + Page(page: $page, perPage: $perPage) { + pageInfo { + total + perPage + currentPage + lastPage + hasNextPage + } + mediaList(userId: $userId, type: $listType, status: $status, sort: $sort) { + id + mediaId + userId + media { + id + idMal + title { + romaji + english + native + } + description + coverImage { + large + } + season + seasonYear + status + episodes + nextAiringEpisode { + airingAt + timeUntilAiring + episode + } + } + status + startedAt { + year + month + day + } + completedAt { + year + month + day + } + notes + progress + score + repeat + user { + id + name + avatar { + large + medium + } + statistics { + anime { + count + statuses { + status + count + } + } + } + } + } + } +} + + +{ + "page": 1, + "perPage": 20, + "userId": 413504, + "listType": "ANIME", + "status": "CURRENT", + "sort": "UPDATED_TIME_DESC" +} diff --git a/rest/AniTrack/GetAuthorizationToken.http b/rest/AniTrack/GetAuthorizationToken.http new file mode 100644 index 0000000..16325e7 --- /dev/null +++ b/rest/AniTrack/GetAuthorizationToken.http @@ -0,0 +1,3 @@ +# @name GetAuthorizationToken + +GET https://anilist.co/api/v2/oauth/authorize?client_id={{ANILIST_APP_ID}}&redirect_uri=http://localhost:6734/callback&response_type=code diff --git a/rest/AniTrack/Load AniList Oauth Page.http b/rest/AniTrack/Load AniList Oauth Page.http new file mode 100644 index 0000000..b2cc304 --- /dev/null +++ b/rest/AniTrack/Load AniList Oauth Page.http @@ -0,0 +1,11 @@ +# @name Load AniList Oauth Token + +POST https://anilist.co/api/v2/oauth/token +Content-Type: application/x-www-form-urlencoded +Accept: application/json + +grant_type=authorization_code +client_id={{ANILIST_APP_ID}} +client_secret={{ANILIST_SECRET_ID}} +redirect_uri=http://localhost:6734/callback +code={{ANILIST_CODE}} diff --git a/rest/http-client.env.json b/rest/http-client.env.json new file mode 100644 index 0000000..c0da0c1 --- /dev/null +++ b/rest/http-client.env.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://raw.githubusercontent.com/mistweaverco/kulala.nvim/main/schemas/http-client.env.schema.json", + "dev": { + "ANILIST_APP_ID": "", + "ANILIST_SECRET": "", + "SIMKL_CLIENT_ID": "", + "SIMKL_CLIENT_SECRET": "", + "MAL_CLIENT_ID": "", + "MAL_CLIENT_SECRET": "", + "ANILIST_ACCESS_TOKEN": "", + "ANILSIT_CODE": "", + "SIMKL_AUTH_TOKEN": "", + "MAL_CODE": "", + "MAL_VERIFIER": "", + "MAL_USER": "", + "MAL_ACCESS_TOKEN": "" + } +} diff --git a/wails.json b/wails.json index 28632ee..07e317a 100644 --- a/wails.json +++ b/wails.json @@ -12,6 +12,6 @@ }, "info": { "productName": "AniTrack", - "productVersion": "0.1.5" + "productVersion": "0.1.6" } }