Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenBoard
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lifo
Nicolas Ollinger
OpenBoard
Commits
1130a8aa
Commit
1130a8aa
authored
Sep 14, 2012
by
Anatoly Mihalchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SANKORE-1074
Document navigator: "Add pages from file" isn't work with old UBZ
parent
5f9f9ea6
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
74 additions
and
69 deletions
+74
-69
UBImportDocument.cpp
src/adaptors/UBImportDocument.cpp
+38
-48
UBImportDocument.h
src/adaptors/UBImportDocument.h
+1
-1
UBDocumentManager.cpp
src/core/UBDocumentManager.cpp
+1
-1
UBPersistenceManager.cpp
src/core/UBPersistenceManager.cpp
+28
-15
UBPersistenceManager.h
src/core/UBPersistenceManager.h
+4
-3
UBFileSystemUtils.cpp
src/frameworks/UBFileSystemUtils.cpp
+2
-1
No files found.
src/adaptors/UBImportDocument.cpp
View file @
1130a8aa
...
...
@@ -56,7 +56,7 @@ QString UBImportDocument::importFileFilter()
}
QString
UBImportDocument
::
expandFileToDir
(
const
QFile
&
pZipFile
,
const
QString
&
pDir
)
bool
UBImportDocument
::
extractFileToDir
(
const
QFile
&
pZipFile
,
const
QString
&
pDir
,
QString
&
documentRoot
)
{
QDir
rootDir
(
pDir
);
...
...
@@ -65,63 +65,45 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
if
(
!
zip
.
open
(
QuaZip
::
mdUnzip
))
{
qWarning
()
<<
"Import failed. Cause zip.open(): "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
zip
.
setFileNameCodec
(
"UTF-8"
);
QuaZipFileInfo
info
;
QuaZipFile
file
(
&
zip
);
// TODO UB 4.x implement a mechanism that can replace an existing
// document based on the UID of the document.
bool
createNewDocument
=
true
;
QString
documentRootFolder
;
// first we search the metadata.rdf to check the document properties
for
(
bool
more
=
zip
.
goToFirstFile
();
more
;
more
=
zip
.
goToNextFile
())
{
if
(
!
zip
.
getCurrentFileInfo
(
&
info
))
{
qWarning
()
<<
"Import failed. Cause: getCurrentFileInfo(): "
<<
zip
.
getZipError
();
return
""
;
}
QFileInfo
currentFileInfo
(
pDir
+
"/"
+
file
.
getActualFileName
());
}
if
(
createNewDocument
)
documentRootFolder
=
UBPersistenceManager
::
persistenceManager
()
->
generateUniqueDocumentPath
();
QFile
out
;
char
c
;
documentRoot
=
UBPersistenceManager
::
persistenceManager
()
->
generateUniqueDocumentPath
(
pDir
);
for
(
bool
more
=
zip
.
goToFirstFile
();
more
;
more
=
zip
.
goToNextFile
())
{
if
(
!
zip
.
getCurrentFileInfo
(
&
info
))
{
//TOD UB 4.3 O display error to user or use crash reporter
qWarning
()
<<
"Import failed. Cause: getCurrentFileInfo(): "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
if
(
!
file
.
open
(
QIODevice
::
ReadOnly
))
{
qWarning
()
<<
"Import failed. Cause: file.open(): "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
if
(
file
.
getZipError
()
!=
UNZ_OK
)
{
qWarning
()
<<
"Import failed. Cause: file.getFileName(): "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
QString
newFileName
=
documentRoot
Folder
+
"/"
+
file
.
getActualFileName
();
QString
newFileName
=
documentRoot
+
"/"
+
file
.
getActualFileName
();
QFileInfo
newFileInfo
(
newFileName
);
rootDir
.
mkpath
(
newFileInfo
.
absolutePath
());
if
(
!
rootDir
.
mkpath
(
newFileInfo
.
absolutePath
()))
return
false
;
out
.
setFileName
(
newFileName
);
out
.
open
(
QIODevice
::
WriteOnly
);
if
(
!
out
.
open
(
QIODevice
::
WriteOnly
))
return
false
;
// Slow like hell (on GNU/Linux at least), but it is not my fault.
// Not ZIP/UNZIP package's fault either.
...
...
@@ -131,7 +113,7 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
{
qWarning
()
<<
"Import failed. Cause: Unable to write file"
;
out
.
close
();
return
""
;
return
false
;
}
while
(
file
.
getChar
(
&
c
))
...
...
@@ -142,13 +124,13 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
if
(
file
.
getZipError
()
!=
UNZ_OK
)
{
qWarning
()
<<
"Import failed. Cause: "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
if
(
!
file
.
atEnd
())
{
qWarning
()
<<
"Import failed. Cause: read all but not EOF"
;
return
""
;
return
false
;
}
file
.
close
();
...
...
@@ -156,7 +138,7 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
if
(
file
.
getZipError
()
!=
UNZ_OK
)
{
qWarning
()
<<
"Import failed. Cause: file.close(): "
<<
file
.
getZipError
();
return
""
;
return
false
;
}
}
...
...
@@ -166,11 +148,10 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
if
(
zip
.
getZipError
()
!=
UNZ_OK
)
{
qWarning
()
<<
"Import failed. Cause: zip.close(): "
<<
zip
.
getZipError
();
return
""
;
return
false
;
}
return
documentRootFolder
;
return
true
;
}
UBDocumentProxy
*
UBImportDocument
::
importFile
(
const
QFile
&
pFile
,
const
QString
&
pGroup
)
...
...
@@ -183,17 +164,17 @@ UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString&
// first unzip the file to the correct place
QString
path
=
UBSettings
::
userDocumentDirectory
();
QString
documentRootFolder
=
expandFileToDir
(
pFile
,
path
)
;
QString
documentRootFolder
;
if
(
!
documentRootFolder
.
length
(
)){
if
(
!
extractFileToDir
(
pFile
,
path
,
documentRootFolder
)){
UBApplication
::
showMessage
(
tr
(
"Import of file %1 failed."
).
arg
(
fi
.
baseName
()));
return
0
;
return
NULL
;
}
else
{
UBDocumentProxy
*
newDocument
=
UBPersistenceManager
::
persistenceManager
()
->
createDocumentFromDir
(
documentRootFolder
,
pGroup
);
UBApplication
::
showMessage
(
tr
(
"Import successful."
));
return
newDocument
;
}
}
bool
UBImportDocument
::
addFileToDocument
(
UBDocumentProxy
*
pDocument
,
const
QFile
&
pFile
)
...
...
@@ -203,9 +184,18 @@ bool UBImportDocument::addFileToDocument(UBDocumentProxy* pDocument, const QFile
QString
path
=
UBFileSystemUtils
::
createTempDir
();
QString
documentRootFolder
=
expandFileToDir
(
pFile
,
path
);
QString
documentRootFolder
;
if
(
!
extractFileToDir
(
pFile
,
path
,
documentRootFolder
))
{
UBApplication
::
showMessage
(
tr
(
"Import of file %1 failed."
).
arg
(
fi
.
baseName
()));
return
false
;
}
UBPersistenceManager
::
persistenceManager
()
->
addDirectoryContentToDocument
(
documentRootFolder
,
pDocument
);
if
(
!
UBPersistenceManager
::
persistenceManager
()
->
addDirectoryContentToDocument
(
documentRootFolder
,
pDocument
))
{
UBApplication
::
showMessage
(
tr
(
"Import of file %1 failed."
).
arg
(
fi
.
baseName
()));
return
false
;
}
UBFileSystemUtils
::
deleteDir
(
path
);
...
...
src/adaptors/UBImportDocument.h
View file @
1130a8aa
...
...
@@ -37,7 +37,7 @@ class UBImportDocument : public UBDocumentBasedImportAdaptor
virtual
bool
addFileToDocument
(
UBDocumentProxy
*
pDocument
,
const
QFile
&
pFile
);
private
:
QString
expandFileToDir
(
const
QFile
&
pZipFile
,
const
QString
&
pDir
);
bool
extractFileToDir
(
const
QFile
&
pZipFile
,
const
QString
&
pDir
,
QString
&
documentRoot
);
};
#endif
/* UBIMPORTDOCUMENT_H_ */
src/core/UBDocumentManager.cpp
View file @
1130a8aa
...
...
@@ -194,7 +194,7 @@ int UBDocumentManager::addFilesToDocument(UBDocumentProxy* document, QStringList
int
nImportedDocuments
=
0
;
foreach
(
const
QString
&
fileName
,
fileNames
)
{
UBApplication
::
showMessage
(
tr
(
"Importing file"
).
arg
(
fileName
));
UBApplication
::
showMessage
(
tr
(
"Importing file
%1
"
).
arg
(
fileName
));
QFile
file
(
fileName
);
QFileInfo
fileInfo
(
file
);
...
...
src/core/UBPersistenceManager.cpp
View file @
1130a8aa
...
...
@@ -667,11 +667,8 @@ void UBPersistenceManager::copyPage(UBDocumentProxy* pDocumentProxy, const int s
int
UBPersistenceManager
::
sceneCount
(
const
UBDocumentProxy
*
proxy
)
{
return
sceneCountInDir
(
proxy
->
persistencePath
());
}
const
QString
pPath
=
proxy
->
persistencePath
();
int
UBPersistenceManager
::
sceneCountInDir
(
const
QString
&
pPath
)
{
int
pageIndex
=
0
;
bool
moreToProcess
=
true
;
bool
addedMissingZeroPage
=
false
;
...
...
@@ -709,15 +706,23 @@ int UBPersistenceManager::sceneCountInDir(const QString& pPath)
return
pageIndex
;
}
QString
UBPersistenceManager
::
generateUniqueDocumentPath
()
QStringList
UBPersistenceManager
::
getSceneFileNames
(
const
QString
&
folder
)
{
QString
ubPath
=
UBSettings
::
userDocumentDirectory
();
QDir
dir
(
folder
,
"page???.svg"
,
QDir
::
Name
,
QDir
::
Files
);
return
dir
.
entryList
();
}
QString
UBPersistenceManager
::
generateUniqueDocumentPath
(
const
QString
&
baseFolder
)
{
QDateTime
now
=
QDateTime
::
currentDateTime
();
QString
dirName
=
now
.
toString
(
"yyyy-MM-dd hh-mm-ss.zzz"
);
return
ubPath
+
QString
(
"/Sankore Document %1"
).
arg
(
dirName
);
return
baseFolder
+
QString
(
"/Sankore Document %1"
).
arg
(
dirName
);
}
QString
UBPersistenceManager
::
generateUniqueDocumentPath
()
{
return
generateUniqueDocumentPath
(
UBSettings
::
userDocumentDirectory
());
}
...
...
@@ -730,22 +735,26 @@ void UBPersistenceManager::generatePathIfNeeded(UBDocumentProxy* pDocumentProxy)
}
void
UBPersistenceManager
::
addDirectoryContentToDocument
(
const
QString
&
documentRootFolder
,
UBDocumentProxy
*
pDocument
)
bool
UBPersistenceManager
::
addDirectoryContentToDocument
(
const
QString
&
documentRootFolder
,
UBDocumentProxy
*
pDocument
)
{
int
sourcePageCount
=
sceneCountInDir
(
documentRootFolder
);
QStringList
sourceScenes
=
getSceneFileNames
(
documentRootFolder
);
if
(
sourceScenes
.
empty
())
return
false
;
int
targetPageCount
=
pDocument
->
pageCount
();
for
(
int
sourceIndex
=
0
;
sourceIndex
<
source
PageCount
;
sourceIndex
++
)
for
(
int
sourceIndex
=
0
;
sourceIndex
<
source
Scenes
.
size
()
;
sourceIndex
++
)
{
int
targetIndex
=
targetPageCount
+
sourceIndex
;
QFile
svg
(
documentRootFolder
+
UBFileSystemUtils
::
digitFileFormat
(
"/page%1.svg"
,
sourceIndex
));
svg
.
copy
(
pDocument
->
persistencePath
()
+
UBFileSystemUtils
::
digitFileFormat
(
"/page%1.svg"
,
targetIndex
));
QFile
svg
(
documentRootFolder
+
"/"
+
sourceScenes
[
sourceIndex
]);
if
(
!
svg
.
copy
(
pDocument
->
persistencePath
()
+
UBFileSystemUtils
::
digitFileFormat
(
"/page%1.svg"
,
targetIndex
)))
return
false
;
UBSvgSubsetAdaptor
::
setSceneUuid
(
pDocument
,
targetIndex
,
QUuid
::
createUuid
());
QFile
thumb
(
documentRootFolder
+
UBFileSystemUtils
::
digitFileFormat
(
"/page%1.thumbnail.jpg"
,
sourceIndex
));
// We can ignore error in this case, thumbnail will be genarated
thumb
.
copy
(
pDocument
->
persistencePath
()
+
UBFileSystemUtils
::
digitFileFormat
(
"/page%1.thumbnail.jpg"
,
targetIndex
));
}
...
...
@@ -753,11 +762,15 @@ void UBPersistenceManager::addDirectoryContentToDocument(const QString& document
{
qDebug
()
<<
"copying "
<<
documentRootFolder
<<
"/"
<<
dir
<<
" to "
<<
pDocument
->
persistencePath
()
<<
"/"
+
dir
;
UBFileSystemUtils
::
copyDir
(
documentRootFolder
+
"/"
+
dir
,
pDocument
->
persistencePath
()
+
"/"
+
dir
);
QDir
srcDir
(
documentRootFolder
+
"/"
+
dir
);
if
(
srcDir
.
exists
())
if
(
!
UBFileSystemUtils
::
copyDir
(
documentRootFolder
+
"/"
+
dir
,
pDocument
->
persistencePath
()
+
"/"
+
dir
))
return
false
;
}
pDocument
->
setPageCount
(
sceneCount
(
pDocument
));
return
false
;
}
...
...
src/core/UBPersistenceManager.h
View file @
1130a8aa
...
...
@@ -79,13 +79,14 @@ class UBPersistenceManager : public QObject
virtual
QStringList
allVideos
(
const
QDir
&
dir
);
virtual
QStringList
allWidgets
(
const
QDir
&
dir
);
virtual
QString
generateUniqueDocumentPath
();
QString
generateUniqueDocumentPath
();
QString
generateUniqueDocumentPath
(
const
QString
&
baseFolder
);
QString
teacherGuideAbsoluteObjectPath
(
UBDocumentProxy
*
pDocumentProxy
);
QString
addObjectToTeacherGuideDirectory
(
UBDocumentProxy
*
proxy
,
QString
pPath
);
QString
addWidgetToTeacherGuideDirectory
(
UBDocumentProxy
*
pDocumentProxy
,
QString
pPath
);
virtual
void
addDirectoryContentToDocument
(
const
QString
&
documentRootFolder
,
UBDocumentProxy
*
pDocument
);
bool
addDirectoryContentToDocument
(
const
QString
&
documentRootFolder
,
UBDocumentProxy
*
pDocument
);
virtual
void
upgradeDocumentIfNeeded
(
UBDocumentProxy
*
pDocumentProxy
);
...
...
@@ -128,7 +129,7 @@ class UBPersistenceManager : public QObject
int
sceneCount
(
const
UBDocumentProxy
*
pDocumentProxy
);
int
sceneCountInDir
(
const
QString
&
pPath
);
static
QStringList
getSceneFileNames
(
const
QString
&
folder
);
QList
<
QPointer
<
UBDocumentProxy
>
>
allDocumentProxies
();
...
...
src/frameworks/UBFileSystemUtils.cpp
View file @
1130a8aa
...
...
@@ -273,7 +273,8 @@ bool UBFileSystemUtils::copyDir(const QString& pSourceDirPath, const QString& pT
QDir
dirSource
(
pSourceDirPath
);
QDir
dirTarget
(
pTargetDirPath
);
dirTarget
.
mkpath
(
pTargetDirPath
);
if
(
!
dirTarget
.
mkpath
(
pTargetDirPath
))
return
false
;
bool
successSoFar
=
true
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment