summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter/services/draft_service.py
diff options
context:
space:
mode:
Diffstat (limited to 'service/pixelated/adapter/services/draft_service.py')
-rw-r--r--service/pixelated/adapter/services/draft_service.py33
1 files changed, 25 insertions, 8 deletions
diff --git a/service/pixelated/adapter/services/draft_service.py b/service/pixelated/adapter/services/draft_service.py
index c8df0a05..65794f04 100644
--- a/service/pixelated/adapter/services/draft_service.py
+++ b/service/pixelated/adapter/services/draft_service.py
@@ -13,19 +13,36 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+from twisted.internet import defer
+from pixelated.adapter.errors import DuplicatedDraftException
class DraftService(object):
- __slots__ = '_mailboxes'
+ __slots__ = '_mail_store'
- def __init__(self, mailboxes):
- self._mailboxes = mailboxes
+ def __init__(self, mail_store):
+ self._mail_store = mail_store
+ @defer.inlineCallbacks
def create_draft(self, input_mail):
- pixelated_mail = self._mailboxes.drafts.add(input_mail)
- return pixelated_mail
+ mail = yield self._mail_store.add_mail('DRAFTS', input_mail.raw)
+ defer.returnValue(mail)
+ # pixelated_mail = yield (yield self._mailboxes.drafts).add(input_mail)
+ # defer.returnValue(pixelated_mail)
+ @defer.inlineCallbacks
def update_draft(self, ident, input_mail):
- pixelated_mail = self.create_draft(input_mail)
- self._mailboxes.drafts.remove(ident)
- return pixelated_mail
+ new_draft = yield self.create_draft(input_mail)
+ try:
+ yield self._mail_store.delete_mail(ident)
+ defer.returnValue(new_draft)
+ except Exception as error:
+ errorMessage = error.args[0].getErrorMessage()
+
+ if errorMessage == 'Need to create doc before deleting':
+ yield self._mail_store.delete_mail(new_draft.ident)
+ raise DuplicatedDraftException(errorMessage)
+
+ # pixelated_mail = yield self.create_draft(input_mail)
+ # yield (yield self._mailboxes.drafts).remove(ident)
+ # defer.returnValue(pixelated_mail)