def listing(show=None): create_token() if show is None: show = request.cookies.get('show', 'all') if show == 'watched': episodes = Episode.query.filter( Episode.serie_id.in_( x.id for x in current_user.favorite_series ), Episode.id.in_( x.id for x in current_user.watched_episodes ), Episode.air_time != None ).order_by(Episode.air_time) elif show == 'unwatched': episodes = Episode.query.filter( Episode.serie_id.in_( x.id for x in current_user.favorite_series ), ~Episode.id.in_( x.id for x in current_user.watched_episodes ), Episode.air_time != None ).order_by(Episode.air_time) else: episodes = Episode.query.filter( Episode.serie_id.in_( x.id for x in current_user.favorite_series ), Episode.air_time != None ).order_by(Episode.air_time) if episodes.count() <= 0: flash('You have no shows in your watchlist! \ Add some of the popular ones or use search!', 'warning') return redirect(url_for('shows')) aired_eps = [] upcoming_eps = [] for e in episodes: if e.runtime < datetime.now(): aired_eps.append(e) else: upcoming_eps.append(e) resp = make_response(render_template( 'listing.html', aired_eps=aired_eps, upcoming_eps=upcoming_eps, today=datetime.now(), show=show)) resp.set_cookie('show', show) return resp
def showSeries(id): create_token() series = Serie.query.get_or_404(id) try: seasonCount = int(db.session.query(func.max(Episode.seas_num)).\ filter(Episode.serie == series).scalar()) except: seasonCount = 0 season = int(request.args.get('season', seasonCount)) season_list = Episode.query.filter_by(serie=series, seas_num=season).all() if not series.last_update: flash('This show does not contain all informations. \ It will be updated soon.', 'warning') return render_template('series/detail.html', series=series, \ seasonCount=seasonCount, season=season, season_list=season_list, \ today=today.strftime('%Y%m%d'))
def search(): create_token() q = request.args.get('q', None) series = () found_series = () if q is None: flash('Please add more constraints to your search!', 'warning') elif len(q) < 3: flash('Please enter at least 3 characters!', 'warning') else: series = Serie.query.filter(Serie.name.like(\ ('%s%s%s' % ('%', q, '%')))).all() if current_user.is_authenticated(): found_series = searchFor(q)[:10] return render_template('search.html', q=q, series=series, \ found_series=found_series)
def watchlist(): create_token() episodes = Episode.query.subquery() userseries = UserSerie.query.subquery() # Get the min air time for each of the favorite series. min_air_times = db.session.query( Serie.id.label('serie_id'), db.func.min(episodes.c.id).label('id') ).filter( Serie.id.in_(x.id for x in current_user.favorite_series) ).outerjoin( userseries, Serie.id == userseries.c.serie_id ).outerjoin( episodes, Serie.id == episodes.c.serie_id ).filter( ~episodes.c.id.in_(x.id for x in current_user.watched_episodes) ).filter( episodes.c.seas_num != 0 ).order_by( desc(userseries.c.last_watched) ).group_by( Serie.id ).subquery() # Select the serie and episode. shows = db.session.query( Serie, Episode ).join( Episode, Episode.serie_id == Serie.id ).join( min_air_times, db.and_( min_air_times.c.serie_id == Serie.id, min_air_times.c.id == Episode.id ) ).all() return render_template('watchlist.html', shows=shows, today=datetime.now())
def shows(sort=None): create_token() if sort is None: sort = request.cookies.get('sort', 'fans') if sort == 'name': sub = db.session.query(UserSerie.serie_id, func.count( UserSerie.user_id).label('count')).group_by( UserSerie.serie_id ).subquery() shows = db.session.query(Serie, sub.c.count).outerjoin( sub, Serie.id == sub.c.serie_id ).order_by( Serie.name) elif sort == 'first': sub = db.session.query(UserSerie.serie_id, func.count( UserSerie.user_id).label('count')).group_by( UserSerie.serie_id ).subquery() shows = db.session.query(Serie, sub.c.count).outerjoin( sub, Serie.id == sub.c.serie_id ).order_by( db.desc(Serie.first_aired)) else: sub = db.session.query(UserSerie.serie_id, func.count( UserSerie.user_id).label('count')).group_by( UserSerie.serie_id ).subquery() shows = db.session.query(Serie, sub.c.count).outerjoin( sub, Serie.id == sub.c.serie_id ).order_by(db.desc('count')) resp = make_response(render_template( 'shows.html', shows=shows, today=datetime.now(), sort=sort)) resp.set_cookie('sort', sort) return resp
def showEpisode(id): create_token() episode = Episode.query.get_or_404(id) return render_template('episode/detail.html', episode=episode)