Skip to content

Commit 59b8737

Browse files
committed
Trakt Support (with typo fixes)
Both Movies and Episode Scrobbling works Also there have been added code responds for Kodi void Functions to make better use of them.
1 parent 73249fa commit 59b8737

6 files changed

+138
-91
lines changed

JMMServer/JMMServiceImplementationKodi.cs

+50-32
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,14 @@ private System.IO.Stream InternalGetFile(int userid, string Id)
238238

239239
public System.IO.Stream GetUsers()
240240
{
241-
PlexContract_Users gfs = new PlexContract_Users();
241+
KodiContract_Users gfs = new KodiContract_Users();
242242
try
243243
{
244-
gfs.Users=new List<PlexContract_User>();
244+
gfs.Users=new List<KodiContract_User>();
245245
JMMUserRepository repUsers = new JMMUserRepository();
246246
foreach (JMMUser us in repUsers.GetAll())
247247
{
248-
PlexContract_User p = new PlexContract_User();
248+
KodiContract_User p = new KodiContract_User();
249249
p.id = us.JMMUserID.ToString();
250250
p.name = us.Username;
251251
gfs.Users.Add(p);
@@ -701,25 +701,25 @@ private System.IO.Stream GetGroupsFromFilter(int userid, string GroupFilterId)
701701

702702
//community support
703703

704-
CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
705-
List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anim.AnimeID);
706-
if (Trakt != null)
707-
{
708-
if (Trakt.Count > 0)
709-
{
710-
j.Trakt = Trakt[0].TraktID;
711-
}
712-
}
713-
714-
CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
715-
List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anim.AnimeID);
716-
if (TvDB != null)
717-
{
718-
if (TvDB.Count > 0)
719-
{
720-
j.TvDB = TvDB[0].TvDBID.ToString();
721-
}
722-
}
704+
//CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
705+
//List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anim.AnimeID);
706+
//if (Trakt != null)
707+
//{
708+
// if (Trakt.Count > 0)
709+
// {
710+
// j.Trakt = Trakt[0].TraktID;
711+
// }
712+
//}
713+
714+
//CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
715+
//List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anim.AnimeID);
716+
//if (TvDB != null)
717+
//{
718+
// if (TvDB.Count > 0)
719+
// {
720+
// j.TvDB = TvDB[0].TvDBID.ToString();
721+
// }
722+
//}
723723

724724
//community support END
725725

@@ -774,20 +774,23 @@ public void ToggleWatchedStatusOnEpisode(string userid, string episodeid, string
774774
}
775775
}
776776

