#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=icos\pplayer.ico
#AutoIt3Wrapper_outfile=pplayer.exe
#AutoIt3Wrapper_Res_Comment=More details at pplayer.net.ms
#AutoIt3Wrapper_Res_Description=PPlayer Beta
#AutoIt3Wrapper_Res_Fileversion=0.9.3
#AutoIt3Wrapper_Res_LegalCopyright=Pascal Kuehne
#AutoIt3Wrapper_Res_Field=Email|pascal.kuehne at googlemail dot com
#AutoIt3Wrapper_Res_Field=Compile Date|%date% %time%
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
PPlayer is a media player offering many amazing features. It combines Podcasts,Streaming and an intuitive musicsearch in a user designed interface.
Copyright (C) 2007 Pascal Kühne
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
For a list of contributors please visit:
http://pplayer.wiki.sourceforge.net/Contributors
#ce
#region Includes
#include"include\WMP.au3"
#include"include\XSkin.au3"
#include"include\ListView.au3"
#include"include\default\SQLite.au3"
#include"include\default\SQLite.dll.au3"
#include"include\default\GuiStatusBar.au3"
#include"include\default\GUIConstants.au3"
#include"include\default\GuiComboBox.au3"
#endregion
Global $PP_Dir = @ScriptDir & "\"
FileChangeDir($PP_Dir)
Global $Delimiters = '|-|'
If _Singleton("pplayermutex", 1) == 0 Then
If $CmdLine[0] > 0 Then
While Not WinExists("PPlayer")
Sleep(50)
WEnd
WinWaitActive("PPlayer - V")
_AU3COM_SendData("PPlayerPath" & $Delimiters & $CmdLine[1], "PPlayer")
EndIf
Exit 0
EndIf
If LoadSetting("infos", "crash", 0) == 1 Then
$Form2 = GUICreate("PPlayer - Crashsystem", 413, 298, 273, 186)
$Label1 = GUICtrlCreateLabel( _
"A problem occured crashing PPlayer." & @CRLF & _
"If this happened more than once you might consider downloading the latest version. This should fix the problem." & @CRLF & _
"If you already downloaded the latest version you might consider submitting the problem you're confrontated with to help the development of PPlayer." & @CRLF & _
"Choose an option below for further action", 8, 8, 404, 193)
$Combo1 = GUICtrlCreateCombo("", 8, 208, 290, 25)
GUICtrlSetData(-1,"Submit BugReport|Download Installer|Reset Windowpositions|Disable Plugins")
$Button1 = GUICtrlCreateButton("Run", 312, 208, 97, 25)
$Button2 = GUICtrlCreateButton("Continue PPlayer", 8, 240, 185, 49)
$Button3 = GUICtrlCreateButton("Close PPlayer", 224, 240, 185, 49)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case - 3
ExitLoop
Case $Button1
debug(GUICtrlRead($Combo1))
Switch GUICtrlRead($Combo1)
Case "Submit BugReport"
ShellExecute("https://sourceforge.net/tracker/?group_id=206085&atid=996243")
Case "Download Installer"
ShellExecute("https://sourceforge.net/project/showfiles.php?group_id=206085")
Case "Reset Windowpositions"
IniDelete("db\settings.ini","window")
Case "Disable Plugins"
FileDelete("Plugins\Plugins.au3")
FileClose(FileOpen("Plugins\Plugins.au3",1))
Run("pplayer.exe")
Exit 0
EndSwitch
Case $Button2
ExitLoop
Case $Button3
Exit 0
EndSwitch
WEnd
GUIDelete($Form2)
SaveSetting("infos", "crash", 1)
Else
SaveSetting("infos", "crash", 1)
EndIf
Global $Begin = TimerInit()
#region Opts
Global $version = "0.9.5"
Global $releasetimestamp = 1198445371
Global $dbversion = "0.9"
Global $backup = True
If LoadSetting("infos","version","0.9.4") <> $version Then
SaveSetting("infos","version",$version)
Else
If $releasetimestamp + 2592000 < _TimeGetStamp() And Info("The support of your version of PPlayer expired. That means its possible that many problems occur due to the Backend is always changed. You might download the latest version of PPlayer to get the recent changes. Do you want to download the latest version?",$MsgBox_YesNo) == $MSGBox_Yes Then DownloadPPlayer()
EndIf
If Not @Compiled Then
If $backup Then
$file = "backup\pplayer-" & $version & "-" & @MDAY & @MON & @YEAR & @HOUR & @MIN & @SEC & ".au3"
FileCopy("pplayer.au3", $file)
If IniRead("backup\bak.ini", $version, IniRead("backup\bak.ini", $version, 0, 1), 0) == FileGetSize($file) Then
FileDelete($file)
Else
IniWrite("backup\bak.ini", $version, 0, IniRead("backup\bak.ini", $version, 0, 1) + 1)
IniWrite("backup\bak.ini", $version, IniRead("backup\bak.ini", $version, 0, 1), FileGetSize($file))
EndIf
EndIf
EndIf
Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
Global $PP_HP = "http://pplayer.sourceforge.net/access/"
Folders()
; Analysing Plugins
$plugininput = FileRead("Plugins\Plugins.au3")
$sec = IniReadSection("db\settings.ini","Pluginact")
If Not @Error Then
For $i = 1 To $sec[0][0]
If $sec[$i][1] == True And Not StringInStr($plugininput,$Sec[$i][0]) Then SaveSetting("Pluginact",$sec[$i][0],False)
Next
EndIf
$input = StringSplit($plugininput,@CRLF)
If Not @Error Then
For $i = 1 To $input[0]
$plugininput = _StringBetween($Input[$i],'"',"\")
If Not @Error Then SaveSetting("Pluginact",$plugininput[0],True)
Next
EndIf
Global $Plugins[1]
Global $PluginMenus[1][2]
Global $PluginSettingsTabs[1]
#include "Plugins\Plugins.au3"
PluginTrigger("OnPluginsRegistered")
$Skin_Folder = $PP_Dir & "Skins\" & GetOpt("skin")
If Not FileExists($Skin_Folder) Then DownloadSkin(GetOpt("skin"))
$Icon_Folder = $PP_Dir & "Skins\Default"
$PP_IcoFolder = "resource\" & LoadSetting("settings", "icos", "Metal") & "icos.dll"
If IniRead("db\settings.ini", "settings", "skin", "") == "" Then
IniWrite("db\settings.ini", "settings", "BkColor", StringTrimLeft(IniRead($Skin_Folder & "\Skin.dat", "color", "background", ""), 2))
IniWrite("db\settings.ini", "settings", "TextColor", StringTrimLeft(IniRead($Skin_Folder & "\Skin.dat", "color", "fontcolor", ""), 2))
IniWrite("db\settings.ini", "settings", "skin", GetOpt("skin"))
EndIf
#endregion
Startup()
Player()
#region MAIN (Player(),Playing($id,$DND = False),PlayStream($id,$Filepath),UnknownAll(ByRef $Tag,ByRef $Similar,$Filepath)
Func Player()
While 1
If $Playing And UBound($liste) > $activelistid Then
If GUICtrlRead($ModeCheck[2]) == "Repeat All" And $activelistid == UBound($liste) - 1 Then
$activelistid = 0 ;Repeat All
EndIf
UpdateLabelAction("Loading " & $liste[$activelistid])
$Ret = Playing($activelistid) ;Play song
If $Ret == "Failed" Then ;Playing returns "Failed" in some cases
$Ret = Playing($activelistid, True) ;Playing restarted without starting song a second time
If $Ret == "Failed" Or $Ret = "Unable" Then $activelistid += 1
ElseIf $Ret == "Unable" Then
$activelistid += 1 ;Set next id if unable to play
EndIf
UpdateLabelAction("")
Else
Sleep(50)
EndIf
WEnd
EndFunc ;==>Player
Func Playing($id, $DND = False)
$Filepath = $liste[$id]
PluginTrigger("SongType" & StringTrimLeft($Filepath, StringInStr($Filepath, ".", 1, -1)), $id, $Filepath)
If StringInStr("http|mms", StringLeft($Filepath, 4)) Then PluginTrigger("SongIsStream", $id, $Filepath)
If $SongCapturedByPlugin Then
If Not $LeaveWhile And $Playing Then $activelistid += 1
$SongCapturedByPlugin = False
Return True
EndIf
Dim $tag[9]
$LeaveWhile = False
Dim $similar[GUICtrlRead($SettingsPlayModeSlider1) + 1]
If (Not FileExists($Filepath)) And Not StringInStr($Filepath, "://") Then
Error("Unable to play song",0,5)
Return "Unable"
EndIf
If Not $DND Then
If $next_sound <> 0 Then
$active_sound = $next_sound
Else
Stop()
$active_sound = Play($Filepath)
EndIf
PluginTrigger("SongPlayStarted", $id, $Filepath)
$Playing = True
$next_sound = 0
If WMGetState() == "Paused" Then Pause()
EndIf
PluginTrigger("SongLoadingInformation", $id, $Filepath)
$Dur = Int(WMGetDuration($active_sound))
If $Dur == 0 Then Return "Failed"
$activelistid = $id
CalcPos($active_sound)
Focus($id)
If WMGetState() == "Ready" Then $active_sound = Play($Filepath) ;If not yet play: play!
If LoadSongInfo($Filepath, $tag, $id) Then ; Load Song Information and display
LoadSongSimilar($Filepath, $tag, $similar, $id)
LastPlayed($tag[3], $tag[1])
UpdateList($id, $tag[3], $tag[1])
EndIf
UpdateLabelInfo($tag, $similar)
If GUICtrlRead($PlayMode[1]) == $GUI_CHECKED Then ; Search for next Song (if selected)
If GUICtrlRead($PlayMode[2]) == $GUI_CHECKED > 0 Then
Research()
Else
SetNext($similar, $tag)
EndIf
PluginTrigger("SongSearched", $id, $tag)
EndIf
Showcover($tag)
Outqueue($tag[3], $tag[1]); Song is no longer in queue
Focus($id)
$ActiveSongSimilar = $similar
$ActiveSongInfo = $tag
UpdateLabelAction(WMGetState()) ; Set songstate
WebAnnounce($tag) ;
Tray_info() ; Display trayinfo
$Rated = False
UpdateLabelAction(WMGetState()) ; Set songstate
PluginTrigger("SongInformationLoaded", $id, $tag)
Do
$Pos = WMGetPosition()
Sleep(50)
Until WMGetState() = "stopped" Or $LeaveWhile
If Not $Playing Then
UpdateLabelAction(WMGetState())
While WMGetState() = "stopped" Or $LeaveWhile
If $Playing = True Then ExitLoop
Sleep(10)
WEnd
EndIf
If UBound($liste) - 2 > $activelistid Then
PluginTrigger("NextSongAvailable")
If $next_sound = 0 Then
$oldlistid = $activelistid
If GUICtrlRead($ModeCheck[2]) == "Repeat" Then
$next_sound = Play($liste[$activelistid])
UpdateLabelAction("Loading " & $liste[$activelistid])
ElseIf GUICtrlRead($ModeCheck[2]) == "Shuffle" Then
Play_active()
Else
$next_sound = Play($liste[$activelistid + 1])
UpdateLabelAction("Loading " & $liste[$activelistid + 1])
EndIf
ChangeVol()
EndIf
Else
PluginTrigger("NextSongNotAvailable")
WMStop()
GUICtrlSetImage($pause_button, $PP_IcoFolder, 7)
GUICtrlSetState($ShowAlbum, $GUI_HIDE)
UpdateLabelInfo(StringSplit("||||||-1|", "|"), StringSplit("|", "|"))
WebAnnounce()
EndIf
If $Pos > $Dur * (LoadSetting("settings","ratetime",90)/100) Then
PluginTrigger("SongRatingIncreased", $id, $tag, $Dur)
Rate($Filepath, "1")
SongHeard($tag, $Dur)
Else
PluginTrigger("SongRatingDecreased", $id, $tag)
Rate($liste[$oldlistid], "-1")
EndIf
If GUICtrlRead($ModeCheck[2]) <> "Repeat" And Not $LeaveWhile Then $activelistid += 1
PluginTrigger("SongPlayed", $id, $tag)
UnFocus($id)
Return True
EndFunc ;==>Playing
Func ShowCover($tag)
If LoadSetting("settings","coverload",$GUI_CHECKED) == $GUI_UNCHECKED Then Return ""
If FileExists(debug(StringLeft($tag[6],StringInStr($tag[6],"\",0,-1)) & "Folder.jpg")) Then
GUICtrlSetImage($ShowAlbum, StringLeft($tag[6],StringInStr($tag[6],"\",0,-1)) & "Folder.jpg")
GUICtrlSetState($ShowAlbum, $GUI_SHOW)
PluginTrigger("SongCoverLoaded")
ElseIf FileExists("covers\" & $tag[1] & "-" & $tag[2] & ".jpg") Then ; Load Cover if not exists
GUICtrlSetImage($ShowAlbum, "covers\" & $tag[1] & "-" & $tag[2] & ".jpg")
GUICtrlSetState($ShowAlbum, $GUI_SHOW)
PluginTrigger("SongCoverLoaded")
EndIf
EndFunc
Func LoadSongInfo($Filepath, ByRef $tag, $id = -1)
$InDB = False
$tag = QueryDB($Filepath)
If @error Then
If $id > -1 Then PluginTrigger("SongNotInDB", $id, $Filepath)
If Not AddToDB($Filepath) Then
If $id > -1 Then PluginTrigger("SongNotAddableToDB", $id, $Filepath)
Dim $tag[9]
Dim $similar[1]
UnknownAll($tag, $similar, $Filepath)
Else
If $id > -1 Then PluginTrigger("SongAddedToDB", $id, $Filepath)
LoadSongInfo($Filepath, $tag)
EndIf
Else
If $id > -1 Then PluginTrigger("SongInDB", $id, $tag)
$InDB = True
EndIf
Return $InDB
EndFunc ;==>LoadSongInfo
Func LoadSongSimilar($Filepath, ByRef $tag, ByRef $similar, $id = -1)
$similar = LoadSimilar($tag[1])
If Not IsArray($similar) Then
If $id > -1 Then PluginTrigger("SongNoSimilarBands", $id, $tag)
Dim $similar[1]
UnknownAll($tag, $similar, $Filepath)
EndIf
EndFunc ;==>LoadSongSimilar
Func UnknownAll(ByRef $tag, ByRef $similar, $Filepath)
$tag = ReadFileInfo($Filepath)
If @error And FileExists($Filepath) Then
$tag[1] = WMGetArtist($active_sound)
$tag[2] = WMGetAlbum($active_sound)
$tag[3] = WMGetTitle($active_sound)
$tag[4] = WMGetGenre($active_sound)
$tag[5] = WMGetFileType($active_sound)
EndIf
ReDim $tag[9]
$tag[6] = $Filepath
$tag[7] = 0
$tag[8] = 10
If StringLen($tag[1]) = 0 Then $tag[1] = "Unknown Artist"
If StringLen($tag[2]) = 0 Then $tag[2] = "Unknown Album"
If StringLen($tag[3]) = 0 Then $tag[3] = StringTrimLeft($Filepath, StringInStr($Filepath, "\", 1, -1))
If StringLen($tag[4]) = 0 Then $tag[4] = "Unknown Genre"
If StringLen($tag[5]) = 0 Then $tag[5] = "Unknown Filetype"
ReDim $similar[2]
$similar[1] = "Unknown"
$similar[0] = 0
Return True
EndFunc ;==>UnknownAll
#endregion
#region Play / Playlist (NextInList(),PrevInList(),Play_active(),Play(Filename),Stop(),Pause(),HookPlayPause(),SetNext(Similar,Info,Retry),Research-funcs,Queue-funcs
Func NextInList()
_GUICtrlListView_SetItemSelected($lieder, $activelistid, False)
If GUICtrlRead($ModeCheck[2]) <> "Shuffle" Then _GUICtrlListView_SetItemSelected($lieder, $activelistid + 1)
Play_active()
EndFunc ;==>NextInList
Func PrevInList()
_GUICtrlListView_SetItemSelected($lieder, $activelistid, False)
If GUICtrlRead($ModeCheck[2]) <> "Shuffle" Then _GUICtrlListView_SetItemSelected($lieder, $activelistid - 1)
Play_active()
EndFunc ;==>PrevInList
Func Play_active()
$oldlistid2 = $activelistid
Stop()
$LeaveWhile = True
If GUICtrlRead($ModeCheck[2]) == "Shuffle" Then ;Shuffle
$Done = False
For $i = 1 To UBound($liste) - 1
$activelistid = Random(0, UBound($liste) - 1, 1)
If StringLen($liste[$activelistid]) > 0 Then
$tag = QueryDB($liste[$activelistid])
If IsArray($tag) And $tag[7] + ((UBound($liste) - 2) * 3) * 60 < _TimeGetStamp() Then
$Done = True
ExitLoop
EndIf
EndIf
Next
If Not $Done Then $activelistid = Random(0, UBound($liste) - 1, 1)
If UBound($liste) - 1 == 0 Then Return ""
ElseIf GUICtrlRead($ModeCheck[2]) == "Repeat" Then
$activelistid = $oldlistid
ElseIf GUICtrlRead($ModeCheck[2]) == "Repeat All" And $activelistid == UBound($liste) - 1 Then
$activelistid = 0 ;Repeat All
Else
$dClicked = True
EndIf
UnFocus($oldlistid2) ; Next song select - old one unfocused so GetIndices works
If $dClicked Then
$ItemSel = _GUICtrlListView_GetSelectedIndices($lieder, True)
If $ItemSel[0] == 0 Then
Return ""
Else
$activelistid = $ItemSel[1]
EndIf
EndIf
If UBound($liste) - 1 < $activelistid Then Return ""
$oldlistid = $oldlistid2
$Playing = True
$dClicked = False
Focus($activelistid)
$next_sound = Play($liste[$activelistid])
If FileExists($liste[$activelistid]) Then CalcPos($next_sound)
ChangeVol()
Dim $tag[9], $similar[1]
If LoadSongInfo($liste[$activelistid], $tag, $activelistid) Then ; Load Song Information and display
LoadSongSimilar($liste[$activelistid], $tag, $similar, $activelistid)
LastPlayed($tag[3], $tag[1])
UpdateList($activelistid, $tag[3], $tag[1])
EndIf
UpdateLabelInfo($tag, $similar)
PluginTrigger("SongInformationLoaded", $activelistid, $tag)
ShowCover($tag)
EndFunc ;==>Play_active
Func Play($filename)
$active_sound = WMOpenFile($filename)
If LoadSetting("infos","lastsongpos",0) > 0 Then
WMSetPosition(LoadSetting("infos","lastsongpos",0))
SaveSetting("infos","lastsongpos",0)
UpdateLabelPos($active_sound)
EndIf
WMPlay($filename)
GUICtrlSetImage($pause_button, $PP_IcoFolder, 6)
Return $active_sound
EndFunc ;==>Play
Func Stop()
$Playing = False
$activelistid = 0
PluginTrigger("SongPlayStopped")
WMStop()
GUICtrlSetImage($pause_button, $PP_IcoFolder, 7)
GUICtrlSetState($ShowAlbum, $GUI_HIDE)
UpdateLabelInfo(StringSplit("||||||-1|", "|"), StringSplit("|", "|"))
EndFunc ;==>Stop
Func Pause()
Switch WMGetState()
Case "Playing"
TrayItemSetText($Tray_Pause, "Resume")
WMPause()
PluginTrigger("SongPlayPaused")
GUICtrlSetImage($pause_button, $PP_IcoFolder, 7)
Case "Paused"
TrayItemSetText($Tray_Pause, "Pause")
GUICtrlSetImage($pause_button, $PP_IcoFolder, 6)
PluginTrigger("SongPlayResumed")
WMResume()
Case Else
Play_active()
EndSwitch
EndFunc ;==>Pause
Func HookPlayPause()
If $Playing Then
Pause()
Else
Play_active()
EndIf
EndFunc ;==>HookPlayPause
Func SetNext($similar, $Info, $Retry = False, $RetryTime = 0)
If Not IsArray($similar) And Not IsArray($Info) Then Return False
If GUICtrlRead($ModeCheck[1]) == "Similar Band" Then
$Similars = GUICtrlRead($SettingsPlayModeSlider1)
If UBound($similar) - 1 < $Similars Then $Similars = UBound($similar) - 1
ReDim $similar[$Similars + 1]
If $similar[0] == 0 Then
For $i = 1 To $Similars
$similar[$i] = $Info[1]
Next
EndIf
$similar[0] = $Info[1]
$GetSimilar = True
Else
$GetSimilar = False
EndIf
Local $NextSongs[1]
Dim $tag[8]
$msg = 'SELECT * FROM Songs WHERE '
Switch GUICtrlRead($ModeCheck[1])
Case "Similar Band"
$msg2 = ''
For $i = 1 To $Similars
$msg2 &= 'Artist = "' & $similar[$i] & '" OR '
Next
$msg &= StringTrimRight($msg2, 3)
Case "Genre"
$msg &= 'Genre = "' & $Info[4] & '"'
Case "Band"
$msg &= 'Artist = "' & $Info[1] & '"'
Case "Album"
$msg &= 'Album = "' & $Info[2] & '"'
EndSwitch
If StringLen(LoadSetting("settings","ExcludedTags","")) > 0 Then
$Keyword = StringSplit(LoadSetting("settings","ExcludedTags","")," ")
$msg2 = ""
For $i = 1 To $Keyword[0]
$msg2 &= ' AND NOT (Artist LIKE "%' & $Keyword[$i] & '%" OR Genre LIKE "%' & $Keyword[$i] & '%" OR Track LIKE "%' & $Keyword[$i] & '%" OR Album LIKE "%' & $Keyword[$i] & '%" OR Path LIKE "%' & $Keyword[$i] & '%")'
Next
$msg &= $msg2
EndIf
_SQLite_Query(-1,$msg & ";",$hQuery)
While _SQLite_FetchData($hQuery, $tag) = $SQLITE_OK
If FileExists($tag[5]) And Not CheckQueue($tag[2], $tag[0]) And _
($tag[7] > 1 And ($Retry Or Random(0, 100) > $tag[7] * 4.5)) And _
(($RetryTime > 6 And $tag[6] + GetOpt("MinLastPlayed") / ($RetryTime * 2) * 60 < _TimeGetStamp()) Or $tag[6] + GetOpt("MinLastPlayed") * 60 < _TimeGetStamp()) Then
ReDim $NextSongs[UBound($NextSongs) + 1]
$NextSongs[UBound($NextSongs) - 1] = $tag[5] & "|" & $tag[2] & "|" & $tag[0]
EndIf
WEnd
_SQLite_QueryFinalize($hQuery)
If UBound($NextSongs) == 1 Then
If Not $Retry Then
ErrorWrite("Retry Nr. 1 bei 1")
SetNext($similar, $Info, True)
Return False
ElseIf $RetryTime < 5 Then
ErrorWrite("Retry Nr. 2 bei 1")
SetNext($similar, $Info, True, $RetryTime + 1)
Return False
Else
Return False
EndIf
EndIf
$split = StringSplit($NextSongs[Random(1, UBound($NextSongs) - 1, 1)], "|")
If @error Then
If Not $Retry Then
ErrorWrite("Retry Nr. 1 bei 2")
SetNext($similar, $Info, True)
Return False
ElseIf $RetryTime < 5 Then
ErrorWrite("Retry Nr. 2 bei 2")
SetNext($similar, $Info, True, $RetryTime + 1)
Return False
Else
Return False
EndIf
EndIf
SetList($split[1])
UpdateList(UBound($liste) - 1, $split[2], $split[3])
EndFunc ;==>SetNext
Func Research()
If $SearchGUI = 0 Then
$Keyword = GUICtrlRead($PlayModeKeyword)
If StringLen($Keyword) > 0 Then
If StringInStr(IniRead("db\settings.ini", "PlayMode", "Combo", ""), $Keyword) == 0 Then
IniWrite("db\settings.ini", "PlayMode", "Combo", IniRead("db\settings.ini", "PlayMode", "Combo", "") & "|" & $Keyword)
_GUICtrlComboBox_AddString($PlayModeKeyword, $Keyword)
EndIf
$Keyword = StringSplit($Keyword, " ")
$NoGUI = True
If GUICtrlRead($PlayMode[2]) == $GUI_UNCHECKED Then
$SearchWait = False
Global $SearchGUI = GUICreate("PPlayer - Search", 500, 500, -1, -1, -1, -1, $PlaymodeGUI)
Global $Searchview = _GUICtrlCreateListView("Track |Artist |Album |Genre |Rating |Filepath", 0, 0, 500, 480)
GUICtrlSetOnEvent(-1, "SearchView")
__GUICtrlListView_DeleteAllItems($Searchview)
$Label = GUICtrlCreateLabel("Searching", 10, 480, 480, 20)
GUISetOnEvent($GUI_EVENT_CLOSE, "SearchEnd")
GUISetState()
$NoGUI = False
EndIf
$Suc = 0
Global $SearchResult[1]
$msg = ""
For $i = 1 To $Keyword[0]
If StringLeft($Keyword[$i], 1) == "-" Then
$Keyword[$i] = StringTrimLeft($Keyword[$i], 1)
$msg &= "NOT "
EndIf
$msg &= '(Artist LIKE "%' & $Keyword[$i] & '%" OR Genre LIKE "%' & $Keyword[$i] & '%" OR Track LIKE "%' & $Keyword[$i] & '%" OR Album LIKE "%' & $Keyword[$i] & '%" OR Path LIKE "%' & $Keyword[$i] & '%") AND '
Next
$msg = StringTrimRight($msg, 4)
Dim $Query
_SQLite_Query(-1, "SELECT * FROM Songs WHERE " & $msg & ";", $hQuery) ; the query
While _SQLite_FetchData($hQuery, $Query) = $SQLITE_OK
If FileExists($Query[5]) Then
$Suc += 1
If GUICtrlRead($PlayMode[2]) == $GUI_UNCHECKED Then _GUICtrlCreateListViewItem($Query[2] & "|" & $Query[0] & "|" & $Query[1] & "|" & $Query[3] & "|" & $Query[7] & "|" & $Query[5], $Searchview)
ReDim $SearchResult[$Suc + 1][6]
$SearchResult[$Suc][0] = $Query[5]
$SearchResult[$Suc][1] = $Query[2]
$SearchResult[$Suc][2] = $Query[0]
$SearchResult[$Suc][3] = $Query[1]
$SearchResult[$Suc][4] = $Query[3]
$SearchResult[$Suc][5] = $Query[7]
EndIf
WEnd
_SQLite_QueryFinalize($hQuery)
If Not $NoGUI Then
$Lol = False
__GUICtrlListView_Sort($Searchview, $Lol, 0)
GUICtrlSetData($Label, "Done -- Found " & $Suc & " songs.")
$SearchWait = True
Else
$Number = Random(1, $Suc, 1)
For $i = 1 To $Suc
$Number = Random(1, $Suc, 1)
If FileExists($SearchResult[$Number][0]) And Not CheckQueue($SearchResult[$Number][1], $SearchResult[$Number][2]) And _
($SearchResult[$Number][5] > 1 And Random(0, (100 - (($i - 1) / $Suc))) > $SearchResult[$Number][5] * 4.5) Then ExitLoop
Next
If $Suc > 0 Then SetList($SearchResult[$Number][0])
EndIf
Else
SetNext($ActiveSongSimilar, $ActiveSongInfo)
EndIf
EndIf
EndFunc ;==>Research
Func SearchEnd()
GUIDelete($SearchGUI)
$SearchGUI = 0
EndFunc ;==>SearchEnd
Func SearchView()
$Lol = False
If $oldstate == GUICtrlGetState($Searchview) Then $Lol = Not $Lol
$oldstate = GUICtrlGetState($Searchview)
__GUICtrlListView_Sort($Searchview, $Lol, GUICtrlGetState($Searchview))
EndFunc ;==>SearchView
Func Inqueue($Title, $interpret)
_IniWrite("db\MainDB.ini", $Title & "-" & $interpret, "inqueue", 1)
EndFunc ;==>Inqueue
Func Outqueue($Title, $interpret)
IniDelete("db\MainDB.ini", $Title & "-" & $interpret)
EndFunc ;==>Outqueue
Func CheckQueue($Title, $interpret)
If IniRead("db\MainDB.ini", $Title & "-" & $interpret, "inqueue", 0) == 0 Then
Return False
Else
Return True
EndIf
EndFunc ;==>CheckQueue
#endregion
#region GUIs (Rate,PlayMode,Podcast,Stream,Transfer,Settings,Stat,BugReport)
Func BuildGUIs()
PlaymodeBuild()
SettingsBuild()
StatBuild()
RateBuild()
EndFunc ;==>BuildGUIs
#region -> Rate
Func RateBuild()
Global $RateIcon[22]
Global $RateGUI = XSkinGUICreate("PPlayer - Rate", 339+$factorX*2, 197+$factorY*2, $Skin_Folder,1,25,-1,-1,-1,$MainGUI)
XSkinIcon($RateGUI,3,StringSplit("RateClose|RateClose|RateHelp","|"))
$nr = 0
For $x = 8 To 296 Step 32
$nr += 1
$RateIcon[$nr] = GUICtrlCreateIcon($PP_IcoFolder,12, $x+$factorX, 88+$factorY, 32, 32)
GUICtrlSetOnEvent(-1,"RateOnClick")
GUICtrlSetOnHover($RateIcon[$nr],"RateOnHover","RateOffHover")
Next
For $x = 8 To 296 Step 32
$nr += 1
$RateIcon[$nr] = GUICtrlCreateIcon($PP_IcoFolder,12, $x+$factorX, 120+$factorY, 32, 32)
GUICtrlSetOnEvent(-1,"RateOnClick")
GUICtrlSetOnHover($RateIcon[$nr],"RateOnHover","RateOffHover")
Next
Global $RateButton1 = GUICtrlCreateButton("Save", 104+$factorX, 160+$factorY, 113, 33, 0)
GUICtrlSetOnEvent(-1,"RateSave")
Global $RateLabel1 = GUICtrlCreateLabel("", 8+$factorX, 8+$factorY, 316, 76)
EndFunc ;==>Rate_GUI
Func RateOnHover($Control)
$Hover = True
For $i = 1 To 20
If $Hover Then
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,12)
Else
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,13)
EndIf
If $Control == $RateIcon[$i] Then $Hover = False
Next
EndFunc
Func RateOffHover($Control)
For $i = 1 To $CurrentRating
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,12)
Next
For $i = $CurrentRating+1 To 20
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,13)
Next
EndFunc
Func Rate_GUI()
$ItemSel = _GUICtrlListView_GetSelectedIndices($lieder, True)
If $ItemSel[0] == 0 Then
Error("No song selected!")
Return ""
EndIf
$tag = QueryDB($liste[$ItemSel[1]])
If Not @Error Then
$Rating = $tag[8]
Else
Error("Song not in DB")
Return ""
EndIf
For $i = 1 To $Rating
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,12)
Next
For $i = $Rating+1 To 20
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,13)
Next
Global $CurrentRating = $Rating
Global $CurrentRatingFile = $liste[$ItemSel[1]]
GUICtrlSetData($RateLabel1,"Artist: " & @tab & @tab & $tag[1] & @CRLF & "Album: " & @tab & @tab & $tag[2] & @CRLF & "Track: " & @tab & @tab & $tag[3] & @CRLF & "Current rating: " & @tab & $tag[8])
GUISetState(@SW_SHOW,$RateGUI)
EndFunc
Func RateClose()
GUISetState(@SW_Hide,$RateGUI)
EndFunc
Func RateSave()
_SQLite_Exec(-1, 'UPDATE Songs SET Rating = "' & $CurrentRating & '" WHERE Path = "' & $CurrentRatingFile & '";')
RateClose()
EndFunc
Func RateHelp()
ShellExecute("http://pplayer.wiki.sourceforge.net/Rating")
EndFunc
Func RateOnClick()
$Hover = True
For $i = 1 To 20
If $Hover Then
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,12)
$CurrentRating = $i
Else
GUICtrlSetImage($RateIcon[$i],$PP_IcoFolder,13)
EndIf
If @GUI_CtrlId == $RateIcon[$i] Then $Hover = False
Next
EndFunc
#endregion
#region -> Settings
Func SettingsBuild()
Global $Settings_GUI = GUICreate("PPlayer - Settings", 494, 447, -1, -1, -1, -1, $MainGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "Settings_close", $Settings_GUI)
Global $SettingsButton1 = GUICtrlCreateButton("OK", 232, 400, 81, 41, 0)
GUICtrlSetOnEvent(-1, "Settings_ok")
Global $SettingsTab1 = GUICtrlCreateTab(5, 5, 484, 388)
; - General
Global $SettingsTabSheet1 = GUICtrlCreateTabItem("General")
GUICtrlSetState(-1, $GUI_SHOW)
; General - Design
Global $SettingsGroup1 = GUICtrlCreateGroup("Design", 8, 32, 473, 282)
Global $SettingsLabel1 = GUICtrlCreateLabel("Backgroundcolor", 16, 56, 85, 17)
Global $SettingsLabel2 = GUICtrlCreateLabel("Textcolor", 16, 88, 48, 17)
Global $SettingsInput1 = GUICtrlCreateInput(GetOpt("BkColor"), 264, 56, 137, 21, $ES_WANTRETURN)
Global $SettingsButton4 = GUICtrlCreateButton("Choose", 408, 56, 65, 25, 0)
GUICtrlSetOnEvent(-1, "SettingsChooseColor")
Global $SettingsInput2 = GUICtrlCreateInput(GetOpt("TextColor"), 264, 88, 137, 21)
Global $SettingsButton5 = GUICtrlCreateButton("Choose", 408, 88, 65, 25, 0)
GUICtrlSetOnEvent(-1, "SettingsChooseColor")
Global $SettingsLabel3 = GUICtrlCreateLabel("Transparency", 16, 120, 69, 17)
Global $SettingsSlider1 = GUICtrlCreateSlider(264, 120, 209, 25)
GUICtrlSetLimit(-1, 255, 50)
GUICtrlSetData(-1, GetOpt("Trans"))
GUICtrlSetOnEvent(-1, "Settings_Change")
Global $SettingsLabel4 = GUICtrlCreateLabel("On/Off-Animation", 16, 152, 86, 17)
Global $SettingsCheckbox1 = GUICtrlCreateCheckbox("", 264, 152, 209, 25)
GUICtrlSetState(-1, GetOpt("Ani"))
GUICtrlSetOnEvent(-1, "Settings_Change")
$Files = _FileSearch($PP_Dir & "resource", "*icos.dll", 0, '', True)
If @Error Then
If Error("Your Installation misses icons." & @CRLF & "You have to reinstall PPlayer." & @CRLF & "Do you want to get redirected to the download?",4) == 6 Then DownloadPPlayer()
Else
GUICtrlCreateLabel("Iconset", 16, 184, 48, 17)
Global $SettingsCombo3 = GUICtrlCreateCombo("", 264, 184, 209, 25)
$Text = ""
For $i = 1 To $Files[0]
$String = StringTrimLeft($Files[$i], StringInStr($Files[$i], "\", 0, -1))
$Text &= StringTrimRight($String, 8) & "|"
Next
$Text = StringTrimRight($Text, 1)
GUICtrlSetData(-1, $Text)
GUICtrlSetOnEvent(-1, "Settings_Change")
$Text = StringSplit($Text, "|")
For $i = 1 To $Text[0]
If $Text[$i] == IniRead("db\settings.ini", "settings", "icos", "Metal") Then _GUICtrlComboBox_SetCurSel($SettingsCombo3, $i - 1)
Next
EndIf
$Files = _FileSearch($PP_Dir & "resource", "*PPlayer.kxf", 0, '', True)
If @Error Then
If Error("Your Installation misses positionfiles." & @CRLF & "You have to reinstall PPlayer." & @CRLF & "Do you want to get redirected to the download?",4) == 6 Then DownloadPPlayer()
logoff()
Else
GUICtrlCreateLabel("Design for MainGUI", 16, 216, 150, 17)
Global $SettingsCombo4 = GUICtrlCreateCombo("", 264, 216, 209, 25)
$Text = ""
For $i = 1 To $Files[0]
$String = StringTrimLeft($Files[$i], StringInStr($Files[$i], "\", 0, -1))
$Text &= StringTrimRight($String, 11) & "|"
Next
$Text = StringTrimRight($Text, 1)
GUICtrlSetData(-1, $Text)
GUICtrlSetOnEvent(-1, "Settings_Change")
$Text = StringSplit($Text, "|")
For $i = 1 To $Text[0]
If $Text[$i] == IniRead("db\settings.ini", "settings", "PPlayerkxf", "Default") Then _GUICtrlComboBox_SetCurSel($SettingsCombo4, $i - 1)
Next
EndIf
$Files = _FileSearch($PP_Dir & "resource", "*PlayMode.kxf", 0, '', True)
If @Error Then
If Error("Your Installation misses positionfiles." & @CRLF & "You have to reinstall PPlayer." & @CRLF & "Do you want to get redirected to the download?",4) == 6 Then DownloadPPlayer()
logoff()
Else
GUICtrlCreateLabel("Design for PlayMode", 16, 248, 150, 17)
Global $SettingsCombo5 = GUICtrlCreateCombo("", 264, 248, 209, 25)
$Text = ""
For $i = 1 To $Files[0]
$String = StringTrimLeft($Files[$i], StringInStr($Files[$i], "\", 0, -1))
$Text &= StringTrimRight($String, 12) & "|"
Next
$Text = StringTrimRight($Text, 1)
GUICtrlSetData(-1, $Text)
GUICtrlSetOnEvent(-1, "Settings_Change")
$Text = StringSplit($Text, "|")
For $i = 1 To $Text[0]
If $Text[$i] == IniRead("db\settings.ini", "settings", "PlayModekxf", "Default") Then _GUICtrlComboBox_SetCurSel($SettingsCombo5, $i - 1)
Next
EndIf
GUICtrlCreateLabel("Statusbar", 16, 280, 86, 17)
Global $SettingsCheckbox4 = GUICtrlCreateCheckbox("", 264, 280, 209, 25)
GUICtrlSetState(-1, LoadSetting("settings", "Statusbar", $GUI_UNCHECKED))
GUICtrlSetOnEvent(-1, "Settings_Change")
GUICtrlCreateGroup("", -99, -99, 1, 1)
#Region PlayMode
Global $SettingsTabSheet2 = GUICtrlCreateTabItem("PlayMode")
Global $SettingsPlayModeGroup1 = GUICtrlCreateGroup("General", 8, 32, 473, 281)
Global $SettingsPlayModeSlider1 = GUICtrlCreateSlider(16, 144, 457, 25)
GUICtrlSetLimit(-1, 10, 1)
GUICtrlSetData(-1, GetOpt("SimilarBands"))
GUICtrlSetOnEvent(-1, "SimilarSliderChange")
Global $SettingsPlayModeLabel3 = GUICtrlCreateLabel("Similar bands available for search", 16, 120, 161, 17)
Global $SettingsPlayModeCheckbox2 = GUICtrlCreateCheckbox("", 264, 184, 201, 25)
GUICtrlSetState(-1,LoadSetting("settings","coverload",$GUI_CHECKED))
GUICtrlSetOnEvent(-1, "Settings_Change")
Global $SettingsPlayModeLabel4 = GUICtrlCreateLabel("Load Covers", 16, 184, 64, 17)
Global $SettingsPlayModeLabel6 = GUICtrlCreateLabel("Time to block a song until its played again (min)", 16, 56, 226, 17)
Global $SettingsPlayModeLabel7 = GUICtrlCreateLabel("Time a song should be played until its rated (%)", 16, 248, 224, 17)
Global $SettingsPlayModeLabel8 = GUICtrlCreateLabel("Load last song(s) on start", 16, 216, 122, 17)
Global $SettingsPlayModeCheckbox3 = GUICtrlCreateCheckbox("", 264, 216, 201, 25)
GUICtrlSetState(-1,LoadSetting("settings","loadsongs",$GUI_UNCHECKED))
GUICtrlSetOnEvent(-1, "Settings_Change")
Global $SettingsPlayModeInput1 = GUICtrlCreateInput(GetOpt("MinLastPlayed"), 264, 56, 209, 21)
Global $SettingsPlayModeInput2 = GUICtrlCreateInput(LoadSetting("settings","ratetime",90), 264, 248, 209, 21)
Global $SettingsPlayModeInput3 = GUICtrlCreateInput(LoadSetting("settings","ExcludedTags",""), 264, 280, 209, 21)
Global $SettingsPlayModeLabel11 = GUICtrlCreateLabel("Songs (Keywords) that should be excluded from AutoSearch (seperated by ',')", 16, 280, 232, 25)
Global $SettingsPlayModeLabel1 = GUICtrlCreateLabel("Song-Popup (Notification)", 16, 88, 125, 17)
Global $SettingsPlayModeCheckbox1 = GUICtrlCreateCheckbox("", 264, 88, 201, 25)
GUICtrlSetState(-1, GetOpt("Popup"))
GUICtrlSetOnEvent(-1, "Settings_Change")
GUICtrlCreateGroup("", -99, -99, 1, 1)
#endregion
; - SongView
Global $SettingsTabSheet3 = GUICtrlCreateTabItem("SongView")
$id = _GetCPUID()
; SongView - URLs
Global $SettingsGroup4 = GUICtrlCreateGroup("URLs", 8, 32, 473, 190)
GUICtrlCreateLabel("Direct-URL:", 16, 56, 60, 17)
GUICtrlCreateInput($PP_HP & "images/" & $id & ".gif", 16, 80, 441, 21, $ES_READONLY)
GUICtrlCreateLabel("BBCode: (Forum)", 16, 114, 108, 17)
GUICtrlCreateInput("[url=http://pplayer.net.ms][img]" & $PP_HP & "images/" & $id & ".gif[/img][/url]", 16, 136, 441, 21, $ES_READONLY)
GUICtrlCreateLabel("HTMLCode: (Blog/Website etc)", 16, 168, 154, 17)
GUICtrlCreateInput("
", 16, 192, 441, 21, $ES_READONLY)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $SettingsGroup4 = GUICtrlCreateGroup("Settings", 8, 226, 473, 74)
GUICtrlCreateLabel("Nickname:", 16, 250, 55, 17)
Global $SongViewNickNameInput = GUICtrlCreateInput(IniRead("db\settings.ini", "SongView", "name", $id), 80, 250, 193, 21)
GUICtrlCreateLabel("Text: (currently disabled)", 16, 274, 28, 17)
Global $SongViewTextInput = GUICtrlCreateInput(IniRead("db\settings.ini", "SongView", "text", "I am listening to: %i - %a - %t"), 80, 274, 193, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $SettingsGroup5 = GUICtrlCreateGroup("Info", 8, 305, 473, 82)
GUICtrlCreateLabel("", 16, 318, 465, 69)
GUICtrlSetData(-1, "PPlayer Songview publishes the song you're actually listening to. " & _
"Just copy one of the adresses into your Forumsignature (BBCode) or onto a Blogpost (HTML or BBCode) " & _
"Your friends will then be able to see what you're actually listening to. " & _
"You should specify your Username so everbody understands who you are." & @CRLF & _
"Tags: %i = Artist, %t = Track, %a = Album")
GUICtrlCreateTabItem("Skin")
GUICtrlCreateGroup("Skin", 8, 32, 473, 355)
GUICtrlCreateLabel("Here you can select a new skin for PPlayer", 16, 46, 220, 121)
Global $SettingsCombo1 = GUICtrlCreateCombo("", 16, 174, 217, 25)
GUICtrlSetOnEvent(-1, "SettingsSkinChange")
Global $SettingsPic1 = GUICtrlCreatePic("", 240, 46, 233, 337)
Global $SettingsLabel10 = GUICtrlCreateLabel("Select a skin above to get more information about it." & @CRLF & "Press apply to save the skin.", 16, 206, 220, 157)
GUICtrlCreateButton("Rate this skin", 16, 363, 80, 20)
GUICtrlSetOnEvent(-1, "RateSkin")
GUICtrlCreateButton("Upload skin", 100, 363, 80, 20)
GUICtrlSetOnEvent(-1, "UploadSkin")
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $PluginsListViewItems[1]
Global $SettingsTabSheet5 = GUICtrlCreateTabItem("Plugins")
Global $PluginsListView = GUICtrlCreateListView("Name|Author|Quick Description|Version|Rating", 8, 32, 473, 169, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 200)
GUICtrlSendMsg(-1, 0x101E, 3, 60)
GUICtrlSendMsg(-1, 0x101E, 4, 50)
Global $PluginsEdit = GUICtrlCreateEdit("", 8, 208, 473, 153, BitOR($ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL))
If $PluginSettingsTabs[0] > 0 Then
For $i = 1 To $PluginSettingsTabs[0]
PluginTriggerWithNr("CreateSettingsTab", $PluginSettingsTabs[$i])
Next
EndIf
GUICtrlCreateTabItem("")
Global $SettingsButton2 = GUICtrlCreateButton("Apply", 320, 400, 81, 41, 0)
GUICtrlSetOnEvent(-1, "Settings_save")
GUICtrlSetState(-1, $GUI_DISABLE)
Global $SettingsButton3 = GUICtrlCreateButton("Cancel", 408, 400, 81, 41, 0)
GUICtrlSetOnEvent(-1, "Settings_close")
If IniRead("db\settings.ini", "GUIStati", "Settings", "Close") == "Open" Then Settings()
EndFunc ;==>SettingsBuild
Func Settings()
GUISetState(@SW_SHOW, $Settings_GUI)
GUISetState(@SW_RESTORE, $Settings_GUI)
SkinList(IniRead("db\settings.ini", "settings", "skin", "Carbon"))
SettingsPluginList()
SettingsSkinChange()
_IniWrite("db\settings.ini", "GUIStati", "Settings", "Open")
PluginTrigger("OnSettingsOpen")
EndFunc ;==>Settings
Func SettingsPluginList()
_GUICtrlListView_DeleteAllItems($PluginsListView)
$Input = Request($PP_HP & "plugin.php")
If StringLen($Input) > 0 Then
SaveSetting("Plugins", "list", $Input)
Else
$Input = LoadSetting("Plugins", "list", "BugReport|Pascal|Help PPlayer development|0.1|0||ChangeMSN|Pascal|Changes the MSN-Message|0.5|0||Lyrics|Pascal|Displays Lyrics|0.1|0||Podcast|Pascal|Plays Podcasts|0.1|0||Stream|Pascal|Plays Streams|0.1|0||Updater|Pascal|Updates PPlayer|0.1|0||")
EndIf
$Input = StringSplit($Input, "||", 1)
For $i = 1 To $Input[0] - 1
If StringLen($Input[$i]) > 0 Then
$PluginInfo = StringSplit($Input[$i], "|")
ReDim $PluginsListViewItems[UBound($PluginsListViewItems) + 1]
If $PluginInfo[5] == 0 Then $PluginInfo[5] = "Unrated"
$PluginsListViewItems[UBound($PluginsListViewItems) - 2] = GUICtrlCreateListViewItem($PluginInfo[1] & "|" & $PluginInfo[2] & "|" & $PluginInfo[3] & "|" & $PluginInfo[4] & "|" & $PluginInfo[5], $PluginsListView)
GUICtrlSetOnEvent(-1, "Settings_PluginChange")
If $PluginInfo[2] == "Pascal" Then
If LoadSetting("Pluginact", $PluginInfo[1], True) == True Then _GUICtrlListView_SetItemChecked($PluginsListView, $i - 1)
Else
If LoadSetting("Pluginact", $PluginInfo[1], False) == True Then _GUICtrlListView_SetItemChecked($PluginsListView, $i - 1)
EndIf
EndIf
Next
EndFunc ;==>SettingsPluginList
Func Settings_close()
GUISetState(@SW_HIDE, $Settings_GUI)
_IniWrite("db\settings.ini", "GUIStati", "Settings", "Close")
GUICtrlSetData($SettingsInput1, GetOpt("BkColor"))
GUICtrlSetData($SettingsInput2, GetOpt("TextColor"))
GUICtrlSetData($SettingsSlider1, GetOpt("Trans"))
GUICtrlSetState($SettingsCheckbox1, GetOpt("Ani"))
; PlayMode
GUICtrlSetState($SettingsPlayModeCheckbox1, GetOpt("PopUp"))
GUICtrlSetData($SettingsPlayModeInput1, GetOpt("MinLastPlayed"))
GUICtrlSetState($SettingsPlayModeCheckbox2,LoadSetting("settings", "CoverLoad",$GUI_CHECKED))
GUICtrlSetState($SettingsPlayModeCheckbox3,LoadSetting("settings", "LoadSongs",$GUI_UNCHECKED))
GUICtrlSetData($SettingsPlayModeInput2,LoadSetting("settings", "Ratetime",90))
GUICtrlSetData($SettingsPlayModeInput3,LoadSetting("settings", "ExcludedTags",""))
PluginTrigger("OnSettingsClose")
EndFunc ;==>Settings_close
Func Settings_OK()
Settings_save()
Settings_close()
EndFunc ;==>Settings_OK
Func SettingsChooseColor()
GUICtrlSetState($SettingsButton2, $GUI_ENABLE)
If @GUI_CtrlId == $SettingsButton4 Then
$Input = StringTrimLeft(_ChooseColor(2, "0x" & GetOpt("BkColor"), 2), 2)
If StringLen($Input) > 0 Then GUICtrlSetData($SettingsInput1, $Input)
ElseIf @GUI_CtrlId == $SettingsButton5 Then
$Input = StringTrimLeft(_ChooseColor(2, "0x" & GetOpt("TextColor"), 2), 2)
If StringLen($Input) > 0 Then GUICtrlSetData($SettingsInput2, $Input)
EndIf
EndFunc ;==>SettingsChooseColor
Func Settings_save()
#region Restart?
$Restart = False
If GetOpt("BkColor") <> GUICtrlRead($SettingsInput1) Then $Restart = True
If GetOpt("TextColor") <> GUICtrlRead($SettingsInput2) Then $Restart = True
If LoadSetting("settings", "PPlayerkxf", "Default") <> GUICtrlRead($SettingsCombo4) Then
CreateGUIIni("resource\" & GUICtrlRead($SettingsCombo4) & "PPlayer.kxf")
$Restart = True
EndIf
If LoadSetting("settings", "PlayModekxf", "Default") <> GUICtrlRead($SettingsCombo5) Then
CreateGUIIni("resource\" & GUICtrlRead($SettingsCombo5) & "PlayMode.kxf")
$Restart = True
EndIf
#endregion
#region SongView-Tab
SaveSetting("SongView", "name", GUICtrlRead($SongViewNickNameInput))
SaveSetting("SongView", "text", GUICtrlRead($SongViewTextInput))
#endregion
#region General-Tab
SaveSetting("settings", "BkColor", GUICtrlRead($SettingsInput1))
SaveSetting("settings", "TextColor", GUICtrlRead($SettingsInput2))
SaveSetting("settings", "Trans", GUICtrlRead($SettingsSlider1))
SaveSetting("settings", "Ani", GUICtrlRead($SettingsCheckbox1))
SaveSetting("settings", "PPlayerkxf", GUICtrlRead($SettingsCombo4))
SaveSetting("settings", "PlayModekxf", GUICtrlRead($SettingsCombo5))
SaveSetting("settings", "icos", GUICtrlRead($SettingsCombo3))
SaveSetting("settings", "Statusbar", GUICtrlRead($SettingsCheckbox4))
#endregion
#region PlayMode-Tab
SaveSetting("settings", "MinLastPlayed", GUICtrlRead($SettingsPlayModeInput1))
SaveSetting("settings", "PopUp", GUICtrlRead($SettingsPlayModeCheckbox1))
SaveSetting("settings", "CoverLoad", GUICtrlRead($SettingsPlayModeCheckbox2))
SaveSetting("settings", "LoadSongs", GUICtrlRead($SettingsPlayModeCheckbox3))
SaveSetting("settings", "Ratetime", GUICtrlRead($SettingsPlayModeInput2))
SaveSetting("settings", "ExcludedTags", GUICtrlRead($SettingsPlayModeInput3))
#endregion
#region Plugins
$FH = FileOpen("Plugins\Plugins.au3", 2)
For $i = 0 To _GUICtrlListView_GetItemCount($PluginsListView) - 1
If _GUICtrlListView_GetItemChecked($PluginsListView, $i) == True Then
$Plugin = _GUICtrlListView_GetItemText($PluginsListView, $i)
If Not FileExists("Plugins\" & $Plugin & "\Main.au3") Then
ProgressOn("PPlayer - Settings", "Downloading Plugins", $Plugin)
FileDelete(@TempDir & "PPlayerDownload")
InetGet($PP_HP & "downloads/Plugins/" & $Plugin & "/Main.au3", @TempDir & "PPlayerDownload", 1, 1)
$Size = InetGetSize($PP_HP & "downloads/Plugins/" & $Plugin & "/Main.au3")
$Timer = TimerInit()
While @InetGetActive Or TimerDiff($Timer) < $Size * 2
ProgressSet(@InetGetBytesRead / $Size * 100)
Sleep(10)
WEnd
ProgressOff()
If FileGetSize(@TempDir & "PPlayerDownload") > 0 Then
FileCopy(@TempDir & "PPlayerDownload", "Plugins\" & $Plugin & "\Main.au3", 9)
FileWriteLine($FH, '#include "' & $Plugin & '\Main.au3"')
SaveSetting("Pluginact", $Plugin, True)
Else
Error("Unable to download Plugin!")
EndIf
Else
FileWriteLine("Plugins\Plugins.au3", '#include "' & $Plugin & '\Main.au3"')
SaveSetting("Pluginact", $Plugin, True)
EndIf
Else
SaveSetting("Pluginact", _GUICtrlListView_GetItemText($PluginsListView, $i), False)
EndIf
Next
FileClose($FH)
#endregion
#region Skin
$Skin = GUICtrlRead($SettingsCombo1)
If StringLen($Skin) > 0 And GetOpt("skin") <> $Skin Then
Request($PP_HP & "skin.php?skin=" & $Skin & "&select=true")
DownloadSkin($Skin)
GUICtrlSetData($SettingsInput1, StringTrimLeft(IniRead("Skins\" & $Skin & "\Skin.dat", "color", "background", 0), 2))
GUICtrlSetData($SettingsInput2, StringTrimLeft(IniRead("Skins\" & $Skin & "\Skin.dat", "color", "fontcolor", 0), 2))
$Restart = True
EndIf
#endregion
GUICtrlSetState($SettingsButton2, $GUI_DISABLE)
PluginTrigger("OnSettingsSave")
If $Restart And MsgBox(4, "PPlayer - Settings", "Do you want to restart PPlayer?") == 6 Then
logoff()
Else
$Restart = False
EndIf
EndFunc ;==>Settings_save
Func Settings_Change()
If GUICtrlRead($SettingsSlider1) <> $SettingsSlider1Old Then
WinSetTrans("PPlayer - V", "", GUICtrlRead($SettingsSlider1))
$SettingsSlider1Old = GUICtrlRead($SettingsSlider1)
EndIf
If GUICtrlRead($SettingsCheckbox2) == $GUI_UNCHECKED Then
GUICtrlSetState($SettingsInput3, $GUI_DISABLE)
GUICtrlSetState($SettingsLabel6, $GUI_DISABLE)
Else
GUICtrlSetState($SettingsInput3, $GUI_ENABLE)
GUICtrlSetState($SettingsLabel6, $GUI_ENABLE)
EndIf
GUICtrlSetState($SettingsButton2, $GUI_ENABLE)
EndFunc ;==>Settings_Change
Func Settings_PluginChange()
$Sel = _GUICtrlListView_GetSelectedIndices($PluginsListView, 1)
If $Sel[0] > 0 Then
$Input = StringSplit(Request($PP_HP & "plugin.php?plugin=" & _GUICtrlListView_GetItemText($PluginsListView, $Sel[1])), "", 1)
GUICtrlSetData($PluginsEdit, $Input[1])
EndIf
$Changed = False
For $i = 0 To UBound($PluginsListViewItems) - 1
If @GUI_CtrlId == $PluginsListViewItems[$i] And Not (_GUICtrlListView_GetItemChecked($PluginsListView, $i) == LoadSetting("Pluginact", _GUICtrlListView_GetItemText($PluginsListView, $i), False)) Then $Changed = True
Next
If $Changed Then GUICtrlSetState($SettingsButton2, $GUI_ENABLE)
EndFunc ;==>Settings_PluginChange
Func SettingsSkinChange()
$Skin = GUICtrlRead($SettingsCombo1)
If StringLen($Skin) > 0 Then
GUICtrlSetImage($SettingsPic1, "")
InetGet($PP_HP & "skins/Screens/" & $Skin & ".JPG", "skin.jpg")
GUICtrlSetImage($SettingsPic1, "skin.jpg")
FileDelete("skin.jpg")
If $Skin <> $OldSkin Then
$Input = Request($PP_HP & "skin.php?skin=" & $Skin & "&show=really")
Else
$Input = Request($PP_HP & "skin.php?skin=" & $Skin)
EndIf
If StringLen($Input) > 0 Then
SaveSetting("Skins", $Skin, $Input)
Else
$Input = LoadSetting("Skins", $Skin, "Unable to query Skindatabase
No information available
Try it later!")
EndIf
GUICtrlSetData($SettingsLabel10, StringReplace(StringReplace(StringLeft($Input, StringInStr($Input, "") - 1), "", @TAB), "
", @CRLF))
If IniRead("db\settings.ini", "settings", "skin", "Carbon") <> $Skin Then Settings_Change()
$OldSkin = $Skin
EndIf
EndFunc ;==>SettingsSkinChange
Func RateSkin()
$Skin = GUICtrlRead($SettingsCombo1)
If Not StringInStr(IniRead("settings.ini", "infos", "skinsrated", ""), $Skin) Then
$Rating = InputBox("PPlayer - Settings", "Please enter a rating from 0-5 (worst-best) for " & $Skin)
If @error Then Return ""
If Int($Rating) > -1 And Int($Rating) < 6 Then
$Input = Request($PP_HP & "skin.php?skin=" & $Skin & "&rating=" & $Rating)
If StringLen($Input) > 0 Then
SettingsSkinChange()
IniWrite("db\settings.ini", "infos", "skinsrated", IniRead("db\settings.ini", "infos", "skinsrated", "") & "|" & $Skin)
Info("You successfully rated " & $Skin & " with " & $Rating)
Else
Error("Unable to rate skin:" & @CRLF & "Skindatabase does not respond" & @CRLF & "Please try it later")
EndIf
Else
Error("Your rating is invalid!")
EndIf
Else
Error("You already rated this skin")
EndIf
EndFunc ;==>RateSkin
Func SkinList($Skin)
_GUICtrlComboBox_ResetContent($SettingsCombo1)
$Input = Request($PP_HP & "skin.php")
If StringLen($Input) > 0 Then
SaveSetting("Skins", "list", $Input)
Else
$Input = LoadSetting("Skins", "list", "Gray-electric-1|Lizondo|Dock Skin|SteelStyle|DarkRed|Black-Yellow|Blackhole|Blue-Metal|PDA-Game|Universal|AzuriX|Carbon|Light-Green|Skilled|Red-Black|XP-Shutdown|Leadore|Silver-Blue|Rezak|Blue-Gray|Gray-bar|Sand-desert|Blue-box-H|Blue-box-V|Hard-Steel|Light-Blue|Gray-electric-2|Misty-Blue|Noir|BlackJack|mci_01|HeavenlyBodies|Sand-Paper|Silent-green|Blue-line|mci-03|mci_02|mci_04|Sleek|DeFacto|")
EndIf
$Skins = StringSplit($Input, "|")
For $i = 1 To $Skins[0] - 1
If StringLen($Skins[$i]) > 0 Then
_GUICtrlComboBox_AddString($SettingsCombo1, $Skins[$i])
If $Skins[$i] == $Skin Then _GUICtrlComboBox_SetCurSel($SettingsCombo1, $i - 1)
EndIf
Next
EndFunc ;==>SkinList
Func UploadSkin()
ShellExecute("http://pplayer.sourceforge.net/access/upload.php")
EndFunc ;==>UploadSkin
Func DownloadSkin($Skin)
If Not FileExists("Skins\" & $Skin & "\Skin.dat") Then
ProgressOn("PPlayer - Settings", "Downloading Skin")
DirCreate("Skins")
DirCreate("Skins\" & $Skin)
DirCreate("Skins\Default")
For $i = 0 To 7
InetGet($PP_HP & "skins/" & $Skin & "/" & $i & ".bmp", "Skins\" & $Skin & "\" & $i & ".bmp")
ProgressSet($i * 10)
Next
InetGet($PP_HP & "skins/" & $Skin & "/Skin.dat", "Skins\" & $Skin & "\Skin.dat")
ProgressSet(80)
InetGet($PP_HP & "skins/Default/" & $Skin & "1.bmp", "Skins\Default\" & $Skin & "1.bmp")
ProgressSet(90)
InetGet($PP_HP & "skins/Default/" & $Skin & "2.bmp", "Skins\Default\" & $Skin & "2.bmp")
For $i = 1 To 3
If Not FileExists("Skins\Default\Standard" & $i & ".bmp") Then InetGet($PP_HP & "skins/Default/Standard" & $i & ".bmp", "Skins\Default\Standard" & $i & ".bmp")
Next
ProgressOff()
EndIf
_IniWrite("db\settings.ini", "settings", "skin", $Skin)
_IniWrite("db\settings.ini", "settings", "BkColor", StringTrimLeft(IniRead("Skins\" & $Skin & "\Skin.dat", "color", "background", 0), 2))
_IniWrite("db\settings.ini", "settings", "TextColor", StringTrimLeft(IniRead("Skins\" & $Skin & "\Skin.dat", "color", "fontcolor", 0), 2))
EndFunc ;==>DownloadSkin
Func SettingsChangeLanguage()
$lang = GUICtrlRead($SettingsCombo2)
If StringLen($lang) > 0 And IniRead("db\settings.ini", "settings", "lang", "English") <> $lang Then
TranslateLangIni($lang)
IniWrite("db\settings.ini", "settings", "lang", $lang)
Settings_Change()
EndIf
EndFunc ;==>SettingsChangeLanguage
Func GetOpt($opt, $default = 0)
If $default = 0 Then
Switch $opt
Case "SimilarBands"
$default = 5
Case "MinLastPlayed"
$default = 60
Case "DriveLetter"
$default = "K:"
Case "Trans"
$default = 255
Case "Ani"
$default = 1
Case "BkColor"
$default = StringTrimLeft(IniRead("Skins\" & GetOpt("skin") & "\Skin.dat", "color", "background", 0), 2)
Case "TextColor"
$default = StringTrimLeft(IniRead("Skins\" & GetOpt("skin") & "\Skin.dat", "color", "fontcolor", 0), 2)
Case "MSNAct"
$default = $GUI_CHECKED
Case "PopUp"
$default = $GUI_UNCHECKED
Case "skin"
$default = "NoSkin"
EndSwitch
EndIf
$Return = IniRead("db\settings.ini", "settings", $opt, $default)
If $Return == "NoSkin" Then
$Input = Request($PP_HP & "skin.php")
$Input = StringLeft($Input, StringInStr($Input, "|") - 1)
If StringLen($Input) > 0 Then
$Return = $Input
Else
$Return = "Carbon"
EndIf
EndIf
Return $Return
EndFunc ;==>GetOpt
#endregion
#region -> Playmode
Func PlaymodeBuild()
Global $PlayMode[3]
Global $ModeCheck[3]
$GUI = "resource\" & LoadSetting("settings", "PlayModekxf", "Default") & "PlayMode.kxf"
If IniRead("db\GUI.ini", "created", $GUI, 0) <> FileGetSize($GUI) Then CreateGUIIni($GUI)
Global $PlaymodeGUI = XSkinGUICreate("PPlayer - PlayMode", GIR("PlayMode", "width") + $factorX * 2, GIR("PlayMode", "height") + $factorY * 2, $Skin_Folder, 1, 25, IniRead("db\settings.ini", "window", "playx", -1), IniRead("db\settings.ini", "window", "playy", -1), -1, $MainGUI)
XSkinIcon($PlaymodeGUI, 3, StringSplit("PlaymodeClose|PlaymodeClose|PlaymodeHelp", "|"))
$PlInfoLabel1 = GUICtrlCreateLabel("Enter a Keyword and click on Search to get a list of matching songs", GIR("PlInfoLabel1", "left"), GIR("PlInfoLabel1", "top"), GIR("PlInfoLabel1", "width"), GIR("PlInfoLabel1", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
$PlInfoLabel2 = GUICtrlCreateLabel("Select AutoSelect if you want a random song when you click on Search", GIR("PlInfoLabel2", "left"), GIR("PlInfoLabel2", "top"), GIR("PlInfoLabel2", "width"), GIR("PlInfoLabel2", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
Global $PlayModeKeyword = GUICtrlCreateCombo("", GIR("PlayModeKeyword", "left"), GIR("PlayModeKeyword", "top"), GIR("PlayModeKeyword", "width"), GIR("PlayModeKeyword", "height"))
$Insert = StringSplit(IniRead("db\settings.ini", "PlayMode", "Combo", ""), "|")
For $i = 1 To $Insert[0]
If StringLen($Insert[$i]) > 0 Then _GUICtrlComboBox_AddString($PlayModeKeyword, $Insert[$i])
Next
GUICtrlCreateButton(GIR("PlSearch", "caption"), GIR("PlSearch", "left"), GIR("PlSearch", "top"), GIR("PlSearch", "width"), GIR("PlSearch", "height"))
GUICtrlSetOnEvent(-1, "Research")
$PlInfoLabel3 = GUICtrlCreateLabel("Select AutoSearch if you want that PPlayer searches automatically for a new song everytime a song begins." & @CRLF & "You must choose an item in the Box to specify the search", GIR("PlInfoLabel3", "left"), GIR("PlInfoLabel3", "top"), GIR("PlInfoLabel3", "width"), GIR("PlInfoLabel3", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
$ModeCheck[1] = GUICtrlCreateCombo("", GIR("PlCombo1", "left"), GIR("PlCombo1", "top"), GIR("PlCombo1", "width"), GIR("PlCombo1", "height"))
$Text = "Similar Band|Genre|Band|Album| "
GUICtrlSetData(-1, $Text)
GUICtrlSetOnEvent(-1, "ModeChange")
$Text = StringSplit($Text, "|")
For $i = 1 To 4
If $Text[$i] == IniRead("db\settings.ini", "ModeCheck", 1, "") Then _GUICtrlComboBox_SetCurSel(-1, $i - 1)
Next
$ModeCheck[2] = GUICtrlCreateCombo("", GIR("PlCombo2", "left"), GIR("PlCombo2", "top"), GIR("PlCombo2", "width"), GIR("PlCombo2", "height"))
$Text = "Shuffle|Repeat|Repeat All| "
GUICtrlSetData(-1, $Text)
GUICtrlSetOnEvent(-1, "ModeChange")
$Text = StringSplit($Text, "|")
For $i = 1 To 3
If $Text[$i] == IniRead("db\settings.ini", "ModeCheck", 2, "") Then _GUICtrlComboBox_SetCurSel(-1, $i - 1)
Next
$PlayMode[2] = GUICtrlCreateCheckbox(GIR("PlayMode1", "caption"), GIR("PlayMode1", "left"), GIR("PlayMode1", "top"), GIR("PlayMode1", "width"), GIR("PlayMode1", "height"), BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_PUSHLIKE, $WS_TABSTOP))
GUICtrlSetState(-1, IniRead("db\settings.ini", "PlayMode", 2, $GUI_UNCHECKED))
GUICtrlSetOnEvent(-1, "PlaymodeChange")
$PlayMode[1] = GUICtrlCreateCheckbox(GIR("PlayMode2", "caption"), GIR("PlayMode2", "left"), GIR("PlayMode2", "top"), GIR("PlayMode2", "width"), GIR("PlayMode2", "height"), BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_PUSHLIKE, $WS_TABSTOP))
GUICtrlSetState(-1, IniRead("db\settings.ini", "PlayMode", 1, $GUI_UNCHECKED))
GUICtrlSetOnEvent(-1, "PlaymodeChange")
GUICtrlCreateButton(GIR("PlAutoSearch", "caption"), GIR("PlAutoSearch", "left"), GIR("PlAutoSearch", "top"), GIR("PlAutoSearch", "width"), GIR("PlAutoSearch", "height"))
GUICtrlSetOnEvent(-1, "PlayModeAutoSearch")
$PlInfoLabel4 = GUICtrlCreateLabel("Start the autosearch manually:", GIR("PlInfoLabel4", "left"), GIR("PlInfoLabel4", "top"), GIR("PlInfoLabel4", "width"), GIR("PlInfoLabel4", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
If IniRead("db\settings.ini", "GUIStati", "Playmode", "Open") == "Open" Then Playmode()
EndFunc ;==>PlaymodeBuild
Func Playmode()
GUISetState(@SW_SHOW, $PlaymodeGUI)
GUISetState(@SW_RESTORE, $PlaymodeGUI)
_IniWrite("db\settings.ini", "GUIStati", "Playmode", "Open")
EndFunc ;==>Playmode
Func PlaymodeClose()
GUISetState(@SW_HIDE, $PlaymodeGUI)
_IniWrite("db\settings.ini", "GUIStati", "Playmode", "Close")
EndFunc ;==>PlaymodeClose
Func PlayModeAutoSearch()
SetNext($ActiveSongSimilar, $ActiveSongInfo)
EndFunc ;==>PlayModeAutoSearch
Func PlaymodeChange()
For $i = 1 To 2
_IniWrite("db\settings.ini", "PlayMode", $i, GUICtrlRead($PlayMode[$i]))
Next
EndFunc ;==>PlaymodeChange
Func PlaymodeHelp()
ShellExecute("http://pplayer.wiki.sourceforge.net/PlayMode")
EndFunc ;==>PlaymodeHelp
#endregion
#region -> Stat
Func StatBuild()
Global $StatGUI = XSkinGUICreate("PPlayer - Statistic", 563 + $factorX * 2, 386 + $factorY * 2, $Skin_Folder, 1, 25, -1, -1, -1, $MainGUI)
GUISetBkColor("0x" & GetOpt("BkColor"))
XSkinIcon($StatGUI, 3, StringSplit("StatClose|StatClose|StatHelp", "|"))
Global $StatListView1 = _GUICtrlCreateListView("Artist |Album |Track |Genre|Duration", 0 + $factorX, 72 + $factorY, 563, 310)
GUICtrlSetOnEvent(-1, "StatSort")
GUICtrlSetStyle($StatListView1, -1, $LVS_EX_HEADERDRAGDROP)
Global $StatRadio[9]
Global $StatLabel[11]
GUIStartGroup()
$StatRadio[1] = GUICtrlCreateRadio("", 96 + $factorX, 8 + $factorY, 17, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$StatRadio[2] = GUICtrlCreateRadio("", 208 + $factorX, 8 + $factorY, 17, 17)
$StatRadio[3] = GUICtrlCreateRadio("", 328 + $factorX, 8 + $factorY, 17, 17)
$StatRadio[4] = GUICtrlCreateRadio("", 448 + $factorX, 8 + $factorY, 17, 17)
GUIStartGroup()
$StatRadio[5] = GUICtrlCreateRadio("", 96 + $factorX, 40 + $factorY, 17, 17)
$StatRadio[6] = GUICtrlCreateRadio("", 208 + $factorX, 40 + $factorY, 17, 17)
$StatRadio[7] = GUICtrlCreateRadio("", 328 + $factorX, 40 + $factorY, 17, 17)
$StatRadio[8] = GUICtrlCreateRadio("", 448 + $factorX, 40 + $factorY, 17, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
For $i = 1 To 8
GUICtrlSetOnEvent($StatRadio[$i], "StatCalc")
Next
$StatLabel[3] = GUICtrlCreateLabel("Lifetime", 120 + $factorX, 40 + $factorY, 60, 24)
$StatLabel[4] = GUICtrlCreateLabel("Week", 352 + $factorX, 40 + $factorY, 45, 24)
$StatLabel[1] = GUICtrlCreateLabel("Most heard", 8 + $factorX, 8 + $factorY, 57, 25)
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
$StatLabel[2] = GUICtrlCreateLabel("Timespan", 8 + $factorX, 40 + $factorY, 66, 25)
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
$StatLabel[5] = GUICtrlCreateLabel("Day", 472 + $factorX, 40 + $factorY, 32, 24)
$StatLabel[6] = GUICtrlCreateLabel("Month", 232 + $factorX, 40 + $factorY, 49, 24)
$StatLabel[7] = GUICtrlCreateLabel("Artist", 120 + $factorX, 8 + $factorY, 41, 24)
$StatLabel[8] = GUICtrlCreateLabel("Album", 232 + $factorX, 8 + $factorY, 49, 24)
$StatLabel[9] = GUICtrlCreateLabel("Genre", 352 + $factorX, 8 + $factorY, 49, 24)
$StatLabel[10] = GUICtrlCreateLabel("Track", 472 + $factorX, 8 + $factorY, 43, 24)
For $i = 3 To 10
GUICtrlSetFont($StatLabel[$i], 12, 400, 0, "MS Sans Serif")
GUICtrlSetColor($StatLabel[$i], "0x" & GetOpt("TextColor"))
Next
EndFunc ;==>StatBuild
Func StatSort()
$Lol = False
If $oldstate == GUICtrlGetState($StatListView1) Then $Lol = Not $Lol
$oldstate = GUICtrlGetState($StatListView1)
;_ArraySort($StatInfo, $Lol, 1, 0, 6, GUICtrlGetState($StatListView1) + 1)
__GUICtrlListView_Sort($StatListView1, $Lol, GUICtrlGetState($StatListView1))
EndFunc ;==>StatSort
Func Stat()
StatCalc()
GUISetState(@SW_SHOW, $StatGUI)
GUISetState(@SW_RESTORE, $StatGUI)
_IniWrite("db\settings.ini", "GUIStati", "Stat", "Open")
EndFunc ;==>Stat
Func StatClose()
GUISetState(@SW_HIDE, $StatGUI)
_IniWrite("db\settings.ini", "GUIStati", "Stat", "Close")
EndFunc ;==>StatClose
Func StatHelp()
ShellExecute("http://pplayer.wiki.sourceforge.net/Statistic")
EndFunc ;==>StatHelp
Func StatCalc()
__GUICtrlListView_DeleteAllItems($StatListView1)
If GUICtrlRead($StatRadio[1]) == $GUI_CHECKED Then
$msg = "Artist"
ElseIf GUICtrlRead($StatRadio[2]) == $GUI_CHECKED Then
$msg = "Album"
ElseIf GUICtrlRead($StatRadio[3]) == $GUI_CHECKED Then
$msg = "Genre"
Else
$msg = "Track"
EndIf
If GUICtrlRead($StatRadio[5]) == $GUI_CHECKED Then
$time = 0
ElseIf GUICtrlRead($StatRadio[6]) == $GUI_CHECKED Then
$time = _TimeGetStamp() - 60 * 60 * 24 * 30
ElseIf GUICtrlRead($StatRadio[7]) == $GUI_CHECKED Then
$time = _TimeGetStamp() - 60 * 60 * 24 * 7
Else
$time = _TimeGetStamp() - 60 * 60 * 24
EndIf
$message1 = ""
$message2 = ""
$StatInfo = StatCalculate($msg, $time)
For $i = 1 To UBound($StatInfo) - 1
_GUICtrlCreateListViewItem($StatInfo[$i][1] & "|" & $StatInfo[$i][2] & "|" & $StatInfo[$i][3] & "|" & $StatInfo[$i][4] & "|" & $StatInfo[$i][5] & " min", $StatListView1)
Next
EndFunc ;==>StatCalc
Func StatCalculate($msg, $time)
Dim $Query[1]
$Artists = ""
Dim $Info[1][7]
_SQLite_Query(-1, 'SELECT DISTINCT ' & $msg & ' FROM SongView WHERE Played > "' & $time & '";', $hQuery)
While _SQLite_FetchData($hQuery, $Query) = $SQLITE_OK
$Artists &= $Query[0] & "|"
WEnd
_SQLite_QueryFinalize($hQuery)
$Artists = StringSplit(StringTrimRight($Artists, 1), "|")
For $i = 1 To $Artists[0]
Dim $Query[1]
_SQLite_Query(-1, 'SELECT Artist,Album,Track,Genre,Count(*) As Durations,Duration FROM SongView WHERE Played > "' & $time & '" AND ' & $msg & ' = "' & $Artists[$i] & '";', $hQuery)
While _SQLite_FetchData($hQuery, $Query) = $SQLITE_OK
If UBound($Query) > 4 And $Query[4] > 0 Then
ReDim $Info[UBound($Info) + 1][7]
For $i2 = 1 To 4
$Info[UBound($Info) - 1][$i2] = $Query[$i2 - 1]
Next
$Info[UBound($Info) - 1][5] = Round(($Query[4] * $Query[5]) / 60)
EndIf
WEnd
Next
_SQLite_QueryFinalize($hQuery)
_ArraySort($Info, 1, 1, 0, 7, 5)
Return $Info
EndFunc ;==>StatCalculate
Func SongHeard($tag, $Dur)
$message = ""
$tag[0] = _TimeGetStamp()
$tag[5] = $Dur
For $i = 0 To 5
$message &= '"' & $tag[$i] & '",'
Next
$message = StringTrimRight($message, 1)
_SQLite_Exec(-1, "INSERT INTO SongView (Played,Artist,Album,Track,Genre,Duration) VALUES (" & $message & ");") ; INSERT Data
EndFunc ;==>SongHeard
Func WebAnnounce($tag = "")
$bck = 1
$Verified = True
$textcolor = Dec(StringLeft(IniRead("db\settings.ini", "settings", "TextColor", ""), 2)) & "." & Dec(StringMid(IniRead("db\settings.ini", "settings", "TextColor", ""), 3, 2)) & "." & Dec(StringRight(IniRead("db\settings.ini", "settings", "TextColor", ""), 2))
$backcolor = Dec(StringLeft(IniRead("db\settings.ini", "settings", "BkColor", ""), 2)) & "." & Dec(StringMid(IniRead("db\settings.ini", "settings", "BkColor", ""), 3, 2)) & "." & Dec(StringRight(IniRead("db\settings.ini", "settings", "BkColor", ""), 2))
$msg = $PP_HP & "web.php?tc=" & $textcolor & "&bc=" & $backcolor & "&user=" & _GetCPUID() & "&username=" & IniRead("db\settings.ini", "SongView", "name", "No Nickname set") & "&Status="
If IsArray($tag) Then
$msg &= "Listening to|Track: " & $tag[3] & "|Artist: " & $tag[1] & "|Album: " & $tag[2]
ElseIf $tag == "Offline" Then
$msg &= "Offline"
$bck = 0
Else
$msg &= "Online"
EndIf
If IniRead("db\settings.ini", "SongView", "lastupdate", 0) <> @HOUR Then
IniWrite("db\settings.ini", "SongView", "lastupdate", @HOUR)
$msger = ""
$Info = StatCalculate("Track", 0)
If UBound($Info, 1) == 1 Then Return False
$msger &= "&TopTrack=" & StringReplace($Info[1][1], "&", "+") & " - " & StringReplace($Info[1][2], "&", "+") & " - " & StringReplace($Info[1][3], "&", "+") & "&TopTrackTime=" & $Info[1][5]
$Info = StatCalculate("Artist", 0)
If UBound($Info, 1) == 1 Then Return False
$msger &= "&TopArtist=" & StringReplace($Info[1][1], "&", "+") & "&TopArtistTime=" & $Info[1][5]
$Info = StatCalculate("Album", 0)
If UBound($Info, 1) == 1 Then Return False
$msger &= "&TopAlbum=" & StringReplace($Info[1][1], "&", "+") & " - " & StringReplace($Info[1][2], "&", "+") & "&TopAlbumTime=" & $Info[1][5]
IniWrite("db\settings.ini", "SongView", "msg", $msger)
EndIf
$msg &= IniRead("db\settings.ini", "SongView", "msg", "")
InetGet($msg, "", 1, 1)
If $bck == 0 Then
$Timer = TimerInit()
While @InetGetActive And TimerDiff($Timer) < 5000
Sleep(10)
WEnd
EndIf
EndFunc ;==>WebAnnounce
#endregion
#endregion
#region Window / MAINGUI (Hide,Show,Tray_info)
Func Hide()
$hidden = True
GUISetState(@SW_HIDE, $MainGUI)
TraySetState()
TraySetToolTip("PPlayer V" & $version & ": Simply click on the tray to reopen the window")
If IniRead("db\settings.ini", "infos", "hide", 0) == 0 Then
TrayTip("Versteckt", "Your Player is now in Tray" & @CRLF & "Click on it and it will reopen", 10, 1)
_IniWrite("db\settings.ini", "infos", "hide", 1)
EndIf
PluginTrigger("OnPPlayerMinimized")
EndFunc ;==>Hide
Func Show()
$hidden = False
TraySetState(2)
If GetOpt("Ani") == 1 Then
XSkinAnimate($MainGUI, 1, (Random(0, 9, 1) * 2) + 1, GetOpt("Trans"))
Else
WinSetTrans($Title, "", GetOpt("Trans"))
GUISetState(@SW_SHOW, $MainGUI)
GUISetState(@SW_RESTORE, $MainGUI)
EndIf
PluginTrigger("OnPPlayerMaximized")
EndFunc ;==>Show
Func Tray_info()
If GetOpt("PopUp") == $GUI_CHECKED Then XSkinTrayBox("PPlayer", "Now playing: " & _GUICtrlListView_GetItemText($lieder, $activelistid))
EndFunc ;==>Tray_info
#endregion
#region Label Updates (UpdateLabelInfo,UpdateLabelAction[Statusbar],UpdateLabelPos)
Func UpdateLabelInfo($tag, $similar)
If Not IsArray($tag) Or Not IsArray($similar) Then Return False
If $tag[7] == 0 Then
$tag[7] = "never"
ElseIf $tag[7] == -1 Then
$tag[7] = ""
Else
$tag[7] = _TimeGetStamp() - $tag[7]
$days = Int($tag[7] / 86400)
$h = Int($tag[7] / 3600) - $days * 24
$min = Int($tag[7] / 60) - $h * 60 - $days * 1440
$tag[7] = ""
If $days > 1 Then
$tag[7] = $tag[7] & $days & " days "
ElseIf $days > 0 Then
$tag[7] = $tag[7] & $days & " day "
EndIf
If $h > 1 Then
$tag[7] = $tag[7] & $h & " hours and "
ElseIf $h > 0 Then
$tag[7] = $tag[7] & $h & " hour and "
EndIf
If $min <> 1 Then
$tag[7] = $tag[7] & $min & " minutes"
Else
$tag[7] = $tag[7] & $min & " minute"
EndIf
$tag[7] &= " ago"
EndIf
For $i = 0 To 5
If StringLen($tag[$i]) > GIR("info_label", "Width") / 5.6 Then $tag[$i] = StringLeft($tag[$i], GIR("info_label", "Width") / 5.6) & "..."
Next
$message = $tag[3] & @CRLF & $tag[1] & @CRLF & $tag[2] & @CRLF & $tag[4] & @CRLF & $tag[5] & @CRLF & $tag[7] & @CRLF & $tag[8] & @CRLF
$Similars = GUICtrlRead($SettingsPlayModeSlider1)
If $Similars > 6 Then $Similars = 6
If $Similars > $similar[0] Then $Similars = $similar[0]
If $Similars > 0 Then
For $i = 1 To $Similars
$message &= $similar[$i] & @CRLF
Next
If GUICtrlRead($SettingsPlayModeSlider1) > 6 Then $message &= "..."
Else
$message &= "No similar bands in Database"
EndIf
GUICtrlSetData($info_label, $message)
EndFunc ;==>UpdateLabelInfo
Func UpdateLabelAction($message)
If LoadSetting("settings", "Statusbar", $GUI_UNCHECKED) == $GUI_UNCHECKED Then Return ""
_GUICtrlStatusBar_SetText($StatusBar, $message)
EndFunc ;==>UpdateLabelAction
Func UpdateLabelPos($active_sound)
Dim $Save[5]
$Pos = WMGetPosition()
$time = WMGetDuration($active_sound)
$Save[1] = Int(Int($time) / 60)
$Save[2] = Int($time) - $Save[1] * 60
$Save[3] = Int($Pos / 60)
$Save[4] = Int($Pos) - $Save[3] * 60
For $i = 1 To 4
If StringLen($Save[$i]) = 1 Then $Save[$i] = "0" & $Save[$i]
Next
GUICtrlSetData($pos_label, $Save[3] & ":" & $Save[4] & "/" & $Save[1] & ":" & $Save[2])
If $SliderChange Then GUICtrlSetData($Pos_Slider, Int($Pos))
EndFunc ;==>UpdateLabelPos
#endregion
#region Slider (ChangePos,ChangeVol,CalcPos,SimilarSliderChange)
Func ChangePos()
WMSetPosition(GUICtrlRead($Pos_Slider))
GUICtrlSendMsg($Pos_Slider, $WM_ENABLE, 1, 0)
EndFunc ;==>ChangePos
Func ChangeVol()
$Vol = GUICtrlRead($Vol_Slider)
If Not $Muted Or $Muted And $Vol <> IniRead("db\settings.ini", "infos", "vol", $Vol) Then
WMSetVolume($Vol)
_IniWrite("db\settings.ini", "infos", "vol", $Vol)
$Muted = False
EndIf
GUICtrlSetTip($Vol_Slider, $Vol)
EndFunc ;==>ChangeVol
Func MuteVol()
If $Muted Then
WMSetVolume(GUICtrlRead($Vol_Slider))
$Muted = False
GUICtrlSetImage($Vol_Muter, $PP_IcoFolder, 10)
Else
WMSetVolume(0)
$Muted = True
GUICtrlSetImage($Vol_Muter, $PP_IcoFolder, 4)
EndIf
EndFunc ;==>MuteVol
Func CalcPos($active_sound)
GUICtrlSetLimit($Pos_Slider, Int(WMGetDuration($active_sound)), 0)
GUICtrlSetState($Pos_Slider, $GUI_ENABLE)
$Changing = 0
EndFunc ;==>CalcPos
Func SimilarSliderChange()
Settings_Change()
_IniWrite("db\settings.ini", "settings", "SimilarBands", GUICtrlRead($SettingsPlayModeSlider1))
EndFunc ;==>SimilarSliderChange
#endregion
#region Datenbank / File (Rate,LastPlayed,QueryDB,AddToDB,_GetInterpret,SecureCheck,ReadFileInfo,Database)
Func Rate($Filepath, $rate)
If StringLen($Filepath) > 0 Then
Dim $Query[1]
_SQLite_Query(-1, 'SELECT * FROM Songs WHERE Path = "' & $Filepath & '";', $hQuery) ; the query
_SQLite_FetchData($hQuery, $Query)
If @error Then
_SQLite_QueryFinalize($hQuery)
Return ""
EndIf
If $Query[7] + $rate > 20 Then
$rate = 20 - $Query[7]
ElseIf $Query[7] + $rate < 1 Then
$rate = ($Query[7] - 1) * - 1
EndIf
_SQLite_Exec(-1, 'UPDATE Songs SET Rating = "' & $Query[7] + $rate & '" WHERE Path = "' & $Filepath & '";')
_SQLite_QueryFinalize($hQuery)
EndIf
EndFunc ;==>Rate
Func LastPlayed($titel, $interpret)
_SQLite_Exec(-1, 'UPDATE Songs SET LastPlayed = "' & _TimeGetStamp() & '" WHERE Artist = "' & $interpret & '" AND Track = "' & $titel & '";')
EndFunc ;==>LastPlayed
Func QueryDB($Filepath)
Dim $Query[1]
_SQLite_Query(-1, 'SELECT * FROM Songs WHERE Path = "' & $Filepath & '";', $hQuery) ; the query
Dim $tag[9]
_SQLite_FetchData($hQuery, $Query)
_SQLite_QueryFinalize($hQuery)
If StringLen($Query[0]) > 0 Then
For $i = 0 To 7
$tag[$i + 1] = $Query[$i]
Next
Else
Return SetError(1, 0, False)
EndIf
Return $tag
EndFunc ;==>QueryDB
Func AddToDB($Filepath,$FullLoad = True)
$tag = ReadFileInfo($Filepath)
If @error > 0 Then Return SetError(1, 0, False)
If $FullLoad Then
$genre = UpdateGenre($tag[1], $tag[3])
If Not @error Then $tag[4] = $genre
EndIf
If LoadSetting("settings","coverload",$GUI_CHECKED) == $GUI_CHECKED And Not FileExists(StringLeft($tag[6],StringInStr($tag[6],"\",0,-1)) & "Folder.jpg") And Not FileExists("covers\" & $tag[1] & "-" & $tag[2] & ".jpg") And $FullLoad Then LoadCover($tag[1], $tag[2])
ReDim $tag[9]
$message = ""
$tag[6] = $Filepath
$tag[7] = 0
$tag[8] = 10
For $i = 1 To 8
$message &= '"' & StringReplace($tag[$i], '"', "'") & '",'
Next
$message = StringTrimRight($message, 1)
_SQLite_Exec(-1, 'INSERT INTO Songs (Artist,Album,Track,Genre,Filetype,Path,LastPlayed,Rating) VALUES (' & $message & ');') ; INSERT Data
Return True
EndFunc ;==>AddToDB
Func _GetInterpret($path)
If @OSVersion == "WIN_VISTA" Then
Return _GetExtProperty($path, 13)
Else
Return _GetExtProperty($path, 16)
EndIf
EndFunc ;==>_GetInterpret
Func SecureCheck($file)
$Secured = _GetExtProperty($file, 23)
If $Secured = "Yes" Or $Secured = "Ja" Then Return False
Return True
EndFunc ;==>SecureCheck
Func ReadFileInfo($file)
Local $tag[8]
If @OSVersion == "WIN_XP" Then
$tag[1] = _GetExtProperty($file, 16)
$tag[2] = _GetExtProperty($file, 17)
$tag[3] = _GetExtProperty($file, 10)
$tag[4] = _GetExtProperty($file, 20)
ElseIf @OSVersion == "WIN_VISTA" Then
$tag[1] = _GetExtProperty($file, 13)
$tag[2] = _GetExtProperty($file, 14)
$tag[3] = _GetExtProperty($file, 21)
$tag[4] = _GetExtProperty($file, 16)
EndIf
$tag[5] = _GetExtProperty($file, 2)
If $tag[2] == 0 Then $tag[2] = "Unknown"
If $tag[3] == 0 Or $tag[1] == 0 Then SetError(1)
Return $tag
EndFunc ;==>ReadFileInfo
Func Database()
_SQLite_QueryFinalize($hQuery)
_SQLite_Close()
_SQLite_Shutdown()
RunWait("resource\database.exe")
_SQLite_Startup()
_SQLite_Open("db\PPlayer.db")
EndFunc ;==>Database
#endregion
#region Startup / Quit (Startup,StartTray,StartGUI,logoff)
Func Startup()
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#region Globals *************************************************************************
Global $hDragImageList, $h_ListView, $bDragging = False, $StatusBar1, $LV_Height
Global $a_index[2]
Global Const $WM_LBUTTONUP = 0x202
Global Const $WM_MOUSEMOVE = 0x200
Global Enum $LVI_MASK = 1, $LVI_IITEM, $LVI_ISUBITEM, $LVI_STATE, $LVI_STATEMASK, $LVI_PSZTEXT, _
$LVI_CCHTEXTMAX, $LVI_IIMAGE, $LVI_LPARAM, $LVI_IINDENT
Global Const $DebugIt = 1
Global Const $NM_LAST = (-99)
Global Const $LVM_SETITEM = ($LVM_FIRST + 6)
Global Const $LVIF_NORECOMPUTE = 0x0800
Global $Delimiters = '|-|'
Global $HOVER_CONTROLS_ARRAY[1][1]
Global $LAST_HOVERED_ELEMENT[2] = [-1, -1]
Global $LAST_HOVERED_ELEMENT_MARK = -1
Global $pTimerProc = DllCallbackRegister("CALLBACKPROC", "none", "hwnd;uint;uint;dword")
Global $uiTimer = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 10, "ptr", DllCallbackGetPtr($pTimerProc))
$uiTimer = $uiTimer[0]
Global $liste[1], $ActiveSongInfo[9], $ActiveSongSimilar[100], $DroppedFiles[1], $Playing = False, $check = 1, $oldstate = ""
Global $OldSkin = GetOpt("skin"),$SliderChange = True, $dClicked = False, $SearchWait = False, $SongCapturedByPlugin = False, $Notify_WM = True, $hidden = False, $Pod_Notified = False, $Muted = False, $DB_Notified = False, $LeaveWhile = False, $Version_Notified = False, $Verified = False, $Verify_Notified = False, $Exit = False, $Restart = False
Global $StatListView1 = 0, $Changing = 0, $Searchview = 0, $SettingsSlider1Old = 0, $oldpos = 0, $active_sound = 0, $pObj = 0, $count = 0, $activelistid = -1, $oldlistid = 0, $SearchGUI = 0, $WM_DROPFILES = 0x233, $WM_List = 0x0111, $next_sound = 0
Global $hQuery, $sMsg
Global $factorY = _GetExtProperty($Skin_Folder & "\1.bmp", 28)
$factorY = StringLeft($factorY, StringInStr($factorY, " ") - 1)
If $factorY < IniRead($Skin_Folder & "\Skin.dat", "settings", "size", 20) Then $factorY = IniRead($Skin_Folder & "\Skin.dat", "settings", "size", 20)
Global $factorX = _GetExtProperty($Skin_Folder & "\3.bmp", 27)
$factorX = StringLeft($factorX, StringInStr($factorX, " ") - 1)
If $factorX < IniRead($Skin_Folder & "\Skin.dat", "settings", "size", 20) Then $factorX = IniRead($Skin_Folder & "\Skin.dat", "settings", "size", 20)
#endregion End Global variables
_SQLite_Startup()
_SQLite_Open("db\PPlayer.db")
FileDelete("db\MainDB.ini")
If IniRead("db\settings.ini", "infos", "dbversion", 0) == 0 Then
If Info("Congratulations! You just installed PPlayer. It's recommended to create a database containing your songs to get the full power of PPlayer. Do you want to create a database?", 4) == 6 Then
Database()
Else
IniWrite("db\settings.ini", "infos", "dbversion", $dbversion)
Info("Your database will now be filled with every song you hear. But you're only able to search for songs you already heard. If you want to create a database click 'Menu->Database")
EndIf
EndIf
WMStartPlayer()
$pObj.settings.enableErrorDialogs = False
ObjEvent($pObj,"TestEvent")
StartGUI()
PluginTrigger("MainGUICreated")
BuildGUIs()
PluginTrigger("CreateCustomGUI")
Show()
If $CmdLine[0] > 0 Then SetList($CmdLine[1])
If LoadSetting("settings","loadsongs",$GUI_UNCHECKED) == $GUI_CHECKED Then
$Playing = True
$msg = StringSplit(LoadSetting("infos","lastsong",""),"|")
For $i = 1 To $msg[0]
SetList($msg[$i])
Next
$msg = LoadSetting("infos","lastsongid",0)
Focus($msg)
Play_active()
EndIf
StartTray()
Opt("OnExitFunc", "logoff")
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ; Very slowing...
GUIRegisterMsg($WM_COPYDATA, "_GUIRegisterMsgProc")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LButtonUp_Events")
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MouseMove_Events")
HotKeySet("{MEDIA_NEXT}", "NextInList")
HotKeySet("{MEDIA_PREV}", "PrevInList")
HotKeySet("{MEDIA_PLAY_PAUSE}", "HookPlayPause")
HotKeySet("{MEDIA_STOP}", "Pause")
AdlibEnable("global_check", 500)
db_check()
XSkinTrayBox("PPlayer Info", "Up and running")
ErrorWrite("Startup took " & Round(TimerDiff($Begin) / 1000, 4) & " sec")
PluginTrigger("OnPPlayerLoaded")
EndFunc ;==>Startup
Func TestEvent($Event)
debug("Event called: " & $Event)
If $Event == "Buffering" Then
debug($pobj.network.bufferingProgress)
ElseIf $Event == "MediaChange" Then
debug($pObj.currentMedia.name)
debug(WMGETArtist($pObj.currentMedia))
debug(WMGetAlbum($pObj.currentMedia))
debug(WMGetGenre($pObj.currentMedia))
debug(WMGetTitle($pObj.currentMedia))
EndIf
EndFunc
Func StartTray()
TraySetOnEvent(-13, "Show")
TraySetClick(8)
TraySetToolTip("PPlayer V" & $version & ": Simply click on the tray to reopen the window")
TraySetIcon("resource\pplayer.ico")
TrayCreateItem("Open")
TrayItemSetOnEvent(-1, "show")
$Tray_Media = TrayCreateMenu("Media")
TrayCreateItem("Add Song", $Tray_Media)
TrayItemSetOnEvent(-1, "AddWithDialog")
TrayCreateItem("Play", $Tray_Media)
TrayItemSetOnEvent(-1, "Play_active")
Global $Tray_Pause = TrayCreateItem("Pause", $Tray_Media)
TrayItemSetOnEvent(-1, "Pause")
TrayCreateItem("Next", $Tray_Media)
TrayItemSetOnEvent(-1, "nextinlist")
TrayCreateItem("Prev", $Tray_Media)
TrayItemSetOnEvent(-1, "previnlist")
TrayCreateItem("Stop", $Tray_Media)
TrayItemSetOnEvent(-1, "Stop")
TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "logoff")
TraySetState(2)
EndFunc ;==>StartTray
Func StartGUI()
Global $Title = "PPlayer - V" & $version & " " & Chr(169) & " Pascal"
$y = IniRead("db\settings.ini", "window", "y", @DesktopHeight / 2 - 250)
If $y + 1 > @DesktopHeight Then
$y = @DesktopHeight / 2 - 250
_IniWrite("db\settings.ini", "window", "y", $y)
EndIf
$GUI = "resource\" & LoadSetting("settings", "PPlayerkxf", "Default") & "PPlayer.kxf"
If IniRead("db\GUI.ini", "created", $GUI, 0) <> FileGetSize($GUI) Then CreateGUIIni($GUI)
Global $MainGUI = XSkinGUICreate($Title, GIR("PPlayer", "width") + $factorX * 2, GIR("PPlayer", "height") + $factorY * 2, $Skin_Folder, 1, 25, IniRead("db\settings.ini", "window", "x", @DesktopWidth / 2 - 250), $y, $WS_EX_ACCEPTFILES)
GUISetOnEvent($GUI_EVENT_DROPPED, "AddToList", $MainGUI)
GUISetStyle(-1, $WS_EX_ACCEPTFILES, $MainGUI)
XSkinIcon($MainGUI, 3, StringSplit("logoff|Hide|Help", "|"))
GUISetIcon("icos\pplayer.ico")
Global $lieder = GUICtrlCreateListView("", GIR("lieder", "left"), GIR("lieder", "top"), GIR("lieder", "width"), GIR("lieder", "height"), $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS)
GUICtrlSetBkColor(-1, "0x" & GetOpt("BkColor"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
_GUICtrlListView_InsertColumn($lieder, 0, "Text", GIR("lieder", "width") - 5, 2)
$LV_Height = GIR("lieder", "height") - GIR("lieder", "top")
$h_ListView = ControlGetHandle($MainGUI, "", $lieder)
$CM = GUICtrlCreateContextMenu($lieder)
GUICtrlCreateMenuItem("Play",$CM )
GUICtrlSetOnEvent(-1, "Play_active")
GUICtrlCreateMenuItem("Add",$CM )
GUICtrlSetOnEvent(-1, "AddWithDialog")
GUICtrlCreateMenuItem("Delete",$CM )
GUICtrlSetOnEvent(-1, "DelFromList")
GUICtrlCreateMenuItem("Rate",$CM )
GUICtrlSetOnEvent(-1, "Rate_GUI")
Global $pause_button = GUICtrlCreateIcon($PP_IcoFolder, 7, GIR("play", "left"), GIR("play", "top"), GIR("play", "width"), GIR("play", "height"))
GUICtrlSetOnEvent(-1, "Pause")
GUICtrlCreateIcon($PP_IcoFolder, 11, GIR("stop", "left"), GIR("stop", "top"), GIR("stop", "width"), GIR("stop", "height"))
GUICtrlSetOnEvent(-1, "Stop")
GUICtrlCreateIcon($PP_IcoFolder, 5, GIR("next", "left"), GIR("next", "top"), GIR("next", "width"), GIR("next", "height"))
GUICtrlSetOnEvent(-1, "NextInList")
GUICtrlCreateIcon($PP_IcoFolder, 8, GIR("prev", "left"), GIR("prev", "top"), GIR("prev", "width"), GIR("prev", "height"))
GUICtrlSetOnEvent(-1, "PrevInList")
GUICtrlCreateIcon($PP_IcoFolder, 9, GIR("del", "left"), GIR("del", "top"), GIR("del", "width"), GIR("del", "height"))
GUICtrlSetOnEvent(-1, "DelFromList")
GUICtrlCreateIcon($PP_IcoFolder, 2, GIR("rate", "left"), GIR("rate", "top"), GIR("rate", "width"), GIR("rate", "height"))
GUICtrlSetOnEvent(-1, "Rate_GUI")
GUICtrlCreateIcon($PP_IcoFolder, 1, GIR("add", "left"), GIR("add", "top"), GIR("add", "width"), GIR("add", "height"))
GUICtrlSetOnEvent(-1, "AddWithDialog")
$MenuButton = GUICtrlCreateIcon($PP_IcoFolder, 3, GIR("menu", "left"), GIR("menu", "top"), GIR("menu", "width"), GIR("menu", "height"))
GUICtrlSetOnEvent(-1, "NotifyMenu")
$Menu = GUICtrlCreateContextMenu($MenuButton)
GUICtrlCreateMenuItem("Database", $Menu)
GUICtrlSetOnEvent(-1, "Database")
GUICtrlCreateMenuItem("Help", $Menu)
GUICtrlSetOnEvent(-1, "Help")
GUICtrlCreateMenuItem("PlayMode", $Menu)
GUICtrlSetOnEvent(-1, "Playmode")
GUICtrlCreateMenuItem("Settings", $Menu)
GUICtrlSetOnEvent(-1, "Settings")
GUICtrlCreateMenuItem("Statistic", $Menu)
GUICtrlSetOnEvent(-1, "Stat")
If $PluginMenus[0][0] > 0 Then
$PluginMenu = GUICtrlCreateMenuItem("", $Menu)
For $i = 1 To $PluginMenus[0][0]
GUICtrlCreateMenuItem($PluginMenus[$i][1], $Menu)
GUICtrlSetOnEvent(-1, $PluginMenus[$i][0])
Next
EndIf
If LoadSetting("settings", "Statusbar", $GUI_UNCHECKED) == $GUI_CHECKED Then Global $StatusBar = _GUICtrlStatusBar_Create($MainGUI, 500, "")
Global $ShowAlbum = GUICtrlCreatePic("", GIR("showalbum", "left"), GIR("showalbum", "top"), GIR("showalbum", "width"), GIR("showalbum", "height"))
GUICtrlCreateLabel("Track:" & @CRLF & "Artist:" & @CRLF & "Album:" & @CRLF & "Genre:" & @CRLF & "Filetype:" & @CRLF & "Last time played" & @CRLF & "Rating:" & @CRLF & "Similar Bands:", GIR("info_label2", "left"), GIR("info_label2", "top"), GIR("info_label2", "width"), GIR("info_label2", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
Global $info_label = GUICtrlCreateLabel("", GIR("info_label", "left"), GIR("info_label", "top"), GIR("info_label", "width"), GIR("info_label", "height"), $SS_LEFTNOWORDWRAP)
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
Global $pos_label = GUICtrlCreateLabel("00:00/00:00", GIR("pos_label", "left"), GIR("pos_label", "top"), GIR("pos_label", "width"), GIR("pos_label", "height"))
GUICtrlSetColor(-1, "0x" & GetOpt("TextColor"))
Global $Pos_Slider = GUICtrlCreateSlider(GIR("pos_slider", "left"), GIR("pos_slider", "top"), GIR("pos_slider", "width"), GIR("pos_slider", "height"), BitOR($TBS_BOTH, $TBS_NOTICKS, $TBS_FIXEDLENGTH))
GUICtrlSetData(-1, 0)
GUICtrlSetOnEvent(-1, "ChangePos")
GUICtrlSetLimit(-1, 1000, 0)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, "0x" & GetOpt("BkColor"))
GUICtrlSetOnHover($Pos_slider,"OnSliderHover","OnSliderHoverOff")
Global $Vol_Slider = GUICtrlCreateSlider(GIR("vol_slider", "left"), GIR("vol_slider", "top"), GIR("vol_slider", "width"), GIR("vol_slider", "height"))
GUICtrlSetLimit(-1, 100, 0)
GUICtrlSetData(-1, IniRead("db\settings.ini", "Infos", "Vol", 100))
GUICtrlSetOnEvent(-1, "ChangeVol")
GUICtrlSetBkColor(-1, "0x" & GetOpt("BkColor"))
ChangeVol()
Global $Vol_Muter = GUICtrlCreateIcon($PP_IcoFolder, 4, GIR("mute", "left"), GIR("mute", "top"), GIR("mute", "width"), GIR("mute", "height"))
GUICtrlSetOnEvent(-1, "MuteVol")
GUICtrlSetImage(-1, $PP_IcoFolder, 10)
EndFunc ;==>StartGUI
Func OnSliderHover($Control)
$SliderChange = False
EndFunc
Func OnSliderHoverOff($Control)
$SliderChange = True
EndFunc
Func CreateGUIIni($GUI)
$GF = StringSplit(FileRead($GUI), @CRLF)
For $i = 1 To $GF[0]
If StringInStr($GF[$i], "object") > 0 And StringInStr($GF[$i], "name") > 0 Then
$LookUp = _StringBetween($GF[$i], '"', '"')
ElseIf StringInStr($GF[$i], "property") > 0 Then
$Read = _StringBetween($GF[$i], ">", "<")
If Not @error Then
$Name = _StringBetween($GF[$i], '"', '"')
IniWrite("db\GUI.ini", $LookUp[1], StringLower($Name[0]), $Read[0])
EndIf
EndIf
Next
IniWrite("db\GUI.ini", "created", $GUI, FileGetSize($GUI))
EndFunc ;==>CreateGUIIni
Func GIR($ob, $in)
If StringInStr("left", $in) Then
Return IniRead("db\GUI.ini", $ob, $in, "") + $factorX
ElseIf StringInStr("top", $in) Then
Return IniRead("db\GUI.ini", $ob, $in, "") + $factorY
Else
Return IniRead("db\GUI.ini", $ob, $in, "")
EndIf
EndFunc ;==>GIR
Func logoff()
If Not $Exit Then
$check = 0
$Exit = True
If $hidden Then
GUISetState(@SW_SHOW, $MainGUI)
GUISetState(@SW_RESTORE, $MainGUI)
EndIf
If GetOpt("Ani") == 1 Then XSkinAnimate($MainGUI, 2, 1) ; Does not work: Shuts down GUI
GUIRegisterMsg($WM_DROPFILES, "")
GUIRegisterMsg($WM_List, "")
GUIRegisterMsg($WM_NOTIFY, "") ; Very slowing...
GUIRegisterMsg($WM_COPYDATA, "")
If LoadSetting("settings","Loadsongs",$GUI_UNCHECKED) == $GUI_CHECKED And UBound($liste) > 1 Then
$msg = ""
For $i = 0 To UBound($liste) - 1
$msg &= $liste[$i] & "|"
Next
SaveSetting("infos","lastsong",StringTrimRight($msg,1))
SaveSetting("infos","lastsongpos",Int(WMGetPosition()))
SaveSetting("infos","lastsongid",$activelistid)
EndIf
WMClosePlayer()
_SQLite_QueryFinalize($hQuery)
_SQLite_Close()
_SQLite_Shutdown()
DllCallbackFree($pTimerProc)
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $uiTimer)
$Pos = WinGetPos($Title)
If Not @error Then
_IniWrite("db\settings.ini", "window", "x", $Pos[0])
_IniWrite("db\settings.ini", "window", "y", $Pos[1])
EndIf
If IniRead("db\settings.ini", "GUIStati", "Playmode", "Close") == "Open" Then
$Pos = WinGetPos("PPlayer - PlayMode")
If Not @error Then
_IniWrite("db\settings.ini", "window", "playx", $Pos[0])
_IniWrite("db\settings.ini", "window", "playy", $Pos[1])
EndIf
EndIf
GUIDelete($PlaymodeGUI)
GUIDelete($Settings_GUI)
GUIDelete($MainGUI)
PluginTrigger("OnExit")
WebAnnounce("Offline")
SaveSetting("infos", "crash", 0)
If $Restart Then Run("pplayer.exe")
Exit 0
EndIf
EndFunc ;==>logoff
Func Folders()
DirCreate("db")
DirCreate("covers")
DirCreate("Radio")
DirCreate("Skins")
DirCreate("Skins\Default")
DirCreate("Plugins")
EndFunc ;==>Folders
Func NotifyMenu()
MouseClick("right")
EndFunc ;==>NotifyMenu
#endregion
#region Checks
Func global_check()
If $check == 1 Then
$check = 0
If Not $Verified Then WebAnnounce()
If IsObj($active_sound) Then UpdateLabelPos($active_sound)
$check = 1
EndIf
EndFunc ;==>global_check
Func db_check()
_SQLite_Exec(-1, "CREATE TABLE IF NOT EXISTS Songs (Artist,Album,Track,Genre,Filetype,Path,LastPlayed,Rating);") ; CREATE a Table
_SQLite_Exec(-1, "CREATE TABLE IF NOT EXISTS SongView (Played,Artist,Album,Track,Genre,Duration);") ; CREATE a Table
$msg = '%"%'
Dim $Query[1]
Dim $Changed[1][6]
_SQLite_Query(-1, "SELECT * FROM Songs WHERE Track LIKE '" & $msg & "' OR Artist LIKE '" & $msg & "' OR Album LIKE '" & $msg & "' OR Genre LIKE '" & $msg & "' OR Filetype LIKE '" & $msg & "';", $hQuery)
While _SQLite_FetchData($hQuery, $Query) == $SQLITE_OK
ReDim $Changed[UBound($Changed) + 1][7]
For $i = 0 To 5
If StringLen($Query[$i]) > 0 Then
$Changed[UBound($Changed) - 1][$i] = StringReplace($Query[$i], '"', "'")
Else
$Changed[UBound($Changed) - 1][0] = "Error"
ExitLoop
EndIf
Next
$Changed[UBound($Changed) - 1][6] = $Query[5]
WEnd
_SQLite_QueryFinalize($hQuery)
For $i = 1 To UBound($Changed) - 1
If $Changed[$i][0] <> "Error" Then
If StringInStr($Changed[$i][6], '"') Then
$msg = "WHERE Path = '" & $Changed[$i][6] & "'"
Else
$msg = 'WHERE Path = "' & $Changed[$i][6] & '"'
EndIf
_SQLite_Exec(-1, 'UPDATE Songs SET Artist = "' & $Changed[$i][0] & '", Album = "' & $Changed[$i][1] & '", Track = "' & $Changed[$i][2] & '", Genre = "' & $Changed[$i][3] & '", Filetype = "' & $Changed[$i][4] & '", Path = "' & $Changed[$i][5] & '" ' & $msg & ';')
EndIf
Next
$msg = '%"%'
Dim $Query[1]
Dim $Changed[1][6]
_SQLite_Query(-1, "SELECT * FROM SongView WHERE Track LIKE '" & $msg & "' OR Artist LIKE '" & $msg & "' OR Album LIKE '" & $msg & "' OR Genre LIKE '" & $msg & "';", $hQuery)
While _SQLite_FetchData($hQuery, $Query) == $SQLITE_OK
ReDim $Changed[UBound($Changed) + 1][7]
For $i = 0 To 3
If StringLen($Query[$i]) > 0 Then
$Changed[UBound($Changed) - 1][$i] = StringReplace($Query[$i + 1], '"', "'")
Else
$Changed[UBound($Changed) - 1][0] = "Error"
ExitLoop
EndIf
Next
$Changed[UBound($Changed) - 1][4] = $Query[0]
WEnd
_SQLite_QueryFinalize($hQuery)
For $i = 1 To UBound($Changed) - 1
If $Changed[$i][0] <> "Error" Then
_SQLite_Exec(-1, 'UPDATE SongView SET Artist = "' & $Changed[$i][0] & '", Album = "' & $Changed[$i][1] & '", Track = "' & $Changed[$i][2] & '", Genre = "' & $Changed[$i][3] & '" WHERE Played = "' & $Changed[$i][4] & '";')
EndIf
Next
_SQLite_Exec(-1, "CREATE TABLE IF NOT EXISTS SongView (Played,Artist,Album,Track,Genre,Duration);") ; CREATE a Table
EndFunc ;==>db_check
Func CheckUDP()
While 1
$data = UDPRecv($Socket, 1000)
If $data <> "" Then
SetList($data)
Else
ExitLoop
EndIf
WEnd
EndFunc ;==>CheckUDP
#endregion
#region Playlist
Func AddWithDialog()
$check = 0
$file = FileOpenDialog("Choose Song to add", IniRead("db\settings.ini", "infos", "lastdir", ""), "PPlayer Media Files (*.mp3;*.wma;*.ogg)|All (*.*)", 5)
FileChangeDir($PP_Dir)
If StringLen($file) > 0 Then
If StringInStr($file, "|") > 0 Then
$file = StringSplit($file, "|")
$dir = $file[1]
For $i = 2 To $file[0]
SetList($dir & "\" & $file[$i])
Next
Else
SetList($file)
EndIf
EndIf
$check = 1
EndFunc ;==>AddWithDialog
Func AddToList()
For $i = 0 To UBound($DroppedFiles) - 1
SetList($DroppedFiles[$i])
Next
EndFunc ;==>AddToList
Func SetList($filename)
If StringLen($filename) > 0 Then
If StringLeft($filename, 10) = "pplayer://" Then
$Line = StringTrimLeft($filename, 10)
If StringLeft($Line, 7) <> "http://" Then $Line = "http://" & $Line
$filename = $Line
EndIf
If StringInStr(FileGetAttrib($filename),"D") Then
$Files = _FileSearch($filename,"*.mp3;*.wma;*.ogg;*.wav",0,"",True)
If IsArray($Files) Then
For $i = 1 To $Files[0]
SetList(debug($Files[$i]))
Next
EndIf
Return ""
ElseIf StringLen(_GetExtProperty($filename,21)) == 0 And FileExists($filename) Then
Return ""
EndIf
$tag = QueryDB($Filename)
If Not @error Then
$show = $tag[3] & " - " & $tag[1]
Inqueue($tag[3], $tag[1])
Else
$tag = ReadFileInfo($filename)
If Not @error Then
$show = $tag[3] & " - " & $tag[1]
Inqueue($tag[3], $tag[1])
AddToDB($filename,False)
Else
$show = StringTrimLeft($filename, StringInStr($filename, "\", 1, -1))
EndIf
EndIf
$id = _GUICtrlListView_AddItem($lieder, $show)
If $id > 0 Then ReDim $liste[UBound($liste) + 1]
$liste[$id] = $filename
If Not $Playing Then
Focus($id)
Play_active()
EndIf
EndIf
EndFunc ;==>SetList
Func ScrollList()
_GUICtrlListView_Scroll($lieder, 0, $activelistid - $oldlistid)
EndFunc ;==>ScrollList
Func DelFromList()
$ItemSel = _GUICtrlListView_GetSelectedIndices($lieder, True)
If $ItemSel[0] > 0 Then
$PlayNext = False
For $i = 1 To $ItemSel[0]
$tag = ReadFileInfo($liste[$ItemSel[$i]])
Outqueue($tag[3], $tag[1])
If $activelistid == $ItemSel[$i] Then
$activelistid -= 1
$PlayNext = True
EndIf
If $ItemSel[$i] < $activelistid Then $activelistid -= 1
Focus($ItemSel[$i])
Next
For $i = 1 To $ItemSel[0]
_ArrayDelete($liste, $ItemSel[$i])
Next
_GUICtrlListView_DeleteItemsSelected($lieder)
If $PlayNext Then
NextInList()
ElseIf UBound($liste) == 1 And StringLen($liste[0]) == 0 Then
Stop()
Else
Focus($activelistid)
EndIf
Else
Error("No item(s) selected")
EndIf
EndFunc ;==>DelFromList
Func Focus($id)
_GUICtrlListView_SetItemSelected($lieder, $id)
ScrollList()
EndFunc ;==>Focus
Func UnFocus($id)
_GUICtrlListView_SetItemSelected($lieder, $id, False)
EndFunc ;==>UnFocus
Func UpdateList($id, $titel, $interpret)
_GUICtrlListView_SetItemText($lieder, $id, $titel & " - " & $interpret)
EndFunc ;==>UpdateList
#endregion
#region UDFs
Func GUICtrlSetOnHover($CtrlID, $HoverFuncName, $LeaveHoverFuncName=-1)
Local $Ubound = UBound($HOVER_CONTROLS_ARRAY)
ReDim $HOVER_CONTROLS_ARRAY[$Ubound+1][3]
$HOVER_CONTROLS_ARRAY[$Ubound][0] = GUICtrlGetHandle($CtrlID)
$HOVER_CONTROLS_ARRAY[$Ubound][1] = $HoverFuncName
$HOVER_CONTROLS_ARRAY[$Ubound][2] = $LeaveHoverFuncName
$HOVER_CONTROLS_ARRAY[0][0] = $Ubound
EndFunc
;CallBack function to handle the hovering process
Func CALLBACKPROC($hWnd, $uiMsg, $idEvent, $dwTime)
If UBound($HOVER_CONTROLS_ARRAY)-1 < 1 Then Return
Local $ControlGetHovered = _ControlGetHovered()
Local $sCheck_LHE = $LAST_HOVERED_ELEMENT[1]
If $ControlGetHovered = 0 Or ($sCheck_LHE <> -1 And $ControlGetHovered <> $sCheck_LHE) Then
If $LAST_HOVERED_ELEMENT_MARK = -1 Then Return
If $LAST_HOVERED_ELEMENT[0] <> -1 Then Call($LAST_HOVERED_ELEMENT[0], $LAST_HOVERED_ELEMENT[1])
$LAST_HOVERED_ELEMENT[0] = -1
$LAST_HOVERED_ELEMENT[1] = -1
$LAST_HOVERED_ELEMENT_MARK = -1
Else
For $i = 1 To $HOVER_CONTROLS_ARRAY[0][0]
If $HOVER_CONTROLS_ARRAY[$i][0] = GUICtrlGetHandle($ControlGetHovered) Then
If $LAST_HOVERED_ELEMENT_MARK = $HOVER_CONTROLS_ARRAY[$i][0] Then ExitLoop
$LAST_HOVERED_ELEMENT_MARK = $HOVER_CONTROLS_ARRAY[$i][0]
Call($HOVER_CONTROLS_ARRAY[$i][1], $ControlGetHovered)
If $HOVER_CONTROLS_ARRAY[$i][2] <> -1 Then
$LAST_HOVERED_ELEMENT[0] = $HOVER_CONTROLS_ARRAY[$i][2]
$LAST_HOVERED_ELEMENT[1] = $ControlGetHovered
EndIf
ExitLoop
EndIf
Next
EndIf
EndFunc
;Thanks to amel27 for that one!!!
Func _ControlGetHovered()
Local $Old_Opt_MCM = Opt("MouseCoordMode", 1)
Local $iRet = DllCall("user32.dll", "int", "WindowFromPoint", _
"long", MouseGetPos(0), _
"long", MouseGetPos(1))
$iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $iRet[0])
Opt("MouseCoordMode", $Old_Opt_MCM)
Return $iRet[0]
EndFunc
Func _TimeGetStamp()
Local $av_Time
$av_Time = DllCall('CrtDll.dll', "long", 'time')
If @error Then Return ""
Return $av_Time[0]
EndFunc ;==>_TimeGetStamp
Func _GetExtProperty($sPath, $iProp)
Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
$iExist = FileExists($sPath)
If $iExist = 0 Then
SetError(1)
Return 0
Else
$sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
$sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
$oShellApp = ObjCreate("shell.application")
$oDir = $oShellApp.NameSpace($sDir)
$oFile = $oDir.Parsename($sFile)
If $iProp = -1 Then
Local $aProperty[35]
For $i = 0 To 34
$aProperty[$i] = $oDir.GetDetailsOf($oFile, $i)
Next
Return $aProperty
Else
$sProperty = $oDir.GetDetailsOf($oFile, $iProp)
If $sProperty = "" Then
Return 0
Else
Return $sProperty
EndIf
EndIf
EndIf
EndFunc ;==>_GetExtProperty
Func _GetCPUID()
If Not (IsDeclared("$cI_CompName")) Then
Global $cI_CompName = @ComputerName
EndIf
Global $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20 ;DO NOT CHANGE _ ;DO NOT CHANGE
Local $colItems, $objWMIService, $objItem
$objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
Return $objItem.ProcessorID
Next
EndIf
EndFunc ;==>_GetCPUID
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
$objEmail = ObjCreate("CDO.Message")
If IsObj($objEmail) Then
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
Return False
Else
Return True
EndIf
Else
Return False
EndIf
EndFunc ;==>_INetSmtpMailCom
Func GenKey()
$_GUID = DllStructCreate("uint;ushort;ushort;ubyte[8]")
If @error Then Exit
$Ret = DllCall("Rpcrt4.dll", "ptr", "UuidCreate", "ptr", DllStructGetPtr($_GUID))
If Not @error And $Ret[0] == 0 Then
$uuid = Hex(DllStructGetData($_GUID, 1), 8) & "-" & _
Hex(DllStructGetData($_GUID, 2), 4) & "-" & _
Hex(DllStructGetData($_GUID, 3), 4) & "-" & _
Hex(DllStructGetData($_GUID, 4, 1), 2) & Hex(DllStructGetData($_GUID, 4, 2), 2) & "-"
For $x = 3 To 8
$uuid = $uuid & Hex(DllStructGetData($_GUID, 4, $x), 2)
Next
Return $uuid
EndIf
EndFunc ;==>GenKey
Func _StringBetween($sString, $sStart, $sEnd, $vCase = -1, $iSRE = -1)
If $iSRE = -1 Or $iSRE = Default Then
If $vCase = -1 Or $vCase = Default Then
$vCase = 0
Else
$vCase = 1
EndIf
Local $sHold = '', $sSnSStart = '', $sSnSEnd = ''
While StringLen($sString) > 0
$sSnSStart = StringInStr($sString, $sStart, $vCase)
If Not $sSnSStart Then ExitLoop
$sString = StringTrimLeft($sString, ($sSnSStart + StringLen($sStart)) - 1)
$sSnSEnd = StringInStr($sString, $sEnd, $vCase)
If Not $sSnSEnd Then ExitLoop
$sHold &= StringLeft($sString, $sSnSEnd - 1) & Chr(1)
$sString = StringTrimLeft($sString, $sSnSEnd)
WEnd
If Not $sHold Then Return SetError(1, 0, 0)
$sHold = StringSplit(StringTrimRight($sHold, 1), Chr(1))
Local $avArray[UBound($sHold) - 1]
For $iCC = 1 To UBound($sHold) - 1
$avArray[$iCC - 1] = $sHold[$iCC]
Next
Return $avArray
Else
If $vCase = Default Or $vCase = -1 Then
$vCase = '(?i)'
Else
$vCase = ''
EndIf
Local $aArray = StringRegExp($sString, '(?s)' & $vCase & $sStart & '(.*?)' & $sEnd, 3)
If IsArray($aArray) Then Return $aArray
Return SetError(1, 0, 0)
EndIf
EndFunc ;==>_StringBetween
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
ReDim $DroppedFiles[$i + 1]
$DroppedFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
;Info($DroppedFiles[$i])
Next
EndFunc ;==>WM_DROPFILES_FUNC
Func _LVInsertItem($i_FromItem, $i_ToItem)
Local $struct_LVITEM = DllStructCreate("int;int;int;int;int;ptr;int;int;int;int")
If @error Then Return SetError(-1, -1, -1)
Local $struct_String = DllStructCreate("char[4096]")
If @error Then Return SetError(-1, -1, -1)
Local $sBuffer_pointer = DllStructGetPtr($struct_String)
Local $LVITEM_pointer = DllStructGetPtr($struct_LVITEM)
DllStructSetData($struct_LVITEM, $LVI_MASK, BitOR($LVIF_STATE, $LVIF_IMAGE, $LVIF_INDENT, $LVIF_PARAM, $LVIF_TEXT))
DllStructSetData($struct_LVITEM, $LVI_STATEMASK, $LVIS_STATEIMAGEMASK)
DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_FromItem)
DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, 0)
DllStructSetData($struct_LVITEM, $LVI_CCHTEXTMAX, 4096)
DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $sBuffer_pointer)
_SendMessage($h_ListView, $LVM_GETITEMA, 0, $LVITEM_pointer)
If @error Then Return SetError(-1, -1, -1)
Local $item_state = DllStructGetData($struct_LVITEM, $LVI_STATE)
DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_ToItem)
Local $i_newIndex = _SendMessage($h_ListView, $LVM_INSERTITEMA, 0, DllStructGetPtr($struct_LVITEM))
If @error Then Return SetError(-1, -1, -1)
If $DebugIt Then debug("$i_newIndex = " & $i_newIndex)
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_STATE)
DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_newIndex)
DllStructSetData($struct_LVITEM, $LVI_STATE, $item_state)
DllStructSetData($struct_LVITEM, $LVI_STATEMASK, $LVIS_STATEIMAGEMASK)
Local $iResult = _SendMessage($h_ListView, $LVM_SETITEMSTATE, $i_newIndex, DllStructGetPtr($struct_LVITEM))
If @error Then Return SetError(-1, -1, -1)
Return $i_newIndex
EndFunc ;==>_LVInsertItem
Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
Local $LocalNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return $GUI_RUNDEFMSG
If $wParam <> BitAND($wParam, 0xFFFF) Then debug($wParam & " " & BitAND($wParam, 0xFFFF))
Switch $wParam
Case $Searchview
If $SearchWait And DllStructGetData($LocalNMHDR, 3) = -3 Then SetList(__GUICtrlListView_GetItemText($Searchview, _GUICtrlListView_GetNextItem($Searchview), 5))
Case $StatListView1
If DllStructGetData($LocalNMHDR, 3) = -3 Then
Dim $Query[1]
$StatInfo = StringSplit(__GUICtrlListView_GetItemText($StatListView1, _GUICtrlListView_GetNextItem($StatListView1)), "|")
_SQLite_Query(-1, 'SELECT Path FROM Songs WHERE Artist = "' & $StatInfo[1] & '" AND Track = "' & $StatInfo[3] & '" AND Album = "' & $StatInfo[2] & '";', $hQuery)
_SQLite_FetchData($hQuery, $Query)
_SQLite_QueryFinalize($hQuery)
SetList($Query[0])
EndIf
Case $lieder
Switch DllStructGetData($LocalNMHDR, 3)
Case - 3
$dClicked = True
Play_active()
Case $LVN_BEGINDRAG
Local $x = BitAND($lParam, 0xFFFF)
Local $y = BitShift($lParam, 16)
Local $struct_Point = DllStructCreate("int;int")
DllStructSetData($struct_Point, 1, 8)
DllStructSetData($struct_Point, 2, 8)
Local $struct_tagNMLISTVIEW = DllStructCreate("int;uint;uint;int;int;uint;uint;uint;int;int;int", $lParam)
$a_index[0] = DllStructGetData($struct_tagNMLISTVIEW, 4)
$hDragImageList = _SendMessage($h_ListView, $LVM_CREATEDRAGIMAGE, $a_index[0], DllStructGetPtr($struct_Point))
Local $struct_ImageInfo = DllStructCreate("int;int;int;int;int;int;int;int")
If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
Local $struct_ImageInfo_pointer = DllStructGetPtr($struct_ImageInfo)
Local $aResult = DllCall("ComCtl32.dll", "int", "ImageList_GetImageInfo", "hwnd", $hDragImageList, "int", 0, _
"ptr", $struct_ImageInfo_pointer)
If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
DllCall("ComCtl32.dll", "int", "ImageList_BeginDrag", "hwnd", $hDragImageList, "int", 0, "int", 0, "int", 0)
If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
If $DebugIt Then debug("From = " & $a_index[0])
Local $hDesktopWindow = DllCall("user32.dll", "int", "GetDesktopWindow")
$hDesktopWindow = $hDesktopWindow[0]
DllCall("ComCtl32.dll", "int", "ImageList_DragEnter", "hwnd", $hDesktopWindow, "int", $x, "int", $y)
DllCall("user32.dll", "int", "SetCapture", "hwnd", $hWnd)
$bDragging = True
EndSwitch
Case $Vol_Slider
ChangeVol()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _LVCopyItem($i_FromItem, $i_ToItem, $i_SubItem = 0)
Local $struct_LVITEM = DllStructCreate("int;int;int;int;int;ptr;int;int;int;int")
Local $struct_String = DllStructCreate("char[4096]")
Local $sBuffer_pointer = DllStructGetPtr($struct_String)
Local $LVITEM_pointer = DllStructGetPtr($struct_LVITEM)
; get from item info
DllStructSetData($struct_LVITEM, $LVI_MASK, BitOR($LVIF_STATE, $LVIF_IMAGE, $LVIF_INDENT, $LVIF_PARAM, $LVIF_TEXT))
DllStructSetData($struct_LVITEM, $LVI_STATEMASK, $LVIS_STATEIMAGEMASK)
DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_FromItem)
DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $i_SubItem)
DllStructSetData($struct_LVITEM, $LVI_CCHTEXTMAX, 4096)
DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $sBuffer_pointer)
_SendMessage($h_ListView, $LVM_GETITEMA, 0, $LVITEM_pointer)
; set to
DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_ToItem)
; set text
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_TEXT)
DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $sBuffer_pointer)
DllStructSetData($struct_LVITEM, $LVI_CCHTEXTMAX, 4096)
Local $iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
If @error Then Return SetError(@error, @error, @error)
; set status
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_STATE)
$iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
; set image
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_IMAGE)
DllStructSetData($struct_LVITEM, $LVI_STATE, $LVIF_IMAGE)
$iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
; set state
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_STATE)
DllStructSetData($struct_LVITEM, $LVI_STATE, $LVIF_STATE)
$iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
; set indent
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_INDENT)
DllStructSetData($struct_LVITEM, $LVI_STATE, $LVIF_INDENT)
$iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
; set Param
DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_PARAM)
DllStructSetData($struct_LVITEM, $LVI_STATE, $LVIF_PARAM)
$iResult = _SendMessage($h_ListView, $LVM_SETITEM, 0, $LVITEM_pointer)
EndFunc ;==>_LVCopyItem
Func WM_MouseMove_Events($hWndGUI, $msgID, $wParam, $lParam)
If $bDragging = False Then Return $GUI_RUNDEFMSG
Local $lpos = ControlGetPos($hWndGUI, "", $lieder)
Local $x = BitAND($lParam, 0xFFFF) - $lpos[0]
Local $y = BitShift($lParam, 16) - $lpos[1]
If $y > $LV_Height Then
_GUICtrlListView_Scroll($lieder, 0, $y)
ElseIf $y < 20 Then
_GUICtrlListView_Scroll($lieder, 0, $y * - 1)
EndIf
DllCall("ComCtl32.dll", "int", "ImageList_DragMove", "int", $x, "int", $y)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MouseMove_Events
Func WM_LButtonUp_Events($hWndGUI, $msgID, $wParam, $lParam)
$bDragging = False
Local $lpos = ControlGetPos($hWndGUI, "", $lieder)
If @error Then Return $GUI_RUNDEFMSG
Local $x = BitAND($lParam, 0xFFFF) - $lpos[0]
Local $y = BitShift($lParam, 16) - $lpos[1]
DllCall("ComCtl32.dll", "int", "ImageList_DragLeave", "hwnd", $h_ListView)
DllCall("ComCtl32.dll", "int", "ImageList_EndDrag")
DllCall("ComCtl32.dll", "int", "ImageList_Destroy", "hwnd", $hDragImageList)
DllCall("user32.dll", "int", "ReleaseCapture")
Local $struct_LVHITTESTINFO = DllStructCreate("int;int;uint;int;int;int")
DllStructSetData($struct_LVHITTESTINFO, 1, $x)
DllStructSetData($struct_LVHITTESTINFO, 2, $y)
$a_index[1] = GUICtrlSendMsg($lieder, $LVM_HITTEST, 0, DllStructGetPtr($struct_LVHITTESTINFO))
Local $flags = DllStructGetData($struct_LVHITTESTINFO, 2)
;~ // Out of the ListView?
If $a_index[1] == -1 Then Return $GUI_RUNDEFMSG
;~ // Not in an item?
If BitAND($flags, $LVHT_ONITEMLABEL) == 0 And BitAND($flags, $LVHT_ONITEMSTATEICON) == 0 Then Return $GUI_RUNDEFMSG
If $a_index[0] <> $a_index[1] Then
If $DebugIt Then debug("To = " & $a_index[1])
If ($a_index[0] <> $a_index[0] + 1) Then
Local $i_newIndex = _LVInsertItem($a_index[0], $a_index[1])
If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
Local $From_index = $a_index[0]
If $a_index[0] > $a_index[1] Then $From_index = $a_index[0] + 1
For $x = 1 To _GUICtrlListView_GetColumnCount($lieder) - 1
_LVCopyItem($From_index, $i_newIndex, $x)
If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
Next
_GUICtrlListView_DeleteItem($lieder, $From_index)
If $From_index > $i_newIndex Then
$Step = -1
$From_index -= 1
Else
$Step = 1
$i_newIndex -= 1
EndIf
If $From_index == $activelistid Then $activelistid = $i_newIndex
$tempIndex = $liste[$From_index]
For $i = $From_index To $i_newIndex + ($Step * - 1) Step $Step
$liste[$i] = $liste[$i + $Step]
Next
$liste[$i_newIndex] = $tempIndex
debug("Now activelistid = " & $activelistid)
Focus($activelistid)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_LButtonUp_Events
Func _AU3COM_SendData($acsd_InfotoSend, $acsd_RecvWinTitle)
Local $StructDef_COPYDATA = "dword var1;dword var2;ptr var3";I have changed piccaso's structure
Local $CDString = DllStructCreate("char var1[256];char var2[256]");the array to hold the string we are sending
If @error Then SetError(0, @error, 0)
DllStructSetData($CDString, 1, $acsd_InfotoSend)
Local $pCDString = DllStructGetPtr($CDString);the pointer to the string
If @error Then SetError(1, @error, 0)
Local $vs_cds = DllStructCreate($StructDef_COPYDATA);create the message struct
If @error Then SetError(2, @error, 0)
DllStructSetData($vs_cds, "var1", 0);0 here indicates to the receiving program that we are sending a string
If @error Then SetError(3, @error, 0)
DllStructSetData($vs_cds, "var2", String(StringLen($acsd_InfotoSend) + 1));tell the receiver the length of the string
If @error Then SetError(4, @error, 0)
DllStructSetData($vs_cds, "var3", $pCDString);the pointer to the string
If @error Then SetError(5, @error, 0)
Local $pStruct = DllStructGetPtr($vs_cds)
If @error Then SetError(6, @error, 0)
_SendMessage(WinGetHandle($acsd_RecvWinTitle), $WM_COPYDATA, 0, $pStruct)
$vs_cds = 0;free the struct
$CDString = 0;free the struct
Return 1
EndFunc ;==>_AU3COM_SendData
Func _AU3COM_RecvData($acomrd_LParam)
; $acomrd_LParam = Poiter to a COPYDATA Struct
Local $STRUCTDEF_AU3MESSAGE = "char var1[256];int"
Local $StructDef_COPYDATA = "dword var1;dword var2;ptr var3"
Local $vs_cds = DllStructCreate($StructDef_COPYDATA, $acomrd_LParam)
; Member No. 3 of COPYDATA Struct (PVOID lpData;) = Pointer to Costum Struct
Local $vs_msg = DllStructCreate($STRUCTDEF_AU3MESSAGE, DllStructGetData($vs_cds, 3))
Return $vs_msg
EndFunc ;==>_AU3COM_RecvData
Func _GUIRegisterMsgProc($hWnd, $msgID, $wParam, $lParam)
Local $vs_msg = _AU3COM_RecvData($lParam)
Local $MSGRECVD = DllStructGetData($vs_msg, 1)
Local $MSGRECVD_SplitArray = StringSplit($MSGRECVD, $Delimiters, 1)
If $MSGRECVD_SplitArray[1] = 'PPlayerPath' Then SetList($MSGRECVD_SplitArray[2])
EndFunc ;==>_GUIRegisterMsgProc
Func _FileSearch($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '', $iRecurse = False)
If Not FileExists($sPath) Then Return SetError(1, 1, '')
If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
For $iCC = 0 To 5
If StringInStr($sFilter, $aBadChar[$iCC]) Or StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
Next
If StringStripWS($sFilter, 8) = '' Then Return SetError(2, 2, '')
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead
For $iCC = 1 To $aSplit[0]
If StringStripWS($aSplit[$iCC], 8) = '' Then ContinueLoop
If StringLeft($aSplit[$iCC], 1) = '.' And UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then
$aSplit[$iCC] = '*' & $aSplit[$iCC]
EndIf
Local $iPid
If Not $iRecurse Then
$iPid = Run(@ComSpec & ' /c ' & 'dir "' & $sPath & '\' & $aSplit[$iCC] & '" /b /o-e /od', '', @SW_HIDE, 6)
Else
$iPid = Run(@ComSpec & ' /c dir /b /s /a "' & $sPath & '\' & $aSplit[$iCC] & '"', '', @SW_HIDE, 6)
EndIf
While 1
$sRead &= StdoutRead($iPid)
If @error Then ExitLoop
WEnd
Next
If StringStripWS($sRead, 8) = '' Then Return SetError(4, 4, '')
Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
Local $sHold
For $iCC = 1 To $aFSplit[0]
If $sExclude And StringLeft(StringTrimLeft($aFSplit[$iCC], StringInStr($aFSplit[$iCC], '\', 0, -1)), StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then
ContinueLoop
EndIf
Switch $iFlag
Case 0 ;Files and folders
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 1 ;Files ONLY
If StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
GUICtrlCreateListViewItem($aFSplit[$iCC] & "|" & StringFormat("%.2f mb", FileGetSize($aFSplit[$iCC]) / 1048576), $ListView)
Case 2 ;Folders ONLY
If Not StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
EndSwitch
Next
If StringTrimRight($sHold, 1) Then
Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
EndIf
Return SetError(4, 4, '')
EndFunc ;==>_FileSearch
#endregion
#region Stuff
Func Error($Text, $Extra = 0, $Timeout = -1)
Return MsgBox(48 + $Extra, "PPlayer -- Error", $Text, $Timeout)
EndFunc ;==>Error
Func ErrorWrite($Text)
$time = @MDAY & "." & @MON & " " & @HOUR & ":" & @MIN & ":" & @SEC & "@V. " & $version
$split = StringSplit($Text, "|")
For $i = 1 To $split[0]
_IniWrite("db\error.log", $time, $i, $split[$i])
Next
EndFunc ;==>ErrorWrite
Func Info($Text, $Extra = 0)
Return MsgBox(64 + $Extra, "PPlayer -- Info", $Text)
EndFunc ;==>Info
Func Help()
ShellExecute("http://pplayer.wiki.sourceforge.net/")
EndFunc ;==>Help
Func DownloadPPlayer()
ShellExecute("https://sourceforge.net/project/showfiles.php?group_id=206085")
EndFunc
Func debug($String)
ConsoleWrite(@CRLF & ">Debug: " & $String)
Return $String
EndFunc ;==>debug
Func SendeMail($adresse, $subject, $body, $copy = True)
If StringInStr($adresse, "@") > 0 And _INetSmtpMailCom("smtp.gmail.com", "PPlayer", "pascal.kuehne@googlemail.com", $adresse, $subject, $body, "pascal.kuehne@googlemail.com", "9413589", 465, 1) Then
If $copy And Not _INetSmtpMailCom("smtp.gmail.com", "PPlayer", "pascal.kuehne@googlemail.com", "pascal.kuehne@googlemail.com", "Message sent!", "The following message has been sent to " & $adresse & @CRLF & @CRLF & $body, "pascal.kuehne@googlemail.com", "9413589", 465, 1) Then Return False
Else
Return False
EndIf
Return True
EndFunc ;==>SendeMail
Func MyErrFunc()
$time = @HOUR & ":" & @MIN & ":" & @SEC & "@V." & $version
_IniWrite("db\error.log", $time, "err.description is: ", $oMyError.description)
_IniWrite("db\error.log", $time, "err.windescription:", $oMyError.windescription)
_IniWrite("db\error.log", $time, "err.number is: ", Hex($oMyError.number, 8))
_IniWrite("db\error.log", $time, "err.lastdllerror is: ", $oMyError.lastdllerror)
_IniWrite("db\error.log", $time, "err.scriptline is: ", $oMyError.scriptline)
_IniWrite("db\error.log", $time, "err.source is: ", $oMyError.source)
_IniWrite("db\error.log", $time, "err.helpfile is: ", $oMyError.helpfile)
_IniWrite("db\error.log", $time, "err.helpcontext is: ", $oMyError.helpcontext)
EndFunc ;==>MyErrFunc
Func ModeChange()
For $i = 1 To 2
_IniWrite("db\settings.ini", "ModeCheck", $i, GUICtrlRead($ModeCheck[$i]))
Next
EndFunc ;==>ModeChange
Func LoadSetting($Sec, $Key, $default)
Return IniRead("db\settings.ini", $Sec, $Key, $default)
EndFunc ;==>LoadSetting
Func SaveSetting($Sec, $Key, $Val)
IniWrite("db\settings.ini", $Sec, $Key, $Val)
EndFunc ;==>SaveSetting
#endregion
#region Internet
Func LoadSimilar($interpret)
If StringLen(IniRead("db\similar.ini", "similars", $interpret, "")) > 0 Then
$similar = StringSplit(IniRead("db\similar.ini", "similars", $interpret, ""), "|")
Else
Local $similar[1]
$Input = Request("http://ws.audioscrobbler.com/1.0/artist/" & $interpret & "/similar.txt", 5)
If @error Then Return SetError(1, 0, 0)
$Input = StringSplit($Input, @CRLF)
If $Input[0] > 20 Then
$msg = ""
For $i = 1 To $Input[0] - 2
$merge = StringSplit($Input[$i], ",")
If $merge[1] < 60 Then
ExitLoop
ElseIf $merge[0] == 3 Then
$msg &= 'Artist = "' & $merge[3] & '" OR '
EndIf
Next
$msg = StringTrimRight($msg, 3)
_SQLite_Query(-1, "SELECT DISTINCT Artist FROM Songs WHERE " & $msg & ";", $hQuery) ; the query
Dim $Query[1]
While _SQLite_FetchData($hQuery, $Query) = $SQLITE_OK
ReDim $similar[UBound($similar) + 1]
$similar[UBound($similar) - 1] = $Query[0]
_IniWrite("db\similar.ini", "similars", $interpret, IniRead("db\similar.ini", "similars", $interpret, "") & "|" & $Query[0])
WEnd
_SQLite_QueryFinalize($hQuery)
ElseIf StringInStr($Input[1], "Error") Then
Error("Webserver returned an error while loading similar bands", 0, 5)
SetError(3)
Else
SetError(2)
EndIf
_IniWrite("db\similar.ini", "similars", $interpret, StringTrimLeft(IniRead("db\similar.ini", "similars", $interpret, ""), 1))
$similar[0] = UBound($similar) - 1
EndIf
Return $similar
EndFunc ;==>LoadSimilar
Func UpdateGenre($interpret, $titel)
$Input = Request("http://ws.audioscrobbler.com/1.0/track/" & $interpret & "/" & $titel & "/toptags.xml", 5)
If @error Then Return SetError(1, 0, "Unknown")
$Input = StringSplit($Input, @CRLF)
$genre = "Unknown"
If $Input[0] > 8 Then
$split = _StringBetween($Input[4], "", "")
If IsArray($split) And $split[0] == $interpret Then $split = _StringBetween($Input[9], "", "")
If IsArray($split) Then
$genre = $split[0]
Else
$genre = "Unknown"
EndIf
Else
SetError(2)
EndIf
Return $genre
EndFunc ;==>UpdateGenre
Func LoadCover($interpret, $album)
$Input = Request("http://ws.audioscrobbler.com/1.0/artist/" & $interpret & "/topalbums.xml")
If @error Then Return SetError(1, 0, 0)
$Input = StringSplit($Input, @CRLF)
If $Input[0] > 8 Then
For $i = 1 To $Input[0]
If StringInStr($Input[$i], $album) And Not StringInStr($Input[$i + 6], "noimage") Then
$URL = _StringBetween($Input[$i + 6], "", "")
If @error Then Return False
InetGet($URL[0], "covers\" & $interpret & "-" & $album & ".jpg", 1)
EndIf
Next
EndIf
EndFunc ;==>LoadCover
Func Request($URL, $Wait = 5)
FileDelete(@TempDir & "PPlayerDL.tmp")
InetGet($URL, @TempDir & "PPlayerDL.tmp", 1, 1)
$Timer = TimerInit()
While @InetGetActive
If $Wait > 0 And TimerDiff($Timer) / 1000 > $Wait Then
SetError(1)
Return ""
EndIf
Sleep(10)
WEnd
If @InetGetBytesRead < 1 Then Return SetError(1, 0, "")
Return FileRead(@TempDir & "PPlayerDL.tmp")
EndFunc ;==>Request
Func _IniWrite($ini, $Sec, $Key, $Val)
Return IniWrite($ini, StringReplace(StringReplace($Sec, "]", ")"), "[", "("), StringReplace(StringReplace($Key, "]", ")"), "[", "("), StringReplace(StringReplace($Val, "]", ")"), "[", "("))
EndFunc ;==>_IniWrite
Func TranslateLangIni($lang)
ProgressOn("PPlayer", "Translating language")
InetGet("http://translate.google.com/translate_c?hl=de&ie=UTF-8&oe=UTF-8&langpair=en%7C" & StringLower(StringLeft($lang, 2)) & "&u=http://pplayeronline.pp.funpic.de/Default.html", "db\lang.ini")
ProgressOff()
EndFunc ;==>TranslateLangIni
Func GetLang($Sec, $Func)
Return IniRead("db\lang.ini", $Sec, $Func, "")
EndFunc ;==>GetLang
#endregion
#region Pluginfunctions
Func PluginRegister($Name)
ReDim $Plugins[UBound($Plugins) + 1]
$Plugins[UBound($Plugins) - 1] = $Name
$Plugins[0] = UBound($Plugins) - 1
PluginTriggerWithNr("OnPluginLoad", UBound($Plugins) - 1)
debug("Registered Plugin: " & UBound($Plugins) - 1 & ": " & $Name)
EndFunc ;==>PluginRegister
Func PluginTrigger($Func, $Param1 = Default, $Param2 = Default, $Param3 = Default, $Param4 = Default, $Param5 = Default)
If $Param1 <> Default Then
If $Param2 <> Default Then
If $Param3 <> Default Then
If $Param4 <> Default Then
If $Param5 <> Default Then
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func, $Param1, $Param2, $Param3, $Param4, $Param5)
Next
EndIf
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func, $Param1, $Param2, $Param3, $Param4)
Next
EndIf
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func, $Param1, $Param2, $Param3)
Next
EndIf
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func, $Param1, $Param2)
Next
EndIf
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func, $Param1)
Next
Else
For $i = 1 To $Plugins[0]
Call($Plugins[$i] & "_" & $Func)
Next
EndIf
debug("Called " & $Func & " on " & $Plugins[0] & " Plugins")
EndFunc ;==>PluginTrigger
Func PluginTriggerWithNr($Func, $Plugin)
If IsInt($Plugin) Then
CallPluginFunc($Func, $Plugins[$Plugin])
Else
CallPluginFunc($Func, $Plugin)
EndIf
EndFunc ;==>PluginTriggerWithNr
Func CallPluginFunc($Func, $Plugin)
$Params = StringSplit(IniRead("Plugins\" & $Plugin & "\Main.ini", "events", $Func, ""), "|")
If $Params[1] == "" Then
Call($Plugin & "_" & $Func)
Else
For $i = 1 To $Params[0]
$Params[$i] = Eval($Params[$i])
Next
Call($Plugin & "_" & $Func, $Params)
EndIf
EndFunc ;==>CallPluginFunc
Func PluginRegisterMenu($Func, $Name)
ReDim $PluginMenus[UBound($PluginMenus) + 1][2]
$PluginMenus[UBound($PluginMenus) - 1][0] = $Func
$PluginMenus[UBound($PluginMenus) - 1][1] = $Name
$PluginMenus[0][0] = UBound($PluginMenus) - 1
EndFunc ;==>PluginRegisterMenu
Func PluginRegisterSettingsTab($Name)
ReDim $PluginSettingsTabs[UBound($PluginSettingsTabs) + 1]
For $i = 1 To $Plugins[0]
If $Name == $Plugins[$i] Then $PluginSettingsTabs[UBound($PluginSettingsTabs) - 1] = $i
Next
$PluginSettingsTabs[0] = UBound($PluginSettingsTabs) - 1
EndFunc ;==>PluginRegisterSettingsTab
Func PluginExists($Name)
For $i = 1 To $Plugins[0]
If $Name == $Plugins[$i] Then Return True
Next
Return False
EndFunc ;==>PluginExists
#endregion