From 9b605969f1ef9826469c68ec35df768063f904ba Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Wed, 27 Jun 2012 15:23:26 -0400 Subject: [PATCH] Fixes in Dropbox API, try to catch Dropbox exceptions, implement rename and copy in Dropbox storage backend --- 3rdparty/Dropbox/API.php | 6 +-- apps/files_external/lib/dropbox.php | 59 +++++++++++++++++++++++------ 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/3rdparty/Dropbox/API.php b/3rdparty/Dropbox/API.php index cff6c35c7fb..8cdce678e1c 100644 --- a/3rdparty/Dropbox/API.php +++ b/3rdparty/Dropbox/API.php @@ -139,7 +139,7 @@ class Dropbox_API { public function copy($from, $to, $root = null) { if (is_null($root)) $root = $this->root; - $response = $this->oauth->fetch($this->api_url . 'fileops/copy', array('from_path' => $from, 'to_path' => $to, 'root' => $root)); + $response = $this->oauth->fetch($this->api_url . 'fileops/copy', array('from_path' => $from, 'to_path' => $to, 'root' => $root), 'POST'); return json_decode($response['body'],true); @@ -178,7 +178,7 @@ class Dropbox_API { public function delete($path, $root = null) { if (is_null($root)) $root = $this->root; - $response = $this->oauth->fetch($this->api_url . 'fileops/delete', array('path' => $path, 'root' => $root)); + $response = $this->oauth->fetch($this->api_url . 'fileops/delete', array('path' => $path, 'root' => $root), 'POST'); return json_decode($response['body']); } @@ -196,7 +196,7 @@ class Dropbox_API { public function move($from, $to, $root = null) { if (is_null($root)) $root = $this->root; - $response = $this->oauth->fetch($this->api_url . 'fileops/move', array('from_path' => rawurldecode($from), 'to_path' => rawurldecode($to), 'root' => $root)); + $response = $this->oauth->fetch($this->api_url . 'fileops/move', array('from_path' => rawurldecode($from), 'to_path' => rawurldecode($to), 'root' => $root), 'POST'); return json_decode($response['body'],true); diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index e3fbb244996..35663d431f8 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -70,11 +70,16 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } public function mkdir($path) { - return $this->dropbox->createFolder($path); + try { + $this->dropbox->createFolder($path); + return true; + } catch (Exception $exception) { + return false; + } } public function rmdir($path) { - return $this->dropbox->delete($path); + return $this->unlink($path); } public function opendir($path) { @@ -114,11 +119,11 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } public function is_readable($path) { - return self::file_exists($path); + return $this->file_exists($path); } public function is_writable($path) { - return self::file_exists($path); + return $this->file_exists($path); } public function file_exists($path) { @@ -132,7 +137,30 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } public function unlink($path) { - return $this->dropbox->delete($path); + try { + $this->dropbox->delete($path); + return true; + } catch (Exception $exception) { + return false; + } + } + + public function rename($path1, $path2) { + try { + $this->dropbox->move($path1, $path2); + return true; + } catch (Exception $exception) { + return false; + } + } + + public function copy($path1, $path2) { + try { + $this->dropbox->copy($path1, $path2); + return true; + } catch (Exception $exception) { + return false; + } } public function fopen($path, $mode) { @@ -140,8 +168,13 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { case 'r': case 'rb': $tmpFile = OC_Helper::tmpFile(); - file_put_contents($tmpFile, $this->dropbox->getFile($path)); - return fopen($tmpFile, 'r'); + try { + $data = $this->dropbox->getFile($path); + file_put_contents($tmpFile, $data); + return fopen($tmpFile, 'r'); + } catch (Exception $exception) { + return false; + } case 'w': case 'wb': case 'a': @@ -174,9 +207,11 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { public function writeBack($tmpFile) { if (isset(self::$tempFiles[$tmpFile])) { $handle = fopen($tmpFile, 'r'); - $response = $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle); - if ($response) { + try { + $response = $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle); unlink($tmpFile); + } catch (Exception $exception) { + } } } @@ -191,10 +226,12 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } public function free_space($path) { - if ($info = $this->dropbox->getAccountInfo()) { + try { + $info = $this->dropbox->getAccountInfo(); return $info['quota_info']['quota'] - $info['quota_info']['normal']; + } catch (Exception $exception) { + return false; } - return false; } public function touch($path, $mtime = null) { -- 2.39.5