Added Splitter, Statusbar for messages and number of files and html file refs, proper refreshing during loading the lists, comprarin and deleteing from lists. Can also move physical files on disk that were unreferenced in the html code, but only after a comparison run. (You don't want to move your whole file base!!!) Better use of the status bar too.
Hope someone can use this...
Code: Select all
; Copyright, PeriTek Visions, 2003.
; Free, do what you wish with it.
;
;===========================================================================================================================================================
; Init Constants
;===========================================================================================================================================================
;----------
#ProgramVersion = "FlashCompare, v1.0"
;----------
; Window Constants
Enumeration
#Window_FlashGetCompare
; Window_FlashGetCompare
#MenuBar_FlashGetCompare
#MenuBar_FlashGetCompare_loaddirlist
#MenuBar_FlashGetCompare_savedirlist
#MenuBar_FlashGetCompare_loadfilelist
#MenuBar_FlashGetCompare_savefilelist
#MenuBar_FlashGetCompare_catfiles
#MenuBar_FlashGetCompare_parselist
#MenuBar_FlashGetCompare_runcompare
#MenuBar_FlashGetCompare_movefiles
#MenuBar_FlashGetCompare_exitnow
#Gadget_FlashGetCompare_filelist
#Gadget_FlashGetCompare_htmllist
#Gadget_FlashGetCompare_toolbar
#Gadget_SplitterGadget
#StatusBar_FlashGetCompare
#StatusBar_FlashGetCompare_messages
#StatusBar_FlashGetCompare_filenames
#StatusBar_FlashGetCompare_filerefs
EndEnumeration
;===========================================================================================================================================================
; Declare any needed lists
;===========================================================================================================================================================
NewList dir.s() ; Recursion routine uses this to find all files
;===========================================================================================================================================================
; Program declarations
;===========================================================================================================================================================
Declare.l Window_FlashGetCompare()
Declare Messages(Heading.s, Message.s)
Declare StatMess(Field.l, Message.s)
Declare FlushEvents()
;===========================================================================================================================================================
; Main Event Loop
;===========================================================================================================================================================
If Window_FlashGetCompare()
quitFlashGetCompare = 0
StatMess(0, "Ready")
StatMess(1, "File(s) ")
StatMess(2, "Ref(s) ")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
If EventWindow() = #Window_FlashGetCompare
quitFlashGetCompare = 1
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case #MenuBar_FlashGetCompare_loaddirlist
Case #MenuBar_FlashGetCompare_savedirlist : Gosub SaveDirectoryList
Case #MenuBar_FlashGetCompare_loadfilelist
Case #MenuBar_FlashGetCompare_savefilelist
Case #MenuBar_FlashGetCompare_catfiles : Gosub MakeCatalogue
Case #MenuBar_FlashGetCompare_parselist : Gosub ParseHtml
Case #MenuBar_FlashGetCompare_runcompare : Gosub CompareFiles
Case #MenuBar_FlashGetCompare_movefiles : Gosub MoveFiles
Case #MenuBar_FlashGetCompare_exitnow
quitFlashGetCompare = 1
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_FlashGetCompare_filelist
Select EventType()
Case #PB_EventType_LeftDoubleClick
Case #PB_EventType_RightDoubleClick
Case #PB_EventType_RightClick
Default
EndSelect
Case #Gadget_FlashGetCompare_htmllist
Select EventType()
Case #PB_EventType_LeftDoubleClick
Case #PB_EventType_RightDoubleClick
Case #PB_EventType_RightClick
Default
EndSelect
EndSelect
EndSelect
Until quitFlashGetCompare
CloseWindow(#Window_FlashGetCompare)
EndIf
End
;===========================================================================================================================================================
; Program window
;===========================================================================================================================================================
Procedure.l Window_FlashGetCompare()
If OpenWindow(#Window_FlashGetCompare,175,0,840,600, #ProgramVersion, #PB_Window_SystemMenu|#PB_Window_Invisible)
CreateMenu(#MenuBar_FlashGetCompare,WindowID(#Window_FlashGetCompare))
MenuTitle("Files")
MenuItem(#MenuBar_FlashGetCompare_loaddirlist,"Load Directory List")
MenuItem(#MenuBar_FlashGetCompare_savedirlist,"Save Directory List")
MenuItem(#MenuBar_FlashGetCompare_loadfilelist,"Load File List")
MenuItem(#MenuBar_FlashGetCompare_savefilelist,"Save File List")
MenuTitle("Jobs")
MenuItem(#MenuBar_FlashGetCompare_catfiles,"Catalogue Files")
MenuItem(#MenuBar_FlashGetCompare_parselist,"Parse HTML List")
MenuItem(#MenuBar_FlashGetCompare_runcompare,"Run Comparison")
MenuItem(#MenuBar_FlashGetCompare_movefiles,"Move UnReferenced Files")
MenuTitle("Exit menu")
MenuItem(#MenuBar_FlashGetCompare_exitnow,"Exit Now")
ListIconGadget(#Gadget_FlashGetCompare_filelist,10,10,405,540,"Filenames",600,#PB_ListIcon_MultiSelect|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_filelist),#LVM_SETBKCOLOR,0,16744448)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_filelist),#LVM_SETTEXTBKCOLOR,0,16744448)
ListIconGadget(#Gadget_FlashGetCompare_htmllist,425,10,405,540,"Html Names",600,#PB_ListIcon_MultiSelect|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_htmllist),#LVM_SETBKCOLOR,0,16711935)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_htmllist),#LVM_SETTEXTBKCOLOR,0,16711935)
CreateStatusBar(#StatusBar_FlashGetCompare,WindowID(#Window_FlashGetCompare))
AddStatusBarField(600)
AddStatusBarField(120)
AddStatusBarField(120)
SplitterGadget(#Gadget_SplitterGadget, 10, 10, 818, 540, #Gadget_FlashGetCompare_filelist, #Gadget_FlashGetCompare_htmllist, #PB_Splitter_Vertical|#PB_Splitter_Separator)
HideWindow(#Window_FlashGetCompare,0)
ProcedureReturn WindowID(#Window_FlashGetCompare)
EndIf
EndProcedure
;===========================================================================================================================================================
; Custom error messages to cut down on the amount of typing
;===========================================================================================================================================================
Procedure Messages(Heading.s, Message.s)
MessageRequester(Heading.s, Message.s, #PB_MessageRequester_Ok)
EndProcedure
;===========================================================================================================================================================
; Custom routine to set statusbar messages to save typing
;===========================================================================================================================================================
Procedure StatMess(Field.l, Message.s)
StatusBarText(#StatusBar_FlashGetCompare, Field.l, Message.s)
EndProcedure
;===========================================================================================================================================================
; Flush window events to prevent hanging and greying out of objects
;===========================================================================================================================================================
Procedure FlushEvents()
While WindowEvent() : Wend
EndProcedure
;===========================================================================================================================================================
; Cataloge files and populate the display
;===========================================================================================================================================================
MakeCatalogue:
CompareFlag = 0
ClearList(dir.s())
drive.s = PathRequester("Please select the drive and directory to catalogue", "")
If drive.s = ""
Return
EndIf
If Right(drive.s, 1) = "\"
drive.s = Left(drive.s, Len(drive.s) - 1)
EndIf
ClearGadgetItems(#Gadget_FlashGetCompare_filelist)
AddElement(dir())
dir() = drive.s ; (Paul Leischow)
idx = 0
Repeat
SelectElement(dir(), idx)
If ExamineDirectory(0, dir(), "*.*")
path.s = dir() + "\"
quit = 0
While NextDirectoryEntry(0)
filename.s = DirectoryEntryName(0)
Select DirectoryEntryType(0)
Case #PB_DirectoryEntry_File
diskfile.s = path + filename.s
AddGadgetItem(#Gadget_FlashGetCompare_filelist, - 1, diskfile.s)
FlushEvents()
StatMess(1, "File(s) " + Str(count))
SendMessage_(GadgetID(#Gadget_FlashGetCompare_filelist), #LVM_ENSUREVISIBLE, count , 0)
count + 1
Case #PB_DirectoryEntry_Directory
filename.s = DirectoryEntryName(0)
If filename.s <> ".." And filename.s <> "."
AddElement(dir())
dir() = path + filename.s
EndIf
EndSelect
Wend
EndIf
idx + 1
Until idx > ListSize(dir()) - 1
ClearList(dir.s())
Return
;===========================================================================================================================================================
; Parse html catalogue file
;===========================================================================================================================================================
ParseHtml:
CompareFlag = 0
numfound = 0
file.s = OpenFileRequester("Please Select the directory And file To parse", "", "*.*",0)
If file.s = ""
Return
EndIf
ClearGadgetItems(#Gadget_FlashGetCompare_htmllist)
If OpenFile(0, file.s) <> 0
While Eof(0) = 0
;-------------------------------------------------------------------------------------------------------
Temp.s = ReadString(0)
Pos = FindString(Temp.s, "file://", 0)
If Pos <> 0
FilePos = FindString(Temp.s, ">", Pos)
SubString.s = Mid(Temp.s, Pos + 7, FilePos - Pos - 8)
AddGadgetItem(#Gadget_FlashGetCompare_htmllist, - 1, SubString.s)
FlushEvents()
StatMess(2, "Ref(s) " + Str(numfound))
SendMessage_(GadgetID(#Gadget_FlashGetCompare_htmllist), #LVM_ENSUREVISIBLE, numfound , 0)
numfound + 1
EndIf
;-------------------------------------------------------------------------------------------------------
Wend
Else
Return
EndIf
CloseFile(0)
Return
;===========================================================================================================================================================
; Compare actual files with database entries, delete matching pairs from the lists
;===========================================================================================================================================================
CompareFiles:
CompareFlag = 0
Files = CountGadgetItems(#Gadget_FlashGetCompare_filelist)
Lists = CountGadgetItems(#Gadget_FlashGetCompare_htmllist)
;-----------------------------------------------------------------------------------------------
If Files = 0 Or Lists = 0
Messages("Error", "No files in one or more lists to compare")
Return
EndIf
;-----------------------------------------------------------------------------------------------
For ListLoop = 0 To Lists - 1
ListFile.s = GetGadgetItemText(#Gadget_FlashGetCompare_htmllist, ListLoop, 0)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_htmllist), #LVM_ENSUREVISIBLE, ListLoop , 0)
Gosub LoopDiskFiles
Next ListLoop
CompareFlag = 1
Return
;===========================================================================================================================================================
; Loop through disk filenames and delete matches from both lists
;===========================================================================================================================================================
LoopDiskFiles:
For FilesLoop = 0 To Files - 1
DiskFile.s = GetGadgetItemText(#Gadget_FlashGetCompare_filelist, FilesLoop, 0)
If DiskFile.s = ListFile.s
RemoveGadgetItem(#Gadget_FlashGetCompare_htmllist, ListLoop)
FlushEvents()
StatMess(2, "Ref(s) " + Str(Lists))
RemoveGadgetItem(#Gadget_FlashGetCompare_filelist, FilesLoop)
FlushEvents()
StatMess(1, "File(s) " + Str(Files))
Files - 1 : FilesLoop - 1: Lists - 1 : ListLoop - 1
EndIf
Next FilesLoop
Return
;===========================================================================================================================================================
; Save the list of files in the catalogue pane to hard disk
;===========================================================================================================================================================
SaveDirectoryList:
Files = CountGadgetItems(#Gadget_FlashGetCompare_filelist)
If Files = 0
Messages("Error", "No files in the list to save!!")
Return
EndIf
DirFileName.s = SaveFileRequester("Directory Listing", "", "Text | *.txt", 0)
If DirFileName.s = ""
Return
EndIf
If OpenFile(0, DirFileName.s) <> 0
For DirLoop = 0 To Files
DirFile.s = GetGadgetItemText(#Gadget_FlashGetCompare_filelist, DirLoop, 0)
WriteStringN(0, DirFile.s)
SendMessage_(GadgetID(#Gadget_FlashGetCompare_htmllist), #LVM_ENSUREVISIBLE, DirLoop , 0)
Next DirLoop
WriteStringN(0, "End of listing")
EndIf
CloseFile(0)
Messages("Finished", "Directory listing written to disk!!")
Return
;===========================================================================================================================================================
; Move files that were unreferenced To somewhere Else
;===========================================================================================================================================================
MoveFiles:
If CompareFlag = 0
Messages("Error", "No comparison done, cannot move entire filebase!!")
Return
EndIf
Files = CountGadgetItems(#Gadget_FlashGetCompare_filelist)
If Files = 0
Messages("Error", "No files in the directory list to move!!")
Return
EndIf
MovePath.s = PathRequester("Move Un-Reference files to:", "")
If MovePath.s = ""
Return
EndIf
For MoveLoop = 0 To Files -1
OriginalFile.s = GetGadgetItemText(#Gadget_FlashGetCompare_filelist, MoveLoop, 0)
OldFileName.s = GetFilePart(OriginalFile.s)
NewPath.s = MovePath.s + OldFileName.s
StatMess(0, "Moving File: " + OriginalFile.s)
CopyFile(OriginalFile.s, NewPath.s)
DeleteFile(OriginalFile.s)
RemoveGadgetItem(#Gadget_FlashGetCompare_filelist, MoveLoop)
FlushEvents()
MoveLoop - 1 : Files - 1
NewPath.s = ""
Next MoveLoop
CompareFlag = 0
Return