Skip to content

Commit

Permalink
Merge pull request #12 from NetNerd/dev
Browse files Browse the repository at this point in the history
0.8 update
  • Loading branch information
NetNerd committed Dec 5, 2018
2 parents 739bd78 + 260e128 commit b115e42
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 9 deletions.
22 changes: 19 additions & 3 deletions ConfigPanel.vb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ Public Class ConfigPanel
Private Shared WithEvents LblForceArtist As Label
Private Shared WithEvents ForceArtistCB As CheckBox

Private Shared WithEvents LblArtistWhitelist As Label
Private Shared WithEvents ArtistWhitelistBox As TextBox

Private Shared WithEvents LblUpdateCheck As Label
Private Shared WithEvents UpdateCheckCB As CheckBox

Expand Down Expand Up @@ -49,11 +52,14 @@ Public Class ConfigPanel
LblForceArtist = New Label With {.Bounds = New Rectangle(27, 204, 199, 14)}
ForceArtistCB = New CheckBox With {.Bounds = New Rectangle(10, 205, 13, 13)}

LblArtistWhitelist = New Label With {.Bounds = New Rectangle(10, 228, 292, 14)}
ArtistWhitelistBox = New TextBox With {.Bounds = New Rectangle(10, 244, 292, 21)}

LblUpdateCheck = New Label With {.Bounds = New Rectangle(336, 1, 140, 42)}
UpdateCheckCB = New CheckBox With {.Bounds = New Rectangle(319, 2, 13, 13)}

Border1 = New Panel With {.Bounds = New Rectangle(2, 1, 308, 230), .BackColor = Color.FromArgb(224, 224, 224)}
Border2 = New Panel With {.Bounds = New Rectangle(3, 2, 306, 228)}
Border1 = New Panel With {.Bounds = New Rectangle(2, 1, 308, 277), .BackColor = Color.FromArgb(224, 224, 224)}
Border2 = New Panel With {.Bounds = New Rectangle(3, 2, 306, 275)}


Tooltipper = New ToolTip With {.AutomaticDelay = 1100, .ReshowDelay = 850}
Expand All @@ -75,6 +81,8 @@ Public Class ConfigPanel

ForceArtistCB.Checked = MySettings.ForceArtistMatch

ArtistWhitelistBox.Text = MySettings.ArtistWhitelist

UpdateCheckCB.Checked = MySettings.UpdateChecking

LangBox.Text = MySettings.LangBoxText
Expand All @@ -83,7 +91,7 @@ Public Class ConfigPanel
End Sub

Shared Function GetControls() As Control()
Return {LblLang, LangBox, LblLangHelp, LblUI, UILangCB, LblBlanks, BlanksCB, LblForceArtist, ForceArtistCB, LblUpdateCheck, UpdateCheckCB, Border2, Border1}
Return {LblLang, LangBox, LblLangHelp, LblUI, UILangCB, LblBlanks, BlanksCB, LblForceArtist, LblArtistWhitelist, ArtistWhitelistBox, ForceArtistCB, LblUpdateCheck, UpdateCheckCB, Border2, Border1}
End Function

Shared Function GetSettings() As SettingsCollection
Expand All @@ -109,6 +117,10 @@ Public Class ConfigPanel
Tooltipper.SetToolTip(LblForceArtist, FallbackHelper(MySettings.UILanguage.LblForceArtist_Tip, LangEnUS.LblForceArtist_Tip))
TooltipperLong.SetToolTip(ForceArtistCB, FallbackHelper(MySettings.UILanguage.LblForceArtist_Tip, LangEnUS.LblForceArtist_Tip))

LblArtistWhitelist.Text = FallbackHelper(MySettings.UILanguage.LblArtistWhitelist, LangEnUS.LblArtistWhitelist)
Tooltipper.SetToolTip(LblArtistWhitelist, FallbackHelper(MySettings.UILanguage.LblArtistWhitelist_Tip, LangEnUS.LblArtistWhitelist_Tip))
TooltipperLong.SetToolTip(ArtistWhitelistBox, FallbackHelper(MySettings.UILanguage.LblArtistWhitelist_Tip, LangEnUS.LblArtistWhitelist_Tip))