777-
public void VoteAnime(string userid, string objectid, string votevalue, string votetype)
777+
public System.IO.Stream VoteAnime(string userid, string objectid, string votevalue, string votetype)
778778
{
779+
Respond rsp = new Respond();
780+
rsp.code = 500;
781+
779782
int objid = 0;
780783
int usid = 0;
781784
int vt = 0;
782785
double vvalue = 0;
783786
if (!int.TryParse(objectid, out objid))
784-
return;
787+
return KodiHelper.GetStreamFromXmlObject(rsp);
785788
if (!int.TryParse(userid, out usid))
786-
return;
789+
return KodiHelper.GetStreamFromXmlObject(rsp);
787790
if (!int.TryParse(votetype, out vt))
788-
return;
791+
return KodiHelper.GetStreamFromXmlObject(rsp);
789792
if (!double.TryParse(votevalue, NumberStyles.Any, CultureInfo.InvariantCulture, out vvalue))
790-
return;
793+
return KodiHelper.GetStreamFromXmlObject(rsp);
791794
using (var session = JMMService.SessionFactory.OpenSession())
792795
{
793796
if (vt == (int)enAniDBVoteType.Episode)
@@ -796,7 +799,10 @@ public void VoteAnime(string userid, string objectid, string votevalue, string v
796799
AnimeEpisode ep = repEpisodes.GetByID(session, objid);
797800
AniDB_Anime anime = ep?.GetAnimeSeries().GetAnime();
798801
if (anime == null)
799-
return;
802+
{
803+
rsp.code = 404;
804+
return KodiHelper.GetStreamFromXmlObject(rsp);
805+
}
800806
string msg = string.Format("Voting for anime episode: {0} - Value: {1}", ep.AnimeEpisodeID, vvalue);
801807
logger.Info(msg);
802808

@@ -839,7 +845,10 @@ public void VoteAnime(string userid, string objectid, string votevalue, string v
839845
AnimeSeries ser = repSeries.GetByID(session, objid);
840846
AniDB_Anime anime = ser?.GetAnime();
841847
if (anime == null)
842-
return;
848+
{
849+
rsp.code = 404;
850+
return KodiHelper.GetStreamFromXmlObject(rsp);
851+
}
843852
string msg = string.Format("Voting for anime: {0} - Value: {1}", anime.AnimeID, vvalue);
844853
logger.Info(msg);
845854

@@ -884,6 +893,8 @@ public void VoteAnime(string userid, string objectid, string votevalue, string v
884893
CommandRequest_VoteAnime cmdVote = new CommandRequest_VoteAnime(anime.AnimeID, vt, Convert.ToDecimal(vvalue));
885894
cmdVote.Save();
886895
}
896+
rsp.code = 200;
897+
return KodiHelper.GetStreamFromXmlObject(rsp);
887898
}
888899
}
889900

@@ -908,8 +919,10 @@ private List<Character> GetCharactersFromAniDB( AniDB_Anime anidb_anime)
908919
return char_list;
909920
}
910921

911-
public void TraktScrobble(string slug, string traktid, string type, string progress, string status)
922+
public System.IO.Stream TraktScrobble(string animeId, string type, string progress, string status)
912923
{
924+
Respond rsp = new Respond();
925+
913926
int typeTrakt;
914927
int statusTrakt;
915928
Providers.TraktTV.ScrobblePlayingStatus statusTraktV2 = Providers.TraktTV.ScrobblePlayingStatus.Start;
@@ -933,21 +946,26 @@ public void TraktScrobble(string slug, string traktid, string type, string progr
933946
float.TryParse(progress, out progressTrakt);
934947
progressTrakt = progressTrakt / 10;
935948

949+
rsp.code = 404;
950+
936951
int.TryParse(type, out typeTrakt);
937952
switch (typeTrakt)
938953
{
939954
//1
940955
case (int)Providers.TraktTV.ScrobblePlayingType.movie:
941-
Providers.TraktTV.TraktTVHelper.Scrobble(Providers.TraktTV.ScrobblePlayingType.movie, slug, traktid, statusTraktV2, progressTrakt);
956+
rsp.code = Providers.TraktTV.TraktTVHelper.Scrobble(Providers.TraktTV.ScrobblePlayingType.movie, animeId, statusTraktV2, progressTrakt);
942957
break;
943958
//2
944959
case (int)Providers.TraktTV.ScrobblePlayingType.episode:
945-
Providers.TraktTV.TraktTVHelper.Scrobble(Providers.TraktTV.ScrobblePlayingType.episode, slug, traktid, statusTraktV2, progressTrakt);
960+
rsp.code = Providers.TraktTV.TraktTVHelper.Scrobble(Providers.TraktTV.ScrobblePlayingType.episode, animeId, statusTraktV2, progressTrakt);
946961
break;
947962
//error
948963
default:
964+
rsp.code = 500;
949965
break;
950966
}
967+
968+
return KodiHelper.GetStreamFromXmlObject(rsp);
951969
}
952970

953971
}

JMMServer/Kodi/KodiExtensions.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ public static Video Clone(this Video o)
124124
v.ViewOffset = o.ViewOffset;
125125
v.ViewedLeafCount = o.ViewedLeafCount;
126126
v.Year = o.Year;
127-
v.TvDB = o.TvDB;
128-
v.Trakt = o.Trakt;
127+
//v.TvDB = o.TvDB;
128+
//v.Trakt = o.Trakt;
129129
return v;
130130
}
131131

JMMServer/Kodi/KodiHelper.cs

