Пример #1
0
        //TODO: Event based and asynch
        public bool AddShow(string userName, string sourceId)
        {
            var user = _session.Load<User>(User.IdFromUserName(userName));

            if (user == null || user.WatchList == null || user.WatchList.Shows == null)
                return false;

            if (user.WatchList == null)
                user.WatchList = new WatchList();

            var shows = user.WatchList.Shows == null
                            ? new List<WatchListShow>()
                            : new List<WatchListShow>(user.WatchList.Shows);

            //We already have this show
            if (shows.Any(x => x.SourceId.Equals(sourceId)))
                return true;

            var source = new DbShowSource(_session);
            var sourceShow = source.GetById(sourceId);

            if (sourceShow == null)
            {
                //Try seeding it, this should be asynch later with reporting back
                var updater = new ShowUpdater(_session, _eventSink);
                updater.SeedShow(sourceId);
                sourceShow = source.GetById(sourceId);
                if (sourceShow == null)
                    return false;
            }

            var wl = new WatchListShow
            {
                SourceId = sourceShow.SourceId,
                ShowName = sourceShow.Name,
                LastWatchedEpisode = null,
                FirstUnwatchedEpisode = Map(sourceShow.FirstEpisode)
            };
            shows.Add(wl);
            user.WatchList.Shows = shows.ToArray();

            _session.Store(user);
            _eventSink("watchlist"); //TODO: Scope to this user
            return true;
        }
Пример #2
0
        public bool SetEpisodeWatched(string userName, string sourceId)
        {
            var user = _session.Load<User>(User.IdFromUserName(userName));

            if (user == null || user.WatchList == null || user.WatchList.Shows == null)
                return false;

            var show = user
                .WatchList
                .Shows
                .Single(x => x.SourceId.Equals(sourceId));

            var current = show.FirstUnwatchedEpisode;
            if (current == null)
                return false;

            var source = new DbShowSource(_session);
            var sourceShow = source.GetById(sourceId);
            if (sourceShow == null)
                return false;

            show.LastWatchedEpisode = current;
            show.FirstUnwatchedEpisode =
                Map(
                    sourceShow
                    .GetFirstEpisodeAfter(current.SeasonNo, current.InSeasonEpisodeNo));

            _session.Store(user);

            return true;
        }
Пример #3
0
        public bool SetSeasonWatched(string userName, string sourceId)
        {
            var user = _session.Load<User>(User.IdFromUserName(userName));

            if (user == null || user.WatchList == null || user.WatchList.Shows == null)
                return false;

            var show = user
                .WatchList
                .Shows
                .Single(x => x.SourceId.Equals(sourceId));

            var source = new DbShowSource(_session);
            var sourceShow = source.GetById(sourceId);
            if (sourceShow == null)
                return false;

            var currentSeasonNo = show.FirstUnwatchedEpisode.SeasonNo;
            var lastEpisodeOfSeason =
                sourceShow
                    .Episodes
                    .Where(x => x.SeasonNo == currentSeasonNo)
                    .OrderByDescending(x => x.InSeasonEpisodeNo)
                    .FirstOrDefault();
            if (lastEpisodeOfSeason == null)
                return false;
            var firstEpisodeOfNextSeason =
                sourceShow
                .GetFirstEpisodeAfter(lastEpisodeOfSeason.SeasonNo, lastEpisodeOfSeason.InSeasonEpisodeNo);

            show.FirstUnwatchedEpisode = Map(firstEpisodeOfNextSeason);
            show.LastWatchedEpisode = Map(lastEpisodeOfSeason);

            _session.Store(user);

            return true;
        }
Пример #4
0
        public bool SetLastWatchedTo(string userName, string sourceId, int seasonNo, int episodeNo)
        {
            var user = _session.Load<User>(User.IdFromUserName(userName));

            if (user == null || user.WatchList == null || user.WatchList.Shows == null)
                return false;

            var show = user
                .WatchList
                .Shows
                .Single(x => x.SourceId.Equals(sourceId));

            var source = new DbShowSource(_session);
            var sourceShow = source.GetById(sourceId);
            if (sourceShow == null)
                return false;

            var lastWatchedEpisode = sourceShow
                .Episodes
                .Where(x => x.SeasonNo == seasonNo && x.InSeasonEpisodeNo == episodeNo)
                .SingleOrDefault();
            if (lastWatchedEpisode == null)
                return false;

            var firstUnwatched = sourceShow.GetFirstEpisodeAfter(seasonNo, episodeNo);

            show.FirstUnwatchedEpisode = Map(firstUnwatched);
            show.LastWatchedEpisode = Map(lastWatchedEpisode);

            _session.Store(user);

            return true;
        }