Skip to content

Commit

Permalink
Organize Movies #1
Browse files Browse the repository at this point in the history
  • Loading branch information
softworkz committed Sep 28, 2015
1 parent c8803d5 commit 5c23daa
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 9 deletions.
8 changes: 8 additions & 0 deletions MediaBrowser.Model/FileOrganization/FileOrganizationResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,14 @@ public class FileOrganizationResult
/// <value>The size of the file.</value>
public long FileSize { get; set; }

public string ExtractedVideoName { get; set; }

/// <summary>
/// Gets or sets the extracted video year.
/// </summary>
/// <value>The extracted video year.</value>
public int? ExtractedVideoYear { get; set; }

public FileOrganizationResult()
{
DuplicatePaths = new List<string>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ public async Task<FileOrganizationResult> OrganizeEpisodeFile(string path, AutoO
};

var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions();

var videoResolver = new Naming.Video.VideoResolver(namingOptions, new PatternsLogger());
var videoInfo = videoResolver.Resolve(path, false);
if (videoInfo != null)
{
result.ExtractedVideoName = videoInfo.Name;
result.ExtractedVideoYear = videoInfo.Year;
}

var resolver = new Naming.TV.EpisodeResolver(namingOptions, new PatternsLogger());

var episodeInfo = resolver.Resolve(path, false) ??
Expand Down Expand Up @@ -128,7 +137,7 @@ public async Task<FileOrganizationResult> OrganizeEpisodeFile(string path, AutoO
return previousResult;
}
}

await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false);

return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,28 @@ public async Task Initialize()

_connection.RunQueries(queries, Logger);

// Sqlite does not have an easy method to check for existance of columns.
// Thus, the easiest solution is to try add and eat up the exception
try
{
_connection.RunQueries(new[] { "alter table FileOrganizerResults add column ExtractedVideoName TEXT" }, new NullLogger());
}
catch { }

try
{
_connection.RunQueries(new[] { "alter table FileOrganizerResults add column ExtractedVideoYear INT NUll" }, new NullLogger());
}
catch { }


PrepareStatements();
}

