forked from amazingfate/loongoffice
461 lines
16 KiB
XML
461 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit
|
|
|
|
Public AbsTemplateFound as Integer
|
|
Public AbsDocuFound as Integer
|
|
Public oLogDocument as Object
|
|
Public oLogTable as Object
|
|
Public bInsertRow as Boolean
|
|
Public sLogUrl as String
|
|
Public sCurPassWord as String
|
|
|
|
|
|
|
|
Function ReadApplicationDirectories(ApplIndex as Integer, FilesList(),bIsDocument as Boolean, sFiltername()) as Integer
|
|
Dim bCheckDocuType as Boolean
|
|
Dim FilterIndex as Integer
|
|
Dim bRecursive as Boolean
|
|
Dim sSourceDir as String
|
|
Dim bCheckRealType as Boolean
|
|
Dim a as Integer
|
|
Dim sFileContent() as String
|
|
Dim NewList() as String
|
|
Dim Index as Integer
|
|
Dim sLocExtension as String
|
|
Index = Applications(ApplIndex,SBAPPLKEY)
|
|
sLocExtension = ""
|
|
If bIsDocument Then
|
|
bCheckDocuType = Applications(ApplIndex,SBDOCCONVERT)
|
|
bCheckRealType = False
|
|
bRecursive = Applications(ApplIndex,SBDOCRECURSIVE)
|
|
FilterIndex = Index
|
|
sSourceDir = Applications(ApplIndex,SBDOCSOURCE)
|
|
Else
|
|
' Templates
|
|
bCheckDocuType = Applications(ApplIndex,SBTEMPLCONVERT)
|
|
' In SO the documenttype cannot be derived from the extension name
|
|
bCheckRealType = WizardMode = SBXMLMODE
|
|
If bCheckRealType Then
|
|
' Note: StarOffice-Math-Documents cannot be treated like templates
|
|
bCheckRealType = Index <> 3
|
|
If bCheckRealType Then
|
|
sLocExtension = "vor"
|
|
End If
|
|
bIsDocument = Not bCheckRealType
|
|
End If
|
|
bRecursive = Applications(ApplIndex,SBTEMPLRECURSIVE)
|
|
FilterIndex = Index + MaxApplCount
|
|
sSourceDir = Applications(ApplIndex,SBTEMPLSOURCE)
|
|
End If
|
|
If bCheckDocuType Then
|
|
sFileContent() = GetMimeTypeList(sFilterName(FilterIndex))
|
|
NewList() = ReadDirectories(sSourceDir, bRecursive, bCheckRealType, False, sFileContent(), sLocExtension)
|
|
If Ubound(NewList()) > -1 Then
|
|
AddListtoFilesList(FilesList(), NewList(), ApplIndex)
|
|
ImportDialog.LabelRetrieval.Label = sProgressPage_2 & " " & ReplaceString(sProgressPage_5, Str(Ubound(FilesList()) + 1) & " ", "%1")
|
|
End If
|
|
End If
|
|
ReadApplicationDirectories() = Ubound(NewList(),1) + 1
|
|
End Function
|
|
|
|
|
|
Sub ShowCurrentProgress(bIsDocument as Boolean, CurFound as Integer)
|
|
If bIsDocument Then
|
|
AbsDocuFound = AbsDocuFound + CurFound
|
|
ImportDialog.LabelCurDocumentRetrieval.Label = sProgressFound & " " & CStr(AbsDocuFound) & " " & sProgressMoreDocs
|
|
Else
|
|
AbsTemplateFound = AbsTemplateFound + CurFound
|
|
ImportDialog.LabelCurTemplateRetrieval.Label = sProgressFound & " " & CStr(AbsTemplateFound) & " " & sProgressMoreTemplates
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub ConvertAllDocuments(sFilterName())
|
|
Dim FileProperties(1) as new com.sun.star.beans.PropertyValue
|
|
Dim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue
|
|
Dim OpenProperties(1) as new com.sun.star.beans.PropertyValue
|
|
Dim FilesList(0,2) as String
|
|
Dim sViewPath as String
|
|
Dim i as Integer
|
|
Dim FilterIndex as Integer
|
|
Dim sFullName as String
|
|
Dim sFileName as String
|
|
Dim oDocument as Object
|
|
Dim sExtension as String
|
|
Dim OldExtension as String
|
|
Dim CurFound as Integer
|
|
Dim TotFound as Integer
|
|
Dim TargetStemDir as String
|
|
Dim SourceStemDir as String
|
|
Dim TargetDir as String
|
|
Dim TargetFile as String
|
|
Dim CurFilterName as String
|
|
Dim ApplIndex as Integer
|
|
Dim Index as Integer
|
|
Dim bIsDocument as Boolean
|
|
Dim iOverWrite as Integer
|
|
Dim bDoSave as Boolean
|
|
Dim sCurFileExists as String
|
|
Dim oModel as Object
|
|
Dim MaxFileIndex as Integer
|
|
Dim FileCount as Integer
|
|
'Dim sOldExtension as String
|
|
Dim bContainsBasicMacro as Boolean
|
|
Dim bIsPassWordProtected as Boolean
|
|
bConversionIsRunnig = True
|
|
AbsTemplateFound = 0
|
|
AbsDocuFound = 0
|
|
For i = 0 To ApplCount-1
|
|
'templates
|
|
bIsDocument = False
|
|
CurFound = ReadApplicationDirectories(i, FilesList(), bIsDocument, sFilterName())
|
|
ShowCurrentProgress(bIsDocument, CurFound)
|
|
Next i
|
|
For i = 0 To ApplCount-1
|
|
'documents
|
|
bIsDocument = True
|
|
CurFound = ReadApplicationDirectories(i, FilesList(), bIsDocument, sFilterName())
|
|
ShowCurrentProgress(bIsDocument, CurFound)
|
|
Next i
|
|
TotFound = AbsTemplateFound + AbsDocuFound
|
|
CreateLogDocument(OpenProperties())
|
|
If TotFound > 0 Then
|
|
InitializeProgressPage(ImportDialog)
|
|
OpenProperties(0).Name = "Hidden"
|
|
OpenProperties(0).Value = True
|
|
OpenProperties(1).Name = "AsTemplate"
|
|
OpenProperties(1).Name = False
|
|
|
|
MaxFileIndex = Ubound(FilesList(),1)
|
|
FileCount = 0
|
|
For i = 0 To MaxFileIndex
|
|
If bCancelTask Or RetValue = 0 Then
|
|
bConversionIsRunnig = False
|
|
Exit Sub
|
|
End if
|
|
bDoSave = True
|
|
sFullName = FilesList(i,0)
|
|
CurFiltername = GetFilterName(FilesList(i,1), sFilterName(), sExtension, FilterIndex)
|
|
ApplIndex = FilesList(i,2)
|
|
sViewPath = CutPathView(sFullName, 60)
|
|
ImportDialog.LabelCurDocument.Label = Str(i+1) & "/" & MaxFileIndex + 1 & " (" & sViewPath & ")"
|
|
' sOldExtension = GetFileNameExtension(sFullName, "/")
|
|
' Select Case sOldExtension
|
|
' Case "vor", "dot", "xlt", "pot"
|
|
' OpenProperties(1).Value = False
|
|
' Case Else
|
|
' OpenProperties(1).Value = False
|
|
' End Select
|
|
oDocument = StarDesktop.LoadComponentFromURL(sFullName, "_blank", 0, OpenProperties())
|
|
bIsPassWordProtected = CheckPassWordProtection(oDocument)
|
|
bContainsBasicMacro = CheckIfMacroExists(oDocument)
|
|
If bSetFonts Then
|
|
CheckScripts(oDocument, 1)
|
|
End If
|
|
|
|
If Not IsNull(oDocument) Then
|
|
Select Case sExtension
|
|
Case "sxw", "sxc", "sxi", "sxd", "sxs", "sxm"
|
|
SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), "/")
|
|
TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), "/")
|
|
Case Else ' Templates and Helper-Applications remain
|
|
SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), "/")
|
|
TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), "/")
|
|
End Select
|
|
|
|
TargetFile = ReplaceString(sFullname, TargetStemDir, SourceStemDir)
|
|
sFileName = GetFileNameWithoutExtension(TargetFile, "/")
|
|
OldExtension = GetFileNameExtension(TargetFile)
|
|
|
|
TargetFile = RTrimStr(TargetFile, OldExtension)
|
|
TargetFile = TargetFile & sExtension
|
|
TargetDir = RTrimStr(TargetFile, sFileName & "." & sExtension)
|
|
If Not oUcb.Exists(TargetDir) Then
|
|
CreateFolder(TargetDir)
|
|
End If
|
|
If oUcb.Exists(TargetFile) Then
|
|
sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(TargetFile), "<1>")
|
|
sCurFileExists = ReplaceString(sCurFileExists, chr(13), "<CR>")
|
|
iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle)
|
|
Select Case iOverWrite
|
|
Case 1 ' OK
|
|
' In the FileProperty-Bean this is already default
|
|
bDoSave = True
|
|
Case 2 ' Abort
|
|
CancelTask(False)
|
|
bDoSave = False
|
|
Case 7 ' No
|
|
bDoSave = False
|
|
End Select
|
|
End If
|
|
If bDoSave Then
|
|
InsertDocNamesToLogDocument(sFullName, TargetFile, bContainsBasicMacro)
|
|
On Local Error Resume Next
|
|
FileProperties(0).Name = "FilterName"
|
|
FileProperties(0).Value = CurFilterName
|
|
If bIsPassWordProtected Then
|
|
FileProperties(1).Name = "PassWord"
|
|
FileProperties(1).Value = sCurPassWord
|
|
End If
|
|
oDocument.StoreAsUrl(TargetFile,FileProperties())
|
|
FileCount = FileCount + 1
|
|
oDocument.Dispose()
|
|
On Local Error Goto 0
|
|
End If
|
|
End If
|
|
Next i
|
|
End If
|
|
AddLogStatistics(FileCount)
|
|
oLogDocument.Dispose()
|
|
If (ImportDialog.chkLogfile.State = 1) And (FileCount > 0) Then
|
|
ImportDialog.cmdShowLogFile.Enabled = True
|
|
End If
|
|
ImportDialog.cmdCancel.Label = sCloseButton
|
|
ImportDialog.cmdGoOn.Label = sReady
|
|
ImportDialog.cmdGoOn.Enabled = True
|
|
bConversionIsRunnig = False
|
|
Exit Sub
|
|
RTError:
|
|
Msgbox sRTErrorDesc, 16, sRTErrorHeader
|
|
End Sub
|
|
|
|
|
|
|
|
Sub AddListtoFilesList(FirstList(), SecList(), ApplIndex as Integer)
|
|
Dim FirstStart as Integer, FirstEnd as Integer, i as Integer, s as Integer
|
|
If FirstList(0,0) = "" Then
|
|
FirstStart = Ubound(FirstList(),1)
|
|
Else
|
|
FirstStart = Ubound(FirstList(),1) + 1
|
|
End If
|
|
FirstEnd = FirstStart + Ubound(SecList(),1)
|
|
ReDim Preserve FirstList(FirstEnd,2)
|
|
s = 0
|
|
For i = FirstStart To FirstEnd
|
|
FirstList(i,0) = SecList(s,0)
|
|
FirstList(i,1) = SecList(s,1)
|
|
FirstList(i,2) = CStr(ApplIndex)
|
|
s = s + 1
|
|
Next i
|
|
End Sub
|
|
|
|
|
|
Function GetTargetTemplatePath(Index as Integer)
|
|
Select Case WizardMode
|
|
Case SBMICROSOFTMODE
|
|
GetTargetTemplatePath() = SOTemplatePath & "/" & sTemplateGroupName
|
|
Case SBXMLMODE
|
|
If Index = 3 Then
|
|
' Helper Application
|
|
GetTargetTemplatePath = SOWorkPath
|
|
Else
|
|
GetTargetTemplatePath = SOTemplatePath
|
|
End If
|
|
End Select
|
|
End Function
|
|
|
|
|
|
' Retrieves the second value for a next to 'SearchString' in
|
|
' a two-dimensional string-Array
|
|
Function GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String
|
|
Dim i as Integer
|
|
Dim MaxIndex as Integer
|
|
Dim sLocFilterlist() as String
|
|
For i = 0 To Ubound(sFiltername(),1)
|
|
If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) <> 0 Then
|
|
sLocFilterList() = ArrayoutofString(sFiltername(i,0),"|", MaxIndex)
|
|
If MaxIndex = 0 Then
|
|
sExtension = sFiltername(i,2)
|
|
GetFilterName = sFilterName(i,1)
|
|
Else
|
|
Dim a as Integer
|
|
Dim sLocExtensionList() as String
|
|
a = SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList())
|
|
sLocFilterList() = ArrayoutofString(sFiltername(i,1),"|", MaxIndex)
|
|
GetFilterName = sLocFilterList(a)
|
|
sLocExtensionList() = ArrayoutofString(sFilterName(i,2), "|", MaxIndex)
|
|
sExtension = sLocExtensionList(a)
|
|
End If
|
|
Exit For
|
|
End If
|
|
Next
|
|
FilterIndex = i
|
|
End Function
|
|
|
|
|
|
Function SearchArrayforPartString(SearchString as String, LocList()) as Integer
|
|
Dim i as integer
|
|
For i = Lbound(LocList(),1) to Ubound(LocList(),1)
|
|
If Instr(1,LocList(i), SearchString) <> 0 Then
|
|
SearchArrayForPartString() = i
|
|
Exit Function
|
|
End if
|
|
Next
|
|
IndexinArray = -1
|
|
End Function
|
|
|
|
|
|
Function GetMimeTypeList(BigFiltername as STring)
|
|
Dim sBigList() as String
|
|
Dim sSmallList() as String
|
|
Dim sMimeTypeList()
|
|
Dim BigMaxIndex as Integer
|
|
Dim n as Integer
|
|
sBigList() = ArrayoutofString(BigFilterName,"|", BigMaxIndex)
|
|
For n = 0 To BigMaxIndex
|
|
sSmallList() = ArrayoutofString(sBigList(n),";")
|
|
sMimeTypeList() = AddListToList(sMimeTypeList(), sSmallList())
|
|
Next n
|
|
GetMimetypeList() = sMimeTypeList()
|
|
End Function
|
|
|
|
|
|
Sub CreateLogDocument(HiddenProperties())
|
|
Dim OpenProperties(0) as new com.sun.star.beans.PropertyValue
|
|
Dim oTableCursor as Object
|
|
Dim oLogCursor as Object
|
|
Dim oLogRows as Object
|
|
Dim NoArgs()
|
|
Dim i as Integer
|
|
Dim bLogExists as Boolean
|
|
If ImportDialog.chkLogfile.State = 1 Then
|
|
i = 2
|
|
OpenProperties(0).Name = "Hidden"
|
|
OpenProperties(0).Value = True
|
|
oLogDocument = StarDesktop.LoadComponentFromURL("private:factory/swriter", "_blank", 4, OpenProperties())
|
|
oLogCursor = oLogDocument.Text.CreateTextCursor
|
|
oLogTable = oLogDocument.CreateInstance("com.sun.star.text.TextTable")
|
|
oLogTable.RepeatHeadline = true
|
|
oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True)
|
|
oLogCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor()
|
|
oLogCursor.SetString(sSourceDocuments)
|
|
oLogCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor()
|
|
oLogCursor.SetString(sTargetDocuments)
|
|
bInsertRow = False
|
|
sLogUrl = SOWorkPath & "/Logfile.sxw"
|
|
Do
|
|
bLogExists = oUcb.Exists(sLogUrl)
|
|
If bLogExists Then
|
|
If i = 2 Then
|
|
sLogUrl = ReplaceString(sLogUrl, "/Logfile_2.sxw", "/Logfile.sxw")
|
|
Else
|
|
sLogUrl = ReplaceString(sLogUrl, "/Logfile_" & cStr(i) & ".sxw", "/Logfile_" & cStr(i-1) & ".sxw")
|
|
End If
|
|
i = i + 1
|
|
End If
|
|
Loop Until Not bLogExists
|
|
oLogDocument.StoreAsUrl(sLogUrl, NoArgs())
|
|
EndIf
|
|
End Sub
|
|
|
|
|
|
Sub InsertDocNamesToLogDocument(SourceUrl as String, TargetUrl as String, bContainsBasicMacro as Boolean)
|
|
Dim oCell as Object
|
|
Dim oLogCursor as Object
|
|
Dim UrlList(1) as String
|
|
Dim LocFileName as String
|
|
Dim LocUrl as String
|
|
Dim i as Integer
|
|
Dim oCommentCursor as Object
|
|
If ImportDialog.chkLogfile.State = 1 Then
|
|
If bInsertRow Then
|
|
oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1)
|
|
Else
|
|
bInsertRow = True
|
|
End If
|
|
UrlList(0) = SourceUrl
|
|
UrlList(1) = TargetUrl
|
|
For i = 0 To 1
|
|
oCell = oLogTable.GetCellbyPosition(i,oLogTable.Rows.Count-1)
|
|
If i = 1 And bContainsBasicMacro Then
|
|
oCommentCursor = oCell.createTextCursor()
|
|
oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
|
|
oCell.insertString(oCommentCursor, sReeditMacro, false)
|
|
End If
|
|
LocUrl = UrlList(i)
|
|
oLogCursor = oCell.createTextCursor()
|
|
oLogCursor.CollapseToStart()
|
|
oLogCursor.HyperLinkURL = LocUrl
|
|
oLogCursor.HyperLinkName = LocUrl
|
|
oLogCursor.HyperLinkTarget = LocUrl
|
|
LocFileName = FileNameOutOfPath(LocUrl)
|
|
oCell.InsertString(oLogCursor, LocFileName,False)
|
|
Next i
|
|
oLogDocument.Store()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub AddLogStatistics(FileCount as Integer)
|
|
Dim oCell as Object
|
|
Dim oLogCursor as Object
|
|
Dim MaxRowIndex as Integer
|
|
Dim oTableCursor as Object
|
|
If ImportDialog.chkLogfile.State = 1 Then
|
|
MaxRowIndex = oLogTable.Rows.Count
|
|
sLogSummary = ReplaceString(sLogSummary, FileCount, "<COUNT>")
|
|
oLogTable.Rows.InsertByIndex(MaxRowIndex, 1)
|
|
oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex)
|
|
oLogCursor = oCell.createTextCursor()
|
|
oCell.InsertString(oLogCursor, sLogSummary,False)
|
|
oTableCursor = oLogTable.createCursorByCellName(oCell.CellName)
|
|
oTableCursor.goRight(1, True)
|
|
oTableCursor.mergeRange()
|
|
oLogDocument.Store()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
' This macro has to be reworked out again as it works with deprecated interfaces
|
|
' It can be completed as soon as Bug #93295 will be fixed because right now it
|
|
' is not possible to access BasicLibraries and DialogLibraries from outside the
|
|
' document
|
|
Function CheckIfMacroExists(oDocument as Object) as Boolean
|
|
Dim ModuleNames() as String
|
|
Dim MaxIndex as Integer
|
|
Dim oLibraryContainer as Object
|
|
' oLibraryContainer = oDocument.LibraryContainer
|
|
' If oLibraryContainer.hasElements Then
|
|
' ModuleNames = oDocument.LibraryContainer.ElementNames
|
|
' MaxIndex = Ubound(ModuleNames())
|
|
' For i = 0 To MaxIndex
|
|
' oLibrary = oLibraryContainer.getByName(ModuleNames(i))
|
|
' If Not IsNull(oLibrary.getDialogContainer) Then
|
|
' CheckIf MacroExists = True
|
|
' Exit Function
|
|
' End If
|
|
' If oLibrary.ModuleContainer.HasElements Then
|
|
' CheckIfMacroExists() = True
|
|
' Exit Function
|
|
' End If
|
|
' Next i
|
|
' End If
|
|
CheckIfMacroExists() = False
|
|
End Function
|
|
|
|
|
|
|
|
Function CheckPassWordProtection(oDocument as Object)
|
|
Dim bIsPassWordProtected as Boolean
|
|
Dim i as Integer
|
|
Dim oArgs()
|
|
Dim MaxIndex as Integer
|
|
bIsPassWordProtected = false
|
|
oArgs() = oDocument.getArgs()
|
|
MaxIndex = Ubound(oArgs())
|
|
For i = 0 To MaxIndex
|
|
If oArgs(i).Name = "PassWord" Then
|
|
bIsPassWordProtected = True
|
|
sCurPassWord = oArgs(i).Value
|
|
Exit For
|
|
End If
|
|
Next i
|
|
CheckPassWordProtection() = bIsPassWordProtected
|
|
End Function
|
|
|
|
|
|
Sub OpenLogDocument()
|
|
Dim NoArgs() as New com.sun.star.beans.PropertyValue
|
|
OpenDocument(sLogUrl, NoArgs())
|
|
End Sub</script:module> |