diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2016-09-17 07:40:56 +0200 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2016-09-17 07:40:56 +0200 |
commit | 59b97fae996d8307b9d957d210d46200f6d206bf (patch) | |
tree | 9481859d10fafed91067ac7736480e91cd6eb4bb /src/Wallabag/ImportBundle | |
parent | fbb319f064e6336a3b44bda12cdc51c93c51f379 (diff) | |
download | wallabag-59b97fae996d8307b9d957d210d46200f6d206bf.tar.gz wallabag-59b97fae996d8307b9d957d210d46200f6d206bf.tar.zst wallabag-59b97fae996d8307b9d957d210d46200f6d206bf.zip |
Avoid losing entry when fetching fail
Instead of just say “Failed to save entry” we’ll save the entry at all cost and try to fetch content. If fetching content failed, the entry will still be saved at least, but without content.
Diffstat (limited to 'src/Wallabag/ImportBundle')
4 files changed, 18 insertions, 39 deletions
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php index 2af0e69b..a1a14576 100644 --- a/src/Wallabag/ImportBundle/Import/AbstractImport.php +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php | |||
@@ -79,20 +79,20 @@ abstract class AbstractImport implements ImportInterface | |||
79 | 79 | ||
80 | /** | 80 | /** |
81 | * Fetch content from the ContentProxy (using graby). | 81 | * Fetch content from the ContentProxy (using graby). |
82 | * If it fails return false instead of the updated entry. | 82 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). |
83 | * | 83 | * |
84 | * @param Entry $entry Entry to update | 84 | * @param Entry $entry Entry to update |
85 | * @param string $url Url to grab content for | 85 | * @param string $url Url to grab content for |
86 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url | 86 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url |
87 | * | 87 | * |
88 | * @return Entry|false | 88 | * @return Entry |
89 | */ | 89 | */ |
90 | protected function fetchContent(Entry $entry, $url, array $content = []) | 90 | protected function fetchContent(Entry $entry, $url, array $content = []) |
91 | { | 91 | { |
92 | try { | 92 | try { |
93 | return $this->contentProxy->updateEntry($entry, $url, $content); | 93 | return $this->contentProxy->updateEntry($entry, $url, $content); |
94 | } catch (\Exception $e) { | 94 | } catch (\Exception $e) { |
95 | return false; | 95 | return $entry; |
96 | } | 96 | } |
97 | } | 97 | } |
98 | 98 | ||
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 1bf22d68..e00eb44b 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -199,24 +199,16 @@ class PocketImport extends AbstractImport | |||
199 | } | 199 | } |
200 | 200 | ||
201 | $entry = new Entry($this->user); | 201 | $entry = new Entry($this->user); |
202 | $entry = $this->fetchContent($entry, $url); | 202 | $entry->setUrl($url); |
203 | |||
204 | // jump to next entry in case of problem while getting content | ||
205 | if (false === $entry) { | ||
206 | ++$this->skippedEntries; | ||
207 | 203 | ||
208 | return; | 204 | // update entry with content (in case fetching failed, the given entry will be return) |
209 | } | 205 | $entry = $this->fetchContent($entry, $url); |
210 | 206 | ||
211 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted | 207 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted |
212 | if ($importedEntry['status'] == 1 || $this->markAsRead) { | 208 | $entry->setArchived($importedEntry['status'] == 1 || $this->markAsRead); |
213 | $entry->setArchived(true); | ||
214 | } | ||
215 | 209 | ||
216 | // 0 or 1 - 1 If the item is starred | 210 | // 0 or 1 - 1 If the item is starred |
217 | if ($importedEntry['favorite'] == 1) { | 211 | $entry->setStarred($importedEntry['favorite'] == 1); |
218 | $entry->setStarred(true); | ||
219 | } | ||
220 | 212 | ||
221 | $title = 'Untitled'; | 213 | $title = 'Untitled'; |
222 | if (isset($importedEntry['resolved_title']) && $importedEntry['resolved_title'] != '') { | 214 | if (isset($importedEntry['resolved_title']) && $importedEntry['resolved_title'] != '') { |
@@ -226,7 +218,6 @@ class PocketImport extends AbstractImport | |||
226 | } | 218 | } |
227 | 219 | ||
228 | $entry->setTitle($title); | 220 | $entry->setTitle($title); |
229 | $entry->setUrl($url); | ||
230 | 221 | ||
231 | // 0, 1, or 2 - 1 if the item has images in it - 2 if the item is an image | 222 | // 0, 1, or 2 - 1 if the item has images in it - 2 if the item is an image |
232 | if (isset($importedEntry['has_image']) && $importedEntry['has_image'] > 0 && isset($importedEntry['images'][1])) { | 223 | if (isset($importedEntry['has_image']) && $importedEntry['has_image'] > 0 && isset($importedEntry['images'][1])) { |
diff --git a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php index b852f8f0..fa2b7053 100644 --- a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php +++ b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php | |||
@@ -103,18 +103,12 @@ class ReadabilityImport extends AbstractImport | |||
103 | 'created_at' => $importedEntry['date_added'], | 103 | 'created_at' => $importedEntry['date_added'], |
104 | ]; | 104 | ]; |
105 | 105 | ||
106 | $entry = $this->fetchContent( | 106 | $entry = new Entry($this->user); |
107 | new Entry($this->user), | 107 | $entry->setUrl($data['url']); |
108 | $data['url'], | 108 | $entry->setTitle($data['title']); |
109 | $data | ||
110 | ); | ||
111 | |||
112 | // jump to next entry in case of problem while getting content | ||
113 | if (false === $entry) { | ||
114 | ++$this->skippedEntries; | ||
115 | 109 | ||
116 | return; | 110 | // update entry with content (in case fetching failed, the given entry will be return) |
117 | } | 111 | $entry = $this->fetchContent($entry, $data['url'], $data); |
118 | 112 | ||
119 | $entry->setArchived($data['is_archived']); | 113 | $entry->setArchived($data['is_archived']); |
120 | $entry->setStarred($data['is_starred']); | 114 | $entry->setStarred($data['is_starred']); |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php index 969a6a04..043bb0a2 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagImport.php +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php | |||
@@ -101,18 +101,12 @@ abstract class WallabagImport extends AbstractImport | |||
101 | 101 | ||
102 | $data = $this->prepareEntry($importedEntry); | 102 | $data = $this->prepareEntry($importedEntry); |
103 | 103 | ||
104 | $entry = $this->fetchContent( | 104 | $entry = new Entry($this->user); |
105 | new Entry($this->user), | 105 | $entry->setUrl($data['url']); |
106 | $importedEntry['url'], | 106 | $entry->setTitle($data['title']); |
107 | $data | ||
108 | ); | ||
109 | |||
110 | // jump to next entry in case of problem while getting content | ||
111 | if (false === $entry) { | ||
112 | ++$this->skippedEntries; | ||
113 | 107 | ||
114 | return; | 108 | // update entry with content (in case fetching failed, the given entry will be return) |
115 | } | 109 | $entry = $this->fetchContent($entry, $data['url'], $data); |
116 | 110 | ||
117 | if (array_key_exists('tags', $data)) { | 111 | if (array_key_exists('tags', $data)) { |
118 | $this->contentProxy->assignTagsToEntry( | 112 | $this->contentProxy->assignTagsToEntry( |