Skip to content
This repository was archived by the owner on Dec 1, 2025. It is now read-only.

Commit baad963

Browse files
authored
Merge pull request #24 from xeyossr/fix/rpc-reconnect
RPC Reconnect
2 parents eff2155 + b2c8097 commit baad963

File tree

6 files changed

+68
-69
lines changed

6 files changed

+68
-69
lines changed

aur/.SRCINFO

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pkgbase = anitr-cli
22
pkgdesc = 🚀 Terminalde Türkçe altyazılı anime arama ve izleme aracı
3-
pkgver = 4.5.1
3+
pkgver = 4.5.2
44
pkgrel = 1
55
url = https://github.com/xeyossr/anitr-cli
66
arch = any
@@ -12,7 +12,7 @@ pkgbase = anitr-cli
1212
optdepends = rofi-wayland: Wayland kullanıcıları için GUI
1313
optdepends = yt-dlp: Anime indirme özelliği için
1414
optdepends = youtube-dl: Anime indirme özelliği için
15-
source = anitr-cli-4.5.1.tar.gz::https://github.com/xeyossr/anitr-cli/archive/refs/tags/v4.5.1.tar.gz
15+
source = anitr-cli-4.5.2.tar.gz::https://github.com/xeyossr/anitr-cli/archive/refs/tags/v4.5.2.tar.gz
1616
sha256sums = SKIP
1717

1818
pkgname = anitr-cli

aur/PKGBUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Maintainer: xeyossr
22
# Description: 🚀 Terminalde Türkçe altyazılı anime arama ve izleme aracı
33
pkgname=anitr-cli
4-
pkgver=4.5.1
4+
pkgver=4.5.2
55
pkgrel=1
66
pkgdesc="🚀 Terminalde Türkçe altyazılı anime arama ve izleme aracı"
77
arch=('any')

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ require (
88
github.com/charmbracelet/bubbles v0.21.0
99
github.com/charmbracelet/bubbletea v1.3.6
1010
github.com/charmbracelet/lipgloss v1.1.0
11-
github.com/hugolgst/rich-go v0.0.0-20240715122152-74618cc1ace2
1211
github.com/muesli/reflow v0.3.0
1312
github.com/spf13/cobra v1.9.1
13+
github.com/xeyossr/go-discordrpc v1.0.0
1414
)
1515

