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

Commit 7c110d7

Browse files
authored
Merge pull request #27 from axrona/settings-menu
Ayarlar menüsü iyileştirildi
2 parents 87d6bcf + 708fea8 commit 7c110d7

File tree

3 files changed

+151
-69
lines changed

3 files changed

+151
-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.4
3+
pkgver = 4.5.5
44
pkgrel = 1
55
url = https://github.com/axrona/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.4.tar.gz::https://github.com/axrona/anitr-cli/archive/refs/tags/v4.5.4.tar.gz
15+
source = anitr-cli-4.5.5.tar.gz::https://github.com/axrona/anitr-cli/archive/refs/tags/v4.5.5.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 (axrona)
22
# Description: 🚀 Terminalde Türkçe altyazılı anime arama ve izleme aracı
33
pkgname=anitr-cli
4-
pkgver=4.5.4
4+
pkgver=4.5.5
55
pkgrel=1
66
pkgdesc="🚀 Terminalde Türkçe altyazılı anime arama ve izleme aracı"
77
arch=('any')

main.go

Lines changed: 148 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package main
22

33
import (
4+
"encoding/json"
45
"errors"
56
"fmt"
7+
"io"
68
"log"
79
"os"
810
"path/filepath"
@@ -12,7 +14,6 @@ import (
1214
"strconv"
1315
"strings"
1416
"time"
15-
"encoding/json"
1617

1718
"github.com/axrona/anitr-cli/internal"
1819
"github.com/axrona/anitr-cli/internal/dl"
@@ -402,7 +403,7 @@ func mainMenu(cfx *App, timestamp time.Time) {
402403
}
403404

404405
case "Ayarlar":
405-
settingsMenu(cfx)
406+
settingsMenu(cfx)
406407

407408
case "Çık":
408409
os.Exit(0)
@@ -411,64 +412,146 @@ func mainMenu(cfx *App, timestamp time.Time) {
411412
}
412413

413414
func settingsMenu(cfx *App) {
414-
cfg, err := utils.LoadConfig(filepath.Join(utils.ConfigDir(), "config.json"))
415-
if err != nil {
416-
cfg = &utils.Config{}
417-
}
418-
419-
for {
420-
menuOptions := []string{
421-
fmt.Sprintf("İndirme dizinini değiştir : %s", cfg.DownloadDir),
422-
"Geri",
423-
}
424-
425-
selectedChoice, err := showSelection(*cfx, menuOptions, "Ayarlar")
426-
if errors.Is(err, tui.ErrGoBack) {
427-
return
428-
}
429-
if err != nil {
430-
cfx.logger.LogError(err)
431-
continue
432-
}
433-
434-
switch selectedChoice {
435-
case menuOptions[0]: // İndirme dizinini değiştir
436-
// varsayılan gösterimi ~/ ile
437-
homeDir := os.Getenv("HOME")
438-
displayDir := cfg.DownloadDir
439-
if strings.HasPrefix(cfg.DownloadDir, homeDir) {
440-
displayDir = "~" + cfg.DownloadDir[len(homeDir):]
415+
cfg, err := utils.LoadConfig(filepath.Join(utils.ConfigDir(), "config.json"))
416+
if err != nil {
417+
cfg = &utils.Config{}
418+
}
419+
420+
// Dosyayı okuma ve yazma modunda açıyoruz, mevcut içeriği sıfırlayarak
421+
f, err := os.OpenFile(filepath.Join(utils.ConfigDir(), "config.json"), os.O_RDWR|os.O_CREATE, 0o644)
422+
if err != nil {
423+
cfx.logger.LogError(err)
424+
return
425+
}
426+
defer f.Close() // Fonksiyon bitince dosya kapanır
427+
428+
// JSON yazıcı (Encoder değil)
429+
encoder := json.NewEncoder(f)
430+
encoder.SetIndent("", " ")
431+
432+
// Menüdeki değişikliklerin kaydedilmesi için bir flag
433+
var changesMade bool
434+
435+
for {
436+
// Ekranı temizle
437+
ui.ClearScreen()
438+
439+
var selectedSourceText string
440+
if cfx.selectedSource != nil {
441+
selectedSourceText = *cfx.selectedSource
442+
} else {
443+
selectedSourceText = "Seçili kaynak yok"
441444
}
442445

443-
fmt.Printf("Yeni dizin (Enter ile değiştirme) [%s]: ", displayDir)
444-
var input string
445-
fmt.Scanln(&input)
446-
if input != "" {
447-
// Eğer input ~/ ile başlıyorsa HOME ile değiştir
448-
if strings.HasPrefix(input, "~") {
449-
input = filepath.Join(homeDir, input[1:])
450-
}
451-
cfg.DownloadDir = input
452-
453-
os.MkdirAll(utils.ConfigDir(), 0o755)
454-
f, err := os.Create(filepath.Join(utils.ConfigDir(), "config.json"))
455-
if err == nil {
456-
defer f.Close()
457-
enc := json.NewEncoder(f)
458-
enc.SetIndent("", " ")
459-
enc.Encode(cfg)
460-
}
461-
fmt.Println("Dizin güncellendi!")
462-
time.Sleep(1200 * time.Millisecond)
463-
ui.ClearScreen()
446+
// DisableRPC kontrolü: Nil ise false olarak ayarla
447+
var disableRPCText string
448+
if cfg.DisableRPC == nil {
449+
cfg.DisableRPC = utils.Ptr(false)
450+
}
451+
disableRPCText = fmt.Sprintf("%v", *cfg.DisableRPC)
452+
453+
menuOptions := []string{
454+
"İndirme dizinini değiştir : " + cfg.DownloadDir,
455+
"Varsayılan kaynağı değiştir : " + selectedSourceText,
456+
"Geçmiş limitini değiştir : " + fmt.Sprintf("%d", cfg.HistoryLimit),
457+
"RPC'yi devre dışı bırak : " + disableRPCText,
458+
"Geri",
464459
}
465460

466-
case menuOptions[1]: // Geri
467-
return
468-
}
469-
}
470-
}
461+
selectedChoice, err := showSelection(*cfx, menuOptions, "Ayarlar")
462+
if errors.Is(err, tui.ErrGoBack) {
463+
// Menüden çıkıldığında kaydetme işlemi yap
464+
if changesMade {
465+
// Dosyaya yazma işlemi sadece değişiklik yapıldıysa yapılacak
466+
f.Seek(0, io.SeekStart) // Dosya pointer'ını başa al
467+
f.Truncate(0) // Dosyayı temizle
468+
if err := encoder.Encode(cfg); err != nil {
469+
cfx.logger.LogError(err)
470+
}
471+
fmt.Println("Ayarlar başarıyla güncellendi!")
472+
} else {
473+
// Değişiklik yapılmamışsa dosyayı yazma
474+
fmt.Println("Değişiklik yapılmadı, ayarlar korunuyor.")
475+
}
476+
return
477+
}
478+
if err != nil {
479+
cfx.logger.LogError(err)
480+
continue
481+
}
482+
483+
// Seçilen menü seçeneğine göre işlem yap
484+
switch selectedChoice {
485+
case menuOptions[0]: // İndirme dizinini değiştir
486+
homeDir := os.Getenv("HOME")
487+
displayDir := cfg.DownloadDir
488+
if strings.HasPrefix(cfg.DownloadDir, homeDir) {
489+
displayDir = "~" + cfg.DownloadDir[len(homeDir):]
490+
}
491+
492+
fmt.Printf("Yeni dizin (Enter ile değiştirme) [%s]: ", displayDir)
493+
var input string
494+
fmt.Scanln(&input)
495+
if input != "" {
496+
if strings.HasPrefix(input, "~") {
497+
input = filepath.Join(homeDir, input[1:])
498+
}
499+
cfg.DownloadDir = input
500+
changesMade = true // Flag'i true yapıyoruz, çünkü değişiklik yapıldı
501+
}
502+
503+
case menuOptions[1]: // Kaynak değiştir
504+
selectedSource, _ := selectSource(*cfx.uiMode, *cfx.rofiFlags, *cfx.source, cfx.logger)
505+
cfx.selectedSource = &selectedSource
506+
cfg.DefaultSource = selectedSource
507+
changesMade = true
508+
509+
case menuOptions[2]: // Geçmiş limitini değiştir
510+
fmt.Print("Yeni geçmiş limitini girin: ")
511+
var newLimit int
512+
fmt.Scanln(&newLimit)
513+
if newLimit >= 0 {
514+
cfg.HistoryLimit = newLimit
515+
changesMade = true
516+
}
517+
518+
case menuOptions[3]: // RPC'yi devre dışı bırak
519+
choice, err := showSelection(
520+
App{uiMode: cfx.uiMode, rofiFlags: cfx.rofiFlags},
521+
[]string{"Evet", "Hayır"},
522+
"Discord Rich Presence devre dışı bırakılsın mı?",
523+
)
524+
525+
if errors.Is(err, tui.ErrGoBack) {
526+
return
527+
}
471528

529+
switch strings.ToLower(choice) {
530+
case "evet":
531+
cfg.DisableRPC = utils.Ptr(true)
532+
case "hayır":
533+
cfg.DisableRPC = utils.Ptr(false)
534+
default:
535+
cfg.DisableRPC = utils.Ptr(false)
536+
}
537+
changesMade = true
538+
539+
case menuOptions[4]: // Geri
540+
return
541+
}
542+
543+
// Değişiklikleri hemen kaydet
544+
if changesMade {
545+
// Dosyaya yazma işlemi manuel olarak yapılır
546+
f.Seek(0, io.SeekStart) // Dosya pointer'ını başa al
547+
f.Truncate(0) // Dosyayı temizle
548+
if err := encoder.Encode(cfg); err != nil {
549+
cfx.logger.LogError(err)
550+
}
551+
fmt.Println("Ayarlar güncellendi!")
552+
}
553+
}
554+
}
472555

473556
// Anime geçmişini listeleyen fonksiyon
474557
func anitrHistory(params internal.UiParams, source string, historyLimit int, logger *utils.Logger) (selectedAnime string, animeId string, lastEpisodeIdx int, err error) {
@@ -1157,18 +1240,17 @@ func playAnimeLoop(
11571240
continue
11581241
}
11591242
selectedFansubIdx = slices.Index(fansubNames, selected)
1160-
1161-
1162-
// Movie / Bölüm indir
1163-
case "Bölüm indir", "Movie indir":
1164-
ui.ClearScreen()
1165-
1166-
cfg, err := utils.LoadConfig(filepath.Join(utils.ConfigDir(), "config.json"))
1167-
if err != nil {
1168-
cfg = &utils.Config{} // eğer config yoksa varsayılan config oluştur
1169-
}
11701243

1171-
if cfg.DownloadDir == "" {
1244+
// Movie / Bölüm indir
1245+
case "Bölüm indir", "Movie indir":
1246+
ui.ClearScreen()
1247+
1248+
cfg, err := utils.LoadConfig(filepath.Join(utils.ConfigDir(), "config.json"))
1249+
if err != nil {
1250+
cfg = &utils.Config{} // eğer config yoksa varsayılan config oluştur
1251+
}
1252+
1253+
if cfg.DownloadDir == "" {
11721254
defaultDir := utils.DefaultDownloadDir()
11731255
fmt.Printf("Videoları nereye indirmek istersiniz? (Varsayılan: %s): ", defaultDir)
11741256
var input string

0 commit comments

Comments
 (0)