+37-37
Original file line numberDiff line numberDiff line change
@@ -283,25 +283,25 @@ private static void PopulateVideoEpisodeFromAnimeEpisode(Video v, AnimeEpisode e
283283

284284
//community support
285285

286-
CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
287-
List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(aep.AnimeID);
288-
if (Trakt != null)
289-
{
290-
if (Trakt.Count > 0)
291-
{
292-
v.Trakt = Trakt[0].TraktID;
293-
}
294-
}
295-
296-
CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
297-
List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(aep.AnimeID);
298-
if (TvDB != null)
299-
{
300-
if (TvDB.Count > 0)
301-
{
302-
v.TvDB = TvDB[0].TvDBID.ToString();
303-
}
304-
}
286+
//CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
287+
//List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(aep.AnimeID);
288+
//if (Trakt != null)
289+
//{
290+
// if (Trakt.Count > 0)
291+
// {
292+
// v.Trakt = Trakt[0].TraktID;
293+
// }
294+
//}
295+
296+
//CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
297+
//List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(aep.AnimeID);
298+
//if (TvDB != null)
299+
//{
300+
// if (TvDB.Count > 0)
301+
// {
302+
// v.TvDB = TvDB[0].TvDBID.ToString();
303+
// }
304+
//}
305305

306306
//community support END
307307
}
@@ -609,25 +609,25 @@ public static Directory FromSerie(Contract_AnimeSeries ser, int userid)
609609

610610
//community support
611611

612-
CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
613-
List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anime.AnimeID);
614-
if (Trakt != null)
615-
{
616-
if (Trakt.Count > 0)
617-
{
618-
p.Trakt = Trakt[0].TraktID;
619-
}
620-
}
612+
//CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
613+
//List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anime.AnimeID);
614+
//if (Trakt != null)
615+
//{
616+
// if (Trakt.Count > 0)
617+
// {
618+
// p.Trakt = Trakt[0].TraktID;
619+
// }
620+
//}
621621

622-
CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
623-
List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anime.AnimeID);
624-
if (TvDB != null)
625-
{
626-
if (TvDB.Count > 0)
627-
{
628-
p.TvDB = TvDB[0].TvDBID.ToString();
629-
}
630-
}
622+
//CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
623+
//List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anime.AnimeID);
624+
//if (TvDB != null)
625+
//{
626+
// if (TvDB.Count > 0)
627+
// {
628+
// p.TvDB = TvDB[0].TvDBID.ToString();
629+
// }
630+
//}
631631

632632
//community support END
633633

JMMServer/Providers/TraktTV/Contracts/TraktV2ScrobbleEpisode.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ class TraktV2ScrobbleEpisode
1616
[DataMember(Name = "progress")]
1717
public float progress { get; set; }
1818

19-
public void Init(float progressVal, string traktSlug)
19+
public void Init(float progressVal, int? traktId, string slugId, int season, int episodeNumber)
2020
{
2121
progress = progressVal;
2222
episode = new TraktV2Episode();
2323
episode.ids = new TraktV2EpisodeIds();
24-
episode.ids.trakt = traktSlug;
24+
episode.ids.trakt = (traktId).ToString();
25+
episode.ids.slug = slugId;
26+
episode.season = season;
27+
episode.number = episodeNumber;
2528
}
2629
}
2730
}

JMMServer/Providers/TraktTV/Contracts/TraktV2ScrobbleMovie.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ class TraktV2ScrobbleMovie
1616
[DataMember(Name = "progress")]
1717
public float progress { get; set; }
1818

19-
public void Init(float progressVal, string traktSlug)
19+
public void Init(float progressVal, string traktSlug, string traktId)
2020
{
2121
progress = progressVal;
2222
movie = new TraktV2Movie();
2323
movie.ids = new TraktV2Ids();
2424
movie.ids.slug = traktSlug;
25+
int traktID = 0;
26+
int.TryParse(traktId, out traktID);
27+
movie.ids.trakt = traktID;
2528
}
2629
}
2730
}

JMMServer/Providers/TraktTV/TraktTVHelper.cs

+40-17
Original file line numberDiff line numberDiff line change
@@ -1013,12 +1013,12 @@ public static void SyncEpisodeToTrakt(TraktSyncType syncType, string slug, int s
10131013

10141014
}
10151015