1616
require (

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNE
2727
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
2828
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
2929
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
30-
github.com/hugolgst/rich-go v0.0.0-20240715122152-74618cc1ace2 h1:9qOViOQGFIP5ar+2NorfAIsfuADEKXtklySC0zNnYf4=
31-
github.com/hugolgst/rich-go v0.0.0-20240715122152-74618cc1ace2/go.mod h1:nGaW7CGfNZnhtiFxMpc4OZdqIexGXjUlBnlmpZmjEKA=
3230
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
3331
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
3432
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
@@ -61,6 +59,8 @@ github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
6159
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
6260
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
6361
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
62+
github.com/xeyossr/go-discordrpc v1.0.0 h1:5Vr3hGWxvB3+wyddZXmu76yrB7kaJy/S7vRQERzL2G0=
63+
github.com/xeyossr/go-discordrpc v1.0.0/go.mod h1:SvAeJIAdkhljZMtunSVc42bLfbOlJgoURLsCr7pCk4s=
6464
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
6565
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
6666
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=

internal/rpc/discord.go

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,40 @@ package rpc
33
import (
44
"fmt"
55

6-
"github.com/hugolgst/rich-go/client"
76
"github.com/xeyossr/anitr-cli/internal"
7+
"github.com/xeyossr/go-discordrpc/client"
88
)
99

10-
// ClientLogin, Discord RPC'ye giriş yapmaya çalışır ve başarı durumunu döner.
11-
func ClientLogin() (bool, error) {
12-
// Discord RPC'ye giriş yapmayı dene
13-
err := client.Login("1383421771159572600")
14-
if err != nil {
15-
return false, fmt.Errorf("discord rpc login başarısız: %v", err) // Giriş hatası
10+
var discordClient *client.Client
11+
12+
// getClient, Tek bir Discord RPC istemci sağlar
13+
func getClient() *client.Client {
14+
if discordClient == nil {
15+
discordClient = client.NewClient("1383421771159572600")
1616
}
17+
return discordClient
18+
}
1719

18-
return true, nil // Başarılı giriş
20+
// ClientLogin, Discord RPC'ye giriş yapmaya çalışır ve başarı durumunu döner.
21+
func ClientLogin() error {
22+
c := getClient()
23+
if err := c.Login(); err != nil {
24+
return fmt.Errorf("discord rpc login failed: %w", err)
25+
}
26+
return nil
1927
}
2028

2129
// DiscordRPC, Discord'a RPC (Remote Procedure Call) aktivitesi güncellemeleri gönderir.
22-
func DiscordRPC(params internal.RPCParams, loggedIn bool) (bool, error) {
23-
// Eğer Discord'a giriş yapılmamışsa, giriş yap
24-
if !loggedIn {
25-
ok, err := ClientLogin()
26-
if err != nil || !ok {
27-
return false, fmt.Errorf("discord rpc login başarısız: %v", err)
28-
}
29-
loggedIn = true
30+
func DiscordRPC(params internal.RPCParams) error {
31+
c := getClient()
32+
33+
// Giriş yapıldığından emin ol
34+
if err := ClientLogin(); err != nil {
35+
return err
3036
}
3137

3238
// Discord aktivitesini ayarla
33-
err := client.SetActivity(client.Activity{
39+
err := c.SetActivity(client.Activity{
3440
State: params.State, // Aktivite durumu
3541
Details: params.Details, // Aktivite detayları
3642
LargeImage: params.LargeImage, // Büyük resim
@@ -44,36 +50,36 @@ func DiscordRPC(params internal.RPCParams, loggedIn bool) (bool, error) {
4450
},
4551
},
4652
})
47-
// Eğer aktivite güncelleme hatalıysa
48-
if err != nil {
49-
loggedIn = false
50-
ok, err := ClientLogin()
51-
if err != nil || !ok {
52-
return false, fmt.Errorf("discord rpc yeniden login başarısız: %v", err)
53-
}
5453

55-
err = client.SetActivity(client.Activity{
56-
State: params.State,
57-
Details: params.Details,
58-
LargeImage: params.LargeImage,
59-
LargeText: params.LargeText,
60-
SmallImage: params.SmallImage,
61-
SmallText: params.SmallText,
62-
Buttons: []*client.Button{
63-
{
64-
Label: "GitHub",
65-
Url: "https://github.com/xeyossr/anitr-cli",
66-
},
67-
},
68-
})
69-
if err != nil {
70-
return false, fmt.Errorf("discord rpc retry setactivity başarısız: %v", err)
71-
}
54+
if err == nil {
55+
return nil
56+
}
57+
58+
// Eğer hata oluşursa yeniden bağlan
59+
_ = c.Logout()
60+
if err := ClientLogin(); err != nil {
61+
return fmt.Errorf("discord rpc retry login failed: %w", err)
62+
}
7263

73-
loggedIn = true
64+
// Tekrar dene
65+
if err := c.SetActivity(client.Activity{
66+
State: params.State,
67+
Details: params.Details,
68+
LargeImage: params.LargeImage,
69+
LargeText: params.LargeText,
70+
SmallImage: params.SmallImage,
71+
SmallText: params.SmallText,
72+
Buttons: []*client.Button{
73+
{
74+
Label: "GitHub",
75+
Url: "https://github.com/xeyossr/anitr-cli",
76+
},
77+
},
78+
}); err != nil {
79+
return fmt.Errorf("discord rpc retry set activity failed: %w", err)
7480
}
7581

76-
return loggedIn, nil // Başarılı RPC güncellemesi
82+
return nil
7783
}
7884

7985
// RPCDetails, Discord RPC için gerekli parametreleri hazırlar ve döner.

main.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ func mainMenu(cfx *App) {
335335

336336
// Bölümleri al
337337
episodes, episodeNames, isMovie, selectedSeasonIndex, err := getEpisodesAndNames(
338-
*cfx.source, false, animeId, animeSlug, historySelectedAnime, cfx.logger,
338+
*cfx.source, false, animeId, animeSlug, historySelectedAnime,
339339
)
340340
if err != nil {
341341
cfx.logger.LogError(err)
@@ -680,7 +680,7 @@ func getAnimeIDs(source models.AnimeSource, selectedAnime models.Anime) (int, st
680680
}
681681

682682
// Seçilen animeye ait bölümleri getirir, isim listesi oluşturur ve movie olup olmadığını döner
683-
func getEpisodesAndNames(source models.AnimeSource, isMovie bool, selectedAnimeID int, selectedAnimeSlug string, selectedAnimeName string, logger *utils.Logger) ([]models.Episode, []string, bool, int, error) {
683+
func getEpisodesAndNames(source models.AnimeSource, isMovie bool, selectedAnimeID int, selectedAnimeSlug string, selectedAnimeName string) ([]models.Episode, []string, bool, int, error) {
684684
var (
685685
episodes []models.Episode
686686
episodeNames []string
@@ -765,12 +765,6 @@ func playAnimeLoop(
765765
selectedEpisodeIndex = lastEpisodeIdx + 1
766766
}
767767

768-
// Discord RPC için giriş yap
769-
loggedIn, err := rpc.ClientLogin()
770-
if err != nil || !loggedIn {
771-
logger.LogError(err)
772-
}
773-
774768
for {
775769
ui.ClearScreen()
776770

@@ -912,7 +906,7 @@ func playAnimeLoop(
912906
close(done)
913907

914908
if !disableRPC {
915-
go updateDiscordRPC(socketPath, episodeNames, selectedEpisodeIndex, selectedAnimeName, selectedSource, posterURL, logger, &loggedIn)
909+
go updateDiscordRPC(socketPath, episodeNames, selectedEpisodeIndex, selectedAnimeName, selectedSource, posterURL, logger)
916910
}
917911

918912
var selectedAnimeId string
@@ -1182,7 +1176,7 @@ func playAnimeLoop(
11821176
choice, err := showSelection(App{uiMode: &uiMode, rofiFlags: &rofiFlags}, []string{"Bu kaynakla devam et", "Kaynak değiştir", "Çık"}, fmt.Sprintf("Arama kaynağı: %s", selectedSource))
11831177

11841178
if errors.Is(err, tui.ErrGoBack) {
1185-
continue
1179+
break
11861180
}
11871181

11881182
if err != nil {
@@ -1217,7 +1211,7 @@ func playAnimeLoop(
12171211
}
12181212

12191213
// Discord RPC'yi güncelleyerek anime oynatma durumunu Discord'a yansıtır
1220-
func updateDiscordRPC(socketPath string, episodeNames []string, selectedEpisodeIndex int, selectedAnimeName, selectedSource, posterURL string, logger *utils.Logger, loggedIn *bool) {
1214+
func updateDiscordRPC(socketPath string, episodeNames []string, selectedEpisodeIndex int, selectedAnimeName, selectedSource, posterURL string, logger *utils.Logger) {
12211215
// 5 saniyede bir discord RPC güncellemesi yapmak için zamanlayıcı başlatılır
12221216
ticker := time.NewTicker(5 * time.Second)
12231217
defer ticker.Stop()
@@ -1265,23 +1259,22 @@ func updateDiscordRPC(socketPath string, episodeNames []string, selectedEpisodeI
12651259
state := fmt.Sprintf("%s (%s / %s)", episodeNames[selectedEpisodeIndex], formatTime(timePos), formatTime(duration))
12661260
// Eğer video duraklatıldıysa, duraklatma bilgisini ekle
12671261
if isPaused {
1268-
state = fmt.Sprintf("%s (%s / %s) (Paused)", episodeNames[selectedEpisodeIndex], formatTime(timePos), formatTime(duration))
1262+
state += " (Paused)"
12691263
}
12701264

1271-
// Discord RPC için parametreleri ayarla ve RPC'yi güncelle
1272-
var err2 error
1273-
*loggedIn, err2 = rpc.DiscordRPC(internal.RPCParams{
1265+
// RPC parametreleri
1266+
params := internal.RPCParams{
12741267
Details: selectedAnimeName,
12751268
State: state,
12761269
SmallImage: strings.ToLower(selectedSource),
12771270
SmallText: selectedSource,
12781271
LargeImage: posterURL,
12791272
LargeText: selectedAnimeName,
1280-
}, *loggedIn)
1273+
}
12811274

1282-
// Discord RPC güncelleme hatası varsa logla
1283-
if err2 != nil {
1284-
logger.LogError(fmt.Errorf("DiscordRPC hatası: %w", err2))
1275+
// Discord RPC güncelle
1276+
if err := rpc.DiscordRPC(params); err != nil {
1277+
logger.LogError(fmt.Errorf("DiscordRPC hatası: %w", err))
12851278
continue
12861279
}
12871280
}
@@ -1346,7 +1339,7 @@ func app(cfx *App) error {
13461339

13471340
// Anime bölümleri alınır
13481341
episodes, episodeNames, isMovie, selectedSeasonIndex, err := getEpisodesAndNames(
1349-
*cfx.source, isMovie, selectedAnimeID, selectedAnimeSlug, selectedAnime.Title, cfx.logger,
1342+
*cfx.source, isMovie, selectedAnimeID, selectedAnimeSlug, selectedAnime.Title,
13501343
)
13511344
// Hata durumunda kullanıcıya seçenek sunulur
13521345
if err != nil {

0 commit comments

Comments
 (0)