Existing series looks like add new series now

This commit is contained in:
Mark McDowall 2013-04-04 23:24:23 -07:00
parent 91cc65bae2
commit 900122c265
15 changed files with 70 additions and 127 deletions

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NzbDrone.Core.MediaCover;
using NzbDrone.Core.MetadataSource.Trakt;
@ -60,7 +61,7 @@ namespace NzbDrone.Core.MetadataSource
series.TitleSlug = show.url.ToLower().Replace("http://trakt.tv/show/", "");
series.Images.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Banner, Url = show.images.banner });
series.Images.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Poster, Url = show.images.poster });
series.Images.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Poster, Url = GetPosterThumbnailUrl(show.images.poster) });
series.Images.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Fanart, Url = show.images.fanart });
return series;
}
@ -79,6 +80,11 @@ namespace NzbDrone.Core.MetadataSource
return episode;
}
private static string GetPosterThumbnailUrl(string posterUrl)
{
var extension = Path.GetExtension(posterUrl);
var withoutExtension = posterUrl.Substring(0, posterUrl.Length - extension.Length);
return withoutExtension + "-138" + extension;
}
}
}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<file url="PROJECT" libraries="{jQuery-1.9.1, libraries}" />
<file url="PROJECT" libraries="{libraries}" />
</component>
</project>

View File

@ -1,9 +0,0 @@
<div class="line row folder-match-result-view">
<div class="span6">
{{title}} {{seriesYear}}
</div>
<div class="btn btn-success x-btn-add">
<icon class="icon-plus "></icon>
</div>
</div>

View File