private void PrepareStatements()
{
_saveResultCommand = _connection.CreateCommand();
_saveResultCommand.CommandText = "replace into FileOrganizerResults (ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths) values (@ResultId, @OriginalPath, @TargetPath, @FileLength, @OrganizationDate, @Status, @OrganizationType, @StatusMessage, @ExtractedName, @ExtractedYear, @ExtractedSeasonNumber, @ExtractedEpisodeNumber, @ExtractedEndingEpisodeNumber, @DuplicatePaths)";
_saveResultCommand.CommandText = "replace into FileOrganizerResults (ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths, ExtractedVideoName, ExtractedVideoYear) values (@ResultId, @OriginalPath, @TargetPath, @FileLength, @OrganizationDate, @Status, @OrganizationType, @StatusMessage, @ExtractedName, @ExtractedYear, @ExtractedSeasonNumber, @ExtractedEpisodeNumber, @ExtractedEndingEpisodeNumber, @DuplicatePaths, @ExtractedVideoName, @ExtractedVideoYear)";

_saveResultCommand.Parameters.Add(_saveResultCommand, "@ResultId");
_saveResultCommand.Parameters.Add(_saveResultCommand, "@OriginalPath");
Expand All @@ -76,6 +91,8 @@ private void PrepareStatements()
_saveResultCommand.Parameters.Add(_saveResultCommand, "@ExtractedEpisodeNumber");
_saveResultCommand.Parameters.Add(_saveResultCommand, "@ExtractedEndingEpisodeNumber");
_saveResultCommand.Parameters.Add(_saveResultCommand, "@DuplicatePaths");
_saveResultCommand.Parameters.Add(_saveResultCommand, "@ExtractedVideoName");
_saveResultCommand.Parameters.Add(_saveResultCommand, "@ExtractedVideoYear");

_deleteResultCommand = _connection.CreateCommand();
_deleteResultCommand.CommandText = "delete from FileOrganizerResults where ResultId = @ResultId";
Expand Down Expand Up @@ -118,7 +135,9 @@ public async Task SaveResult(FileOrganizationResult result, CancellationToken ca
_saveResultCommand.GetParameter(index++).Value = result.ExtractedSeasonNumber;
_saveResultCommand.GetParameter(index++).Value = result.ExtractedEpisodeNumber;
_saveResultCommand.GetParameter(index++).Value = result.ExtractedEndingEpisodeNumber;
_saveResultCommand.GetParameter(index).Value = string.Join("|", result.DuplicatePaths.ToArray());
_saveResultCommand.GetParameter(index++).Value = string.Join("|", result.DuplicatePaths.ToArray());
_saveResultCommand.GetParameter(index++).Value = result.ExtractedVideoName;
_saveResultCommand.GetParameter(index).Value = result.ExtractedVideoYear;

_saveResultCommand.Transaction = transaction;

Expand Down Expand Up @@ -267,7 +286,7 @@ public QueryResult<FileOrganizationResult> GetResults(FileOrganizationResultQuer

using (var cmd = _connection.CreateCommand())
{
cmd.CommandText = "SELECT ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths from FileOrganizerResults";
cmd.CommandText = "SELECT ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths, ExtractedVideoName, ExtractedVideoYear from FileOrganizerResults";

if (query.StartIndex.HasValue && query.StartIndex.Value > 0)
{
Expand Down Expand Up @@ -319,7 +338,7 @@ public FileOrganizationResult GetResult(string id)

using (var cmd = _connection.CreateCommand())
{
cmd.CommandText = "select ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths from FileOrganizerResults where ResultId=@Id";
cmd.CommandText = "select ResultId, OriginalPath, TargetPath, FileLength, OrganizationDate, Status, OrganizationType, StatusMessage, ExtractedName, ExtractedYear, ExtractedSeasonNumber, ExtractedEpisodeNumber, ExtractedEndingEpisodeNumber, DuplicatePaths, ExtractedVideoName, ExtractedVideoYear from FileOrganizerResults where ResultId=@Id";

cmd.Parameters.Add(cmd, "@Id", DbType.Guid).Value = guid;

Expand Down Expand Up @@ -412,7 +431,19 @@ public FileOrganizationResult GetResult(IDataReader reader)
result.DuplicatePaths = reader.GetString(index).Split('|').Where(i => !string.IsNullOrEmpty(i)).ToList();
}

return result;
index++;
if (!reader.IsDBNull(index))
{
result.ExtractedVideoName = reader.GetString(index);
}

index++;
if (!reader.IsDBNull(index))
{
result.ExtractedVideoYear = reader.GetInt32(index);
}

return result;
}

protected override void CloseConnection()
Expand Down
48 changes: 45 additions & 3 deletions MediaBrowser.WebDashboard/dashboard-ui/autoorganizelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,20 @@
<div data-role="popup" class="popup episodeCorrectionPopup">

<div class="ui-bar-a" style="text-align: center; padding: 0 20px;">
<h3>${HeaderEpisodeOrganization}</h3>
<h3>Organize Manually</h3>
</div>

<div data-role="content">
<paper-tabs hidescrollbuttons>
<paper-tab class="episodeTabButton">TV Episode</paper-tab>
<paper-tab class="movieTabButton">Movie</paper-tab>
</paper-tabs>

<div class="editorTab" data-role="content">
<form class="episodeCorrectionForm">

<p><span class="inputFile"></span></p>

<div style="margin: 1em 0 1em; min-width: 250px;">
<div style="margin: 1em 0 1em; min-width: 350px;">
<label for="selectSeries">${LabelSeries}</label>
<select id="selectSeries" data-mini="true" required="required"></select>
</div>
Expand Down Expand Up @@ -99,6 +104,43 @@ <h3>${HeaderEpisodeOrganization}</h3>
</form>
</div>

<div class="editorTab" data-role="content">
<form class="organizeMovieForm">

<p><span class="inputFile"></span></p>

<div style="margin: 1em 0 1em; min-width: 350px;">
<label for="txtVideoName">Movie</label>
<input id="txtVideoName" required="required" min="0" />
</div>
<div style="margin: 1em 0;">
<label for="txtVideoYear">Year</label>
<input id="txtVideoYear" type="number" pattern="[0-9]*" min="0" />
</div>

<div style="margin: 1em 0;">
<button type="button" data-icon="info" onclick="$(this).parents('.popup').popup('close');" data-mini="true">
${ButtonIdentify}
</button>
</div>

<div style="margin: 1em 0 1em;">
<label for="txtSelectedVideo">Selected Movie</label>
<input id="txtSelectedVideo" required="required" min="0" />
</div>

<p>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" data-icon="delete" onclick="$(this).parents('.popup').popup('close');" data-mini="true">
${ButtonCancel}
</button>
</p>
<input id="hfResultId" type="hidden" />
</form>
</div>

</div>
</div>
</body>
Expand Down
62 changes: 62 additions & 0 deletions MediaBrowser.WebDashboard/dashboard-ui/scripts/autoorganizelog.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@

$('#hfResultId', popup).val(item.Id);

$('#txtVideoName', popup).val(item.ExtractedVideoName);
$('#txtVideoYear', popup).val(item.ExtractedVideoYear);

var seriesHtml = allSeries.map(function (s) {

return '<option value="' + s.Id + '">' + s.Name + '</option>';
Expand Down Expand Up @@ -342,6 +345,44 @@
return false;
}

function onOrganizeMovieFormFormSubmit() {
//submitEpisodeForm(this);
return false;
}

function configurePaperLibraryTabs(ownerpage, tabs) {

tabs.hideScrollButtons = true;
tabs.noSlide = true;

// Unfortunately we can't disable this because it causes iron-select to not fire in IE and Safari.
//tabs.noink = true;

$(ownerpage).on('pageshowready', function () {

var selected = tabs.selected;

if (selected == null) {

Logger.log('selected tab is null, checking query string');

selected = parseInt(getParameterByName('tab') || '0');

Logger.log('selected tab will be ' + selected);

tabs.selected = selected;

} else {
Events.trigger(tabs, 'tabchange');
}
});
}

function showTab(page, index) {

$('.editorTab', page).addClass('hide')[index].classList.remove('hide');
}

$(document).on('pageinit', "#libraryFileOrganizerLogPage", function () {

var page = this;
Expand All @@ -355,6 +396,27 @@
});

$('.episodeCorrectionForm').off('submit', onEpisodeCorrectionFormSubmit).on('submit', onEpisodeCorrectionFormSubmit);
$('.organizeMovieForm').off('submit', onOrganizeMovieFormFormSubmit).on('submit', onOrganizeMovieFormFormSubmit);

var tabs = page.querySelector('paper-tabs');

configurePaperLibraryTabs(page, tabs);

$(tabs).on('iron-select', function () {

var self = this;

setTimeout(function () {
Events.trigger(self, 'tabchange');
}, 400);

}).on('tabchange', function () {
var selected = this.selected;

showTab(page, selected);
});



}).on('pageshow', "#libraryFileOrganizerLogPage", function () {

Expand Down

0 comments on commit 5c23daa

Please sign in to comment.