Fix GDrive handling of office files
1) Properly detect empty file extension, can be null. 2) When renaming part file to final file, use the correct file name without extension, if it exists 3) When renaming a file, do not delete the original file if it had the same id, which can happen with part files
This commit is contained in:
parent
46b39c3465
commit
075dd54f6c
1 changed files with 13 additions and 4 deletions
|
@ -264,7 +264,7 @@ class Google extends \OC\Files\Storage\Common {
|
|||
foreach ($children->getItems() as $child) {
|
||||
$name = $child->getTitle();
|
||||
// Check if this is a Google Doc i.e. no extension in name
|
||||
if ($child->getFileExtension() === ''
|
||||
if (empty($child->getFileExtension())
|
||||
&& $child->getMimeType() !== self::FOLDER
|
||||
) {
|
||||
$name .= '.'.$this->getGoogleDocExtension($child->getMimeType());
|
||||
|
@ -368,8 +368,14 @@ class Google extends \OC\Files\Storage\Common {
|
|||
public function rename($path1, $path2) {
|
||||
$file = $this->getDriveFile($path1);
|
||||
if ($file) {
|
||||
$newFile = $this->getDriveFile($path2);
|
||||
if (dirname($path1) === dirname($path2)) {
|
||||
$file->setTitle(basename(($path2)));
|
||||
if ($newFile) {
|
||||
// rename to the name of the target file, could be an office file without extension
|
||||
$file->setTitle($newFile->getTitle());
|
||||
} else {
|
||||
$file->setTitle(basename(($path2)));
|
||||
}
|
||||
} else {
|
||||
// Change file parent
|
||||
$parentFolder2 = $this->getDriveFile(dirname($path2));
|
||||
|
@ -394,8 +400,11 @@ class Google extends \OC\Files\Storage\Common {
|
|||
if ($result) {
|
||||
$this->setDriveFile($path1, false);
|
||||
$this->setDriveFile($path2, $result);
|
||||
if ($oldfile) {
|
||||
$this->service->files->delete($oldfile->getId());
|
||||
if ($oldfile && $newFile) {
|
||||
// only delete if they have a different id (same id can happen for part files)
|
||||
if ($newFile->getId() !== $oldfile->getId()) {
|
||||
$this->service->files->delete($oldfile->getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
return (bool)$result;
|
||||
|
|
Loading…
Reference in a new issue