added ability to update simkl episode count
This commit is contained in:
parent
aaf0f421f2
commit
8a6b3bd2b7
@ -3,7 +3,6 @@ package main
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
@ -455,8 +454,6 @@ func (a *App) AniListUpdateEntry(
|
||||
|
||||
returnedBody, _ := AniListQuery(body, true)
|
||||
|
||||
fmt.Println(string(returnedBody))
|
||||
|
||||
var post interface{}
|
||||
err := json.Unmarshal(returnedBody, &post)
|
||||
if err != nil {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
@ -37,3 +38,78 @@ func (a *App) SimklGetUserWatchlist() SimklWatchList {
|
||||
|
||||
return watchlist
|
||||
}
|
||||
|
||||
func SimklPostHelper(url string, body interface{}) json.RawMessage {
|
||||
reader, _ := json.Marshal(body)
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(reader))
|
||||
|
||||
req.Header.Add("Content-Type", "application/json")
|
||||
req.Header.Add("Authorization", "Bearer "+simklJwt.AccessToken)
|
||||
req.Header.Add("simkl-api-key", os.Getenv("SIMKL_CLIENT_ID"))
|
||||
|
||||
resp, err := client.Do(req)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Errored when sending request to the server")
|
||||
message, _ := json.Marshal(struct {
|
||||
Message string `json:"message" ts_type:"message"`
|
||||
}{
|
||||
Message: "Errored when sending request to the server" + err.Error(),
|
||||
})
|
||||
|
||||
return message
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
respBody, _ := io.ReadAll(resp.Body)
|
||||
|
||||
return respBody
|
||||
|
||||
}
|
||||
|
||||
func (a *App) SimklSyncEpisodes(anime Anime, progress int) interface{} {
|
||||
|
||||
var episodes []Episode
|
||||
var url string
|
||||
var shows []SimklPostShow
|
||||
|
||||
if progress >= anime.WatchedEpisodesCount {
|
||||
for i := 1; i <= progress; i++ {
|
||||
episodes = append(episodes, Episode{Number: i})
|
||||
}
|
||||
url = "https://api.simkl.com/sync/history"
|
||||
} else {
|
||||
for i := anime.WatchedEpisodesCount; i > progress; i-- {
|
||||
episodes = append(episodes, Episode{Number: i})
|
||||
}
|
||||
url = "https://api.simkl.com/sync/history/remove"
|
||||
}
|
||||
|
||||
formattedShow := SimklPostShow{
|
||||
Title: anime.Show.Title,
|
||||
Ids: Ids{
|
||||
Simkl: anime.Show.Ids.Simkl,
|
||||
Mal: anime.Show.Ids.Mal,
|
||||
Anilist: anime.Show.Ids.AniList,
|
||||
},
|
||||
Episodes: episodes,
|
||||
}
|
||||
|
||||
shows = append(shows, formattedShow)
|
||||
|
||||
simklSync := SimklSyncHistoryType{shows}
|
||||
|
||||
respBody := SimklPostHelper(url, simklSync)
|
||||
|
||||
var success interface{}
|
||||
|
||||
err := json.Unmarshal(respBody, &success)
|
||||
if err != nil {
|
||||
log.Printf("Failed at unmarshal, %s\n", err)
|
||||
}
|
||||
|
||||
return success
|
||||
}
|
||||
|
@ -27,42 +27,64 @@ type SimklUser struct {
|
||||
}
|
||||
|
||||
type SimklWatchList struct {
|
||||
Anime []struct {
|
||||
LastWatchedAt string `json:"last_watched_at" ts_type:"last_watched_at"`
|
||||
Status string `json:"status" ts_type:"status"`
|
||||
UserRating float64 `json:"user_rating" ts_type:"user_rating"`
|
||||
LastWatched string `json:"last_watched" ts_type:"last_watched"`
|
||||
NextToWatch string `json:"next_to_watch" ts_type:"next_to_watch"`
|
||||
WatchedEpisodesCount int `json:"watched_episodes_count" ts_type:"watched_episodes_count"`
|
||||
TotalEpisodesCount int `json:"total_episodes_count" ts_type:"total_episodes_count"`
|
||||
NotAiredEpisodesCount int `json:"not_aired_episodes_count" ts_type:"not_aired_episodes_count"`
|
||||
Show struct {
|
||||
Title string `json:"title" ts_type:"title"`
|
||||
Poster string `json:"poster" ts_type:"poster"`
|
||||
Ids struct {
|
||||
Simkl int `json:"simkl" ts_type:"simkl"`
|
||||
Slug string `json:"slug" ts_type:"slug"`
|
||||
OffJp string `json:"offjp" ts_type:"offjp"`
|
||||
TW string `json:"tw" ts_type:"tw"`
|
||||
ANN string `json:"ann" ts_type:"ann"`
|
||||
Mal string `json:"mal" ts_type:"mal"`
|
||||
Wikien string `json:"wikien" ts_type:"wikien"`
|
||||
WikiJp string `json:"wikijp" ts_type:"wikijp"`
|
||||
AllCin string `json:"allcin" ts_type:"allcin"`
|
||||
IMDB string `json:"imdb" ts_type:"imdb"`
|
||||
TMDB string `json:"tmdb" ts_type:"tmdb"`
|
||||
Offen string `json:"offen" ts_type:"offen"`
|
||||
Crunchyroll string `json:"crunchyroll" ts_type:"crunchyroll"`
|
||||
TVDBSlug string `json:"tvdbslug" ts_type:"tvdbslug"`
|
||||
AniList string `json:"anilist" ts_type:"anilist"`
|
||||
AnimePlanet string `json:"animeplanet" ts_type:"animeplanet"`
|
||||
AniSearch string `json:"anisearch" ts_type:"anisearch"`
|
||||
Kitsu string `json:"kitsu" ts_type:"kitsu"`
|
||||
LiveChart string `json:"livechart" ts_type:"livechart"`
|
||||
TraktSlug string `json:"traktslug" ts_type:"traktslug"`
|
||||
AniDB string `json:"anidb" ts_type:"anidb"`
|
||||
} `json:"ids" ts_type:"ids"`
|
||||
} `json:"show" ts_type:"show"`
|
||||
AnimeType string `json:"anime_type" ts_type:"anime_type"`
|
||||
} `json:"anime" ts_type:"anime"`
|
||||
Anime []Anime `json:"anime" ts_type:"anime"`
|
||||
}
|
||||
|
||||
type Anime struct {
|
||||
LastWatchedAt string `json:"last_watched_at" ts_type:"last_watched_at"`
|
||||
Status string `json:"status" ts_type:"status"`
|
||||
UserRating float64 `json:"user_rating" ts_type:"user_rating"`
|
||||
LastWatched string `json:"last_watched" ts_type:"last_watched"`
|
||||
NextToWatch string `json:"next_to_watch" ts_type:"next_to_watch"`
|
||||
WatchedEpisodesCount int `json:"watched_episodes_count" ts_type:"watched_episodes_count"`
|
||||
TotalEpisodesCount int `json:"total_episodes_count" ts_type:"total_episodes_count"`
|
||||
NotAiredEpisodesCount int `json:"not_aired_episodes_count" ts_type:"not_aired_episodes_count"`
|
||||
Show struct {
|
||||
Title string `json:"title" ts_type:"title"`
|
||||
Poster string `json:"poster" ts_type:"poster"`
|
||||
Ids struct {
|
||||
Simkl int `json:"simkl" ts_type:"simkl"`
|
||||
Slug string `json:"slug" ts_type:"slug"`
|
||||
OffJp string `json:"offjp" ts_type:"offjp"`
|
||||
TW string `json:"tw" ts_type:"tw"`
|
||||
ANN string `json:"ann" ts_type:"ann"`
|
||||
Mal string `json:"mal" ts_type:"mal"`
|
||||
Wikien string `json:"wikien" ts_type:"wikien"`
|
||||
WikiJp string `json:"wikijp" ts_type:"wikijp"`
|
||||
AllCin string `json:"allcin" ts_type:"allcin"`
|
||||
IMDB string `json:"imdb" ts_type:"imdb"`
|
||||
TMDB string `json:"tmdb" ts_type:"tmdb"`
|
||||
Offen string `json:"offen" ts_type:"offen"`
|
||||
Crunchyroll string `json:"crunchyroll" ts_type:"crunchyroll"`
|
||||
TVDBSlug string `json:"tvdbslug" ts_type:"tvdbslug"`
|
||||
AniList string `json:"anilist" ts_type:"anilist"`
|
||||
AnimePlanet string `json:"animeplanet" ts_type:"animeplanet"`
|
||||
AniSearch string `json:"anisearch" ts_type:"anisearch"`
|
||||
Kitsu string `json:"kitsu" ts_type:"kitsu"`
|
||||
LiveChart string `json:"livechart" ts_type:"livechart"`
|
||||
TraktSlug string `json:"traktslug" ts_type:"traktslug"`
|
||||
AniDB string `json:"anidb" ts_type:"anidb"`
|
||||
} `json:"ids" ts_type:"ids"`
|
||||
} `json:"show" ts_type:"show"`
|
||||
AnimeType string `json:"anime_type" ts_type:"anime_type"`
|
||||
}
|
||||
|
||||
type SimklSyncHistoryType struct {
|
||||
Shows []SimklPostShow `json:"shows" ts_type:"shows"`
|
||||
}
|
||||
|
||||
type SimklPostShow struct {
|
||||
Title string `json:"title" ts_type:"title"`
|
||||
Ids `json:"ids" ts_type:"ids"`
|
||||
Episodes []Episode `json:"episodes" ts_type:"episodes"`
|
||||
}
|
||||
|
||||
type Episode struct {
|
||||
Number int `json:"number" ts_type:"number"`
|
||||
}
|
||||
|
||||
type Ids struct {
|
||||
Simkl int `json:"simkl" ts_type:"simkl"`
|
||||
Mal string `json:"mal" ts_type:"mal"`
|
||||
Anilist string `json:"anilist" ts_type:"anilist"`
|
||||
}
|
||||
|
@ -5,12 +5,12 @@ meta {
|
||||
}
|
||||
|
||||
get {
|
||||
url: https://api.simkl.com/search/id?client_id={{SIMKL_CLIENT_ID}}&mal=52991
|
||||
url: https://api.simkl.com/search/id?client_id={{SIMKL_CLIENT_ID}}&simkl=2307708
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
client_id: {{SIMKL_CLIENT_ID}}
|
||||
mal: 52991
|
||||
simkl: 2307708
|
||||
}
|
||||
|
@ -14,16 +14,23 @@
|
||||
import { writable } from 'svelte/store';
|
||||
import type {SimklAnime} from "./simkl/types/simklTypes";
|
||||
import { get } from 'svelte/store';
|
||||
import {AniListUpdateEntry} from "../wailsjs/go/main/App";
|
||||
import {AniListUpdateEntry, SimklSyncEpisodes} from "../wailsjs/go/main/App";
|
||||
|
||||
const simklWatch = get(simklWatchList);
|
||||
let isAniListLoggedIn: boolean
|
||||
let isSimklLoggedIn: boolean
|
||||
let simklAnimeIndex: number
|
||||
let simklAnime: SimklAnime | undefined = undefined
|
||||
|
||||
aniListLoggedIn.subscribe((value) => isAniListLoggedIn = value)
|
||||
simklLoggedIn.subscribe((value) => isSimklLoggedIn = value)
|
||||
|
||||
const simklAnime: SimklAnime | undefined = simklWatch.anime.filter((x) => Number(x.show.ids.mal) === aniListAnime.data.MediaList.media.idMal)[0]
|
||||
for (let i = 0; i < simklWatch.anime.length; i++) {
|
||||
if (Number(simklWatch.anime[i].show.ids.mal) === aniListAnime.data.MediaList.media.idMal) {
|
||||
simklAnimeIndex = i
|
||||
simklAnime = simklWatch.anime[i]
|
||||
}
|
||||
}
|
||||
|
||||
let items = [];
|
||||
|
||||
@ -204,6 +211,13 @@
|
||||
console.log(value)
|
||||
})
|
||||
|
||||
if (simklLoggedIn && simklAnime.watched_episodes_count !== values.progress) {
|
||||
await SimklSyncEpisodes(simklAnime, values.progress).then(value => {
|
||||
console.log(value)
|
||||
simklAnime.watched_episodes_count = values.progress
|
||||
simklWatch.anime[simklAnimeIndex].watched_episodes_count = values.progress
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
2
frontend/wailsjs/go/main/App.d.ts
vendored
2
frontend/wailsjs/go/main/App.d.ts
vendored
@ -23,3 +23,5 @@ export function GetSimklLoggedInUser():Promise<main.SimklUser>;
|
||||
export function SimklGetUserWatchlist():Promise<main.SimklWatchList>;
|
||||
|
||||
export function SimklLogin():Promise<void>;
|
||||
|
||||
export function SimklSyncEpisodes(arg1:main.Anime,arg2:number):Promise<any>;
|
||||
|
@ -45,3 +45,7 @@ export function SimklGetUserWatchlist() {
|
||||
export function SimklLogin() {
|
||||
return window['go']['main']['App']['SimklLogin']();
|
||||
}
|
||||
|
||||
export function SimklSyncEpisodes(arg1, arg2) {
|
||||
return window['go']['main']['App']['SimklSyncEpisodes'](arg1, arg2);
|
||||
}
|
||||
|
@ -91,6 +91,36 @@ export namespace main {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
export class Anime {
|
||||
last_watched_at: last_watched_at;
|
||||
status: status;
|
||||
user_rating: user_rating;
|
||||
last_watched: last_watched;
|
||||
next_to_watch: next_to_watch;
|
||||
watched_episodes_count: watched_episodes_count;
|
||||
total_episodes_count: total_episodes_count;
|
||||
not_aired_episodes_count: not_aired_episodes_count;
|
||||
show: show;
|
||||
anime_type: anime_type;
|
||||
|
||||
static createFrom(source: any = {}) {
|
||||
return new Anime(source);
|
||||
}
|
||||
|
||||
constructor(source: any = {}) {
|
||||
if ('string' === typeof source) source = JSON.parse(source);
|
||||
this.last_watched_at = source["last_watched_at"];
|
||||
this.status = source["status"];
|
||||
this.user_rating = source["user_rating"];
|
||||
this.last_watched = source["last_watched"];
|
||||
this.next_to_watch = source["next_to_watch"];
|
||||
this.watched_episodes_count = source["watched_episodes_count"];
|
||||
this.total_episodes_count = source["total_episodes_count"];
|
||||
this.not_aired_episodes_count = source["not_aired_episodes_count"];
|
||||
this.show = source["show"];
|
||||
this.anime_type = source["anime_type"];
|
||||
}
|
||||
}
|
||||
export class MediaList {
|
||||
id: number;
|
||||
mediaId: number;
|
||||
|
Loading…
Reference in New Issue
Block a user