1016-
public static void Scrobble(ScrobblePlayingType scrobbleType, string slug, string traktid, ScrobblePlayingStatus scrobbleStatus, float progress)
1016+
public static int Scrobble(ScrobblePlayingType scrobbleType, string AnimeEpisodeID, ScrobblePlayingStatus scrobbleStatus, float progress)
10171017
{
10181018
try
10191019
{
10201020
if (!ServerSettings.Trakt_IsEnabled || string.IsNullOrEmpty(ServerSettings.Trakt_AuthToken))
1021-
return;
1021+
return 401;
10221022

10231023
string json = "";
10241024

@@ -1036,31 +1036,54 @@ public static void Scrobble(ScrobblePlayingType scrobbleType, string slug, strin
10361036
break;
10371037
}
10381038

1039-
switch (scrobbleType)
1039+
//1.get traktid and slugid from episode id
1040+
int aep = 0;
1041+
int.TryParse(AnimeEpisodeID, out aep);
1042+
AnimeEpisodeRepository repEps = new AnimeEpisodeRepository();
1043+
AnimeEpisode ep = repEps.GetByID(aep);
1044+
string slugID = "";
1045+
int season = 0;
1046+
int epNumber = 0;
1047+
int? traktID = GetTraktEpisodeIdV2(ep, ref slugID, ref season, ref epNumber);
1048+
//2.generate json
1049+
if (traktID == null && traktID > 0)
10401050
{
1041-
case ScrobblePlayingType.episode:
1042-
TraktV2ScrobbleEpisode showE = new TraktV2ScrobbleEpisode();
1043-
showE.Init(progress, traktid);
1044-
json = JSONHelper.Serialize<TraktV2ScrobbleEpisode>(showE);
1045-
break;
1046-
case ScrobblePlayingType.movie:
1047-
TraktV2ScrobbleMovie showM = new TraktV2ScrobbleMovie();
1048-
showM.Init(progress, slug);
1049-
json = JSONHelper.Serialize<TraktV2ScrobbleMovie>(showM);
1050-
break;
1051-
}
1051+
switch (scrobbleType)
1052+
{
1053+
case ScrobblePlayingType.episode:
1054+
TraktV2ScrobbleEpisode showE = new TraktV2ScrobbleEpisode();
1055+
showE.Init(progress, traktID, slugID, season, epNumber);
1056+
json = JSONHelper.Serialize<TraktV2ScrobbleEpisode>(showE);
1057+
break;
10521058

1053-
string retData = string.Empty;
1054-
int response = SendData(url, json, "POST", BuildRequestHeaders(), ref retData);
1059+
//do we have any movies that work?
1060+
case ScrobblePlayingType.movie:
1061+
TraktV2ScrobbleMovie showM = new TraktV2ScrobbleMovie();
1062+
json = JSONHelper.Serialize<TraktV2ScrobbleMovie>(showM);
1063+
showM.Init(progress, slugID, traktID.ToString());
1064+
break;
1065+
}
1066+
//3. send Json
1067+
string retData = string.Empty;
1068+
int response = SendData(url, json, "POST", BuildRequestHeaders(), ref retData);
1069+
}
1070+
else
1071+
{
1072+
//3. nothing to send log error
1073+
logger.Warn("TraktTVHelper.Scrobble: No TraktID found for: " + "AnimeEpisodeID: " + aep.ToString() + " AnimeRomajiName: " + ep.AniDB_Episode.RomajiName);
1074+
return 404;
1075+
}
1076+
return 200;
10551077
}
10561078
catch (Exception ex)
10571079
{
10581080
logger.ErrorException("Error in TraktTVHelper.Scrobble: " + ex.ToString(), ex);
1081+
return 500;
10591082
}
10601083
}
10611084
#endregion
10621085

1063-
#region Get Data From Trakt
1086+
#region Get Data From Trakt
10641087

10651088
public static List<TraktV2SearchShowResult> SearchShowV2(string criteria)
10661089
{

0 commit comments

Comments
 (0)