123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
- <!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
- <script:module xmlns:script="http://openoffice.org/2000/script" script:name="UCB" script:language="StarBasic">'Option explicit
- Public oDocument
- Public oDocInfo as object
- Const SBMAXDIRCOUNT = 10
- Dim CurDirMaxCount as Integer
- Dim sDirArray(SBMAXDIRCOUNT-1) as String
- Dim DirIndex As Integer
- Dim iDirCount as Integer
- Public bInterruptSearch as Boolean
- Public NoArgs()as New com.sun.star.beans.PropertyValue
- Sub Main()
- Dim LocsfileContent(0) as String
- LocsfileContent(0) = "*"
- ReadDirectories("file:///space", LocsfileContent(), True, False, false)
- End Sub
- ' ReadDirectories( sSourceDir, bRecursive, bCheckRealType, False, sFileContent(), sLocExtension)
- Function ReadDirectories(ByVal AnchorDir As String, bRecursive as Boolean, bcheckFileType as Boolean, bGetByTitle as Boolean, Optional sFileContent(), Optional sExtension as String)
- Dim i as integer
- Dim Status as Object
- Dim FileCountinDir as Integer
- Dim RealFileContent as String
- Dim FileName as string
- Dim oUcbObject as Object
- Dim DirContent()
- Dim CurIndex as Integer
- Dim MaxIndex as Integer
- Dim StartUbound as Integer
- Dim FileExtension as String
- StartUbound = 5
- MaxIndex = StartUBound
- CurDirMaxCount = SBMAXDIRCOUNT
- Dim sFileArray(StartUbound,1) as String
- On Local Error Goto FILESYSTEMPROBLEM:
- CurIndex = -1
- ' Todo: Is the last separator valid?
- DirIndex = 0
- sDirArray(iDirIndex) = AnchorDir
- iDirCount = 1
- oDocInfo = CreateUnoService("com.sun.star.document.DocumentProperties")
- oUcbObject = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- If oUcbObject.Exists(AnchorDir) Then
- Do
- AnchorDir = sDirArray(DirIndex)
- On Local Error Resume Next
- DirContent() = oUcbObject.GetFolderContents(AnchorDir,True)
- DirIndex = DirIndex + 1
- On Local Error Goto 0
- On Local Error Goto FILESYSTEMPROBLEM:
- If Ubound(DirContent()) <> -1 Then
- FileCountinDir = Ubound(DirContent())+ 1
- For i = 0 to FilecountinDir -1
- If bInterruptSearch = True Then
- Exit Do
- End If
-
- Filename = DirContent(i)
- If oUcbObject.IsFolder(FileName) Then
- If brecursive Then
- AddFoldertoList(FileName, DirIndex)
- End If
- Else
- If bcheckFileType Then
- RealFileContent = GetRealFileContent(FileName)
- Else
- RealFileContent = GetFileNameExtension(FileName)
- End If
- If RealFileContent <> "" Then
- ' Retrieve the Index in the Array, where a Filename is positioned
- If Not IsMissing(sFileContent()) Then
- If (FieldInArray(sFileContent(), Ubound(sFileContent), RealFileContent)) Then
- ' The extension of the current file passes the filter and is therefore admitted to the
- ' fileList
- If Not IsMissing(sExtension) Then
- If sExtension <> "" Then
- ' Consider that some Formats like old StarOffice Templates with the extension ".vor" can only be
- ' precisely identified by their mimetype and their extension
- FileExtension = GetFileNameExtension(FileName)
- If FileExtension = sExtension Then
- AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
- End If
- Else
- AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
- End If
- Else
- AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
- End If
- End If
- Else
- AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
- End If
- If CurIndex = MaxIndex Then
- MaxIndex = MaxIndex + StartUbound
- ReDim Preserve sFileArray(MaxIndex,1) as String
- End If
- End If
- End If
- Next i
- End If
- Loop Until DirIndex >= iDirCount
- If CurIndex > -1 Then
- ReDim Preserve sFileArray(CurIndex,1) as String
- Else
- ReDim sFileArray() as String
- End If
- Else
- Msgbox("Directory '" & ConvertFromUrl(AnchorDir) & "' does not exist!", 16, GetProductName())
- End If
- ReadDirectories() = sFileArray()
- Exit Function
- FILESYSTEMPROBLEM:
- Msgbox("Sorry, Filesystem Problem")
- ReadDirectories() = sFileArray()
- Resume LEAVEPROC
- LEAVEPROC:
- End Function
- Sub AddFoldertoList(sDirURL as String, iDirIndex)
- iDirCount = iDirCount + 1
- If iDirCount = CurDirMaxCount Then
- CurDirMaxCount = CurDirMaxCount + SBMAXDIRCOUNT
- ReDim Preserve sDirArray(CurDirMaxCount) as String
- End If
- sDirArray(iDirCount-1) = sDirURL
- End Sub
- Sub AddFileNameToList(sFileArray(), FileName as String, FileContent as String, bGetByTitle as Boolean, CurIndex)
- Dim FileCount As Integer
- CurIndex = CurIndex + 1
- sFileArray(CurIndex,0) = FileName
- If bGetByTitle Then
- sFileArray(CurIndex,1) = RetrieveDocTitle(oDocInfo, FileName)
- ' Add the documenttitles to the Filearray
- Else
- sFileArray(CurIndex,1) = FileContent
- End If
- End Sub
- Function RetrieveDocTitle(oDocProps as Object, sFileName as String) As String
- Dim sDocTitle as String
- On Local Error Goto NOFILE
- oDocProps.loadFromMedium(sFileName, NoArgs())
- sDocTitle = oDocProps.Title
- NOFILE:
- If Err <> 0 Then
- RetrieveDocTitle = ""
- RESUME CLR_ERROR
- End If
- CLR_ERROR:
- If sDocTitle = "" Then
- sDocTitle = GetFileNameWithoutExtension(sFilename, "/")
- End If
- RetrieveDocTitle = sDocTitle
- End Function
- ' Retrieves The Filecontent of a Document by extracting the content
- ' from the Header of the document
- Function GetRealFileContent(FileName as String) As String
- On Local Error Goto NOFILE
- oTypeDetect = createUnoService("com.sun.star.document.TypeDetection")
- GetRealFileContent = oTypeDetect.queryTypeByURL(FileName)
- NOFILE:
- If Err <> 0 Then
- GetRealFileContent = ""
- resume CLR_ERROR
- End If
- CLR_ERROR:
- End Function
- Function CopyRecursively(SourceFilePath as String, SourceStemDir as String, TargetStemDir as String)
- Dim TargetDir as String
- Dim TargetFile as String
- TargetFile= ReplaceString(SourceFilePath, TargetStemDir, SourceStemDir)
- TargetFileName = FileNameoutofPath(TargetFile,"/")
- TargetDir = DeleteStr(TargetFile, TargetFileName)
- CreateFolder(TargetDir)
- CopyRecursively() = TargetFile
- End Function
- ' Opens a help url referenced by a Help ID that is retrieved from the calling button tag
- Sub ShowHelperDialog(aEvent)
- Dim oSystemNode as Object
- Dim sSystem as String
- Dim oLanguageNode as Object
- Dim sLocale as String
- Dim sLocaleList() as String
- Dim sLanguage as String
- Dim sHelpUrl as String
- Dim sDocType as String
- HelpID = aEvent.Source.Model.Tag
- oLocDocument = StarDesktop.ActiveFrame.Controller.Model
- sDocType = GetDocumentType(oLocDocument)
- oSystemNode = GetRegistryKeyContent("org.openoffice.Office.Common/Help")
- sSystem = oSystemNode.GetByName("System")
- oLanguageNode = GetRegistryKeyContent("org.openoffice.Setup/L10N/")
- sLocale = oLanguageNode.getByName("ooLocale")
- sLocaleList() = ArrayoutofString(sLocale, "-")
- sLanguage = sLocaleList(0)
- sHelpUrl = "vnd.sun.star.help://" & sDocType & "/" & HelpID & "?Language=" & sLanguage & "&System=" & sSystem
- StarDesktop.LoadComponentfromUrl(sHelpUrl, "OFFICE_HELP", 63, NoArgs())
- End Sub
- Sub SaveDataToFile(FilePath as String, DataList())
- Dim FileChannel as Integer
- Dim i as Integer
- Dim oFile as Object
- Dim oOutputStream as Object
- Dim oStreamString as Object
- Dim oUcb as Object
- Dim sCRLF as String
- sCRLF = CHR(13) & CHR(10)
- oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
- If oUcb.Exists(FilePath) Then
- oUcb.Kill(FilePath)
- End If
- oFile = oUcb.OpenFileReadWrite(FilePath)
- oOutputStream.SetOutputStream(oFile.GetOutputStream)
- For i = 0 To Ubound(DataList())
- oOutputStream.WriteString(DataList(i) & sCRLF)
- Next i
- oOutputStream.CloseOutput()
- End Sub
- Function LoadDataFromFile(FilePath as String, DataList()) as Boolean
- Dim oInputStream as Object
- Dim i as Integer
- Dim oUcb as Object
- Dim oFile as Object
- Dim MaxIndex as Integer
- oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- If oUcb.Exists(FilePath) Then
- MaxIndex = 10
- oInputStream = createUnoService("com.sun.star.io.TextInputStream")
- oFile = oUcb.OpenFileReadWrite(FilePath)
- oInputStream.SetInputStream(oFile.GetInputStream)
- i = -1
- Redim Preserve DataList(MaxIndex)
- While Not oInputStream.IsEOF
- i = i + 1
- If i > MaxIndex Then
- MaxIndex = MaxIndex + 10
- Redim Preserve DataList(MaxIndex)
- End If
- DataList(i) = oInputStream.ReadLine
- Wend
- If i > -1 And i <> MaxIndex Then
- Redim Preserve DataList(i)
- End If
- LoadDataFromFile() = True
- oInputStream.CloseInput()
- Else
- LoadDataFromFile() = False
- End If
- End Function
- Function CreateFolder(sNewFolder) as Boolean
- Dim oUcb as Object
- oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- On Local Error Goto NOSPACEONDRIVE
- If Not oUcb.Exists(sNewFolder) Then
- oUcb.CreateFolder(sNewFolder)
- End If
- CreateFolder = True
- NOSPACEONDRIVE:
- If Err <> 0 Then
- If InitResources("") Then
- ErrMsg = GetResText("RID_COMMON_0")
- ErrMsg = ReplaceString(ErrMsg, chr(13), "<BR>")
- ErrMsg = ReplaceString(ErrMsg, sNewFolder, "%1")
- Msgbox(ErrMsg, 48, GetProductName())
- End If
- CreateFolder = False
- Resume GOON
- End If
- GOON:
- End Function
- </script:module>
|