diff --git a/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb b/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb
index 7c04bf0af..9c8051285 100644
--- a/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb
+++ b/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb
@@ -1757,7 +1757,7 @@ Public Class FileFolderRenamer
If _DBM.ImagesContainer.Landscape.LocalFilePathSpecified Then _DBM.ImagesContainer.Landscape.LocalFilePath = Path.Combine(Directory.GetParent(_DBM.ImagesContainer.Landscape.LocalFilePath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.ImagesContainer.Landscape.LocalFilePath).Replace(oldFile, newFile))
If _DBM.ImagesContainer.Poster.LocalFilePathSpecified Then _DBM.ImagesContainer.Poster.LocalFilePath = Path.Combine(Directory.GetParent(_DBM.ImagesContainer.Poster.LocalFilePath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.ImagesContainer.Poster.LocalFilePath).Replace(oldFile, newFile))
If _DBM.NfoPathSpecified Then _DBM.NfoPath = Path.Combine(Directory.GetParent(_DBM.NfoPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.NfoPath).Replace(oldFile, newFile))
- If _DBM.ThemePathSpecified Then _DBM.ThemePath = Path.Combine(Directory.GetParent(_DBM.ThemePath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.ThemePath).Replace(oldFile, newFile))
+ If Not String.IsNullOrEmpty(_DBM.Theme.LocalFilePath) Then _DBM.Theme.LocalFilePath = Path.Combine(Directory.GetParent(_DBM.Theme.LocalFilePath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.Theme.LocalFilePath).Replace(oldFile, newFile))
If Not String.IsNullOrEmpty(_DBM.Trailer.LocalFilePath) Then _DBM.Trailer.LocalFilePath = Path.Combine(Directory.GetParent(_DBM.Trailer.LocalFilePath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.Trailer.LocalFilePath).Replace(oldFile, newFile))
If _DBM.ImagesContainer.Extrafanarts.Count > 0 Then
For Each eImg In _DBM.ImagesContainer.Extrafanarts.Where(Function(f) f.LocalFilePathSpecified)
@@ -1800,7 +1800,7 @@ Public Class FileFolderRenamer
If _DBE.ImagesContainer.Poster.LocalFilePathSpecified Then _DBE.ImagesContainer.Poster.LocalFilePath = _DBE.ImagesContainer.Poster.LocalFilePath.Replace(oldPath, newPath)
If _DBE.NfoPathSpecified Then _DBE.NfoPath = _DBE.NfoPath.Replace(oldPath, newPath)
If _DBE.ShowPathSpecified Then _DBE.ShowPath = _DBE.ShowPath.Replace(oldPath, newPath)
- If _DBE.ThemePathSpecified Then _DBE.ThemePath = _DBE.ThemePath.Replace(oldPath, newPath)
+ If Not String.IsNullOrEmpty(_DBE.Theme.LocalFilePath) Then _DBE.Theme.LocalFilePath = _DBE.Theme.LocalFilePath.Replace(oldPath, newPath)
If _DBE.SubtitlesSpecified Then
For Each subtitle In _DBE.Subtitles.Where(Function(f) f.SubsPathSpecified)
subtitle.SubsPath = subtitle.SubsPath.Replace(oldPath, newPath)
diff --git a/Addons/scraper.GoEar.Theme/GoEar_Theme.vb b/Addons/scraper.GoEar.Theme/GoEar_Theme.vb
index 806841580..3b93c2af4 100644
--- a/Addons/scraper.GoEar.Theme/GoEar_Theme.vb
+++ b/Addons/scraper.GoEar.Theme/GoEar_Theme.vb
@@ -139,7 +139,7 @@ Public Class GoEar_Theme
End If
End Sub
- Function Scraper_Movie(ByVal DBMovie As Database.DBElement, ByRef ThemeList As List(Of Themes)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
+ Function Scraper_Movie(ByRef DBMovie As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
logger.Trace("[GoEar_Theme] [Scraper_Movie] [Start]")
Dim tGoEar As New GoEar.Scraper(DBMovie.Movie.OriginalTitle, DBMovie.ListTitle)
diff --git a/Addons/scraper.GoEar.Theme/Scraper/clsScrapeGoEar.vb b/Addons/scraper.GoEar.Theme/Scraper/clsScrapeGoEar.vb
index a31c75057..8b2cf57d5 100644
--- a/Addons/scraper.GoEar.Theme/Scraper/clsScrapeGoEar.vb
+++ b/Addons/scraper.GoEar.Theme/Scraper/clsScrapeGoEar.vb
@@ -34,7 +34,7 @@ Namespace GoEar
Shared logger As Logger = NLog.LogManager.GetCurrentClassLogger()
Private originaltitle As String
Private listtitle As String
- Private _themelist As New List(Of Themes)
+ Private _themelist As New List(Of MediaContainers.Theme)
#End Region 'Fields
@@ -51,11 +51,11 @@ Namespace GoEar
#Region "Properties"
- Public Property ThemeList() As List(Of Themes)
+ Public Property ThemeList() As List(Of MediaContainers.Theme)
Get
Return _themelist
End Get
- Set(ByVal value As List(Of Themes))
+ Set(ByVal value As List(Of MediaContainers.Theme))
_themelist = value
End Set
End Property
@@ -65,7 +65,7 @@ Namespace GoEar
#Region "Methods"
Private Sub Clear()
- _themelist = New List(Of Themes)
+ _themelist = New List(Of MediaContainers.Theme)
End Sub
Private Sub GetMovieThemes()
@@ -119,7 +119,7 @@ Namespace GoEar
tURL = String.Concat(DownloadURL, tID).Trim
If Not String.IsNullOrEmpty(tID) Then
- _themelist.Add(New Themes With {.Title = tTitle, .ID = tID, .URL = tURL, .Description = tDescription, .Duration = tDuration, .Bitrate = tBitrate, .WebURL = tWebURL})
+ _themelist.Add(New MediaContainers.Theme With {.URLAudioStream = tURL, .Description = tTitle, .Duration = tDuration, .Bitrate = tBitrate, .URLWebsite = tWebURL, .Scraper = "GoEar"})
End If
Next
End If
diff --git a/Addons/scraper.TelevisionTunes.Theme/Scraper/clsScrapeTelevisionTunes.vb b/Addons/scraper.TelevisionTunes.Theme/Scraper/clsScrapeTelevisionTunes.vb
index ba534b464..f7e582eab 100644
--- a/Addons/scraper.TelevisionTunes.Theme/Scraper/clsScrapeTelevisionTunes.vb
+++ b/Addons/scraper.TelevisionTunes.Theme/Scraper/clsScrapeTelevisionTunes.vb
@@ -31,9 +31,9 @@ Namespace TelevisionTunes
Public Class Scraper
#Region "Fields"
- Shared logger As Logger = NLog.LogManager.GetCurrentClassLogger()
+ Shared logger As Logger = LogManager.GetCurrentClassLogger()
Private originaltitle As String
- Private _themelist As New List(Of Themes)
+ Private _themelist As New List(Of MediaContainers.Theme)
#End Region 'Fields
@@ -49,11 +49,11 @@ Namespace TelevisionTunes
#Region "Properties"
- Public Property ThemeList() As List(Of Themes)
+ Public Property ThemeList() As List(Of MediaContainers.Theme)
Get
Return _themelist
End Get
- Set(ByVal value As List(Of Themes))
+ Set(ByVal value As List(Of MediaContainers.Theme))
_themelist = value
End Set
End Property
@@ -63,7 +63,7 @@ Namespace TelevisionTunes
#Region "Methods"
Private Sub Clear()
- _themelist = New List(Of Themes)
+ _themelist = New List(Of MediaContainers.Theme)
End Sub
Private Sub GetThemes()
@@ -85,7 +85,6 @@ Namespace TelevisionTunes
Dim tID As String = String.Empty
Dim tWebURL As String = String.Empty
Dim tURL As String = String.Empty
- Dim tDescription As String = String.Empty
Dim tLength As String = String.Empty
Dim tBitrate As String = String.Empty
@@ -105,7 +104,7 @@ Namespace TelevisionTunes
tURL = GetDownloadURL(tWebURL)
If Not String.IsNullOrEmpty(tURL) Then
- _themelist.Add(New Themes With {.Title = tTitle, .URL = tURL, .Description = tDescription, .Duration = tLength, .Bitrate = tBitrate, .WebURL = tWebURL})
+ _themelist.Add(New MediaContainers.Theme With {.URLAudioStream = tURL, .Description = tTitle, .Duration = tLength, .Bitrate = tBitrate, .URLWebsite = tWebURL, .Scraper = "TelevisionTunes"})
End If
Next
diff --git a/Addons/scraper.TelevisionTunes.Theme/TelevisionTunes_Theme.vb b/Addons/scraper.TelevisionTunes.Theme/TelevisionTunes_Theme.vb
index 3e451ff8a..3039b3c34 100644
--- a/Addons/scraper.TelevisionTunes.Theme/TelevisionTunes_Theme.vb
+++ b/Addons/scraper.TelevisionTunes.Theme/TelevisionTunes_Theme.vb
@@ -208,7 +208,7 @@ Public Class TelevisionTunes_Theme
End If
End Sub
- Function Scraper_Movie(ByVal DBMovie As Database.DBElement, ByRef ThemeList As List(Of Themes)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
+ Function Scraper_Movie(ByRef DBMovie As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
logger.Trace("[TelevisionTunes_Theme] [Scraper_Movie] [Start]")
Dim tTelevisionTunes As New TelevisionTunes.Scraper(DBMovie.Movie.OriginalTitle)
@@ -221,7 +221,7 @@ Public Class TelevisionTunes_Theme
Return New Interfaces.ModuleResult With {.breakChain = False}
End Function
- Function Scraper_TV(ByVal DBTV As Database.DBElement, ByRef ThemeList As List(Of Themes)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_TV.Scraper
+ Function Scraper_TV(ByRef DBTV As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_TV.Scraper
logger.Trace("[TelevisionTunes_Theme] [Scraper_TV] [Start]")
Dim tTelevisionTunes As New TelevisionTunes.Scraper(DBTV.TVShow.Title)
diff --git a/Addons/scraper.Theme.ThemeLibrary/Scraper/clsScrapeThemeLibrary.vb b/Addons/scraper.Theme.ThemeLibrary/Scraper/clsScrapeThemeLibrary.vb
index f425e2d26..96b5641ad 100644
--- a/Addons/scraper.Theme.ThemeLibrary/Scraper/clsScrapeThemeLibrary.vb
+++ b/Addons/scraper.Theme.ThemeLibrary/Scraper/clsScrapeThemeLibrary.vb
@@ -33,7 +33,7 @@ Namespace ThemeLibrary
Shared logger As Logger = LogManager.GetCurrentClassLogger()
- Private _themelist As New List(Of Themes)
+ Private _themelist As New List(Of MediaContainers.Theme)
#End Region 'Fields
@@ -48,11 +48,11 @@ Namespace ThemeLibrary
#Region "Properties"
- Public Property ThemeList() As List(Of Themes)
+ Public Property ThemeList() As List(Of MediaContainers.Theme)
Get
Return _themelist
End Get
- Set(ByVal value As List(Of Themes))
+ Set(ByVal value As List(Of MediaContainers.Theme))
_themelist = value
End Set
End Property
@@ -62,7 +62,7 @@ Namespace ThemeLibrary
#Region "Methods"
Private Sub Clear()
- _themelist = New List(Of Themes)
+ _themelist = New List(Of MediaContainers.Theme)
End Sub
Private Sub GetThemes(ByVal tDBElement As Database.DBElement)
@@ -118,7 +118,7 @@ Namespace ThemeLibrary
For ctr As Integer = 0 To sResult.Count - 1
If Master.eSettings.FileSystemValidThemeExts.Contains(Path.GetExtension(sResult.Item(ctr).Groups("URL").Value.Trim)) Then
Dim strURL As String = String.Concat(strSearchURL, "/", sResult.Item(ctr).Groups("URL").Value.Trim)
- _themelist.Add(New Themes With {.Title = tInfo.Name, .URL = strURL, .WebURL = strURL})
+ _themelist.Add(New MediaContainers.Theme With {.Description = tInfo.Name, .URLAudioStream = strURL, .URLWebsite = strURL, .Scraper = "ThemeLibrary"})
End If
Next
End If
diff --git a/Addons/scraper.Theme.ThemeLibrary/ThemeLibrary_Theme.vb b/Addons/scraper.Theme.ThemeLibrary/ThemeLibrary_Theme.vb
index 8e323521f..8863c7823 100644
--- a/Addons/scraper.Theme.ThemeLibrary/ThemeLibrary_Theme.vb
+++ b/Addons/scraper.Theme.ThemeLibrary/ThemeLibrary_Theme.vb
@@ -207,7 +207,7 @@ Public Class ThemeLibrary_Theme
End If
End Sub
- Function Scraper_Movie(ByVal DBMovie As Database.DBElement, ByRef ThemeList As List(Of Themes)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
+ Function Scraper_Movie(ByRef DBMovie As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_Movie.Scraper
logger.Trace("[ThemeLibrary_Theme] [Scraper_Movie] [Start]")
Dim tScraper As New ThemeLibrary.Scraper(DBMovie)
@@ -220,7 +220,7 @@ Public Class ThemeLibrary_Theme
Return New Interfaces.ModuleResult With {.breakChain = False}
End Function
- Function Scraper_TV(ByVal DBTV As Database.DBElement, ByRef ThemeList As List(Of Themes)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_TV.Scraper
+ Function Scraper_TV(ByRef DBTV As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult Implements Interfaces.ScraperModule_Theme_TV.Scraper
logger.Trace("[ThemeLibrary_Theme] [Scraper_TV] [Start]")
Dim tScraper As New ThemeLibrary.Scraper(DBTV)
diff --git a/EmberAPI/clsAPIDatabase.vb b/EmberAPI/clsAPIDatabase.vb
index 82e992787..1ebeae252 100644
--- a/EmberAPI/clsAPIDatabase.vb
+++ b/EmberAPI/clsAPIDatabase.vb
@@ -1639,7 +1639,7 @@ Public Class Database
If Not DBNull.Value.Equals(SQLreader("NfoPath")) Then _movieDB.NfoPath = SQLreader("NfoPath").ToString
If Not DBNull.Value.Equals(SQLreader("EThumbsPath")) Then _movieDB.ExtrathumbsPath = SQLreader("EThumbsPath").ToString
If Not DBNull.Value.Equals(SQLreader("EFanartsPath")) Then _movieDB.ExtrafanartsPath = SQLreader("EFanartsPath").ToString
- If Not DBNull.Value.Equals(SQLreader("ThemePath")) Then _movieDB.ThemePath = SQLreader("ThemePath").ToString
+ If Not DBNull.Value.Equals(SQLreader("ThemePath")) Then _movieDB.Theme.LocalFilePath = SQLreader("ThemePath").ToString
_movieDB.Source = Load_Source_Movie(Convert.ToInt64(SQLreader("idSource")))
@@ -2507,7 +2507,7 @@ Public Class Database
If Not DBNull.Value.Equals(SQLreader("Language")) Then _TVDB.Language = SQLreader("Language").ToString
If Not DBNull.Value.Equals(SQLreader("NfoPath")) Then _TVDB.NfoPath = SQLreader("NfoPath").ToString
If Not DBNull.Value.Equals(SQLreader("TVShowPath")) Then _TVDB.ShowPath = SQLreader("TVShowPath").ToString
- If Not DBNull.Value.Equals(SQLreader("ThemePath")) Then _TVDB.ThemePath = SQLreader("ThemePath").ToString
+ If Not DBNull.Value.Equals(SQLreader("ThemePath")) Then _TVDB.Theme.LocalFilePath = SQLreader("ThemePath").ToString
_TVDB.Source = Load_Source_TVShow(Convert.ToInt64(SQLreader("idSource")))
@@ -3545,6 +3545,7 @@ Public Class Database
If ToDisk Then
_movieDB.ImagesContainer.SaveAllImages(_movieDB, ForceFileCleanup)
_movieDB.Movie.SaveAllActorThumbs(_movieDB)
+ _movieDB.Theme.SaveAllThemes(_movieDB, ForceFileCleanup)
_movieDB.Trailer.SaveAllTrailers(_movieDB, ForceFileCleanup)
End If
@@ -3555,7 +3556,7 @@ Public Class Database
par_movie_ExtrafanartsPath.Value = _movieDB.ExtrafanartsPath
par_movie_ExtrathumbsPath.Value = _movieDB.ExtrathumbsPath
par_movie_NfoPath.Value = _movieDB.NfoPath
- par_movie_ThemePath.Value = _movieDB.ThemePath
+ par_movie_ThemePath.Value = If(Not String.IsNullOrEmpty(_movieDB.Theme.LocalFilePath), _movieDB.Theme.LocalFilePath, String.Empty)
par_movie_TrailerPath.Value = If(Not String.IsNullOrEmpty(_movieDB.Trailer.LocalFilePath), _movieDB.Trailer.LocalFilePath, String.Empty)
If Not Master.eSettings.MovieImagesNotSaveURLToNfo Then
@@ -4888,13 +4889,14 @@ Public Class Database
If ToNFO Then NFO.SaveToNFO_TVShow(_show)
If ToDisk Then
_show.ImagesContainer.SaveAllImages(_show, False)
+ _show.Theme.SaveAllThemes(_show, False)
_show.TVShow.SaveAllActorThumbs(_show)
End If
parExtrafanartsPath.Value = _show.ExtrafanartsPath
parNfoPath.Value = _show.NfoPath
parTVShowPath.Value = _show.ShowPath
- parThemePath.Value = _show.ThemePath
+ parThemePath.Value = If(Not String.IsNullOrEmpty(_show.Theme.LocalFilePath), _show.Theme.LocalFilePath, String.Empty)
parNew.Value = Not _show.IDSpecified
parListTitle.Value = _show.ListTitle
@@ -5297,7 +5299,7 @@ Public Class Database
Private _sortmethod As Enums.SortMethod_MovieSet
Private _source As New DBSource
Private _subtitles As New List(Of MediaContainers.Subtitle)
- Private _themepath As String
+ Private _theme As New MediaContainers.Theme
Private _trailer As New MediaContainers.Trailer
Private _tvepisode As MediaContainers.EpisodeDetails
Private _tvseason As MediaContainers.SeasonDetails
@@ -5734,18 +5736,18 @@ Public Class Database
End Get
End Property
- Public Property ThemePath() As String
+ Public Property Theme() As MediaContainers.Theme
Get
- Return _themepath
+ Return _theme
End Get
- Set(ByVal value As String)
- _themepath = value
+ Set(ByVal value As MediaContainers.Theme)
+ _theme = value
End Set
End Property
- Public ReadOnly Property ThemePathSpecified() As Boolean
+ Public ReadOnly Property ThemeSpecified() As Boolean
Get
- Return Not String.IsNullOrEmpty(_themepath)
+ Return _theme.ThemeOriginal IsNot Nothing AndAlso _theme.ThemeOriginal.hasMemoryStream
End Get
End Property
@@ -5858,7 +5860,7 @@ Public Class Database
_sortmethod = Enums.SortMethod_MovieSet.Year
_source = New DBSource
_subtitles = New List(Of MediaContainers.Subtitle)
- _themepath = String.Empty
+ _theme = New MediaContainers.Theme
_trailer = New MediaContainers.Trailer
_tvepisode = Nothing
_tvseason = Nothing
diff --git a/EmberAPI/clsAPIFileUtils.vb b/EmberAPI/clsAPIFileUtils.vb
index da9c1736c..b4f19c627 100644
--- a/EmberAPI/clsAPIFileUtils.vb
+++ b/EmberAPI/clsAPIFileUtils.vb
@@ -248,6 +248,26 @@ Namespace FileUtils
End If
End Function
+ Public Shared Function GetOpenFileDialogFilter_Theme() As String
+ Dim lstValidExtensions As New List(Of String)
+
+ For Each nExtension In Master.eSettings.FileSystemValidThemeExts
+ lstValidExtensions.Add(String.Concat("*", nExtension))
+ Next
+
+ Return String.Concat(Master.eLang.GetString(1285, "Themes"), "|", String.Join(";", lstValidExtensions.ToArray))
+ End Function
+
+ Public Shared Function GetOpenFileDialogFilter_Video(ByVal strDescription As String) As String
+ Dim lstValidExtensions As New List(Of String)
+
+ For Each nExtension In Master.eSettings.FileSystemValidExts
+ lstValidExtensions.Add(String.Concat("*", nExtension))
+ Next
+
+ Return String.Concat(strDescription, "|", String.Join(";", lstValidExtensions.ToArray))
+ End Function
+
'''
''' Determine whether the path provided contains a Blu-Ray image
'''
diff --git a/EmberAPI/clsAPIInterfaces.vb b/EmberAPI/clsAPIInterfaces.vb
index 2c440259a..f97812688 100644
--- a/EmberAPI/clsAPIInterfaces.vb
+++ b/EmberAPI/clsAPIInterfaces.vb
@@ -318,7 +318,7 @@ Public Class Interfaces
Sub ScraperOrderChanged()
Sub Init(ByVal sAssemblyName As String)
Function InjectSetupScraper() As Containers.SettingsPanel
- Function Scraper(ByVal DBMovie As Database.DBElement, ByRef URLList As List(Of Themes)) As ModuleResult
+ Function Scraper(ByRef DBMovie As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult
Sub SaveSetupScraper(ByVal DoDispose As Boolean)
#End Region 'Methods
@@ -349,7 +349,7 @@ Public Class Interfaces
Sub ScraperOrderChanged()
Sub Init(ByVal sAssemblyName As String)
Function InjectSetupScraper() As Containers.SettingsPanel
- Function Scraper(ByVal DBTV As Database.DBElement, ByRef URLList As List(Of Themes)) As ModuleResult
+ Function Scraper(ByRef DBTV As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Interfaces.ModuleResult
Sub SaveSetupScraper(ByVal DoDispose As Boolean)
#End Region 'Methods
diff --git a/EmberAPI/clsAPIMediaContainers.vb b/EmberAPI/clsAPIMediaContainers.vb
index f31c5a1ca..692309fbd 100644
--- a/EmberAPI/clsAPIMediaContainers.vb
+++ b/EmberAPI/clsAPIMediaContainers.vb
@@ -5438,6 +5438,20 @@ Namespace MediaContainers
Public Class Theme
+#Region "Fields"
+
+ Private _bitrate As String
+ Private _description As String
+ Private _duration As String
+ Private _localfilepath As String
+ Private _scraper As String
+ Private _source As String
+ Private _themeoriginal As New Themes
+ Private _urlaudiostream As String
+ Private _urlwebsite As String
+
+#End Region 'Fields
+
#Region "Constructors"
Public Sub New()
@@ -5447,20 +5461,173 @@ Namespace MediaContainers
#End Region 'Constructors
#Region "Properties"
- Public Property Quality As String
- Public Property URL As String ' path to image (local or url)
- Public Property WebTheme As Themes
- Public Property ShortLang As String
- Public Property LongLang As String
+
+ Public Property Bitrate() As String
+ Get
+ Return _bitrate
+ End Get
+ Set(ByVal value As String)
+ _bitrate = value
+ End Set
+ End Property
+
+ Public Property Description() As String
+ Get
+ Return _description
+ End Get
+ Set(ByVal value As String)
+ _description = value
+ End Set
+ End Property
+
+ Public Property Duration() As String
+ Get
+ Return _duration
+ End Get
+ Set(ByVal value As String)
+ _duration = value
+ End Set
+ End Property
+
+ Public Property LocalFilePath() As String
+ Get
+ Return _localfilepath
+ End Get
+ Set(ByVal value As String)
+ _localfilepath = value
+ End Set
+ End Property
+
+ Public ReadOnly Property LocalFilePathSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_localfilepath)
+ End Get
+ End Property
+
+ Public Property Scraper() As String
+ Get
+ Return _scraper
+ End Get
+ Set(ByVal value As String)
+ _scraper = value
+ End Set
+ End Property
+
+ Public Property Source() As String
+ Get
+ Return _source
+ End Get
+ Set(ByVal value As String)
+ _source = value
+ End Set
+ End Property
+ '''
+ ''' Download audio URL of the theme
+ '''
+ '''
+ '''
+ '''
+ Public Property URLAudioStream() As String
+ Get
+ Return _urlaudiostream
+ End Get
+ Set(ByVal value As String)
+ _urlaudiostream = value
+ End Set
+ End Property
+
+ Public ReadOnly Property URLAudioStreamSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_urlaudiostream)
+ End Get
+ End Property
+ '''
+ ''' Website URL of the theme for preview in browser
+ '''
+ '''
+ '''
+ '''
+ Public Property URLWebsite() As String
+ Get
+ Return _urlwebsite
+ End Get
+ Set(ByVal value As String)
+ _urlwebsite = value
+ End Set
+ End Property
+
+ Public ReadOnly Property URLWebsiteSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_urlwebsite)
+ End Get
+ End Property
+
+ Public Property ThemeOriginal() As Themes
+ Get
+ Return _themeoriginal
+ End Get
+ Set(ByVal value As Themes)
+ _themeoriginal = value
+ End Set
+ End Property
#End Region 'Properties
#Region "Methods"
Public Sub Clear()
- _URL = String.Empty
- _Quality = String.Empty
- _WebTheme = New Themes
+ _bitrate = String.Empty
+ _description = String.Empty
+ _duration = String.Empty
+ _localfilepath = String.Empty
+ _scraper = String.Empty
+ _source = String.Empty
+ _themeoriginal = New Themes
+ _urlaudiostream = String.Empty
+ _urlwebsite = String.Empty
+ End Sub
+
+ Public Function LoadAndCache() As Boolean
+
+ If Not ThemeOriginal.hasMemoryStream Then
+ If File.Exists(LocalFilePath) Then
+ ThemeOriginal.LoadFromFile(LocalFilePath)
+ Else
+ ThemeOriginal.LoadFromWeb(Me)
+ End If
+ End If
+
+ If ThemeOriginal.hasMemoryStream Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+
+ Public Sub SaveAllThemes(ByRef tDBElement As Database.DBElement, ByVal ForceFileCleanup As Boolean)
+ Dim tContentType As Enums.ContentType = tDBElement.ContentType
+
+ With tDBElement
+ Select Case tContentType
+ Case Enums.ContentType.Movie
+ If .Theme.LoadAndCache() Then
+ If ForceFileCleanup Then Trailers.Delete_Movie(tDBElement, ForceFileCleanup)
+ .Theme.LocalFilePath = .Theme.ThemeOriginal.Save_Movie(tDBElement)
+ Else
+ Themes.Delete_Movie(tDBElement, ForceFileCleanup)
+ .Theme = New Theme
+ End If
+
+ Case Enums.ContentType.TVShow
+ If .Theme.LoadAndCache() Then
+ If ForceFileCleanup Then Themes.Delete_TVShow(tDBElement) ', ForceFileCleanup)
+ .Theme.LocalFilePath = .Theme.ThemeOriginal.Save_TVShow(tDBElement)
+ Else
+ Themes.Delete_TVShow(tDBElement) ', ForceFileCleanup)
+ .Theme = New Theme
+ End If
+ End Select
+ End With
End Sub
#End Region 'Methods
@@ -5531,6 +5698,12 @@ Namespace MediaContainers
End Set
End Property
+ Public ReadOnly Property LocalFilePathSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_localfilepath)
+ End Get
+ End Property
+
Public Property LongLang() As String
Get
Return _longlang
@@ -5621,6 +5794,12 @@ Namespace MediaContainers
_urlvideostream = value
End Set
End Property
+
+ Public ReadOnly Property URLVideoStreamSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_urlvideostream)
+ End Get
+ End Property
'''
''' Website URL of the trailer for preview in browser
'''
@@ -5636,6 +5815,12 @@ Namespace MediaContainers
End Set
End Property
+ Public ReadOnly Property URLWebsiteSpecified() As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(_urlwebsite)
+ End Get
+ End Property
+
Public Property TrailerOriginal() As Trailers
Get
Return _traileroriginal
diff --git a/EmberAPI/clsAPIModules.vb b/EmberAPI/clsAPIModules.vb
index 584363dd9..3dc9163bf 100644
--- a/EmberAPI/clsAPIModules.vb
+++ b/EmberAPI/clsAPIModules.vb
@@ -1207,7 +1207,7 @@ Public Class ModulesManager
DBElement.ImagesContainer = New MediaContainers.ImagesContainer
DBElement.NfoPath = String.Empty
DBElement.Seasons.Clear()
- DBElement.ThemePath = String.Empty
+ DBElement.Theme = New MediaContainers.Theme
DBElement.TVShow = New MediaContainers.TVShow
DBElement.TVShow.Title = StringUtils.FilterTitleFromPath_TVShow(DBElement.ShowPath)
@@ -1485,15 +1485,14 @@ Public Class ModulesManager
''' Request that enabled movie theme scrapers perform their functions on the supplied movie
'''
''' Movie to be scraped. Scraper will directly manipulate this structure
- ''' List of Themes objects that the scraper will append to. Note that only the URL is returned,
- ''' not the full content of the trailer
+ ''' NOT ACTUALLY USED!
+ ''' List of Theme objects that the scraper will append to.
''' True if one of the scrapers was cancelled
'''
- Public Function ScrapeTheme_Movie(ByRef DBElement As Database.DBElement, ByRef URLList As List(Of Themes)) As Boolean
+ Public Function ScrapeTheme_Movie(ByRef DBElement As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Boolean
logger.Trace(String.Format("[ModulesManager] [ScrapeTheme_Movie] [Start] {0}", DBElement.Filename))
Dim modules As IEnumerable(Of _externalScraperModuleClass_Theme_Movie) = externalScrapersModules_Theme_Movie.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ModuleOrder)
Dim ret As Interfaces.ModuleResult
- Dim aList As List(Of Themes)
While Not ModulesLoaded
Application.DoEvents()
@@ -1505,12 +1504,10 @@ Public Class ModulesManager
For Each _externalScraperModule As _externalScraperModuleClass_Theme_Movie In modules
logger.Trace(String.Format("[ModulesManager] [ScrapeTheme_Movie] [Using] {0}", _externalScraperModule.ProcessorModule.ModuleName))
AddHandler _externalScraperModule.ProcessorModule.ScraperEvent, AddressOf Handler_ScraperEvent_Movie
- aList = New List(Of Themes)
- ret = _externalScraperModule.ProcessorModule.Scraper(DBElement, aList)
- If aList IsNot Nothing AndAlso aList.Count > 0 Then
- For Each aIm In aList
- URLList.Add(aIm)
- Next
+ Dim aList As New List(Of MediaContainers.Theme)
+ ret = _externalScraperModule.ProcessorModule.Scraper(DBElement, Type, aList)
+ If aList IsNot Nothing Then
+ ThemeList.AddRange(aList)
End If
RemoveHandler _externalScraperModule.ProcessorModule.ScraperEvent, AddressOf Handler_ScraperEvent_Movie
If ret.breakChain Then Exit For
@@ -1520,6 +1517,41 @@ Public Class ModulesManager
Return ret.Cancelled
End Function
'''
+ ''' Request that enabled tvshow theme scrapers perform their functions on the supplied tv show
+ '''
+ ''' TV Show to be scraped. Scraper will directly manipulate this structure
+ ''' NOT ACTUALLY USED!
+ ''' List of Theme objects that the scraper will append to.
+ ''' True if one of the scrapers was cancelled
+ '''
+ Public Function ScrapeTheme_TVShow(ByRef DBElement As Database.DBElement, ByVal Type As Enums.ModifierType, ByRef ThemeList As List(Of MediaContainers.Theme)) As Boolean
+ logger.Trace(String.Format("[ModulesManager] [ScrapeTheme_TVShow] [Start] {0}", DBElement.TVShow.Title))
+ Dim modules As IEnumerable(Of _externalScraperModuleClass_Theme_TV) = externalScrapersModules_Theme_TV.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ModuleOrder)
+ Dim ret As Interfaces.ModuleResult
+
+ While Not ModulesLoaded
+ Application.DoEvents()
+ End While
+
+ If (modules.Count() <= 0) Then
+ logger.Warn("[ModulesManager] [ScrapeTheme_TVShow] [Abort] No scrapers enabled")
+ Else
+ For Each _externalScraperModule As _externalScraperModuleClass_Theme_TV In modules
+ logger.Trace(String.Format("[ModulesManager] [ScrapeTheme_TVShow] [Using] {0}", _externalScraperModule.ProcessorModule.ModuleName))
+ AddHandler _externalScraperModule.ProcessorModule.ScraperEvent, AddressOf Handler_ScraperEvent_TV
+ Dim aList As New List(Of MediaContainers.Theme)
+ ret = _externalScraperModule.ProcessorModule.Scraper(DBElement, Type, aList)
+ If aList IsNot Nothing Then
+ ThemeList.AddRange(aList)
+ End If
+ RemoveHandler _externalScraperModule.ProcessorModule.ScraperEvent, AddressOf Handler_ScraperEvent_TV
+ If ret.breakChain Then Exit For
+ Next
+ End If
+ logger.Trace(String.Format("[ModulesManager] [ScrapeTheme_TVShow] [Done] {0}", DBElement.TVShow.Title))
+ Return ret.Cancelled
+ End Function
+ '''
''' Request that enabled movie trailer scrapers perform their functions on the supplied movie
'''
''' Movie to be scraped. Scraper will directly manipulate this structure
diff --git a/EmberAPI/clsAPIScanner.vb b/EmberAPI/clsAPIScanner.vb
index 68600b02e..ddb57ed1f 100644
--- a/EmberAPI/clsAPIScanner.vb
+++ b/EmberAPI/clsAPIScanner.vb
@@ -91,7 +91,7 @@ Public Class Scanner
DBMovie.ImagesContainer = New MediaContainers.ImagesContainer
DBMovie.NfoPath = String.Empty
DBMovie.Subtitles = New List(Of MediaContainers.Subtitle)
- DBMovie.ThemePath = String.Empty
+ DBMovie.Theme = New MediaContainers.Theme
DBMovie.Trailer = New MediaContainers.Trailer
'first add files to filelists
@@ -246,12 +246,14 @@ Public Class Scanner
Next
'theme
- For Each a In FileUtils.GetFilenameList.Movie(DBMovie, Enums.ModifierType.MainTheme, bForced)
- For Each t As String In Master.eSettings.FileSystemValidThemeExts
- DBMovie.ThemePath = tList.FirstOrDefault(Function(s) s.ToLower = String.Concat(a.ToLower, t.ToLower))
- If Not String.IsNullOrEmpty(DBMovie.ThemePath) Then Exit For
+ If String.IsNullOrEmpty(DBMovie.Theme.LocalFilePath) Then
+ For Each a In FileUtils.GetFilenameList.Movie(DBMovie, Enums.ModifierType.MainTheme, bForced)
+ For Each t As String In Master.eSettings.FileSystemValidThemeExts
+ DBMovie.Theme.LocalFilePath = fList.FirstOrDefault(Function(s) s.ToLower = String.Concat(a.ToLower, t.ToLower))
+ If Not String.IsNullOrEmpty(DBMovie.Theme.LocalFilePath) Then Exit For
+ Next
Next
- Next
+ End If
'trailer
If String.IsNullOrEmpty(DBMovie.Trailer.LocalFilePath) Then
@@ -487,7 +489,7 @@ Public Class Scanner
DBTVShow.ExtrafanartsPath = String.Empty
DBTVShow.ImagesContainer = New MediaContainers.ImagesContainer
DBTVShow.NfoPath = String.Empty
- DBTVShow.ThemePath = String.Empty
+ DBTVShow.Theme = New MediaContainers.Theme
Try
fList.AddRange(Directory.GetFiles(DBTVShow.ShowPath))
@@ -569,10 +571,9 @@ Public Class Scanner
'show theme
For Each a In FileUtils.GetFilenameList.TVShow(DBTVShow, Enums.ModifierType.MainTheme)
For Each t As String In Master.eSettings.FileSystemValidThemeExts
- DBTVShow.ThemePath = fList.FirstOrDefault(Function(s) s.ToLower = String.Concat(a.ToLower, t.ToLower))
- If Not String.IsNullOrEmpty(DBTVShow.ThemePath) Then Exit For
+ DBTVShow.Theme.LocalFilePath = fList.FirstOrDefault(Function(s) s.ToLower = String.Concat(a.ToLower, t.ToLower))
+ If Not String.IsNullOrEmpty(DBTVShow.Theme.LocalFilePath) Then Exit For
Next
- If Not String.IsNullOrEmpty(DBTVShow.ThemePath) Then Exit For
Next
End Sub
diff --git a/EmberAPI/clsAPIThemes.vb b/EmberAPI/clsAPIThemes.vb
index 36f02581c..f79ece263 100644
--- a/EmberAPI/clsAPIThemes.vb
+++ b/EmberAPI/clsAPIThemes.vb
@@ -21,25 +21,16 @@
Imports System.IO
Imports NLog
+
Public Class Themes
Implements IDisposable
#Region "Fields"
- Shared logger As Logger = NLog.LogManager.GetCurrentClassLogger()
- Private _ext As String
- Private _title As String
- Private _id As String
- Private _isEdit As Boolean
- Private _url As String
- Private _weburl As String
- Private _description As String
- Private _duration As String
- Private _bitrate As String
- Private _toRemove As Boolean
+ Shared logger As Logger = LogManager.GetCurrentClassLogger()
+ Private _ext As String
Private _ms As MemoryStream
- Private Ret As Byte()
#End Region 'Fields
@@ -67,90 +58,10 @@ Public Class Themes
End Set
End Property
- Public Property Title() As String
- Get
- Return _title
- End Get
- Set(ByVal value As String)
- _title = value
- End Set
- End Property
-
- Public Property ID() As String
- Get
- Return _id
- End Get
- Set(ByVal value As String)
- _id = value
- End Set
- End Property
-
- Public Property isEdit() As Boolean
+ Public ReadOnly Property hasMemoryStream() As Boolean
Get
- Return _isEdit
+ Return _ms IsNot Nothing
End Get
- Set(ByVal value As Boolean)
- _isEdit = value
- End Set
- End Property
-
- Public Property URL() As String
- Get
- Return _url
- End Get
- Set(ByVal value As String)
- _url = value
- End Set
- End Property
-
- Public Property Description() As String
- Get
- Return _description
- End Get
- Set(ByVal value As String)
- _description = value
- End Set
- End Property
-
- Public Property Duration() As String
- Get
- Return _duration
- End Get
- Set(ByVal value As String)
- _duration = value
- End Set
- End Property
-
- Public Property Bitrate() As String
- Get
- Return _bitrate
- End Get
- Set(ByVal value As String)
- _bitrate = value
- End Set
- End Property
-
- Public Property WebURL() As String
- Get
- Return _weburl
- End Get
- Set(ByVal value As String)
- _weburl = value
- End Set
- End Property
- '''
- ''' trigger to remove theme
- '''
- '''
- '''
- '''
- Public Property toRemove() As Boolean
- Get
- Return _toRemove
- End Get
- Set(ByVal value As Boolean)
- _toRemove = value
- End Set
End Property
#End Region 'Properties
@@ -170,15 +81,6 @@ Public Class Themes
End If
_ext = String.Empty
- _title = String.Empty
- _id = String.Empty
- _isEdit = False
- _toRemove = False
- _url = String.Empty
- _weburl = String.Empty
- _description = String.Empty
- _duration = String.Empty
- _bitrate = String.Empty
End Sub
Public Sub Cancel()
@@ -202,13 +104,13 @@ Public Class Themes
'''
''' Delete the movie themes
'''
- ''' DBMovie structure representing the movie on which we should operate
+ ''' DBMovie structure representing the movie on which we should operate
'''
- Public Shared Sub DeleteMovieTheme(ByVal DBMovie As Database.DBElement)
- If String.IsNullOrEmpty(DBMovie.Filename) Then Return
+ Public Shared Sub Delete_Movie(ByVal tDBElement As Database.DBElement, ByVal ForceFileCleanup As Boolean)
+ If String.IsNullOrEmpty(tDBElement.Filename) Then Return
Try
- For Each a In FileUtils.GetFilenameList.Movie(DBMovie, Enums.ModifierType.MainTheme)
+ For Each a In FileUtils.GetFilenameList.Movie(tDBElement, Enums.ModifierType.MainTheme, ForceFileCleanup)
For Each t As String In Master.eSettings.FileSystemValidThemeExts
If File.Exists(String.Concat(a, t)) Then
Delete(String.Concat(a, t))
@@ -216,7 +118,7 @@ Public Class Themes
Next
Next
Catch ex As Exception
- logger.Error(ex, New StackFrame().GetMethod().Name & Convert.ToChar(Windows.Forms.Keys.Tab) & "<" & DBMovie.Filename & ">")
+ logger.Error(ex, New StackFrame().GetMethod().Name & Convert.ToChar(Windows.Forms.Keys.Tab) & "<" & tDBElement.Filename & ">")
End Try
End Sub
'''
@@ -224,11 +126,11 @@ Public Class Themes
'''
''' DBMovie structure representing the movie on which we should operate
'''
- Public Shared Sub DeleteTVShowTheme(ByVal DBTVShow As Database.DBElement)
+ Public Shared Sub Delete_TVShow(ByVal DBTVShow As Database.DBElement) ', ByVal ForceFileCleanup As Boolean)
If String.IsNullOrEmpty(DBTVShow.ShowPath) Then Return
Try
- For Each a In FileUtils.GetFilenameList.TVShow(DBTVShow, Enums.ModifierType.MainTheme)
+ For Each a In FileUtils.GetFilenameList.TVShow(DBTVShow, Enums.ModifierType.MainTheme) ', ForceFileCleanup)
For Each t As String In Master.eSettings.FileSystemValidThemeExts
If File.Exists(String.Concat(a, t)) Then
Delete(String.Concat(a, t))
@@ -247,33 +149,50 @@ Public Class Themes
Public Shared Sub DownloadProgressUpdated(ByVal iPercent As Integer)
RaiseEvent ProgressUpdated(iPercent)
End Sub
+
+ Public Shared Function GetPreferredMovieTheme(ByRef ThemeList As List(Of MediaContainers.Theme), ByRef trlResult As MediaContainers.Theme) As Boolean
+ If ThemeList.Count = 0 Then Return False
+ trlResult = Nothing
+
+ trlResult = ThemeList.Item(0)
+
+ If trlResult IsNot Nothing Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+
+ Public Shared Function GetPreferredTVShowTheme(ByRef ThemeList As List(Of MediaContainers.Theme), ByRef trlResult As MediaContainers.Theme) As Boolean
+ If ThemeList.Count = 0 Then Return False
+ trlResult = Nothing
+
+ trlResult = ThemeList.Item(0)
+
+ If trlResult IsNot Nothing Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
'''
''' Loads this theme from the contents of the supplied file
'''
''' Path to the theme file
'''
- Public Sub FromFile(ByVal sPath As String)
- If _ms IsNot Nothing Then
- _ms.Dispose()
- End If
+ Public Sub LoadFromFile(ByVal sPath As String)
If Not String.IsNullOrEmpty(sPath) AndAlso File.Exists(sPath) Then
- Try
- _ms = New MemoryStream()
- Using fsImage As New FileStream(sPath, FileMode.Open, FileAccess.Read)
- Dim StreamBuffer(Convert.ToInt32(fsImage.Length - 1)) As Byte
-
- fsImage.Read(StreamBuffer, 0, StreamBuffer.Length)
- _ms.Write(StreamBuffer, 0, StreamBuffer.Length)
-
- StreamBuffer = Nothing
- _ms.Flush()
-
- _ext = Path.GetExtension(sPath)
- _url = sPath
- End Using
- Catch ex As Exception
- logger.Error(ex, New StackFrame().GetMethod().Name & Convert.ToChar(Windows.Forms.Keys.Tab) & "<" & sPath & ">")
- End Try
+ _ms = New MemoryStream()
+ Using fsTheme As FileStream = File.OpenRead(sPath)
+ Dim memStream As New MemoryStream
+ memStream.SetLength(fsTheme.Length)
+ fsTheme.Read(memStream.GetBuffer, 0, CInt(Fix(fsTheme.Length)))
+ _ms.Write(memStream.GetBuffer, 0, CInt(Fix(fsTheme.Length)))
+ _ms.Flush()
+ End Using
+ _ext = Path.GetExtension(sPath)
+ Else
+ _ms = New MemoryStream
End If
End Sub
'''
@@ -281,7 +200,7 @@ Public Class Themes
'''
''' URL to the theme file
'''
- Public Sub FromWeb(ByVal sURL As String, Optional ByVal webURL As String = "")
+ Public Sub LoadFromWeb(ByVal sURL As String, Optional ByVal webURL As String = "")
Dim WebPage As New HTTP
Dim tURL As String = String.Empty
Dim tTheme As String = String.Empty
@@ -290,23 +209,18 @@ Public Class Themes
Try
tTheme = WebPage.DownloadFile(sURL, String.Empty, True, "theme", webURL)
If Not String.IsNullOrEmpty(tTheme) Then
-
If _ms IsNot Nothing Then
_ms.Dispose()
End If
_ms = New MemoryStream()
-
Dim retSave() As Byte
retSave = WebPage.ms.ToArray
_ms.Write(retSave, 0, retSave.Length)
-
_ext = Path.GetExtension(tTheme)
- _url = sURL
logger.Debug("Theme downloaded: " & sURL)
Else
logger.Warn("Theme NOT downloaded: " & sURL)
End If
-
Catch ex As Exception
logger.Error(ex, New StackFrame().GetMethod().Name & Convert.ToChar(Windows.Forms.Keys.Tab) & "<" & sURL & ">")
End Try
@@ -314,73 +228,84 @@ Public Class Themes
RemoveHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated
End Sub
- Public Function SaveAsMovieTheme(ByVal mMovie As Database.DBElement) As String
+ Public Sub LoadFromWeb(ByVal sTheme As MediaContainers.Theme)
+ LoadFromWeb(sTheme.URLAudioStream, sTheme.URLWebsite)
+ End Sub
+
+ Public Function Save_Movie(ByVal tDBElement As Database.DBElement) As String
+ If Not tDBElement.Theme.ThemeOriginal.hasMemoryStream Then Return String.Empty
+
Dim strReturn As String = String.Empty
Try
Try
- Dim params As New List(Of Object)(New Object() {mMovie})
+ Dim params As New List(Of Object)(New Object() {tDBElement})
ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnThemeSave_Movie, params, False)
Catch ex As Exception
+ logger.Error(ex, New StackFrame().GetMethod().Name)
End Try
- Dim fExt As String = Path.GetExtension(_ext)
- For Each a In FileUtils.GetFilenameList.Movie(mMovie, Enums.ModifierType.MainTheme)
- If Not File.Exists(String.Concat(a, fExt)) OrElse (isEdit OrElse Master.eSettings.MovieThemeKeepExisting) Then
- Save(String.Concat(a, fExt))
- strReturn = (String.Concat(a, fExt))
- End If
+ For Each a In FileUtils.GetFilenameList.Movie(tDBElement, Enums.ModifierType.MainTheme)
+ SaveToFile(String.Concat(a, _ext))
+ strReturn = (String.Concat(a, _ext))
Next
Catch ex As Exception
logger.Error(ex, New StackFrame().GetMethod().Name)
End Try
+
+ Clear() 'Dispose to save memory
Return strReturn
End Function
- Public Sub Save(ByVal sPath As String)
- Dim retSave() As Byte
- Try
- retSave = _ms.ToArray
+ Public Function Save_TVShow(ByVal tDBElement As Database.DBElement) As String
+ If Not tDBElement.Theme.ThemeOriginal.hasMemoryStream Then Return String.Empty
- 'make sure directory exists
- Directory.CreateDirectory(Directory.GetParent(sPath).FullName)
- Using FileStream As Stream = File.OpenWrite(sPath)
- FileStream.Write(retSave, 0, retSave.Length)
- End Using
-
- Catch ex As Exception
- logger.Error(ex, New StackFrame().GetMethod().Name)
- End Try
- End Sub
+ Dim strReturn As String = String.Empty
- '''
- ''' Determines whether a theme is allowed to be downloaded. This is determined
- ''' by a combination of the Master.eSettings.LockTheme settings,
- ''' whether the path is valid, and whether the Master.eSettings.OverwriteTheme
- ''' flag is set.
- '''
- ''' The intended path to save the theme
- ''' True if a download is allowed, False otherwise
- '''
- Public Function IsAllowedToDownload(ByVal mMovie As Database.DBElement) As Boolean
Try
- With Master.eSettings
- If (String.IsNullOrEmpty(mMovie.ThemePath) OrElse .MovieThemeKeepExisting) AndAlso .MovieThemeTvTunesEnable AndAlso
- (mMovie.IsSingle AndAlso .MovieThemeTvTunesMoviePath) OrElse
- (mMovie.IsSingle AndAlso .MovieThemeTvTunesSub AndAlso Not String.IsNullOrEmpty(.MovieThemeTvTunesSubDir)) OrElse
- (.MovieThemeTvTunesCustom AndAlso Not String.IsNullOrEmpty(.MovieThemeTvTunesCustomPath)) Then
- Return True
- Else
- Return False
- End If
- End With
+ 'Try
+ ' Dim params As New List(Of Object)(New Object() {tDbElement})
+ ' ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnThemeSave_TVShow, params, False)
+ 'Catch ex As Exception
+ 'End Try
+
+ For Each a In FileUtils.GetFilenameList.TVShow(tDBElement, Enums.ModifierType.MainTheme)
+ SaveToFile(String.Concat(a, _ext))
+ strReturn = (String.Concat(a, _ext))
+ Next
+
Catch ex As Exception
logger.Error(ex, New StackFrame().GetMethod().Name)
- Return False
End Try
+
+ Clear() 'Dispose to save memory
+ Return strReturn
End Function
+ Public Sub SaveToFile(ByVal sPath As String)
+ If _ms.Length > 0 Then
+ Dim retSave() As Byte
+ Try
+ retSave = _ms.ToArray
+
+ 'make sure directory exists
+ Directory.CreateDirectory(Directory.GetParent(sPath).FullName)
+ If sPath.Length <= 260 Then
+ Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write)
+ fs.Write(retSave, 0, retSave.Length)
+ fs.Flush()
+ fs.Close()
+ End Using
+ End If
+ Catch ex As Exception
+ logger.Error(ex, New StackFrame().GetMethod().Name)
+ End Try
+ Else
+ Throw New ArgumentOutOfRangeException("Looks like MemoryStream is empty")
+ End If
+ End Sub
+
#End Region 'Methods
#Region "IDisposable Support"
diff --git a/EmberAPI/clsAPITrailers.vb b/EmberAPI/clsAPITrailers.vb
index 2f86a0e25..dccc92210 100644
--- a/EmberAPI/clsAPITrailers.vb
+++ b/EmberAPI/clsAPITrailers.vb
@@ -31,8 +31,6 @@ Public Class Trailers
Shared logger As Logger = LogManager.GetCurrentClassLogger()
Private _ext As String
- Private _isEdit As Boolean
-
Private _ms As MemoryStream
#End Region 'Fields
@@ -67,15 +65,6 @@ Public Class Trailers
End Get
End Property
- Public Property isEdit() As Boolean
- Get
- Return _isEdit
- End Get
- Set(ByVal value As Boolean)
- _isEdit = value
- End Set
- End Property
-
#End Region 'Properties
#Region "Events"
@@ -93,7 +82,6 @@ Public Class Trailers
End If
_ext = String.Empty
- _isEdit = False
End Sub
Public Sub Cancel()
diff --git a/EmberMediaManager/dlgEditMovie.Designer.vb b/EmberMediaManager/dlgEditMovie.Designer.vb
index be0584d25..5b1b6327b 100644
--- a/EmberMediaManager/dlgEditMovie.Designer.vb
+++ b/EmberMediaManager/dlgEditMovie.Designer.vb
@@ -188,6 +188,8 @@ Partial Class dlgEditMovie
Me.btnSetSubtitleScrape = New System.Windows.Forms.Button()
Me.btnSetSubtitleLocal = New System.Windows.Forms.Button()
Me.tpTrailer = New System.Windows.Forms.TabPage()
+ Me.btnLocalTrailerPlay = New System.Windows.Forms.Button()
+ Me.txtLocalTrailer = New System.Windows.Forms.TextBox()
Me.pnlTrailerPreview = New System.Windows.Forms.Panel()
Me.pnlTrailerPreviewNoPlayer = New System.Windows.Forms.Panel()
Me.tblTrailerPreviewNoPlayer = New System.Windows.Forms.TableLayoutPanel()
@@ -197,6 +199,8 @@ Partial Class dlgEditMovie
Me.btnSetTrailerScrape = New System.Windows.Forms.Button()
Me.btnSetTrailerLocal = New System.Windows.Forms.Button()
Me.tpTheme = New System.Windows.Forms.TabPage()
+ Me.btnLocalThemePlay = New System.Windows.Forms.Button()
+ Me.txtLocalTheme = New System.Windows.Forms.TextBox()
Me.pnlThemePreview = New System.Windows.Forms.Panel()
Me.pnlThemePreviewNoPlayer = New System.Windows.Forms.Panel()
Me.tblThemePreviewNoPlayer = New System.Windows.Forms.TableLayoutPanel()
@@ -2079,6 +2083,8 @@ Partial Class dlgEditMovie
'
'tpTrailer
'
+ Me.tpTrailer.Controls.Add(Me.btnLocalTrailerPlay)
+ Me.tpTrailer.Controls.Add(Me.txtLocalTrailer)
Me.tpTrailer.Controls.Add(Me.pnlTrailerPreview)
Me.tpTrailer.Controls.Add(Me.btnSetTrailerDL)
Me.tpTrailer.Controls.Add(Me.btnRemoveTrailer)
@@ -2091,6 +2097,26 @@ Partial Class dlgEditMovie
Me.tpTrailer.Text = "Trailer"
Me.tpTrailer.UseVisualStyleBackColor = True
'
+ 'btnLocalTrailerPlay
+ '
+ Me.btnLocalTrailerPlay.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.btnLocalTrailerPlay.Enabled = False
+ Me.btnLocalTrailerPlay.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon
+ Me.btnLocalTrailerPlay.Location = New System.Drawing.Point(783, 462)
+ Me.btnLocalTrailerPlay.Name = "btnLocalTrailerPlay"
+ Me.btnLocalTrailerPlay.Size = New System.Drawing.Size(23, 22)
+ Me.btnLocalTrailerPlay.TabIndex = 53
+ Me.btnLocalTrailerPlay.UseVisualStyleBackColor = True
+ '
+ 'txtLocalTrailer
+ '
+ Me.txtLocalTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.txtLocalTrailer.Location = New System.Drawing.Point(6, 462)
+ Me.txtLocalTrailer.Name = "txtLocalTrailer"
+ Me.txtLocalTrailer.ReadOnly = True
+ Me.txtLocalTrailer.Size = New System.Drawing.Size(771, 22)
+ Me.txtLocalTrailer.TabIndex = 15
+ '
'pnlTrailerPreview
'
Me.pnlTrailerPreview.BackColor = System.Drawing.Color.DimGray
@@ -2189,6 +2215,8 @@ Partial Class dlgEditMovie
'
'tpTheme
'
+ Me.tpTheme.Controls.Add(Me.btnLocalThemePlay)
+ Me.tpTheme.Controls.Add(Me.txtLocalTheme)
Me.tpTheme.Controls.Add(Me.pnlThemePreview)
Me.tpTheme.Controls.Add(Me.btnSetThemeDL)
Me.tpTheme.Controls.Add(Me.btnRemoveTheme)
@@ -2201,6 +2229,26 @@ Partial Class dlgEditMovie
Me.tpTheme.Text = "Theme"
Me.tpTheme.UseVisualStyleBackColor = True
'
+ 'btnLocalThemePlay
+ '
+ Me.btnLocalThemePlay.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.btnLocalThemePlay.Enabled = False
+ Me.btnLocalThemePlay.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon
+ Me.btnLocalThemePlay.Location = New System.Drawing.Point(783, 462)
+ Me.btnLocalThemePlay.Name = "btnLocalThemePlay"
+ Me.btnLocalThemePlay.Size = New System.Drawing.Size(23, 22)
+ Me.btnLocalThemePlay.TabIndex = 56
+ Me.btnLocalThemePlay.UseVisualStyleBackColor = True
+ '
+ 'txtLocalTheme
+ '
+ Me.txtLocalTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.txtLocalTheme.Location = New System.Drawing.Point(6, 462)
+ Me.txtLocalTheme.Name = "txtLocalTheme"
+ Me.txtLocalTheme.ReadOnly = True
+ Me.txtLocalTheme.Size = New System.Drawing.Size(771, 22)
+ Me.txtLocalTheme.TabIndex = 55
+ '
'pnlThemePreview
'
Me.pnlThemePreview.BackColor = System.Drawing.Color.DimGray
@@ -2529,12 +2577,14 @@ Partial Class dlgEditMovie
Me.tpSubtitles.ResumeLayout(False)
Me.tpSubtitles.PerformLayout()
Me.tpTrailer.ResumeLayout(False)
+ Me.tpTrailer.PerformLayout()
Me.pnlTrailerPreview.ResumeLayout(False)
Me.pnlTrailerPreviewNoPlayer.ResumeLayout(False)
Me.pnlTrailerPreviewNoPlayer.PerformLayout()
Me.tblTrailerPreviewNoPlayer.ResumeLayout(False)
Me.tblTrailerPreviewNoPlayer.PerformLayout()
Me.tpTheme.ResumeLayout(False)
+ Me.tpTheme.PerformLayout()
Me.pnlThemePreview.ResumeLayout(False)
Me.pnlThemePreviewNoPlayer.ResumeLayout(False)
Me.pnlThemePreviewNoPlayer.PerformLayout()
@@ -2746,5 +2796,8 @@ Partial Class dlgEditMovie
Friend WithEvents btnSetExtrathumbsScrape As System.Windows.Forms.Button
Friend WithEvents cbSourceLanguage As System.Windows.Forms.ComboBox
Friend WithEvents lblLanguage As System.Windows.Forms.Label
-
+ Friend WithEvents btnLocalTrailerPlay As Button
+ Friend WithEvents txtLocalTrailer As TextBox
+ Friend WithEvents btnLocalThemePlay As Button
+ Friend WithEvents txtLocalTheme As TextBox
End Class
diff --git a/EmberMediaManager/dlgEditMovie.vb b/EmberMediaManager/dlgEditMovie.vb
index 524f1920b..24e5a2c48 100644
--- a/EmberMediaManager/dlgEditMovie.vb
+++ b/EmberMediaManager/dlgEditMovie.vb
@@ -31,7 +31,7 @@ Public Class dlgEditMovie
#Region "Fields"
- Shared logger As Logger = NLog.LogManager.GetCurrentClassLogger()
+ Shared logger As Logger = LogManager.GetCurrentClassLogger()
Private tmpDBElement As Database.DBElement
@@ -41,7 +41,6 @@ Public Class dlgEditMovie
Private lvwActorSorter As ListViewColumnSorter
Private pResults As New Containers.ImgResult
Private PreviousFrameValue As Integer
- Private MovieTheme As New Themes With {.isEdit = True}
Private tmpRating As String = String.Empty
Private AnyThemePlayerEnabled As Boolean = False
Private AnyTrailerPlayerEnabled As Boolean = False
@@ -382,8 +381,8 @@ Public Class dlgEditMovie
Dim tPath As String = String.Empty
- If Not String.IsNullOrEmpty(tmpDBElement.ThemePath) Then
- tPath = String.Concat("""", tmpDBElement.ThemePath, """")
+ If Not String.IsNullOrEmpty(tmpDBElement.Theme.LocalFilePath) Then
+ tPath = String.Concat("""", tmpDBElement.Theme.LocalFilePath, """")
End If
If Not String.IsNullOrEmpty(tPath) Then
@@ -466,14 +465,15 @@ Public Class dlgEditMovie
Private Sub btnRemoveTheme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveTheme.Click
ThemeStop()
'axVLCTheme.playlist.items.clear()
- MovieTheme.Dispose()
- MovieTheme.toRemove = True
+ tmpDBElement.Theme = New MediaContainers.Theme
+ txtLocalTheme.Text = String.Empty
End Sub
Private Sub btnRemoveTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveTrailer.Click
TrailerStop()
TrailerPlaylistClear()
tmpDBElement.Trailer = New MediaContainers.Trailer
+ txtLocalTrailer.Text = String.Empty
End Sub
Private Sub btnExtrafanartsRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExtrafanartsRemove.Click
@@ -1032,17 +1032,16 @@ Public Class dlgEditMovie
'End Sub
Private Sub btnSetThemeScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetThemeScrape.Click
- Dim dlgThmS As dlgThemeSelect
- Dim aUrlList As New List(Of Themes)
+ Dim dThemeSelect As dlgThemeSelect
+ Dim tList As New List(Of MediaContainers.Theme)
ThemeStop()
- If Not ModulesManager.Instance.ScrapeTheme_Movie(tmpDBElement, aUrlList) Then
- If aUrlList.Count > 0 Then
- dlgThmS = New dlgThemeSelect()
- If dlgThmS.ShowDialog(tmpDBElement, aUrlList) = DialogResult.OK Then
- MovieTheme = dlgThmS.Results.WebTheme
- MovieTheme.isEdit = True
- ThemeAddToPlayer(MovieTheme)
+ If Not ModulesManager.Instance.ScrapeTheme_Movie(tmpDBElement, Enums.ModifierType.MainTheme, tList) Then
+ If tList.Count > 0 Then
+ dThemeSelect = New dlgThemeSelect()
+ If dThemeSelect.ShowDialog(tmpDBElement, tList, True) = DialogResult.OK Then
+ tmpDBElement.Theme = dThemeSelect.Result
+ LoadTheme(tmpDBElement.Theme)
End If
Else
MessageBox.Show(Master.eLang.GetString(1163, "No Themes found"), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Information)
@@ -1053,15 +1052,15 @@ Public Class dlgEditMovie
Private Sub btnSetThemeLocal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetThemeLocal.Click
ThemeStop()
With ofdLocalFiles
- .InitialDirectory = Directory.GetParent(tmpDBElement.Filename).FullName
- .Filter = Master.eLang.GetString(1285, "Themes") + "|*.mp3;*.wav"
- .FilterIndex = 0
- End With
+ .InitialDirectory = Directory.GetParent(tmpDBElement.Filename).FullName
+ .Filter = FileUtils.Common.GetOpenFileDialogFilter_Theme()
+ .FilterIndex = 0
+ End With
If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
- MovieTheme.FromFile(ofdLocalFiles.FileName)
- MovieTheme.isEdit = True
- ThemeAddToPlayer(MovieTheme)
+ tmpDBElement.Theme = New MediaContainers.Theme With {.LocalFilePath = ofdLocalFiles.FileName}
+ tmpDBElement.Theme.LoadAndCache()
+ LoadTheme(tmpDBElement.Theme)
End If
End Sub
@@ -1075,7 +1074,7 @@ Public Class dlgEditMovie
If dlgTrlS.ShowDialog(tmpDBElement, tList, False, True, True) = DialogResult.OK Then
tResults = dlgTrlS.Result
tmpDBElement.Trailer = tResults
- TrailerPlaylistAdd(tmpDBElement.Trailer)
+ LoadTrailer(tmpDBElement.Trailer)
End If
End Sub
@@ -1084,25 +1083,26 @@ Public Class dlgEditMovie
Dim tList As New List(Of MediaContainers.Trailer)
TrailerStop()
- dlgTrlS = New dlgTrailerSelect()
+ dlgTrlS = New dlgTrailerSelect()
If dlgTrlS.ShowDialog(tmpDBElement, tList, False, True, True) = DialogResult.OK Then
tmpDBElement.Trailer = dlgTrlS.Result
- TrailerPlaylistAdd(tmpDBElement.Trailer)
+ LoadTrailer(tmpDBElement.Trailer)
End If
End Sub
Private Sub btnSetTrailerLocal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetTrailerLocal.Click
TrailerStop()
+ Dim strValidExtesions As String() = Master.eSettings.FileSystemValidExts.ToArray
With ofdLocalFiles
.InitialDirectory = Directory.GetParent(tmpDBElement.Filename).FullName
- .Filter = Master.eLang.GetString(1195, "Trailers") + "|*.mp4;*.avi"
+ .Filter = FileUtils.Common.GetOpenFileDialogFilter_Video(Master.eLang.GetString(1195, "Trailers"))
.FilterIndex = 0
End With
If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
- tmpDBElement.Trailer.TrailerOriginal.LoadFromFile(ofdLocalFiles.FileName)
- tmpDBElement.Trailer.TrailerOriginal.isEdit = True
- TrailerPlaylistAdd(tmpDBElement.Trailer)
+ tmpDBElement.Trailer = New MediaContainers.Trailer With {.LocalFilePath = ofdLocalFiles.FileName}
+ tmpDBElement.Trailer.LoadAndCache()
+ LoadTrailer(tmpDBElement.Trailer)
End If
End Sub
@@ -1138,13 +1138,18 @@ Public Class dlgEditMovie
'btnThemePlay.Text = "Play"
End Sub
- Private Sub ThemeAddToPlayer(ByVal Theme As Themes)
- 'Dim Link As String = String.Empty
- 'axVLCTheme.playlist.stop()
- 'axVLCTheme.playlist.items.clear()
+ Private Sub LoadTheme(ByVal Theme As MediaContainers.Theme)
+ txtLocalTheme.Text =
+ If(Theme.LocalFilePathSpecified, Theme.LocalFilePath,
+ If(Theme.URLAudioStreamSpecified, Theme.URLAudioStream,
+ If(Theme.URLWebsiteSpecified, Theme.URLWebsite, String.Empty)))
End Sub
- Private Sub TrailerPlaylistAdd(ByVal Trailer As MediaContainers.Trailer)
+ Private Sub LoadTrailer(ByVal Trailer As MediaContainers.Trailer)
+ txtLocalTrailer.Text =
+ If(Trailer.LocalFilePathSpecified, Trailer.LocalFilePath,
+ If(Trailer.URLVideoStreamSpecified, Trailer.URLVideoStream,
+ If(Trailer.URLWebsiteSpecified, Trailer.URLWebsite, String.Empty)))
If AnyTrailerPlayerEnabled Then
Dim paramsTrailerPreview As New List(Of Object)(New String() {Trailer.URLVideoStream})
ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.MediaPlayerPlaylistAdd_Video, paramsTrailerPreview, Nothing, True)
@@ -1436,11 +1441,6 @@ Public Class dlgEditMovie
'GrabTheFrame()
End Sub
- Private Sub dlgEditMovie_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
- MovieTheme.Dispose()
- MovieTheme = Nothing
- End Sub
-
Private Sub dlgEditMovie_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
pbBanner.AllowDrop = True
pbClearArt.AllowDrop = True
@@ -1565,12 +1565,6 @@ Public Class dlgEditMovie
SelectMPAA()
- If String.IsNullOrEmpty(tmpDBElement.ThemePath) Then
- '.btnPlayTheme.Enabled = False
- End If
-
- '.btnDLTheme.Enabled = Master.eSettings.MovieThemeEnable AndAlso Master.eSettings.MovieThemeAnyEnabled AndAlso ModulesManager.Instance.QueryTrailerScraperCapabilities(Enums.ScraperCapabilities.Theme)
-
If Not String.IsNullOrEmpty(tmpDBElement.Movie.Trailer) Then
txtTrailer.Text = tmpDBElement.Movie.Trailer
btnPlayTrailer.Enabled = True
@@ -1799,22 +1793,18 @@ Public Class dlgEditMovie
End With
'Theme
- If Not Master.eSettings.MovieThemeAnyEnabled Then
+ If Master.eSettings.MovieThemeAnyEnabled Then
+ If Not String.IsNullOrEmpty(tmpDBElement.Theme.LocalFilePath) OrElse Not String.IsNullOrEmpty(tmpDBElement.Theme.URLAudioStream) Then
+ LoadTheme(tmpDBElement.Theme)
+ End If
+ Else
tcEdit.TabPages.Remove(tpTheme)
End If
- If Not String.IsNullOrEmpty(tmpDBElement.ThemePath) AndAlso tmpDBElement.ThemePath.Substring(0, 1) = ":" Then
- MovieTheme.FromWeb(tmpDBElement.ThemePath.Substring(1, tmpDBElement.ThemePath.Length - 1))
- ThemeAddToPlayer(MovieTheme)
- ElseIf Not String.IsNullOrEmpty(tmpDBElement.ThemePath) Then
- MovieTheme.FromFile(tmpDBElement.ThemePath)
- ThemeAddToPlayer(MovieTheme)
- End If
-
'Trailer
If Master.eSettings.MovieTrailerAnyEnabled Then
If Not String.IsNullOrEmpty(tmpDBElement.Trailer.LocalFilePath) OrElse Not String.IsNullOrEmpty(tmpDBElement.Trailer.URLVideoStream) Then
- TrailerPlaylistAdd(tmpDBElement.Trailer)
+ LoadTrailer(tmpDBElement.Trailer)
End If
Else
tcEdit.TabPages.Remove(tpTrailer)
@@ -2394,14 +2384,6 @@ Public Class dlgEditMovie
Next
End If
- If Not String.IsNullOrEmpty(MovieTheme.Extention) AndAlso Not MovieTheme.toRemove Then 'TODO: proper check, extention check is only a woraround
- Dim tPath As String = MovieTheme.SaveAsMovieTheme(tmpDBElement)
- tmpDBElement.ThemePath = tPath
- Else
- Themes.DeleteMovieTheme(tmpDBElement)
- tmpDBElement.ThemePath = String.Empty
- End If
-
If Path.GetExtension(tmpDBElement.Filename) = ".disc" Then
Dim StubFile As String = tmpDBElement.Filename
Dim Title As String = txtMediaStubTitle.Text
@@ -2720,6 +2702,62 @@ Public Class dlgEditMovie
End If
End Sub
+ Private Sub btnLocalThemePlay_Click(sender As Object, e As EventArgs) Handles btnLocalThemePlay.Click
+ Try
+ Dim tPath As String = String.Empty
+
+ If Not String.IsNullOrEmpty(txtLocalTheme.Text) Then
+ tPath = String.Concat("""", txtLocalTheme.Text, """")
+ End If
+
+ If Not String.IsNullOrEmpty(tPath) Then
+ If Master.isWindows Then
+ Process.Start(tPath)
+ Else
+ Using Explorer As New Process
+ Explorer.StartInfo.FileName = "xdg-open"
+ Explorer.StartInfo.Arguments = tPath
+ Explorer.Start()
+ End Using
+ End If
+ End If
+ Catch
+ MessageBox.Show(Master.eLang.GetString(270, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), Master.eLang.GetString(271, "Error Playing Trailer"), MessageBoxButtons.OK, MessageBoxIcon.Warning)
+ End Try
+ End Sub
+
+ Private Sub btnLocalTrailerPlay_Click(sender As Object, e As EventArgs) Handles btnLocalTrailerPlay.Click
+ Try
+ Dim tPath As String = String.Empty
+
+ If Not String.IsNullOrEmpty(txtLocalTrailer.Text) Then
+ tPath = String.Concat("""", txtLocalTrailer.Text, """")
+ End If
+
+ If Not String.IsNullOrEmpty(tPath) Then
+ If Master.isWindows Then
+ Process.Start(tPath)
+ Else
+ Using Explorer As New Process
+ Explorer.StartInfo.FileName = "xdg-open"
+ Explorer.StartInfo.Arguments = tPath
+ Explorer.Start()
+ End Using
+ End If
+ End If
+ Catch
+ MessageBox.Show(Master.eLang.GetString(270, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), Master.eLang.GetString(271, "Error Playing Trailer"), MessageBoxButtons.OK, MessageBoxIcon.Warning)
+ End Try
+ End Sub
+
+ Private Sub txtLocalTheme_TextChanged(sender As Object, e As EventArgs) Handles txtLocalTheme.TextChanged
+ btnLocalThemePlay.Enabled = Not String.IsNullOrEmpty(txtLocalTheme.Text)
+ End Sub
+
+ Private Sub txtLocalTrailer_TextChanged(sender As Object, e As EventArgs) Handles txtLocalTrailer.TextChanged
+ btnLocalTrailerPlay.Enabled = Not String.IsNullOrEmpty(txtLocalTrailer.Text)
+ End Sub
+
#End Region 'Methods
#Region "Nested Types"
diff --git a/EmberMediaManager/dlgEditTVShow.Designer.vb b/EmberMediaManager/dlgEditTVShow.Designer.vb
index d7bbb05f4..9a893ed1f 100644
--- a/EmberMediaManager/dlgEditTVShow.Designer.vb
+++ b/EmberMediaManager/dlgEditTVShow.Designer.vb
@@ -29,7 +29,7 @@ Partial Class dlgEditTVShow
Me.pbTopLogo = New System.Windows.Forms.PictureBox()
Me.Cancel_Button = New System.Windows.Forms.Button()
Me.OK_Button = New System.Windows.Forms.Button()
- Me.ofdImage = New System.Windows.Forms.OpenFileDialog()
+ Me.ofdLocalFiles = New System.Windows.Forms.OpenFileDialog()
Me.cbOrdering = New System.Windows.Forms.ComboBox()
Me.lblOrdering = New System.Windows.Forms.Label()
Me.cbEpisodeSorting = New System.Windows.Forms.ComboBox()
@@ -141,6 +141,17 @@ Partial Class dlgEditTVShow
Me.tcEdit = New System.Windows.Forms.TabControl()
Me.lblLanguage = New System.Windows.Forms.Label()
Me.cbSourceLanguage = New System.Windows.Forms.ComboBox()
+ Me.tpTheme = New System.Windows.Forms.TabPage()
+ Me.pnlThemePreview = New System.Windows.Forms.Panel()
+ Me.pnlThemePreviewNoPlayer = New System.Windows.Forms.Panel()
+ Me.tblThemePreviewNoPlayer = New System.Windows.Forms.TableLayoutPanel()
+ Me.lblThemePreviewNoPlayer = New System.Windows.Forms.Label()
+ Me.btnSetThemeDL = New System.Windows.Forms.Button()
+ Me.btnRemoveTheme = New System.Windows.Forms.Button()
+ Me.btnSetThemeScrape = New System.Windows.Forms.Button()
+ Me.btnSetThemeLocal = New System.Windows.Forms.Button()
+ Me.btnLocalThemePlay = New System.Windows.Forms.Button()
+ Me.txtLocalTheme = New System.Windows.Forms.TextBox()
Me.pnlTop.SuspendLayout()
CType(Me.pbTopLogo, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tpExtrafanarts.SuspendLayout()
@@ -172,6 +183,10 @@ Partial Class dlgEditTVShow
CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tcEdit.SuspendLayout()
+ Me.tpTheme.SuspendLayout()
+ Me.pnlThemePreview.SuspendLayout()
+ Me.pnlThemePreviewNoPlayer.SuspendLayout()
+ Me.tblThemePreviewNoPlayer.SuspendLayout()
Me.SuspendLayout()
'
'pnlTop
@@ -224,8 +239,9 @@ Partial Class dlgEditTVShow
'
'Cancel_Button
'
+ Me.Cancel_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel
- Me.Cancel_Button.Location = New System.Drawing.Point(781, 565)
+ Me.Cancel_Button.Location = New System.Drawing.Point(781, 592)
Me.Cancel_Button.Name = "Cancel_Button"
Me.Cancel_Button.Size = New System.Drawing.Size(67, 23)
Me.Cancel_Button.TabIndex = 1
@@ -233,7 +249,8 @@ Partial Class dlgEditTVShow
'
'OK_Button
'
- Me.OK_Button.Location = New System.Drawing.Point(708, 565)
+ Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
+ Me.OK_Button.Location = New System.Drawing.Point(708, 592)
Me.OK_Button.Name = "OK_Button"
Me.OK_Button.Size = New System.Drawing.Size(67, 23)
Me.OK_Button.TabIndex = 0
@@ -241,18 +258,20 @@ Partial Class dlgEditTVShow
'
'cbOrdering
'
+ Me.cbOrdering.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cbOrdering.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cbOrdering.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
Me.cbOrdering.FormattingEnabled = True
- Me.cbOrdering.Location = New System.Drawing.Point(142, 565)
+ Me.cbOrdering.Location = New System.Drawing.Point(142, 592)
Me.cbOrdering.Name = "cbOrdering"
Me.cbOrdering.Size = New System.Drawing.Size(166, 21)
Me.cbOrdering.TabIndex = 5
'
'lblOrdering
'
+ Me.lblOrdering.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblOrdering.AutoSize = True
- Me.lblOrdering.Location = New System.Drawing.Point(5, 570)
+ Me.lblOrdering.Location = New System.Drawing.Point(5, 597)
Me.lblOrdering.Name = "lblOrdering"
Me.lblOrdering.Size = New System.Drawing.Size(101, 13)
Me.lblOrdering.TabIndex = 4
@@ -260,18 +279,20 @@ Partial Class dlgEditTVShow
'
'cbEpisodeSorting
'
+ Me.cbEpisodeSorting.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cbEpisodeSorting.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cbEpisodeSorting.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
Me.cbEpisodeSorting.FormattingEnabled = True
- Me.cbEpisodeSorting.Location = New System.Drawing.Point(142, 592)
+ Me.cbEpisodeSorting.Location = New System.Drawing.Point(142, 619)
Me.cbEpisodeSorting.Name = "cbEpisodeSorting"
Me.cbEpisodeSorting.Size = New System.Drawing.Size(166, 21)
Me.cbEpisodeSorting.TabIndex = 5
'
'lblEpisodeSorting
'
+ Me.lblEpisodeSorting.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblEpisodeSorting.AutoSize = True
- Me.lblEpisodeSorting.Location = New System.Drawing.Point(5, 595)
+ Me.lblEpisodeSorting.Location = New System.Drawing.Point(5, 622)
Me.lblEpisodeSorting.Name = "lblEpisodeSorting"
Me.lblEpisodeSorting.Size = New System.Drawing.Size(103, 13)
Me.lblEpisodeSorting.TabIndex = 4
@@ -288,7 +309,7 @@ Partial Class dlgEditTVShow
Me.tpExtrafanarts.Controls.Add(Me.pbExtrafanarts)
Me.tpExtrafanarts.Location = New System.Drawing.Point(4, 22)
Me.tpExtrafanarts.Name = "tpExtrafanarts"
- Me.tpExtrafanarts.Size = New System.Drawing.Size(836, 463)
+ Me.tpExtrafanarts.Size = New System.Drawing.Size(836, 490)
Me.tpExtrafanarts.TabIndex = 12
Me.tpExtrafanarts.Text = "Extrafanarts"
Me.tpExtrafanarts.UseVisualStyleBackColor = True
@@ -376,7 +397,7 @@ Partial Class dlgEditTVShow
Me.tpFanart.Controls.Add(Me.pbFanart)
Me.tpFanart.Location = New System.Drawing.Point(4, 22)
Me.tpFanart.Name = "tpFanart"
- Me.tpFanart.Size = New System.Drawing.Size(836, 463)
+ Me.tpFanart.Size = New System.Drawing.Size(836, 490)
Me.tpFanart.TabIndex = 2
Me.tpFanart.Text = "Fanart"
Me.tpFanart.UseVisualStyleBackColor = True
@@ -440,7 +461,7 @@ Partial Class dlgEditTVShow
Me.btnSetFanartLocal.Name = "btnSetFanartLocal"
Me.btnSetFanartLocal.Size = New System.Drawing.Size(96, 83)
Me.btnSetFanartLocal.TabIndex = 1
- Me.btnSetFanartLocal.Text = "Local"
+ Me.btnSetFanartLocal.Text = "Local Browse"
Me.btnSetFanartLocal.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnSetFanartLocal.UseVisualStyleBackColor = True
'
@@ -465,7 +486,7 @@ Partial Class dlgEditTVShow
Me.tpClearLogo.Controls.Add(Me.pbClearLogo)
Me.tpClearLogo.Location = New System.Drawing.Point(4, 22)
Me.tpClearLogo.Name = "tpClearLogo"
- Me.tpClearLogo.Size = New System.Drawing.Size(836, 463)
+ Me.tpClearLogo.Size = New System.Drawing.Size(836, 490)
Me.tpClearLogo.TabIndex = 11
Me.tpClearLogo.Text = "ClearLogo"
Me.tpClearLogo.UseVisualStyleBackColor = True
@@ -554,7 +575,7 @@ Partial Class dlgEditTVShow
Me.tpClearArt.Controls.Add(Me.pbClearArt)
Me.tpClearArt.Location = New System.Drawing.Point(4, 22)
Me.tpClearArt.Name = "tpClearArt"
- Me.tpClearArt.Size = New System.Drawing.Size(836, 463)
+ Me.tpClearArt.Size = New System.Drawing.Size(836, 490)
Me.tpClearArt.TabIndex = 10
Me.tpClearArt.Text = "ClearArt"
Me.tpClearArt.UseVisualStyleBackColor = True
@@ -643,7 +664,7 @@ Partial Class dlgEditTVShow
Me.tpCharacterArt.Controls.Add(Me.pbCharacterArt)
Me.tpCharacterArt.Location = New System.Drawing.Point(4, 22)
Me.tpCharacterArt.Name = "tpCharacterArt"
- Me.tpCharacterArt.Size = New System.Drawing.Size(836, 463)
+ Me.tpCharacterArt.Size = New System.Drawing.Size(836, 490)
Me.tpCharacterArt.TabIndex = 9
Me.tpCharacterArt.Text = "CharacterArt"
Me.tpCharacterArt.UseVisualStyleBackColor = True
@@ -732,7 +753,7 @@ Partial Class dlgEditTVShow
Me.tpLandscape.Controls.Add(Me.pbLandscape)
Me.tpLandscape.Location = New System.Drawing.Point(4, 22)
Me.tpLandscape.Name = "tpLandscape"
- Me.tpLandscape.Size = New System.Drawing.Size(836, 463)
+ Me.tpLandscape.Size = New System.Drawing.Size(836, 490)
Me.tpLandscape.TabIndex = 7
Me.tpLandscape.Text = "Landscape"
Me.tpLandscape.UseVisualStyleBackColor = True
@@ -796,7 +817,7 @@ Partial Class dlgEditTVShow
Me.btnSetLandscapeLocal.Name = "btnSetLandscapeLocal"
Me.btnSetLandscapeLocal.Size = New System.Drawing.Size(96, 83)
Me.btnSetLandscapeLocal.TabIndex = 7
- Me.btnSetLandscapeLocal.Text = "Local"
+ Me.btnSetLandscapeLocal.Text = "Local Browse"
Me.btnSetLandscapeLocal.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnSetLandscapeLocal.UseVisualStyleBackColor = True
'
@@ -821,7 +842,7 @@ Partial Class dlgEditTVShow
Me.tpBanner.Controls.Add(Me.pbBanner)
Me.tpBanner.Location = New System.Drawing.Point(4, 22)
Me.tpBanner.Name = "tpBanner"
- Me.tpBanner.Size = New System.Drawing.Size(836, 463)
+ Me.tpBanner.Size = New System.Drawing.Size(836, 490)
Me.tpBanner.TabIndex = 4
Me.tpBanner.Text = "Banner"
Me.tpBanner.UseVisualStyleBackColor = True
@@ -885,7 +906,7 @@ Partial Class dlgEditTVShow
Me.btnSetBannerLocal.Name = "btnSetBannerLocal"
Me.btnSetBannerLocal.Size = New System.Drawing.Size(96, 83)
Me.btnSetBannerLocal.TabIndex = 7
- Me.btnSetBannerLocal.Text = "Local"
+ Me.btnSetBannerLocal.Text = "Local Browse"
Me.btnSetBannerLocal.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnSetBannerLocal.UseVisualStyleBackColor = True
'
@@ -911,7 +932,7 @@ Partial Class dlgEditTVShow
Me.tpPoster.Location = New System.Drawing.Point(4, 22)
Me.tpPoster.Name = "tpPoster"
Me.tpPoster.Padding = New System.Windows.Forms.Padding(3)
- Me.tpPoster.Size = New System.Drawing.Size(836, 463)
+ Me.tpPoster.Size = New System.Drawing.Size(836, 490)
Me.tpPoster.TabIndex = 1
Me.tpPoster.Text = "Poster"
Me.tpPoster.UseVisualStyleBackColor = True
@@ -975,7 +996,7 @@ Partial Class dlgEditTVShow
Me.btnSetPosterLocal.Name = "btnSetPosterLocal"
Me.btnSetPosterLocal.Size = New System.Drawing.Size(96, 83)
Me.btnSetPosterLocal.TabIndex = 1
- Me.btnSetPosterLocal.Text = "Local"
+ Me.btnSetPosterLocal.Text = "Local Browse"
Me.btnSetPosterLocal.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnSetPosterLocal.UseVisualStyleBackColor = True
'
@@ -1037,7 +1058,7 @@ Partial Class dlgEditTVShow
Me.tpDetails.Location = New System.Drawing.Point(4, 22)
Me.tpDetails.Name = "tpDetails"
Me.tpDetails.Padding = New System.Windows.Forms.Padding(3)
- Me.tpDetails.Size = New System.Drawing.Size(836, 463)
+ Me.tpDetails.Size = New System.Drawing.Size(836, 490)
Me.tpDetails.TabIndex = 0
Me.tpDetails.Text = "Details"
Me.tpDetails.UseVisualStyleBackColor = True
@@ -1455,17 +1476,19 @@ Partial Class dlgEditTVShow
Me.tcEdit.Controls.Add(Me.tpClearLogo)
Me.tcEdit.Controls.Add(Me.tpFanart)
Me.tcEdit.Controls.Add(Me.tpExtrafanarts)
+ Me.tcEdit.Controls.Add(Me.tpTheme)
Me.tcEdit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.tcEdit.Location = New System.Drawing.Point(4, 70)
Me.tcEdit.Name = "tcEdit"
Me.tcEdit.SelectedIndex = 0
- Me.tcEdit.Size = New System.Drawing.Size(844, 489)
+ Me.tcEdit.Size = New System.Drawing.Size(844, 516)
Me.tcEdit.TabIndex = 3
'
'lblLanguage
'
+ Me.lblLanguage.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblLanguage.AutoSize = True
- Me.lblLanguage.Location = New System.Drawing.Point(339, 570)
+ Me.lblLanguage.Location = New System.Drawing.Point(339, 597)
Me.lblLanguage.Name = "lblLanguage"
Me.lblLanguage.Size = New System.Drawing.Size(61, 13)
Me.lblLanguage.TabIndex = 4
@@ -1473,20 +1496,154 @@ Partial Class dlgEditTVShow
'
'cbSourceLanguage
'
+ Me.cbSourceLanguage.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cbSourceLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cbSourceLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
- Me.cbSourceLanguage.Location = New System.Drawing.Point(418, 565)
+ Me.cbSourceLanguage.Location = New System.Drawing.Point(418, 592)
Me.cbSourceLanguage.Name = "cbSourceLanguage"
Me.cbSourceLanguage.Size = New System.Drawing.Size(172, 21)
Me.cbSourceLanguage.TabIndex = 9
'
+ 'tpTheme
+ '
+ Me.tpTheme.Controls.Add(Me.pnlThemePreview)
+ Me.tpTheme.Controls.Add(Me.btnSetThemeDL)
+ Me.tpTheme.Controls.Add(Me.btnRemoveTheme)
+ Me.tpTheme.Controls.Add(Me.btnSetThemeScrape)
+ Me.tpTheme.Controls.Add(Me.btnSetThemeLocal)
+ Me.tpTheme.Controls.Add(Me.btnLocalThemePlay)
+ Me.tpTheme.Controls.Add(Me.txtLocalTheme)
+ Me.tpTheme.Location = New System.Drawing.Point(4, 22)
+ Me.tpTheme.Name = "tpTheme"
+ Me.tpTheme.Padding = New System.Windows.Forms.Padding(3)
+ Me.tpTheme.Size = New System.Drawing.Size(836, 490)
+ Me.tpTheme.TabIndex = 13
+ Me.tpTheme.Text = "Theme"
+ Me.tpTheme.UseVisualStyleBackColor = True
+ '
+ 'pnlThemePreview
+ '
+ Me.pnlThemePreview.BackColor = System.Drawing.Color.DimGray
+ Me.pnlThemePreview.Controls.Add(Me.pnlThemePreviewNoPlayer)
+ Me.pnlThemePreview.Location = New System.Drawing.Point(6, 6)
+ Me.pnlThemePreview.Name = "pnlThemePreview"
+ Me.pnlThemePreview.Size = New System.Drawing.Size(724, 440)
+ Me.pnlThemePreview.TabIndex = 61
+ '
+ 'pnlThemePreviewNoPlayer
+ '
+ Me.pnlThemePreviewNoPlayer.BackColor = System.Drawing.Color.White
+ Me.pnlThemePreviewNoPlayer.Controls.Add(Me.tblThemePreviewNoPlayer)
+ Me.pnlThemePreviewNoPlayer.Location = New System.Drawing.Point(285, 203)
+ Me.pnlThemePreviewNoPlayer.Name = "pnlThemePreviewNoPlayer"
+ Me.pnlThemePreviewNoPlayer.Size = New System.Drawing.Size(242, 56)
+ Me.pnlThemePreviewNoPlayer.TabIndex = 0
+ '
+ 'tblThemePreviewNoPlayer
+ '
+ Me.tblThemePreviewNoPlayer.AutoSize = True
+ Me.tblThemePreviewNoPlayer.ColumnCount = 1
+ Me.tblThemePreviewNoPlayer.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
+ Me.tblThemePreviewNoPlayer.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
+ Me.tblThemePreviewNoPlayer.Controls.Add(Me.lblThemePreviewNoPlayer, 0, 0)
+ Me.tblThemePreviewNoPlayer.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.tblThemePreviewNoPlayer.Location = New System.Drawing.Point(0, 0)
+ Me.tblThemePreviewNoPlayer.Name = "tblThemePreviewNoPlayer"
+ Me.tblThemePreviewNoPlayer.RowCount = 1
+ Me.tblThemePreviewNoPlayer.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
+ Me.tblThemePreviewNoPlayer.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 56.0!))
+ Me.tblThemePreviewNoPlayer.Size = New System.Drawing.Size(242, 56)
+ Me.tblThemePreviewNoPlayer.TabIndex = 0
+ '
+ 'lblThemePreviewNoPlayer
+ '
+ Me.lblThemePreviewNoPlayer.Anchor = System.Windows.Forms.AnchorStyles.None
+ Me.lblThemePreviewNoPlayer.AutoSize = True
+ Me.lblThemePreviewNoPlayer.Location = New System.Drawing.Point(52, 21)
+ Me.lblThemePreviewNoPlayer.Name = "lblThemePreviewNoPlayer"
+ Me.lblThemePreviewNoPlayer.Size = New System.Drawing.Size(137, 13)
+ Me.lblThemePreviewNoPlayer.TabIndex = 0
+ Me.lblThemePreviewNoPlayer.Text = "no Media Player enabled"
+ '
+ 'btnSetThemeDL
+ '
+ Me.btnSetThemeDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.btnSetThemeDL.Image = CType(resources.GetObject("btnSetThemeDL.Image"), System.Drawing.Image)
+ Me.btnSetThemeDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnSetThemeDL.Location = New System.Drawing.Point(735, 180)
+ Me.btnSetThemeDL.Name = "btnSetThemeDL"
+ Me.btnSetThemeDL.Size = New System.Drawing.Size(96, 83)
+ Me.btnSetThemeDL.TabIndex = 59
+ Me.btnSetThemeDL.Text = "Download"
+ Me.btnSetThemeDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnSetThemeDL.UseVisualStyleBackColor = True
+ '
+ 'btnRemoveTheme
+ '
+ Me.btnRemoveTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.btnRemoveTheme.Image = CType(resources.GetObject("btnRemoveTheme.Image"), System.Drawing.Image)
+ Me.btnRemoveTheme.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnRemoveTheme.Location = New System.Drawing.Point(735, 363)
+ Me.btnRemoveTheme.Name = "btnRemoveTheme"
+ Me.btnRemoveTheme.Size = New System.Drawing.Size(96, 83)
+ Me.btnRemoveTheme.TabIndex = 60
+ Me.btnRemoveTheme.Text = "Remove"
+ Me.btnRemoveTheme.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnRemoveTheme.UseVisualStyleBackColor = True
+ '
+ 'btnSetThemeScrape
+ '
+ Me.btnSetThemeScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.btnSetThemeScrape.Image = CType(resources.GetObject("btnSetThemeScrape.Image"), System.Drawing.Image)
+ Me.btnSetThemeScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnSetThemeScrape.Location = New System.Drawing.Point(735, 93)
+ Me.btnSetThemeScrape.Name = "btnSetThemeScrape"
+ Me.btnSetThemeScrape.Size = New System.Drawing.Size(96, 83)
+ Me.btnSetThemeScrape.TabIndex = 58
+ Me.btnSetThemeScrape.Text = "Scrape"
+ Me.btnSetThemeScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnSetThemeScrape.UseVisualStyleBackColor = True
+ '
+ 'btnSetThemeLocal
+ '
+ Me.btnSetThemeLocal.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.btnSetThemeLocal.Image = CType(resources.GetObject("btnSetThemeLocal.Image"), System.Drawing.Image)
+ Me.btnSetThemeLocal.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnSetThemeLocal.Location = New System.Drawing.Point(735, 6)
+ Me.btnSetThemeLocal.Name = "btnSetThemeLocal"
+ Me.btnSetThemeLocal.Size = New System.Drawing.Size(96, 83)
+ Me.btnSetThemeLocal.TabIndex = 57
+ Me.btnSetThemeLocal.Text = "Local Browse"
+ Me.btnSetThemeLocal.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnSetThemeLocal.UseVisualStyleBackColor = True
+ '
+ 'btnLocalThemePlay
+ '
+ Me.btnLocalThemePlay.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.btnLocalThemePlay.Enabled = False
+ Me.btnLocalThemePlay.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon
+ Me.btnLocalThemePlay.Location = New System.Drawing.Point(707, 452)
+ Me.btnLocalThemePlay.Name = "btnLocalThemePlay"
+ Me.btnLocalThemePlay.Size = New System.Drawing.Size(23, 22)
+ Me.btnLocalThemePlay.TabIndex = 63
+ Me.btnLocalThemePlay.UseVisualStyleBackColor = True
+ '
+ 'txtLocalTheme
+ '
+ Me.txtLocalTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte))
+ Me.txtLocalTheme.Location = New System.Drawing.Point(6, 452)
+ Me.txtLocalTheme.Name = "txtLocalTheme"
+ Me.txtLocalTheme.ReadOnly = True
+ Me.txtLocalTheme.Size = New System.Drawing.Size(695, 22)
+ Me.txtLocalTheme.TabIndex = 62
+ '
'dlgEditTVShow
'
Me.AcceptButton = Me.OK_Button
Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
Me.CancelButton = Me.Cancel_Button
- Me.ClientSize = New System.Drawing.Size(853, 621)
+ Me.ClientSize = New System.Drawing.Size(853, 648)
Me.Controls.Add(Me.cbSourceLanguage)
Me.Controls.Add(Me.lblEpisodeSorting)
Me.Controls.Add(Me.cbEpisodeSorting)
@@ -1537,6 +1694,13 @@ Partial Class dlgEditTVShow
CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit()
Me.tcEdit.ResumeLayout(False)
+ Me.tpTheme.ResumeLayout(False)
+ Me.tpTheme.PerformLayout()
+ Me.pnlThemePreview.ResumeLayout(False)
+ Me.pnlThemePreviewNoPlayer.ResumeLayout(False)
+ Me.pnlThemePreviewNoPlayer.PerformLayout()
+ Me.tblThemePreviewNoPlayer.ResumeLayout(False)
+ Me.tblThemePreviewNoPlayer.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -1547,7 +1711,7 @@ Partial Class dlgEditTVShow
Friend WithEvents pbTopLogo As System.Windows.Forms.PictureBox
Friend WithEvents Cancel_Button As System.Windows.Forms.Button
Friend WithEvents OK_Button As System.Windows.Forms.Button
- Friend WithEvents ofdImage As System.Windows.Forms.OpenFileDialog
+ Friend WithEvents ofdLocalFiles As System.Windows.Forms.OpenFileDialog
Friend WithEvents cbOrdering As System.Windows.Forms.ComboBox
Friend WithEvents lblOrdering As System.Windows.Forms.Label
Friend WithEvents cbEpisodeSorting As System.Windows.Forms.ComboBox
@@ -1659,5 +1823,15 @@ Partial Class dlgEditTVShow
Friend WithEvents lblOriginalTitle As System.Windows.Forms.Label
Friend WithEvents lblLanguage As System.Windows.Forms.Label
Friend WithEvents cbSourceLanguage As System.Windows.Forms.ComboBox
-
+ Friend WithEvents tpTheme As TabPage
+ Friend WithEvents pnlThemePreview As Panel
+ Friend WithEvents pnlThemePreviewNoPlayer As Panel
+ Friend WithEvents tblThemePreviewNoPlayer As TableLayoutPanel
+ Friend WithEvents lblThemePreviewNoPlayer As Label
+ Friend WithEvents btnSetThemeDL As Button
+ Friend WithEvents btnRemoveTheme As Button
+ Friend WithEvents btnSetThemeScrape As Button
+ Friend WithEvents btnSetThemeLocal As Button
+ Friend WithEvents btnLocalThemePlay As Button
+ Friend WithEvents txtLocalTheme As TextBox
End Class
diff --git a/EmberMediaManager/dlgEditTVShow.resx b/EmberMediaManager/dlgEditTVShow.resx
index 54b5f5537..c7f87be3a 100644
--- a/EmberMediaManager/dlgEditTVShow.resx
+++ b/EmberMediaManager/dlgEditTVShow.resx
@@ -2027,6 +2027,253 @@
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
+ l+AV3x3A/g9kt3I5oWO4VQAAAABJRU5ErkJggg==
+
+
+
+
+ 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
diff --git a/EmberMediaManager/dlgEditTVShow.vb b/EmberMediaManager/dlgEditTVShow.vb
index aeeba4675..0a131571e 100644
--- a/EmberMediaManager/dlgEditTVShow.vb
+++ b/EmberMediaManager/dlgEditTVShow.vb
@@ -279,6 +279,12 @@ Public Class dlgEditTVShow
tmpDBElement.ImagesContainer.Poster = New MediaContainers.Image
End Sub
+ Private Sub btnRemoveTheme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveTheme.Click
+ 'ThemeStop()
+ tmpDBElement.Theme = New MediaContainers.Theme
+ txtLocalTheme.Text = String.Empty
+ End Sub
+
Private Sub btnSetBannerScrape_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetBannerScrape.Click
Dim aContainer As New MediaContainers.SearchResultsContainer
Dim ScrapeModifiers As New Structures.ScrapeModifiers
@@ -310,15 +316,15 @@ Public Class dlgEditTVShow
Private Sub btnSetBannerLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetBannerLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.Banner = tImage
pbBanner.Image = tImage.ImageOriginal.Image
@@ -384,15 +390,15 @@ Public Class dlgEditTVShow
Private Sub btnSetCharacterArtLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetCharacterArtLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.CharacterArt = tImage
pbCharacterArt.Image = tImage.ImageOriginal.Image
@@ -478,15 +484,15 @@ Public Class dlgEditTVShow
Private Sub btnSetClearArtLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetClearArtLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.ClearArt = tImage
pbClearArt.Image = tImage.ImageOriginal.Image
@@ -552,15 +558,15 @@ Public Class dlgEditTVShow
Private Sub btnSetClearLogoLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetClearLogoLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.ClearLogo = tImage
pbClearLogo.Image = tImage.ImageOriginal.Image
@@ -626,15 +632,15 @@ Public Class dlgEditTVShow
Private Sub btnSetFanartLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetFanartLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 4
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.Fanart = tImage
pbFanart.Image = tImage.ImageOriginal.Image
@@ -680,15 +686,15 @@ Public Class dlgEditTVShow
Private Sub btnSetLandscapeLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetLandscapeLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.Landscape = tImage
pbLandscape.Image = tImage.ImageOriginal.Image
@@ -774,15 +780,15 @@ Public Class dlgEditTVShow
Private Sub btnSetPosterLocal_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetPosterLocal.Click
Try
- With ofdImage
+ With ofdLocalFiles
.InitialDirectory = tmpDBElement.ShowPath
.Filter = Master.eLang.GetString(497, "Images") + "|*.jpg;*.png"
.FilterIndex = 0
End With
- If ofdImage.ShowDialog() = DialogResult.OK Then
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
Dim tImage As New MediaContainers.Image
- tImage.ImageOriginal.LoadFromFile(ofdImage.FileName, True)
+ tImage.ImageOriginal.LoadFromFile(ofdLocalFiles.FileName, True)
If tImage.ImageOriginal.Image IsNot Nothing Then
tmpDBElement.ImagesContainer.Poster = tImage
pbPoster.Image = tImage.ImageOriginal.Image
@@ -797,6 +803,39 @@ Public Class dlgEditTVShow
End Try
End Sub
+ Private Sub btnSetThemeScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetThemeScrape.Click
+ Dim dThemeSelect As dlgThemeSelect
+ Dim tList As New List(Of MediaContainers.Theme)
+
+ 'ThemeStop()
+ If Not ModulesManager.Instance.ScrapeTheme_Movie(tmpDBElement, Enums.ModifierType.MainTheme, tList) Then
+ If tList.Count > 0 Then
+ dThemeSelect = New dlgThemeSelect()
+ If dThemeSelect.ShowDialog(tmpDBElement, tList, True) = DialogResult.OK Then
+ tmpDBElement.Theme = dThemeSelect.Result
+ LoadTheme(tmpDBElement.Theme)
+ End If
+ Else
+ MessageBox.Show(Master.eLang.GetString(1163, "No Themes found"), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Information)
+ End If
+ End If
+ End Sub
+
+ Private Sub btnSetThemeLocal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetThemeLocal.Click
+ 'ThemeStop()
+ With ofdLocalFiles
+ .InitialDirectory = tmpDBElement.ShowPath
+ .Filter = FileUtils.Common.GetOpenFileDialogFilter_Theme()
+ .FilterIndex = 0
+ End With
+
+ If ofdLocalFiles.ShowDialog() = DialogResult.OK Then
+ tmpDBElement.Theme = New MediaContainers.Theme With {.LocalFilePath = ofdLocalFiles.FileName}
+ tmpDBElement.Theme.LoadAndCache()
+ LoadTheme(tmpDBElement.Theme)
+ End If
+ End Sub
+
Private Sub BuildStars(ByVal sinRating As Single)
Try
'f'in MS and them leaving control arrays out of VB.NET
@@ -1292,6 +1331,15 @@ Public Class dlgEditTVShow
tcEdit.TabPages.Remove(tpPoster)
End If
End With
+
+ 'Theme
+ If Master.eSettings.TvShowThemeAnyEnabled Then
+ If Not String.IsNullOrEmpty(tmpDBElement.Theme.LocalFilePath) OrElse Not String.IsNullOrEmpty(tmpDBElement.Theme.URLAudioStream) Then
+ LoadTheme(tmpDBElement.Theme)
+ End If
+ Else
+ tcEdit.TabPages.Remove(tpTheme)
+ End If
End Sub
Private Sub lbGenre_ItemCheck(ByVal sender As Object, ByVal e As ItemCheckEventArgs) Handles clbGenre.ItemCheck
@@ -1325,6 +1373,13 @@ Public Class dlgEditTVShow
lbMPAA.Items.AddRange(APIXML.GetRatingList_TV)
End Sub
+ Private Sub LoadTheme(ByVal Theme As MediaContainers.Theme)
+ txtLocalTheme.Text =
+ If(Theme.LocalFilePathSpecified, Theme.LocalFilePath,
+ If(Theme.URLAudioStreamSpecified, Theme.URLAudioStream,
+ If(Theme.URLWebsiteSpecified, Theme.URLWebsite, String.Empty)))
+ End Sub
+
Private Sub lvActors_ColumnClick(ByVal sender As Object, ByVal e As ColumnClickEventArgs) Handles lvActors.ColumnClick
' Determine if the clicked column is already the column that is
' being sorted.
@@ -1890,6 +1945,7 @@ Public Class dlgEditTVShow
btnSetFanartDL.Text = strDownload
btnSetLandscapeDL.Text = strDownload
btnSetPosterDL.Text = strDownload
+ btnSetThemeDL.Text = strDownload
'Loacal Browse
Dim strLocalBrowse As String = Master.eLang.GetString(78, "Local Browse")
@@ -1900,6 +1956,7 @@ Public Class dlgEditTVShow
btnSetFanartLocal.Text = strLocalBrowse
btnSetLandscapeLocal.Text = strLocalBrowse
btnSetPosterLocal.Text = strLocalBrowse
+ btnSetThemeLocal.Text = strLocalBrowse
'Remove
Dim strRemove As String = Master.eLang.GetString(30, "Remove")
@@ -1910,6 +1967,7 @@ Public Class dlgEditTVShow
btnRemoveFanart.Text = strRemove
btnRemoveLandscape.Text = strRemove
btnRemovePoster.Text = strRemove
+ btnRemoveTheme.Text = strRemove
'Scrape
Dim strScrape As String = Master.eLang.GetString(79, "Scrape")
@@ -1920,6 +1978,7 @@ Public Class dlgEditTVShow
btnSetFanartScrape.Text = strScrape
btnSetLandscapeScrape.Text = strScrape
btnSetPosterScrape.Text = strScrape
+ btnSetThemeScrape.Text = strScrape
Dim mTitle As String = tmpDBElement.TVShow.Title
Dim sTitle As String = String.Concat(Master.eLang.GetString(663, "Edit Show"), If(String.IsNullOrEmpty(mTitle), String.Empty, String.Concat(" - ", mTitle)))
@@ -1968,6 +2027,34 @@ Public Class dlgEditTVShow
cbSourceLanguage.Items.AddRange((From lLang In APIXML.ScraperLanguagesXML.Languages Select lLang.Description).ToArray)
End Sub
+ Private Sub btnLocalThemePlay_Click(sender As Object, e As EventArgs) Handles btnLocalThemePlay.Click
+ Try
+ Dim tPath As String = String.Empty
+
+ If Not String.IsNullOrEmpty(txtLocalTheme.Text) Then
+ tPath = String.Concat("""", txtLocalTheme.Text, """")
+ End If
+
+ If Not String.IsNullOrEmpty(tPath) Then
+ If Master.isWindows Then
+ Process.Start(tPath)
+ Else
+ Using Explorer As New Process
+ Explorer.StartInfo.FileName = "xdg-open"
+ Explorer.StartInfo.Arguments = tPath
+ Explorer.Start()
+ End Using
+ End If
+ End If
+ Catch
+ MessageBox.Show(Master.eLang.GetString(270, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), Master.eLang.GetString(271, "Error Playing Trailer"), MessageBoxButtons.OK, MessageBoxIcon.Warning)
+ End Try
+ End Sub
+
+ Private Sub txtLocalTheme_TextChanged(sender As Object, e As EventArgs) Handles txtLocalTheme.TextChanged
+ btnLocalThemePlay.Enabled = Not String.IsNullOrEmpty(txtLocalTheme.Text)
+ End Sub
+
#End Region 'Methods
#Region "Nested Types"
diff --git a/EmberMediaManager/dlgThemeSelect.Designer.vb b/EmberMediaManager/dlgThemeSelect.Designer.vb
index b99c2c153..5922dc318 100644
--- a/EmberMediaManager/dlgThemeSelect.Designer.vb
+++ b/EmberMediaManager/dlgThemeSelect.Designer.vb
@@ -30,6 +30,15 @@ Partial Class dlgThemeSelect
Me.pnlStatus = New System.Windows.Forms.Panel()
Me.lblStatus = New System.Windows.Forms.Label()
Me.pbStatus = New System.Windows.Forms.ProgressBar()
+ Me.colNumber = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colURL = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colWebURL = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colDescription = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colDuration = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colSource = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colScraper = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colBitrate = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.colExtension = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.gbSelectTheme.SuspendLayout()
Me.pnlStatus.SuspendLayout()
Me.SuspendLayout()
@@ -65,6 +74,7 @@ Partial Class dlgThemeSelect
'
'lvThemes
'
+ Me.lvThemes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colNumber, Me.colURL, Me.colWebURL, Me.colDescription, Me.colBitrate, Me.colDuration, Me.colExtension, Me.colSource, Me.colScraper})
Me.lvThemes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lvThemes.Location = New System.Drawing.Point(6, 19)
Me.lvThemes.Name = "lvThemes"
@@ -105,6 +115,53 @@ Partial Class dlgThemeSelect
Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee
Me.pbStatus.TabIndex = 1
'
+ 'colNumber
+ '
+ Me.colNumber.Text = "#"
+ Me.colNumber.Width = 20
+ '
+ 'colURL
+ '
+ Me.colURL.Text = "URL"
+ Me.colURL.Width = 0
+ '
+ 'colWebURL
+ '
+ Me.colWebURL.Text = "WebURL"
+ Me.colWebURL.Width = 0
+ '
+ 'colDescription
+ '
+ Me.colDescription.Text = "Description"
+ Me.colDescription.Width = 180
+ '
+ 'colDuration
+ '
+ Me.colDuration.DisplayIndex = 4
+ Me.colDuration.Text = "Duration"
+ '
+ 'colSource
+ '
+ Me.colSource.DisplayIndex = 5
+ Me.colSource.Text = "Source"
+ Me.colSource.Width = 80
+ '
+ 'colScraper
+ '
+ Me.colScraper.DisplayIndex = 6
+ Me.colScraper.Text = "Scraper"
+ Me.colScraper.Width = 80
+ '
+ 'colBitrate
+ '
+ Me.colBitrate.DisplayIndex = 7
+ Me.colBitrate.Text = "Bitrate"
+ '
+ 'colExtension
+ '
+ Me.colExtension.DisplayIndex = 8
+ Me.colExtension.Text = "Extension"
+ '
'dlgThemeSelect
'
Me.AcceptButton = Me.OK_Button
@@ -135,4 +192,13 @@ Partial Class dlgThemeSelect
Friend WithEvents pnlStatus As System.Windows.Forms.Panel
Friend WithEvents lblStatus As System.Windows.Forms.Label
Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar
+ Friend WithEvents colNumber As ColumnHeader
+ Friend WithEvents colURL As ColumnHeader
+ Friend WithEvents colWebURL As ColumnHeader
+ Friend WithEvents colDescription As ColumnHeader
+ Friend WithEvents colBitrate As ColumnHeader
+ Friend WithEvents colDuration As ColumnHeader
+ Friend WithEvents colExtension As ColumnHeader
+ Friend WithEvents colSource As ColumnHeader
+ Friend WithEvents colScraper As ColumnHeader
End Class
diff --git a/EmberMediaManager/dlgThemeSelect.vb b/EmberMediaManager/dlgThemeSelect.vb
index d81a1347b..e4c9ad2b6 100644
--- a/EmberMediaManager/dlgThemeSelect.vb
+++ b/EmberMediaManager/dlgThemeSelect.vb
@@ -30,22 +30,25 @@ Public Class dlgThemeSelect
Friend WithEvents bwDownloadTheme As New System.ComponentModel.BackgroundWorker
+ Private tmpDBElement As Database.DBElement
+ Private _result As New MediaContainers.Theme
+ Private nList As New List(Of MediaContainers.Theme)
+ Private _withPlayer As Boolean
+
Private _UrlList As List(Of Themes)
Private tURL As String = String.Empty
- Private sPath As String
Private tTheme As New Themes
- Private _results As New MediaContainers.Theme
#End Region 'Fields
#Region "Properties"
- Public Property Results As MediaContainers.Theme
+ Public Property Result As MediaContainers.Theme
Get
- Return _results
+ Return _result
End Get
Set(value As MediaContainers.Theme)
- _results = value
+ _result = value
End Set
End Property
@@ -74,62 +77,62 @@ Public Class dlgThemeSelect
Activate()
End Sub
- Private Sub CreateTable(ByVal tURLList As List(Of Themes))
+ Public Overloads Function ShowDialog(ByRef tDBElement As Database.DBElement, ByRef tURLList As List(Of MediaContainers.Theme), Optional ByVal WithPlayer As Boolean = False) As DialogResult
+ _withPlayer = WithPlayer
+
'set ListView
lvThemes.MultiSelect = False
lvThemes.FullRowSelect = True
lvThemes.HideSelection = False
- lvThemes.Columns.Add("#", -1, HorizontalAlignment.Right)
- lvThemes.Columns.Add("URL", 0, HorizontalAlignment.Left)
- lvThemes.Columns.Add("Title", -2, HorizontalAlignment.Left)
- lvThemes.Columns.Add(Master.eLang.GetString(979, "Description"), -2, HorizontalAlignment.Left)
- lvThemes.Columns.Add("Length", -2, HorizontalAlignment.Left)
- lvThemes.Columns.Add("Bitrate", -2, HorizontalAlignment.Left)
- lvThemes.Columns.Add("WebURL", 0, HorizontalAlignment.Left)
-
- 'Me.txtYouTubeSearch.Text = DBMovie.Movie.Title & " Trailer"
-
- _UrlList = tURLList
- Dim ID As Integer = 1
- Dim str(7) As String
- For Each aUrl In _UrlList
+
+ tmpDBElement = tDBElement
+
+ AddThemesToList(tURLList)
+
+ pnlStatus.Visible = False
+ SetControlsEnabled(True)
+ 'SetEnabled()
+ If lvThemes.Items.Count = 1 Then
+ lvThemes.Select()
+ lvThemes.Items(0).Selected = True
+ End If
+
+ Return ShowDialog()
+ End Function
+
+ Protected Overrides Sub Finalize()
+ MyBase.Finalize()
+ End Sub
+
+ Private Sub AddThemesToList(ByVal tList As List(Of MediaContainers.Theme))
+ Dim ID As Integer = lvThemes.Items.Count + 1
+ Dim nList As List(Of MediaContainers.Theme) = tList
+
+ Dim str(9) As String
+ For Each aUrl In nList
Dim itm As ListViewItem
str(0) = ID.ToString
- str(1) = aUrl.URL.ToString
- str(2) = aUrl.Title.ToString
+ str(1) = aUrl.URLAudioStream.ToString
+ str(2) = aUrl.URLWebsite.ToString
str(3) = aUrl.Description.ToString
str(4) = aUrl.Duration.ToString
str(5) = aUrl.Bitrate.ToString
- str(6) = aUrl.WebURL.ToString
+ str(6) = aUrl.ThemeOriginal.Extention.ToString
+ str(7) = aUrl.Source.ToString
+ str(8) = aUrl.Scraper.ToString
itm = New ListViewItem(str)
lvThemes.Items.Add(itm)
ID = ID + 1
Next
- 'Me.pnlStatus.Visible = False
- lvThemes.Enabled = True
- 'Me.txtYouTube.Enabled = True
- 'Me.txtManual.Enabled = True
- 'Me.btnBrowse.Enabled = True
- 'Me.SetEnabled(False)
- If _UrlList.Count = 1 Then
- lvThemes.Select()
- lvThemes.Items(0).Selected = True
- End If
End Sub
- Public Overloads Function ShowDialog(ByRef DBElement As Database.DBElement, ByRef tURLList As List(Of Themes)) As DialogResult
- CreateTable(tURLList)
-
- Return ShowDialog()
- End Function
-
Private Sub lvThemes_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvThemes.DoubleClick
If Master.isWindows Then
- Process.Start(lvThemes.SelectedItems(0).SubItems(6).Text.ToString)
+ Process.Start(lvThemes.SelectedItems(0).SubItems(2).Text.ToString)
Else
Using Explorer As New Process
Explorer.StartInfo.FileName = "xdg-open"
- Explorer.StartInfo.Arguments = lvThemes.SelectedItems(0).SubItems(6).Text.ToString
+ Explorer.StartInfo.Arguments = lvThemes.SelectedItems(0).SubItems(2).Text.ToString
Explorer.Start()
End Using
End If
@@ -146,16 +149,15 @@ Public Class dlgThemeSelect
Application.DoEvents()
If lvThemes.SelectedItems.Count = 1 Then
- Dim selID As Integer = CInt(lvThemes.SelectedItems(0).SubItems(0).Text) - 1
- tTheme = _UrlList.Item(selID)
-
+ Dim SelectedTheme As New MediaContainers.Theme With {
+ .URLAudioStream = lvThemes.SelectedItems(0).SubItems(1).Text.ToString,
+ .URLWebsite = lvThemes.SelectedItems(0).SubItems(2).Text.ToString}
bwDownloadTheme = New System.ComponentModel.BackgroundWorker
bwDownloadTheme.WorkerReportsProgress = True
bwDownloadTheme.WorkerSupportsCancellation = True
- bwDownloadTheme.RunWorkerAsync(New Arguments With {.Parameter = tTheme, .bType = True})
+ bwDownloadTheme.RunWorkerAsync(New Arguments With {.Parameter = SelectedTheme, .bType = True})
Else
DialogResult = DialogResult.Cancel
- Close()
End If
End Sub
@@ -170,8 +172,8 @@ Public Class dlgThemeSelect
Private Sub bwDownloadTheme_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTheme.DoWork
Dim Args As Arguments = DirectCast(e.Argument, Arguments)
Try
- Results.WebTheme.FromWeb(Args.Parameter.URL, Args.Parameter.WebURL)
- Results.URL = Args.Parameter.URL
+ Result.ThemeOriginal.LoadFromWeb(Args.Parameter.URLAudioStream, Args.Parameter.URLWebsite)
+ Result.URLAudioStream = Args.Parameter.URLAudioStream
Catch ex As Exception
logger.Error(ex, New StackFrame().GetMethod().Name)
End Try
@@ -219,7 +221,7 @@ Public Class dlgThemeSelect
End While
DialogResult = DialogResult.Cancel
- Me.Results = Nothing
+ Me.Result = Nothing
End Sub
#End Region 'Methods
@@ -231,7 +233,7 @@ Public Class dlgThemeSelect
#Region "Fields"
Dim bType As Boolean
- Dim Parameter As Themes
+ Dim Parameter As MediaContainers.Theme
#End Region 'Fields
diff --git a/EmberMediaManager/dlgTrailerSelect.vb b/EmberMediaManager/dlgTrailerSelect.vb
index f3231e614..dd267228e 100644
--- a/EmberMediaManager/dlgTrailerSelect.vb
+++ b/EmberMediaManager/dlgTrailerSelect.vb
@@ -37,7 +37,6 @@ Public Class dlgTrailerSelect
Private _result As New MediaContainers.Trailer
Private tArray As New List(Of String)
Private tURL As String = String.Empty
- Private sPath As String
Private nList As New List(Of MediaContainers.Trailer)
Private _noDownload As Boolean
Private _withPlayer As Boolean
@@ -100,7 +99,6 @@ Public Class dlgTrailerSelect
txtYouTubeSearch.Text = String.Concat(DBMovie.Movie.Title, " ", Master.eSettings.MovieTrailerDefaultSearch)
tmpDBElement = DBMovie
- sPath = DBMovie.Filename
AddTrailersToList(tURLList)
@@ -280,7 +278,7 @@ Public Class dlgTrailerSelect
Try
With ofdTrailer
.InitialDirectory = Directory.GetParent(tmpDBElement.Filename).FullName
- .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.FileSystemValidExts.ToArray(), ";*"))
+ .Filter = FileUtils.Common.GetOpenFileDialogFilter_Video(Master.eLang.GetString(1195, "Trailers"))
.FilterIndex = 0
End With
diff --git a/EmberMediaManager/frmMain.vb b/EmberMediaManager/frmMain.vb
index 8bb1a6937..e63e419cf 100644
--- a/EmberMediaManager/frmMain.vb
+++ b/EmberMediaManager/frmMain.vb
@@ -1934,32 +1934,20 @@ Public Class frmMain
'Theme
If tScrapeItem.ScrapeModifiers.MainTheme Then
bwMovieScraper.ReportProgress(-3, String.Concat(Master.eLang.GetString(266, "Scraping Themes"), ":"))
- If Not (Args.ScrapeType = Enums.ScrapeType.SingleScrape) Then
- tURL = String.Empty
- If Theme.WebTheme.IsAllowedToDownload(DBScrapeMovie) Then
- If Not ModulesManager.Instance.ScrapeTheme_Movie(DBScrapeMovie, tUrlList) Then
- If tUrlList.Count > 0 Then
- If Not (Args.ScrapeType = Enums.ScrapeType.SingleScrape) Then
- Theme.WebTheme.FromWeb(tUrlList.Item(0).URL, tUrlList.Item(0).WebURL)
- If Theme.WebTheme IsNot Nothing Then 'TODO: fix check
- tURL = Theme.WebTheme.SaveAsMovieTheme(DBScrapeMovie)
- If Not String.IsNullOrEmpty(tURL) Then
- DBScrapeMovie.ThemePath = tURL
- End If
- End If
- 'ElseIf Args.scrapeType = Enums.ScrapeType.SingleScrape OrElse Args.scrapeType = Enums.ScrapeType.FullAsk OrElse Args.scrapeType = Enums.ScrapeType.NewAsk OrElse Args.scrapeType = Enums.ScrapeType.MarkAsk OrElse Args.scrapeType = Enums.ScrapeType.UpdateAsk Then
- ' If Args.scrapeType = Enums.ScrapeType.FullAsk OrElse Args.scrapeType = Enums.ScrapeType.NewAsk OrElse Args.scrapeType = Enums.ScrapeType.MarkAsk OrElse Args.scrapeType = Enums.ScrapeType.UpdateAsk Then
- ' MsgBox(Master.eLang.GetString(930, "Trailer of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(929, "No Preferred Size:"))
- ' End If
- ' Using dThemeSelect As New dlgThemeSelect()
- ' tURL = dThemeSelect.ShowDialog(DBScrapeMovie, tUrlList)
- ' If Not String.IsNullOrEmpty(tURL) Then
- ' DBScrapeMovie.ThemePath = tURL
- ' MovieScraperEvent(Enums.MovieScraperEventType.ThemeItem, DBScrapeMovie.ThemePath )
- ' End If
- ' End Using
- End If
+ Dim SearchResults As New List(Of MediaContainers.Theme)
+ If Not ModulesManager.Instance.ScrapeTheme_Movie(DBScrapeMovie, Enums.ModifierType.MainTheme, SearchResults) Then
+ If Args.ScrapeType = Enums.ScrapeType.SingleScrape Then
+ Using dThemeSelect As New dlgThemeSelect
+ If dThemeSelect.ShowDialog(DBScrapeMovie, SearchResults, AdvancedSettings.GetBooleanSetting("UseAsVideoPlayer", False, "generic.EmberCore.VLCPlayer")) = DialogResult.OK Then
+ DBScrapeMovie.Theme = dThemeSelect.Result
End If
+ End Using
+
+ 'autoscraping
+ ElseIf Not Args.ScrapeType = Enums.ScrapeType.SingleScrape Then
+ Dim newPreferredTheme As New MediaContainers.Theme
+ If Themes.GetPreferredMovieTheme(SearchResults, newPreferredTheme) Then
+ DBScrapeMovie.Theme = newPreferredTheme
End If
End If
End If
@@ -2220,7 +2208,7 @@ Public Class frmMain
logger.Trace(String.Format("[TVScraper] [Start] TV Shows Count [{0}]", Args.ScrapeList.Count.ToString))
For Each tScrapeItem As ScrapeItem In Args.ScrapeList
- Dim ShowTheme As New MediaContainers.Theme
+ Dim Theme As New MediaContainers.Theme
Dim tURL As String = String.Empty
Dim tUrlList As New List(Of Themes)
Dim OldListTitle As String = String.Empty
@@ -2291,6 +2279,23 @@ Public Class frmMain
'Theme
If tScrapeItem.ScrapeModifiers.MainTheme Then
bwTVScraper.ReportProgress(-3, String.Concat(Master.eLang.GetString(266, "Scraping Themes"), ":"))
+ Dim SearchResults As New List(Of MediaContainers.Theme)
+ If Not ModulesManager.Instance.ScrapeTheme_TVShow(DBScrapeShow, Enums.ModifierType.MainTheme, SearchResults) Then
+ If Args.ScrapeType = Enums.ScrapeType.SingleScrape Then
+ Using dThemeSelect As New dlgThemeSelect
+ If dThemeSelect.ShowDialog(DBScrapeShow, SearchResults, AdvancedSettings.GetBooleanSetting("UseAsVideoPlayer", False, "generic.EmberCore.VLCPlayer")) = DialogResult.OK Then
+ DBScrapeShow.Theme = dThemeSelect.Result
+ End If
+ End Using
+
+ 'autoscraping
+ ElseIf Not Args.ScrapeType = Enums.ScrapeType.SingleScrape Then
+ Dim newPreferredTheme As New MediaContainers.Theme
+ If Themes.GetPreferredTVShowTheme(SearchResults, newPreferredTheme) Then
+ DBScrapeShow.Theme = newPreferredTheme
+ End If
+ End If
+ End If
End If
If bwTVScraper.CancellationPending Then Exit For