@@ -330,7 +330,12 @@ func aniListDefaultAction(ctx *cli.Context) error {
330
330
fmt .Printf ("%*s%*.*s%8s%6s\n " ,
331
331
numberFieldWidth , "No" , titleWidth , titleWidth , "Title" , "Eps" , "Score" )
332
332
fmt .Println (strings .Repeat ("=" , cfg .ListWidth ))
333
- pattern := "%*d%*.*s%8s%6d\n "
333
+ var pattern string
334
+ if al .User .MediaListOptions .ScoreFormat == anilist .Point10Decimal {
335
+ pattern = "%*d%*.*s%8s%6.1f\n "
336
+ } else {
337
+ pattern = "%*d%*.*s%8s%6.f\n "
338
+ }
334
339
var entry * anilist.MediaListEntry
335
340
for i := visibleEntries - 1 ; i >= 0 ; i -- {
336
341
entry = & list [i ]
@@ -393,7 +398,7 @@ func alSetEntryEpisodes(ctx *cli.Context) error {
393
398
}
394
399
395
400
fmt .Println ("Updated successfully" )
396
- alPrintEntryDetailsAfterUpdatedEpisodes (entry , epsBefore )
401
+ alPrintEntryDetailsAfterUpdatedEpisodes (entry , epsBefore , al . User . MediaListOptions . ScoreFormat )
397
402
return nil
398
403
}
399
404
@@ -437,7 +442,7 @@ func alSetEntryStatus(ctx *cli.Context) error {
437
442
}
438
443
439
444
fmt .Println ("Updated successfully" )
440
- alPrintEntryDetails (entry )
445
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
441
446
return nil
442
447
}
443
448
@@ -451,9 +456,9 @@ func alSetEntryScore(ctx *cli.Context) error {
451
456
return err
452
457
}
453
458
454
- score , err := strconv . Atoi (ctx .Args ().First ())
455
- if err != nil || score < 0 || score > 10 {
456
- return fmt . Errorf ( "invalid score; valid range: <0;10>" )
459
+ score , err := parseScore (ctx .Args ().First (), al . User . MediaListOptions . ScoreFormat )
460
+ if err != nil {
461
+ return err
457
462
}
458
463
459
464
entry .Score = score
@@ -466,10 +471,49 @@ func alSetEntryScore(ctx *cli.Context) error {
466
471
}
467
472
468
473
fmt .Println ("Updated successfully" )
469
- alPrintEntryDetails (entry )
474
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
470
475
return nil
471
476
}
472
477
478
+ func parseScore (score string , scoreFormat anilist.ScoreFormat ) (float32 , error ) {
479
+ maxScore := 0
480
+ switch scoreFormat {
481
+ case anilist .Point10Decimal :
482
+ maxScore = 10
483
+ decimalPartIdx := strings .Index (score , "." )
484
+ if decimalPartIdx == - 1 {
485
+ break
486
+ } else if decimalPartIdx == len (score )- 1 {
487
+ score = score [:decimalPartIdx ]
488
+ break
489
+ }
490
+
491
+ decimalPart := score [(decimalPartIdx + 1 ):]
492
+ if len (decimalPart ) > 1 {
493
+ return 0 , fmt .Errorf ("invalid score; up to 1 decimal place allowed" )
494
+ }
495
+
496
+ parsedScore , err := strconv .ParseFloat (score , 32 )
497
+ if err != nil || parsedScore < 0.0 || parsedScore > 10.0 {
498
+ return 0 , fmt .Errorf ("invalid score; valid range: <0;10>" )
499
+ }
500
+ return float32 (parsedScore ), err
501
+ case anilist .Point100 :
502
+ maxScore = 100
503
+ case anilist .Point10 :
504
+ maxScore = 10
505
+ case anilist .Point5 :
506
+ maxScore = 5
507
+ case anilist .Point3 :
508
+ maxScore = 3
509
+ }
510
+ parsedScore , err := strconv .Atoi (score )
511
+ if err != nil || parsedScore < 0 || parsedScore > maxScore {
512
+ return 0 , fmt .Errorf ("invalid score; valid range: <0;%d>" , maxScore )
513
+ }
514
+ return float32 (parsedScore ), err
515
+ }
516
+
473
517
func alDeleteEntry (ctx * cli.Context ) error {
474
518
al , entry , _ , err := loadAniListFull (ctx )
475
519
if err != nil {
@@ -481,7 +525,7 @@ func alDeleteEntry(ctx *cli.Context) error {
481
525
}
482
526
483
527
fmt .Println ("Entry deleted successfully" )
484
- alPrintEntryDetails (entry )
528
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
485
529
486
530
al .List = al .List .DeleteById (entry .ListId )
487
531
return saveAniListAnimeLists (al )
@@ -519,7 +563,7 @@ func alSelectEntry(ctx *cli.Context) error {
519
563
}
520
564
}
521
565
if matchedEntry != nil {
522
- alSaveSelection (cfg , matchedEntry )
566
+ alSaveSelection (cfg , matchedEntry , al . User . MediaListOptions . ScoreFormat )
523
567
return nil
524
568
}
525
569
@@ -534,25 +578,25 @@ func alSelectRandomEntry(ctx *cli.Context) error {
534
578
535
579
planToWatchList := alGetList (al , anilist .Planning )
536
580
idx := rand .New (rand .NewSource (time .Now ().UnixNano ())).Intn (len (planToWatchList ))
537
- alSaveSelection (LoadConfig (), & planToWatchList [idx ])
581
+ alSaveSelection (LoadConfig (), & planToWatchList [idx ], al . User . MediaListOptions . ScoreFormat )
538
582
539
583
return nil
540
584
}
541
585
542
- func alSaveSelection (cfg * Config , entry * anilist.MediaListEntry ) {
586
+ func alSaveSelection (cfg * Config , entry * anilist.MediaListEntry , scoreFormat anilist. ScoreFormat ) {
543
587
cfg .ALSelectedID = entry .Id
544
588
cfg .Save ()
545
589
546
590
fmt .Println ("Selected entry:" )
547
- alPrintEntryDetails (entry )
591
+ alPrintEntryDetails (entry , scoreFormat )
548
592
}
549
593
550
594
func alShowSelectedEntry (ctx * cli.Context ) error {
551
- _ , entry , _ , err := loadAniListFull (ctx )
595
+ al , entry , _ , err := loadAniListFull (ctx )
552
596
if err != nil {
553
597
return err
554
598
}
555
- alPrintEntryDetails (entry )
599
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
556
600
return nil
557
601
}
558
602
@@ -586,7 +630,7 @@ func alNyaaWebsite(ctx *cli.Context) error {
586
630
}
587
631
588
632
fmt .Println ("Searched for:" )
589
- alPrintEntryDetails (entry )
633
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
590
634
return nil
591
635
}
592
636
@@ -631,7 +675,7 @@ func alOpenWebsite(ctx *cli.Context) error {
631
675
}
632
676
633
677
fmt .Println ("Opened website for:" )
634
- alPrintEntryDetails (entry )
678
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
635
679
fmt .Fprintf (color .Output , "URL: %v\n " , color .CyanString ("%v" , entryUrl ))
636
680
} else {
637
681
fmt .Println ("Nothing to open" )
@@ -848,7 +892,7 @@ func alCopyIntoClipboard(ctx *cli.Context) error {
848
892
}
849
893
850
894
func alOpenEntrySite (ctx * cli.Context ) error {
851
- _ , entry , cfg , err := loadAniListFull (ctx )
895
+ al , entry , cfg , err := loadAniListFull (ctx )
852
896
if err != nil {
853
897
return err
854
898
}
@@ -860,20 +904,20 @@ func alOpenEntrySite(ctx *cli.Context) error {
860
904
open .StartWith (uri , path )
861
905
}
862
906
fmt .Println ("Opened website for:" )
863
- alPrintEntryDetails (entry )
907
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
864
908
865
909
return nil
866
910
}
867
911
868
912
func alOpenMalSite (ctx * cli.Context ) error {
869
- _ , entry , cfg , err := loadAniListFull (ctx )
913
+ al , entry , cfg , err := loadAniListFull (ctx )
870
914
if err != nil {
871
915
return err
872
916
}
873
917
874
918
openMalSite (cfg , entry .IdMal )
875
919
fmt .Println ("Opened website for:" )
876
- alPrintEntryDetails (entry )
920
+ alPrintEntryDetails (entry , al . User . MediaListOptions . ScoreFormat )
877
921
878
922
return nil
879
923
}
0 commit comments