diff --git a/AniListUserFunctions.go b/AniListUserFunctions.go index 0f6c7ed..c439673 100644 --- a/AniListUserFunctions.go +++ b/AniListUserFunctions.go @@ -19,7 +19,11 @@ import ( var aniListJwt AniListJWT var aniRing, _ = keyring.Open(keyring.Config{ - ServiceName: "AniTrack", + ServiceName: "AniTrack", + KeychainName: "AniTrack", + KeychainSynchronizable: false, + KeychainTrustApplication: true, + KeychainAccessibleWhenUnlocked: true, }) var aniCtxShutdown, aniCancel = context.WithCancel(context.Background()) diff --git a/MALUserFunctions.go b/MALUserFunctions.go index ef77a72..04f4d27 100644 --- a/MALUserFunctions.go +++ b/MALUserFunctions.go @@ -23,7 +23,11 @@ import ( var myAnimeListJwt MyAnimeListJWT var myAnimeListRing, _ = keyring.Open(keyring.Config{ - ServiceName: "AniTrack", + ServiceName: "AniTrack", + KeychainName: "AniTrack", + KeychainSynchronizable: false, + KeychainTrustApplication: true, + KeychainAccessibleWhenUnlocked: true, }) var myAnimeListCtxShutdown, myAnimeListCancel = context.WithCancel(context.Background()) diff --git a/SimklUserFunctions.go b/SimklUserFunctions.go index f435a22..ad9b2ba 100644 --- a/SimklUserFunctions.go +++ b/SimklUserFunctions.go @@ -17,7 +17,11 @@ import ( var simklJwt SimklJWT var simklRing, _ = keyring.Open(keyring.Config{ - ServiceName: "AniTrack", + ServiceName: "AniTrack", + KeychainName: "AniTrack", + KeychainSynchronizable: false, + KeychainTrustApplication: true, + KeychainAccessibleWhenUnlocked: true, }) var simklCtxShutdown, simklCancel = context.WithCancel(context.Background()) diff --git a/frontend/src/helperComponents/Anime.svelte b/frontend/src/helperComponents/Anime.svelte index 353076b..4967702 100644 --- a/frontend/src/helperComponents/Anime.svelte +++ b/frontend/src/helperComponents/Anime.svelte @@ -6,26 +6,26 @@ malLoggedIn, simklAnime, simklLoggedIn, - } from "../helperModules/GlobalVariablesAndHelperFunctions.svelte" - import { push } from "svelte-spa-router" - import { Button } from "flowbite-svelte" - import type { AniListGetSingleAnime } from "../anilist/types/AniListCurrentUserWatchListType" - import Rating from "./Rating.svelte" - import convertAniListDateToString from "../helperFunctions/convertAniListDateToString" - import AnimeTable from "./AnimeTable.svelte" + } from "../helperModules/GlobalVariablesAndHelperFunctions.svelte"; + import { push } from "svelte-spa-router"; + import { Button } from "flowbite-svelte"; + import type { AniListGetSingleAnime } from "../anilist/types/AniListCurrentUserWatchListType"; + import Rating from "./Rating.svelte"; + import convertAniListDateToString from "../helperFunctions/convertAniListDateToString"; + import AnimeTable from "./AnimeTable.svelte"; import type { MALAnime, MalListStatus, MALUploadStatus, - } from "../mal/types/MALTypes" - import type { SimklAnime } from "../simkl/types/simklTypes" - import { writable } from "svelte/store" + } from "../mal/types/MALTypes"; + import type { SimklAnime } from "../simkl/types/simklTypes"; + import { writable } from "svelte/store"; import type { StatusOption, StatusOptions, - } from "../helperTypes/StatusTypes" - import type { AniListUpdateVariables } from "../anilist/types/AniListTypes" - import convertDateStringToAniList from "../helperFunctions/convertDateStringToAniList" + } from "../helperTypes/StatusTypes"; + import type { AniListUpdateVariables } from "../anilist/types/AniListTypes"; + import convertDateStringToAniList from "../helperFunctions/convertDateStringToAniList"; import { AniListDeleteEntry, AniListUpdateEntry, @@ -35,32 +35,32 @@ SimklSyncRating, SimklSyncRemove, SimklSyncStatus, - } from "../../wailsjs/go/main/App" - import { AddAnimeServiceToTable } from "../helperModules/AddAnimeServiceToTable.svelte" - import { CheckIfAniListLoggedInAndLoadWatchList } from "../helperModules/CheckIfAniListLoggedInAndLoadWatchList.svelte" + } from "../../wailsjs/go/main/App"; + import { AddAnimeServiceToTable } from "../helperModules/AddAnimeServiceToTable.svelte"; + import { CheckIfAniListLoggedInAndLoadWatchList } from "../helperModules/CheckIfAniListLoggedInAndLoadWatchList.svelte"; - let isAniListLoggedIn: boolean - let isMalLoggedIn: boolean - let isSimklLoggedIn: boolean - let currentAniListAnime: AniListGetSingleAnime - let currentMalAnime: MALAnime - let currentSimklAnime: SimklAnime - let submitting = writable(false) - let isSubmitting: boolean - let submitSuccess = writable(false) + let isAniListLoggedIn: boolean; + let isMalLoggedIn: boolean; + let isSimklLoggedIn: boolean; + let currentAniListAnime: AniListGetSingleAnime; + let currentMalAnime: MALAnime; + let currentSimklAnime: SimklAnime; + let submitting = writable(false); + let isSubmitting: boolean; + let submitSuccess = writable(false); - aniListLoggedIn.subscribe((value) => (isAniListLoggedIn = value)) - malLoggedIn.subscribe((value) => (isMalLoggedIn = value)) - simklLoggedIn.subscribe((value) => (isSimklLoggedIn = value)) - aniListAnime.subscribe((value) => (currentAniListAnime = value)) - malAnime.subscribe((value) => (currentMalAnime = value)) - simklAnime.subscribe((value) => (currentSimklAnime = value)) - submitting.subscribe((value) => (isSubmitting = value)) + aniListLoggedIn.subscribe((value) => (isAniListLoggedIn = value)); + malLoggedIn.subscribe((value) => (isMalLoggedIn = value)); + simklLoggedIn.subscribe((value) => (isSimklLoggedIn = value)); + aniListAnime.subscribe((value) => (currentAniListAnime = value)); + malAnime.subscribe((value) => (currentMalAnime = value)); + simklAnime.subscribe((value) => (currentSimklAnime = value)); + submitting.subscribe((value) => (isSubmitting = value)); const title = currentAniListAnime.data.MediaList.media.title.english !== "" ? currentAniListAnime.data.MediaList.media.title.english - : currentAniListAnime.data.MediaList.media.title.romaji + : currentAniListAnime.data.MediaList.media.title.romaji; const statusOptions: StatusOptions = [ { id: 0, aniList: "CURRENT", mal: "watching", simkl: "watching" }, { @@ -73,17 +73,17 @@ { id: 3, aniList: "DROPPED", mal: "dropped", simkl: "dropped" }, { id: 4, aniList: "PAUSED", mal: "on_hold", simkl: "hold" }, { id: 5, aniList: "REPEATING", mal: "rewatching", simkl: "watching" }, - ] + ]; let startingAnilistStatusOption: StatusOption = statusOptions.filter( (option) => currentAniListAnime.data.MediaList.status === option.aniList, - )[0] + )[0]; const startedAtDate = convertAniListDateToString( currentAniListAnime.data.MediaList.startedAt, - ) + ); const completedAtDate = convertAniListDateToString( currentAniListAnime.data.MediaList.completedAt, - ) + ); if (isAniListLoggedIn) AddAnimeServiceToTable({ @@ -101,7 +101,7 @@ score: currentAniListAnime.data.MediaList.score, repeat: currentAniListAnime.data.MediaList.repeat, notes: currentAniListAnime.data.MediaList.notes, - }) + }); if (isMalLoggedIn) AddAnimeServiceToTable({ @@ -115,7 +115,7 @@ 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({ @@ -129,18 +129,18 @@ score: currentSimklAnime.user_rating, repeat: 0, notes: "", - }) + }); const handleSubmit = async (e: any) => { - submitting.set(true) + submitting.set(true); let submitData: { - rating: number - episodes: number - status: StatusOption - startedAt: string - completedAt: string - repeat: number - notes: string + rating: number; + episodes: number; + status: StatusOption; + startedAt: string; + completedAt: string; + repeat: number; + notes: string; } = { rating: 0, episodes: 0, @@ -154,27 +154,27 @@ completedAt: "", repeat: 0, notes: "", - } - const formData = new FormData(e.target) + }; + const formData = new FormData(e.target); for (let field of formData) { - const [key, value] = field + const [key, value] = field; if (key === "rating") { - submitData.rating = Number(value) * 2 - continue + submitData.rating = Number(value) * 2; + continue; } if (key === "episodes") { - submitData.episodes = Number(value) - continue + submitData.episodes = Number(value); + continue; } if (key === "repeat") { - submitData.repeat = Number(value) - continue + submitData.repeat = Number(value); + continue; } if (key === "status") { - submitData.status = startingAnilistStatusOption - continue + submitData.status = startingAnilistStatusOption; + continue; } - submitData[key] = value + submitData[key] = value; } if ( @@ -190,16 +190,16 @@ notes: submitData.notes, startedAt: convertDateStringToAniList(submitData.startedAt), completedAt: convertDateStringToAniList(submitData.completedAt), - } + }; await AniListUpdateEntry(body).then( (value: AniListGetSingleAnime) => { // 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 // delete value.data.MediaList.media.tags aniListAnime.update((newValue) => { - newValue = value - return newValue - }) + newValue = value; + return newValue; + }); AddAnimeServiceToTable({ id: `a-${currentAniListAnime.data.MediaList.mediaId}`, title, @@ -215,9 +215,9 @@ score: currentAniListAnime.data.MediaList.score, repeat: currentAniListAnime.data.MediaList.repeat, notes: currentAniListAnime.data.MediaList.notes, - }) + }); }, - ) + ); } if (malLoggedIn && currentMalAnime.id !== 0) { @@ -228,22 +228,22 @@ num_watched_episodes: submitData.episodes, num_times_rewatched: submitData.repeat, comments: submitData.notes, - } + }; await MyAnimeListUpdate(currentMalAnime, body).then( (malAnimeReturn: MalListStatus) => { malAnime.update((value) => { - value.my_list_status.status = malAnimeReturn.status + value.my_list_status.status = malAnimeReturn.status; value.my_list_status.is_rewatching = - malAnimeReturn.is_rewatching - value.my_list_status.score = malAnimeReturn.score + malAnimeReturn.is_rewatching; + value.my_list_status.score = malAnimeReturn.score; value.my_list_status.num_episodes_watched = - malAnimeReturn.num_episodes_watched + malAnimeReturn.num_episodes_watched; value.my_list_status.num_times_rewatched = - malAnimeReturn.num_times_rewatched - value.my_list_status.comments = malAnimeReturn.comments - return value - }) + malAnimeReturn.num_times_rewatched; + value.my_list_status.comments = malAnimeReturn.comments; + return value; + }); AddAnimeServiceToTable({ id: `m-${currentMalAnime.id}`, title: currentMalAnime.title, @@ -257,9 +257,9 @@ repeat: currentMalAnime.my_list_status .num_times_rewatched, notes: currentMalAnime.my_list_status.comments, - }) + }); }, - ) + ); } if (simklLoggedIn && currentSimklAnime.show.ids.simkl !== 0) { @@ -281,12 +281,12 @@ score: value.user_rating, repeat: 0, notes: "", - }) + }); simklAnime.update((newValue) => { - newValue = value - return newValue - }) - }) + newValue = value; + return newValue; + }); + }); } if (currentSimklAnime.user_rating !== submitData.rating) { @@ -305,12 +305,12 @@ score: value.user_rating, repeat: 0, notes: "", - }) + }); simklAnime.update((newValue) => { - newValue = value - return newValue - }) - }) + newValue = value; + return newValue; + }); + }); } if (currentSimklAnime.status !== submitData.status.simkl) { @@ -329,27 +329,27 @@ score: value.user_rating, repeat: 0, notes: "", - }) + }); simklAnime.update((newValue) => { - newValue = value - return newValue - }) - }) + newValue = value; + return newValue; + }); + }); } } - submitting.set(false) - submitSuccess.set(true) - setTimeout(() => submitSuccess.set(false), 2000) - } + submitting.set(false); + submitSuccess.set(true); + setTimeout(() => submitSuccess.set(false), 2000); + }; const deleteEntries = async () => { - submitting.set(true) + submitting.set(true); if ( isAniListLoggedIn && currentAniListAnime.data.MediaList.mediaId !== 0 ) { - await AniListDeleteEntry(currentAniListAnime.data.MediaList.id) + await AniListDeleteEntry(currentAniListAnime.data.MediaList.id); AddAnimeServiceToTable({ id: `a-${currentAniListAnime.data.MediaList.mediaId}`, title, @@ -361,10 +361,10 @@ score: 0, repeat: 0, notes: "", - }) + }); } if (malLoggedIn && currentMalAnime.id !== 0) { - await DeleteMyAnimeListEntry(currentMalAnime.id) + await DeleteMyAnimeListEntry(currentMalAnime.id); AddAnimeServiceToTable({ id: `m-${currentMalAnime.id}`, title: currentMalAnime.title, @@ -376,10 +376,10 @@ score: 0, repeat: 0, notes: "", - }) + }); } if (simklLoggedIn && currentSimklAnime.show.ids.simkl !== 0) { - await SimklSyncRemove(currentSimklAnime) + await SimklSyncRemove(currentSimklAnime); AddAnimeServiceToTable({ id: `s-${currentSimklAnime.show.ids.simkl}`, title: currentSimklAnime.show.title, @@ -391,12 +391,12 @@ score: 0, repeat: 0, notes: "", - }) + }); } - submitting.set(false) - submitSuccess.set(true) - setTimeout(() => submitSuccess.set(false), 2000) - } + submitting.set(false); + submitSuccess.set(true); + setTimeout(() => submitSuccess.set(false), 2000); + };
@@ -431,8 +431,11 @@ id="episodes" class="border {currentAniListAnime.data.MediaList .progress < 0 || - currentAniListAnime.data.MediaList.progress > - currentAniListAnime.data.MediaList.media.episodes + (currentAniListAnime.data.MediaList.media.episodes > + 0 && + currentAniListAnime.data.MediaList.progress > + currentAniListAnime.data.MediaList.media + .episodes) ? 'border-red-500 border-[2px] text-rose-300 focus:ring-red-500 focus:border-red-500' : 'border-gray-500 text-white focus:ring-blue-500 focus:border-blue-500'} text-sm rounded-lg block w-24 p-2.5 bg-gray-600 placeholder-gray-400" bind:value={currentAniListAnime.data.MediaList.progress} @@ -661,8 +664,8 @@ focus:ring-gray-700 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700" on:click={async () => { - await CheckIfAniListLoggedInAndLoadWatchList() - return push("/") + await CheckIfAniListLoggedInAndLoadWatchList(); + return push("/"); }} > Go Home diff --git a/frontend/vite.config.ts.timestamp-1728705194404-dee8a4363963c.mjs b/frontend/vite.config.ts.timestamp-1728705194404-dee8a4363963c.mjs new file mode 100644 index 0000000..2114c18 --- /dev/null +++ b/frontend/vite.config.ts.timestamp-1728705194404-dee8a4363963c.mjs @@ -0,0 +1,10 @@ +// vite.config.ts +import { defineConfig } from "file:///home/nymusicman/Code/AniTrack/frontend/node_modules/vite/dist/node/index.js"; +import { svelte } from "file:///home/nymusicman/Code/AniTrack/frontend/node_modules/@sveltejs/vite-plugin-svelte/src/index.js"; +var vite_config_default = defineConfig({ + plugins: [svelte()] +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9ueW11c2ljbWFuL0NvZGUvQW5pVHJhY2svZnJvbnRlbmRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9ob21lL255bXVzaWNtYW4vQ29kZS9BbmlUcmFjay9mcm9udGVuZC92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vaG9tZS9ueW11c2ljbWFuL0NvZGUvQW5pVHJhY2svZnJvbnRlbmQvdml0ZS5jb25maWcudHNcIjtpbXBvcnQge2RlZmluZUNvbmZpZ30gZnJvbSAndml0ZSdcbmltcG9ydCB7c3ZlbHRlfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJ1xuXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW3N2ZWx0ZSgpXVxufSlcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBdVMsU0FBUSxvQkFBbUI7QUFDbFUsU0FBUSxjQUFhO0FBR3JCLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFDcEIsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K diff --git a/frontend/wailsjs/go/models.ts b/frontend/wailsjs/go/models.ts index 536c642..2f37a88 100755 --- a/frontend/wailsjs/go/models.ts +++ b/frontend/wailsjs/go/models.ts @@ -231,6 +231,8 @@ export namespace main { background: background; related_anime: relatedAnime; recommendations: recommendations; + // Go type: struct { NumListUsers int "json:\"num_list_users\" ts_type:\"numListUsers\""; Status struct { Watching string "json:\"watching\" ts_type:\"watching\""; Completed string "json:\"completed\" ts_type:\"completed\""; OnHold string "json:\"on_hold\" ts_type:\"onHold\""; Dropped string "json:\"dropped\" ts_type:\"dropped\""; PlanToWatch string "json:\"plan_to_watch\" ts_type:\"planToWatch\"" } } + Statistics: any; static createFrom(source: any = {}) { return new MALAnime(source); @@ -268,6 +270,7 @@ export namespace main { this.background = source["background"]; this.related_anime = source["related_anime"]; this.recommendations = source["recommendations"]; + this.Statistics = this.convertValues(source["Statistics"], Object); } convertValues(a: any, classs: any, asMap: boolean = false): any { diff --git a/go.mod b/go.mod index f45ddc5..6e5142c 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,11 @@ module AniTrack -go 1.21 - -toolchain go1.21.11 +go 1.23 require ( github.com/99designs/keyring v1.2.2 - github.com/tidwall/gjson v1.17.3 - github.com/wailsapp/wails/v2 v2.9.1 + github.com/tidwall/gjson v1.18.0 + github.com/wailsapp/wails/v2 v2.9.2 ) require ( @@ -35,17 +33,17 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/samber/lo v1.47.0 // indirect github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/tkrajina/go-reflector v0.5.6 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tkrajina/go-reflector v0.5.8 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wailsapp/go-webview2 v1.0.16 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect - golang.org/x/crypto v0.26.0 // indirect - golang.org/x/net v0.28.0 // indirect - golang.org/x/sys v0.25.0 // indirect - golang.org/x/term v0.24.0 // indirect - golang.org/x/text v0.18.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/term v0.25.0 // indirect + golang.org/x/text v0.19.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 621c007..055dd68 100644 --- a/go.sum +++ b/go.sum @@ -66,14 +66,15 @@ 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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= -github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= -github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ= +github.com/tkrajina/go-reflector v0.5.8/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= @@ -82,27 +83,27 @@ github.com/wailsapp/go-webview2 v1.0.16 h1:wffnvnkkLvhRex/aOrA3R7FP7rkvOqL/bir1b github.com/wailsapp/go-webview2 v1.0.16/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= 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.1 h1:irsXnoQrCpeKzKTYZ2SUVlRRyeMR6I0vCO9Q1cvlEdc= -github.com/wailsapp/wails/v2 v2.9.1/go.mod h1:7maJV2h+Egl11Ak8QZN/jlGLj2wg05bsQS+ywJPT0gI= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +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.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= 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.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.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.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= -golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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=