LblUpdateCheck.Text = FallbackHelper(MySettings.UILanguage.LblUpdateCheck, LangEnUS.LblUpdateCheck)
Tooltipper.SetToolTip(LblUpdateCheck, FallbackHelper(MySettings.UILanguage.LblUpdateCheck_Tip, LangEnUS.LblUpdateCheck_Tip))
TooltipperLong.SetToolTip(UpdateCheckCB, FallbackHelper(MySettings.UILanguage.LblUpdateCheck_Tip, LangEnUS.LblUpdateCheck_Tip))
Expand Down Expand Up @@ -145,6 +157,10 @@ Public Class ConfigPanel
ForceArtistCB.Checked = Not ForceArtistCB.Checked
End Sub

Private Shared Sub ArtistWhitelistBox_TextChanged(sender As Object, e As EventArgs) Handles ArtistWhitelistBox.TextChanged
MySettings.ArtistWhitelist = ArtistWhitelistBox.Text
End Sub

Private Shared Sub UpdateCheckCB_CheckedChanged(sender As Object, e As EventArgs) Handles UpdateCheckCB.CheckedChanged
MySettings.UpdateChecking = UpdateCheckCB.Checked
End Sub
Expand Down
6 changes: 6 additions & 0 deletions LangClass.vb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ Public Class LanguageClass
Dim LblForceArtist As String
Dim LblForceArtist_Tip As String

'LblArtistWhitelist is for the artist whitelist.
Dim LblArtistWhitelist As String
Dim LblArtistWhitelist_Tip As String

'LblUpdateCheck is for the auto update checking checkbox.
Dim LblUpdateCheck As String
Dim LblUpdateCheck_Tip As String
Expand All @@ -68,6 +72,7 @@ Public Class LanguageClass
.LblUI = "UI Language: ", .LblUI_Tip = "The language to use for the plugin's UI.",
.LblBlanks = "Separator Lines:", .LblBlanks_Tip = "The number of blank lines between different languages in the returned lyrics.",
.LblForceArtist = "Force Artist Matching", .LblForceArtist_Tip = "Require all artists to be present on VocaDB and match the song's entry." & vbNewLine & "When this is unchecked, only artists that are in the database need to match the song's entry - any others will be ignored.",
.LblArtistWhitelist = "Artist Whitelist", .LblArtistWhitelist_Tip = "Songs that don't contain at least one of these artists will not be searched for. (disabled if empty)",
.LblUpdateCheck = "Automatically Check for Updates", .LblUpdateCheck_Tip = "Show a notification window when a newer version of the plugin is avaliable.",
.SaveErrorMsg = "The file could not be saved.", .FolderCreateErrorMsg = "The folder could not be created.",
.UninstallErrorMsg1 = "MB_VocaDbLyrics failed to remove its settings files.", .UninstallErrorMsg2 = "The remaining files can be found in:",
Expand All @@ -85,6 +90,7 @@ Public Class LanguageClass
.LblUI = "UI言語:", .LblUI_Tip = "プラグインのインタフェースで使われる言語",
.LblBlanks = "区切り行の数:", .LblBlanks_Tip = "歌詞リザルトでそれぞれな言語の間に込めた間隔",
.LblForceArtist = "アーチスト合うの保する", .LblForceArtist_Tip = "セットした場合では曲のアーチストは全部DBに存在するさらに全アーチストは曲のデータと合うの保する。" & vbNewLine & "セットしない場合ではDBに存在してないアーチストは放っておく。",
.LblArtistWhitelist = "アーチスト・ホワイトリスト", .LblArtistWhitelist_Tip = "このホワイトリストからアーチスト1つもない曲では歌詞が探されない。(抜けば無効)",
.LblUpdateCheck = "新しいバージョンを自動にチェックする", .LblUpdateCheck_Tip = "新しいバージョンの解放後に通知を表示",
.SaveErrorMsg = "ファイルを保存できませんでした。", .FolderCreateErrorMsg = "新規フォルダを書きませんでした。",
.UninstallErrorMsg1 = "MB_VocaDbLyricsは設定ファイルを削除できませんでした。", .UninstallErrorMsg2 = "残っているファイルの場所:",
Expand Down
42 changes: 36 additions & 6 deletions Plugin.vb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Public Class Plugin
Private mbApiInterface As New MusicBeeApiInterface
Private about As New PluginInfo
Private SettingsFolder As String = "MB_VocaDbLyrics"
Private MySettings As New SettingsClass.SettingsCollection With {.LangBoxText = "rom/Romaji, ja/Japanese, orig/Original Language, en/English", .UILanguage = LangEnUS, .BlankCount = 5, .ForceArtistMatch = False, .UseOldArtistMatch = False, .UpdateChecking = True}
Private MySettings As New SettingsClass.SettingsCollection With {.LangBoxText = "rom/Romaji, ja/Japanese, orig/Original Language, en/English", .UILanguage = LangEnUS, .BlankCount = 5, .ForceArtistMatch = False, .UseOldArtistMatch = False, .ArtistWhitelist = "初音ミク,鏡音リン,鏡音レン,巡音ルカ,KAITO,MEIKO,GUMI,IA,結月ゆかり,重音テト,洛天依,神威がくぽ,猫村いろは,雪歌ユフ,SeeU,シユ,蒼姫ラピス,Lily,リリィ,SF-A2,v flower,さとうささら,波音リツ,MAYU,言和", .UpdateChecking = True}

