The installation package can be downloaded from my website. Or here is the code for your perusal...
Code: Select all
'
' MediaMonkey Script
'
' NAME: SyncAllTracks 1.0
'
' AUTHOR: trixmoto (http://trixmoto.net)
' DATE : 10/04/2013
'
' INSTALL: Copy to Scripts directory and add the following to Scripts.ini
' Don't forget to remove comments (') and set the order appropriately
'
' [SyncAllTracks]
' FileName=SyncAllTracks.vbs
' ProcName=SyncAllTracks
' Order=1
' DisplayName=Sync All Tracks
' Description=Sync All Tracks
' Language=VBScript
' ScriptType=0
'
Option Explicit
Dim DeviceID : DeviceID = "" 'device ID - popup will appear if blank
Dim UseAuto : UseAuto = True 'use auto sync option (if MM4.1 or higher)
Dim Notify : Notify = True 'create notification file when sync complete
Sub SyncAllTracks
DeviceID = ""
Dim list : Set list = SDB.Device.ActiveDeviceList("")
If list.Count = 0 Then
Call SDB.MessageBox(SDB.Localize("No active devices. [1]"),mtError,Array(mbOk))
Exit Sub
End If
Dim inds : inds = ""
Dim nams : nams = ""
Dim boo : boo = False
Dim i : i = 0
For i = 0 To list.Count-1
If list.DeviceHandle(i) > -1 Then
Dim indx : indx = list.DeviceID(i)
Dim sqls : sqls = "SELECT DeviceCaption FROM Devices WHERE DetailedUSBID LIKE '%"&indx&"%'"
Dim iter : Set iter = SDB.Database.OpenSQL(sqls)
If Not iter.EOF Then
If DeviceID = "" Then
inds = inds&"~|~"&indx
nams = nams&"~|~"&iter.StringByIndex(0)
ElseIf DeviceID = indx Then
boo = True
i = list.Count
End If
End If
Set iter = Nothing
End If
Next
If DeviceID = "" Then
If inds = "" Then
Call SDB.MessageBox(SDB.Localize("No active devices. [4]"),mtError,Array(mbOk))
Exit Sub
Else
inds = Mid(inds,4)
If InStr(inds,"~|~") > 0 Then
nams = Mid(nams,4)
DeviceID = SkinnedDropdown(SDB.Localize("Device:"),"Sync All Tracks",inds,nams,"SyncAllTracks")
Else
DeviceID = inds
End If
End If
Else
If Not boo Then
Call SDB.MessageBox(SDB.Localize("Specified device is not active. [5]"),mtError,Array(mbOk))
Exit Sub
End If
End If
If DeviceID = "" Then
Call SDB.MessageBox(SDB.Localize("No device specified. [6]"),mtError,Array(mbOk))
Exit Sub
End If
Set list = SDB.Device.ActiveDeviceList(DeviceID)
If list.Count <> 1 Then
Call SDB.MessageBox(SDB.Localize("Specified device is not active. [7]"),mtError,Array(mbOk))
Exit Sub
End If
Dim hand : hand = list.DeviceHandle(0)
If hand < 0 Then
Call SDB.MessageBox(SDB.Localize("Specified device is not active. [8]"),mtError,Array(mbOk))
Exit Sub
End If
If Notify Then
Call Script.RegisterEvent(SDB,"OnDeviceSyncCompleted","SyncComplete")
End If
If UseAuto Then
Call SDB.Device.StartAutoSynch(hand)
Else
Dim trax : Set trax = SDB.NewSongList
Dim sitr : Set sitr = SDB.Database.QuerySongs("")
While Not sitr.EOF
Call trax.Add(sitr.Item)
sitr.Next
WEnd
Set sitr = Nothing
Call SDB.Device.StartSynch(hand,trax)
End If
End Sub
Function SkinnedDropdown(Text,Caption,inds,nams,PositionName)
Dim Form, Label, Edt, btnOk, btnCancel, modalResult
' Create the window to be shown
Set Form = SDB.UI.NewForm
Form.Common.SetRect 100, 100, 360, 130
Form.BorderStyle = 4 ' Resizable
Form.FormPosition = 4 ' Screen Center
Form.SavePositionName = PositionName
Form.Caption = Caption
' Create a button that closes the window
Set Label = SDB.UI.NewLabel(Form)
Label.Caption = Text
Label.Common.Left = 5
Label.Common.Top = 10
Set Edt = SDB.UI.NewDropDown(Form)
Edt.Common.Left = Label.Common.Left
Edt.Common.Top = Label.Common.Top + Label.Common.Height + 5
Edt.Common.Width = Form.Common.Width - 20
Edt.Common.ControlName = "Edit1"
Edt.Common.Anchors = 1+2+4 'Left+Top+Right
Call Edt.AddItem("Please select...")
Edt.ItemIndex = 0
Dim dic : Set dic = CreateObject("Scripting.Dictionary")
Dim ari : ari = Split(inds,"~|~")
Dim arn : arn = Split(nams,"~|~")
Dim i : i = 0
For i = 0 To UBound(ari)
Call Edt.AddItem(arn(i))
dic.Item(arn(i)) = ari(i)
Next
' Create a button that closes the window
Set BtnOk = SDB.UI.NewButton(Form)
BtnOk.Caption = "OK"
BtnOk.Common.Top = Edt.Common.Top + Edt.Common.Height + 10
BtnOk.Common.Hint = "OK"
BtnOk.Common.Anchors = 4 ' Right
BtnOk.UseScript = Script.ScriptPath
BtnOk.Default = True
BtnOk.ModalResult = 1
Set BtnCancel = SDB.UI.NewButton(Form)
BtnCancel.Caption = "Cancel"
BtnCancel.Common.Left = Form.Common.Width - BtnCancel.Common.Width - 15
BtnOK.Common.Left = BtnCancel.Common.Left - BtnOK.Common.Width - 10
BtnCancel.Common.Top = BtnOK.Common.Top
BtnCancel.Common.Hint = "Cancel"
BtnCancel.Common.Anchors = 4 ' Right
BtnCancel.UseScript = Script.ScriptPath
BtnCancel.Cancel = True
BtnCancel.ModalResult = 2
SkinnedDropdown = ""
If Form.showModal = 1 Then
Dim nam : nam = Edt.SelText
If nam <> "Please select..." Then
SkinnedDropdown = dic.Item(nam)
End If
End If
End Function
Sub SyncComplete(hand)
Call Script.UnRegisterHandler("SyncComplete")
Dim fso : Set fso = SDB.Tools.FileSystem
Dim path : path = Script.ScriptPath&".txt"
Dim fout : Set fout = fso.CreateTextFile(path,True)
Call fout.WriteLine(hand&" - sync complete")
Call fout.Close()
End Sub
Sub Install()
If SDB.VersionBuild < 1628 Then
Call SDB.MessageBox(SDB.Localize("Must have version 4.1.0.1628 or higher for this script to work."),mtError,Array(mbOk))
Exit Sub
End If
Dim inip : inip = SDB.ApplicationPath&"Scripts\Scripts.ini"
Dim inif : Set inif = SDB.Tools.IniFileByPath(inip)
If Not (inif Is Nothing) Then
inif.StringValue("SyncAllTracks","Filename") = "SyncAllTracks.vbs"
inif.StringValue("SyncAllTracks","Procname") = "SyncAllTracks"
inif.StringValue("SyncAllTracks","Order") = "1"
inif.StringValue("SyncAllTracks","DisplayName") = "Sync All Tracks"
inif.StringValue("SyncAllTracks","Description") = "Sync All Tracks"
inif.StringValue("SyncAllTracks","Language") = "VBScript"
inif.StringValue("SyncAllTracks","ScriptType") = "0"
SDB.RefreshScriptItems
End If
End Sub