You've already forked Sonarr
							
							
				mirror of
				https://github.com/Sonarr/Sonarr.git
				synced 2025-10-31 00:07:55 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| define(
 | |
|     [
 | |
|         'app',
 | |
|         'marionette',
 | |
|         'moment',
 | |
|         'Calendar/Collection',
 | |
|         'fullcalendar'
 | |
|     ], function (App, Marionette, Moment, CalendarCollection, EpisodeLayout) {
 | |
| 
 | |
|         var _instance;
 | |
| 
 | |
|         return Marionette.ItemView.extend({
 | |
|             initialize: function () {
 | |
|                 this.collection = new CalendarCollection();
 | |
|             },
 | |
|             render    : function () {
 | |
|                 $(this.$el).empty().fullCalendar({
 | |
|                     defaultView   : 'basicWeek',
 | |
|                     allDayDefault : false,
 | |
|                     ignoreTimezone: false,
 | |
|                     weekMode      : 'variable',
 | |
|                     timeFormat    : 'h(:mm)tt',
 | |
|                     header        : {
 | |
|                         left  : 'prev,next today',
 | |
|                         center: 'title',
 | |
|                         right : 'month,basicWeek'
 | |
|                     },
 | |
|                     buttonText    : {
 | |
|                         prev: '<i class="icon-arrow-left"></i>',
 | |
|                         next: '<i class="icon-arrow-right"></i>'
 | |
|                     },
 | |
|                     events        : this.getEvents,
 | |
|                     eventRender   : function (event, element) {
 | |
|                         $(element).addClass(event.statusLevel);
 | |
|                         $(element).children('.fc-event-inner').addClass(event.statusLevel);
 | |
|                     },
 | |
|                     eventClick    : function (event) {
 | |
|                         var view = new EpisodeLayout({ model: event.model });
 | |
|                         App.modalRegion.show(view);
 | |
|                     }
 | |
|                 });
 | |
| 
 | |
|                 _instance = this;
 | |
|             },
 | |
| 
 | |
|             onShow: function () {
 | |
|                 this.$('.fc-button-today').click();
 | |
|             },
 | |
| 
 | |
|             getEvents: function (start, end, callback) {
 | |
|                 var startDate = Moment(start).toISOString();
 | |
|                 var endDate = Moment(end).toISOString();
 | |
| 
 | |
|                 _instance.collection.fetch({
 | |
|                     data   : { start: startDate, end: endDate },
 | |
|                     success: function (calendarCollection) {
 | |
|                         _.each(calendarCollection.models, function (element) {
 | |
|                             var episodeTitle = element.get('title');
 | |
|                             var seriesTitle = element.get('series').get('title');
 | |
|                             var start = element.get('airDate');
 | |
|                             var statusLevel = _instance.getStatusLevel(element);
 | |
| 
 | |
|                             element.set({
 | |
|                                 title       : seriesTitle,
 | |
|                                 episodeTitle: episodeTitle,
 | |
|                                 start       : start,
 | |
|                                 allDay      : false,
 | |
|                                 statusLevel : statusLevel
 | |
|                             });
 | |
| 
 | |
|                             element.set('model', element);
 | |
|                         });
 | |
| 
 | |
|                         callback(calendarCollection.toJSON());
 | |
|                     }
 | |
|                 });
 | |
|             },
 | |
| 
 | |
|             getStatusLevel: function (element) {
 | |
|                 var hasFile = element.get('hasFile');
 | |
|                 var currentTime = Moment();
 | |
|                 var start = Moment(element.get('airDate'));
 | |
|                 var end = Moment(element.get('end'));
 | |
| 
 | |
|                 var statusLevel = 'primary';
 | |
| 
 | |
|                 if (currentTime.isAfter(start) && currentTime.isBefore(end)) {
 | |
|                     statusLevel = 'warning';
 | |
|                 }
 | |
| 
 | |
|                 else if (start.isBefore(currentTime) && !hasFile) {
 | |
|                     statusLevel = 'danger';
 | |
|                 }
 | |
| 
 | |
|                 else if (hasFile) {
 | |
|                     statusLevel = 'success';
 | |
|                 }
 | |
| 
 | |
|                 var test = currentTime.startOf('day').format('LLLL');
 | |
| 
 | |
|                 if (end.isBefore(currentTime.startOf('day'))) {
 | |
|                     statusLevel += ' past'
 | |
|                 }
 | |
| 
 | |
|                 return statusLevel;
 | |
|             }
 | |
|         });
 | |
|     });
 |