Private SpecialLanguages As Dictionary(Of String, String) =
New Dictionary(Of String, String) From {{"orig", "Original"}, {"rom", "Romanized"}}
Expand All @@ -58,7 +58,7 @@ Public Class Plugin
about.MinInterfaceVersion = MinInterfaceVersion
about.MinApiRevision = 20
about.ReceiveNotifications = ReceiveNotificationFlags.StartupOnly
about.ConfigurationPanelHeight = 231
about.ConfigurationPanelHeight = 278
Return about
End Function

Expand Down Expand Up @@ -94,7 +94,7 @@ Public Class Plugin

' save any persistent settings in a sub-folder of this path
' I don't know how MusicBee actually handles this in terms of changes over time, so I'll get the result again every time I need it.
SettingsClass.SaveFile("Settings.conf", mbApiInterface.Setting_GetPersistentStoragePath().TrimEnd("\/".ToCharArray) & "\" & SettingsFolder & "\", MySettings.MakeString({"LangBoxText", "UILanguage", "BlankCount", "ForceArtistMatch", "UseOldArtistMatch", "UpdateChecking"}), MySettings.UILanguage)
SettingsClass.SaveFile("Settings.conf", mbApiInterface.Setting_GetPersistentStoragePath().TrimEnd("\/".ToCharArray) & "\" & SettingsFolder & "\", MySettings.MakeString({"LangBoxText", "UILanguage", "BlankCount", "ForceArtistMatch", "UseOldArtistMatch", "ArtistWhitelist", "UpdateChecking"}), MySettings.UILanguage)
End Sub

' MusicBee is closing the plugin (plugin is being disabled by user or MusicBee is shutting down)
Expand Down Expand Up @@ -151,6 +151,39 @@ Public Class Plugin
' only required if PluginType = LyricsRetrieval
' return Nothing if no lyrics are found
Public Function RetrieveLyrics(ByVal sourceFileUrl As String, ByVal artist As String, ByVal trackTitle As String, ByVal album As String, ByVal synchronisedPreferred As Boolean, ByVal provider As String) As String
If Not GetProviders().Contains(provider) Then
Return Nothing 'Are we being run for other providers??
End If


' by default we only get the first artist. this gives us all artists.
Dim multiartist As String
If sourceFileUrl.Length = 0 Then
multiartist = mbApiInterface.NowPlaying_GetFileTag(MetaDataType.Artists)
Else
multiartist = mbApiInterface.Library_GetFileTag(sourceFileUrl, MetaDataType.Artists)
End If

If multiartist.Length > 0 Then
artist = multiartist
End If

If MySettings.ArtistWhitelist.Length > 0 Then
Dim ArtistWhiteList As String() = MySettings.ArtistWhitelist.ToLower.Split(",")
Dim artistLower = multiartist.ToLower()
Dim FoundArtist = False

For Each WLArtist In ArtistWhiteList
If artistLower.Contains(WLArtist.Trim()) Then
FoundArtist = True
Exit For
End If
Next

If Not FoundArtist Then Return Nothing
End If


Dim WebProxy As Net.WebProxy = Nothing
Try
Dim Proxy() As String = mbApiInterface.Setting_GetWebProxy().Split(Convert.ToChar(0))
Expand All @@ -170,9 +203,6 @@ Public Class Plugin
End If
End If

If Not {"VocaDB", "UtaiteDB"}.Contains(provider) Then
Return Nothing 'Are we being run for other providers??
End If
Dim LyricsLib As New VocaDbLyricsLib With {.UserAgent = "MB_VocaDbLyrics", .AppendDefaultUserAgent = True, .Proxy = WebProxy, .ForceArtistMatch = MySettings.ForceArtistMatch, .UseOldForceArtistMatch = MySettings.UseOldArtistMatch}
If provider = "UtaiteDB" Then LyricsLib.DatabaseUrl = New Uri("https://utaitedb.net")
Dim LyricsResult As VocaDbLyricsLib.LyricsResult = LyricsLib.GetLyricsFromName(trackTitle, artist)
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ Usage is simple, just place any DLLs in the MusicBee plugins directory and set u
A visual interface is provided via the MusicBee plugin settings page. This allows you to set the interface language, what languages to display in the returned lyrics (among other things).
Codes for additional languages can be found in the '639-1' column of [this wikipedia article](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)

An artist whitelist function helps limit many unnecessary requests to the databases. The default setting covers the 30 most used voices on VocaDB in Japanese, so it may skip some artists you care about (it certainly will for UtaiteDB users).
A romanised version of the default is "Hatsune,Kagamine,Megurine,KAITO,MEIKO,GUMI,IA,Yuzuki,Kasane,Tianyi,Gakupo,Gackpoid,Nekomura,Sekka,SeeU,Aoki,Lily,SF-A2,v flower,Satou,Namine,MAYU,YANHE,Yan He".
If you don't care about sending info about every song you play to VocaDB and UtaiteDB you can disable this by deleting its content.

Multilingual support is very basic and ideally should be rewritten, but for now this isn't a major issue.
User-defined languages are currently not supported.

Expand Down
9 changes: 9 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,15 @@ returned lyrics (among other things).
Codes for additional languages can be found in the '639-1' column of this
wikipedia article: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

An artist whitelist function helps limit many unnecessary requests to the
databases. The default setting covers the 30 most used voices on vocadb in
Japanese, so it may skip some artists you care about (it certainly will for
UtaiteDB users).
A romanised version of the default is
"Hatsune,Kagamine,Megurine,KAITO,MEIKO,GUMI,IA,Yuzuki,Kasane,Tianyi,Gakupo,Gackpoid,Nekomura,Sekka,SeeU,Aoki,Lily,SF-A2,v flower,Satou,Namine,MAYU,YANHE,Yan He"
If you don't care about sending info about every song you play to VocaDB and
UtaiteDB you can disable this by deleting its content.

Multilingual support is very basic and ideally should be rewritten, but for now
this isn't a major issue.
User-defined languages are currently not supported.
Expand Down
7 changes: 7 additions & 0 deletions SettingsClass.vb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
Dim BlankCount As Byte
Dim ForceArtistMatch As Boolean
Dim UseOldArtistMatch As Boolean
Dim ArtistWhitelist As String
Dim UpdateChecking As Boolean

Function MakeString(Settings() As String) As String
Expand All @@ -50,6 +51,9 @@
Case "UseOldArtistMatch"
OutStr.WriteLine("UseOldArtistMatch:" & UseOldArtistMatch.ToString())

Case "ArtistWhitelist"
OutStr.WriteLine("ArtistWhitelist:" & ArtistWhitelist)

Case "UpdateChecking"
OutStr.WriteLine("UpdateChecking:" & UpdateChecking.ToString())

Expand Down Expand Up @@ -94,6 +98,9 @@
Case "UseOldArtistMatch"
UseOldArtistMatch = Boolean.Parse(Split(1))

Case "ArtistWhitelist"
ArtistWhitelist = Split(1)

Case "UpdateChecking"
UpdateChecking = Boolean.Parse(Split(1))

Expand Down

0 comments on commit b115e42

Please sign in to comment.