added ability to update simkl episode count
This commit is contained in:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user