@ -2,9 +2,9 @@
define([
'app', 'AddSeries/RootFolders/RootFolderCollection', 'Quality/QualityProfileCollection', 'Shared/NotificationCollection', 'AddSeries/Existing/UnmappedFolderModel', 'AddSeries/SearchResultCollection', 'Series/SeriesModel'], function (app, rootFolders, qualityProfileCollection, notificationCollection) {
NzbDrone.AddSeries.Existing.FolderMatchResultView = Backbone.Marionette.ItemView.extend({
template: 'AddSeries/Existing/FolderMatchResultViewTemplate',
template: 'AddSeries/SearchResultTemplate',
className: 'search-item',
events: {
'click .x-btn-add': 'addSeries'
@ -26,7 +26,6 @@ define([
path : path
});
var seriesCollection = new NzbDrone.Series.SeriesCollection();
seriesCollection.add(model);
@ -44,17 +43,18 @@ define([
}
});
}
});
NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView = Backbone.Marionette.CompositeView.extend({
template : 'AddSeries/Existing/UnmappedFolderCompositeViewTemplate',
itemViewContainer: '.x-folder-name-match-results',
className : 'unmapped-folder-view',
itemView : NzbDrone.AddSeries.Existing.FolderMatchResultView,
events: {
'click .x-btn-search': 'search'
'click .x-btn-search': 'search',
'keydown .x-txt-search': 'keydown'
},
ui: {
@ -64,20 +64,25 @@ define([
},
initialize: function () {
this.collection = new NzbDrone.AddSeries.SearchResultCollection();
this.collection = new NzbDrone.Series.SeriesCollection();
this.collection.bind('reset', this.collectionReset, this);
},
onRender: function () {
this.collection.url = NzbDrone.Constants.ApiRoot + '/series/lookup';
this.resultView = new NzbDrone.AddSeries.SearchResultView({ collection: this.collection });
},
search: function () {
var icon = this.ui.searchButton.find('icon');
this.collection.reset();
icon.removeClass('icon-search').addClass('icon-spin icon-spinner disabled');
this.collection.fetch({
data : { term: this.ui.searchText.val() },
success: function () {
success: function (collection) {
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
},
fail : function () {
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
@ -85,6 +90,19 @@ define([
});
},
keydown: function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if(code === 13) {
this.search();
}
},
collectionReset: function () {
_.each(this.collection.models, function (model){
model.set('isExisting', true);
});
},
itemViewOptions: function () {
return {
qualityProfile: this.ui.profileList,
@ -92,15 +110,13 @@ define([
folder : this.model.get('folder')
};
}
});
NzbDrone.AddSeries.Existing.RootFolderCompositeView = Backbone.Marionette.CompositeView.extend({
template : "AddSeries/Existing/RootFolderCompositeViewTemplate",
itemViewContainer: ".x-existing-folder-container",
className : 'row',
itemView : NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView,
initialize: function () {
@ -117,9 +133,6 @@ define([
refreshItems: function () {
this.collection.importItems(this.model);
}
});
NzbDrone.AddSeries.Existing.ImportSeriesView = Backbone.Marionette.CollectionView.extend({
@ -129,6 +142,5 @@ define([
initialize: function () {
this.collection = rootFolders;
}
});
});

View File

@ -1,7 +1,6 @@
<div class="row">
<div class="accordion result-list span12 existing-root-folder-view">
<h1>{{path}}</h1>

<div class="result-list span12 existing-root-folder-view">
<h1>{{path}}</h1>
<div class="x-existing-folder-container"/>
</div>
<div class="x-existing-folder-container"/>
</div>

View File

@ -1,21 +1,15 @@
"use strict";
<div class="row unmapped-folder-view">
<div class="span11">
<div class="row folder-header">
<div class="row">
<div class="folder-header span11">
<div class="input-prepend">
<i class="add-on icon-search"></i>
<input class="x-txt-search input-xlarge" type="text" value="{{folder.name}}" placeholder="{{folder.name}}">
<select class="span2 x-lst-quality-profile">
{{#each quality.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
</select>
<div class="btn btn-primary x-btn-search pull-right">
<icon class="icon-search "></icon>
</div>
<div class="row">
<div class="x-folder-name-match-results folder-name-matches span11"/>
</div>
</div>
<div class="btn btn-primary x-btn-search pull-right">
<icon class="icon-search "></icon>
</div>
</div>
</div>
<div class="row">
<div class="x-folder-name-match-results folder-name-matches"/>
</div>

View File

@ -1,11 +1,9 @@
<div class="tab-pane" id="add-new">
<div class="row">
<div class="input-prepend nz-input-large search span11">
<i class="add-on icon-search"></i>
<input type="text" class="input-block-level" placeholder="Start typing the name of series you want to add ...">
</div>
</div>
<div class="row">
<div id="search-result" class="result-list span12"/>
<div class="row">
<div class="input-prepend nz-input-large search span11">
<i class="add-on icon-search"></i>
<input type="text" class="input-block-level" placeholder="Start typing the name of series you want to add ...">
</div>
</div>
<div class="row">
<div id="search-result" class="result-list span12"/>
</div>

View File

@ -47,7 +47,6 @@ define(['app', 'AddSeries/RootFolders/RootFolderCollection', 'AddSeries/New/Sear
context.searchResult.show(context.resultView);
}
});
}
},

View File

@ -3,7 +3,7 @@ define(['app', 'Shared/NotificationCollection', 'AddSeries/SearchResultCollectio
NzbDrone.AddSeries.New.SearchItemView = Backbone.Marionette.ItemView.extend({
template : "AddSeries/New/SearchResultTemplate",
template : "AddSeries/SearchResultTemplate",
className: 'search-item',
ui: {
@ -51,7 +51,6 @@ define(['app', 'Shared/NotificationCollection', 'AddSeries/SearchResultCollectio
NzbDrone.AddSeries.SearchResultView = Backbone.Marionette.CollectionView.extend({
itemView : NzbDrone.AddSeries.New.SearchItemView,
className : 'accordion',
initialize: function () {
this.listenTo(this.collection, 'reset', this.render);
}

View File

@ -1,10 +0,0 @@
"use strict";
define(['app', 'AddSeries/SearchResultModel'], function () {
NzbDrone.AddSeries.SearchResultCollection = Backbone.Collection.extend({
url : NzbDrone.Constants.ApiRoot + '/series/lookup',
model: NzbDrone.AddSeries.SearchResultModel
});
});

View File

@ -1,36 +0,0 @@
"use strict";
define(['app', 'AddSeries/RootFolders/RootFolderCollection', 'Quality/QualityProfileCollection'],
function (app, rootFolderCollection, qualityProfileCollection) {
NzbDrone.AddSeries.SearchResultModel = Backbone.Model.extend({
mutators: {
seriesYear: function () {
var date = Date.utc.create(this.get('firstAired')).format('({yyyy})');
//don't append year, if the series name already has the name appended.
if (this.get('title').endsWith(date)) {
return "";
} else {
return date;
}
},
banner : function () {
var banner = _.find(this.get('images'), function (image) {
return image.coverType === 1;
});
return banner.url;
},
traktUrl : function () {
return "http://trakt.tv/show/" + this.get('titleSlug');
}
},
defaults: {
qualityProfiles: qualityProfileCollection,
rootFolders : rootFolderCollection
}
});
});

View File

@ -1,17 +1,19 @@
<div class="row">
<div class="span2">
<a href="{{traktUrl}}" target="_blank">
<img class="series-poster img-polaroid" src="{{smallPoster}}">
<img class="series-poster img-polaroid" src="{{poster}}">
</a>
</div>
<div class="span9">
<div class="row">
<select class="span6 x-root-folder">
{{#each rootFolders.models}}
<option value="{{id}}">{{attributes.path}}</option>
{{/each}}
</select>
{{#unless isExisting}}
<select class="span6 x-root-folder">
{{#each rootFolders.models}}
<option value="{{id}}">{{attributes.path}}</option>
{{/each}}
</select>
{{/unless}}
<select class="span2 x-quality-profile">
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>

View File

@ -22,7 +22,6 @@
}
.search-item {
padding-right: 5px;
padding-bottom: 20px;
}
@ -47,7 +46,6 @@
.unmapped-folder-view .folder-header {
font-weight: 300;
padding-left: 20px;
}
.unmapped-folder-view .folder-header input {

View File

@ -1,7 +1,4 @@
<!--<div class="alert alert-info">
<strong>Heads up!</strong> you need to add at least one TV folder.
</div>-->
<ul class="nav nav-tabs" id="myTab">
<ul class="nav nav-tabs" id="myTab">
<li><a href="#add-new" class="x-add-new-tab">Add New Series</a></li>
<li><a href="#import-existing" class="x-import-existing-tab">Import Existing Series</a></li>
<li><a href="#root-folders" class="x-root-folders-tab">TV Folders</a></li>

View File

@ -31,13 +31,6 @@
return undefined;
},
smallPoster : function () {
var poster = this.get('poster');
var extension = '.' + poster.split('.').pop();
var withoutExtension = poster.substring(0, poster.length - extension.length);
return withoutExtension + '-138' + extension;
},
traktUrl : function () {
return "http://trakt.tv/show/" + this.get('titleSlug');
}
@ -47,7 +40,8 @@
episodeFileCount: 0,
episodeCount : 0,
qualityProfiles : qualityProfileCollection,
rootFolders : rootFolders
rootFolders : rootFolders,
isExisting : false
}
});