Как я могу "отменить отправку", как в Gmail? - PullRequest
0 голосов
/ 02 марта 2010

Как я могу отменить отправку, сохранение или удаление в Vb, как Gmail использует эту функцию в сообщениях. Функция, используемая Gmail, заключается в том, что они помещают сообщение в очередь в течение 5 секунд, и если пользователь нажимает на Отменить до того, как в течение 5 секунд весь процесс отправки возвращается.

Теперь я хочу реализовать это в моем приложении Vb.net. Есть ли код для этого. Пожалуйста, помогите?

1 Ответ

13 голосов
/ 02 марта 2010

О функции «отменить отправку», наиболее очевидный способ сделать это на самом деле не «делать» то, что вы хотите «отменить».

Что я имею в виду:

  • Когда пользователь нажимает кнопку «отправить», вам не следует отправлять сообщение
  • Вместо этого вы должны пометить его как «отправить за X секунд» - поместите его в какую-то очередь, например
  • Это означает, что оно будет отправлено только через X секунд, а не сразу.
  • В течение этого X секунд, если пользователь нажимает «отменить отправку», вам просто нужно удалить это письмо из «очереди ожидания»

Конечно, вы не можете "отменить отправку" по почте, которая уже была отправлена: она ушла с вашего сервера, и вы ничего не можете с этим поделать.

Для этого вам понадобится:

  • Некоторая очередь для действий
  • Чтобы поместить ваши данные в эту очередь, когда пользователь нажимает кнопку «отправить»
  • Чтобы иметь какой-то пакет, который действительно отправляет данные, которые находились в очереди более X секунд
  • Чтобы удалить данные из очереди, когда пользователь нажимает кнопку «Отменить отправку».


Эту же идею можно применить к «отменить удаление»:

  • Когда пользователь нажимает «удалить», физически не удаляйте данные
  • Вместо этого используйте некоторый логический флаг, чтобы указать, что его следует считать удаленным
  • Тогда удаление допинга означает, что удаление означает только отключение этого флага

Это может быть легко реализовано на любом языке:

  • Добавить поле is_deleted к вашим данным
  • При отображении данных отфильтруйте те, для которых этот флаг включен
  • При удалении вместо физического удаления установите этот флаг
  • При удалении снимите этот флаг


«Отменить сохранение» может быть немного сложнее: решение было бы сохранить не одну версию сообщения, а несколько:

  • Каждый раз, когда пользователь нажимает «сохранить», вы должны сохранять новую версию сообщения
  • Это означает, что через некоторое время вы получите множество версий сообщения
  • Что позволит вам «вернуться» к предыдущей версии, восстановив ее из истории.

Это можно сделать:

  • добавление нового поля с названием "version" в ваши данные.
  • каждый раз, когда пользователь сохраняет, просто увеличивайте это поле и сохраняйте копию данных
  • т.е. никогда не обновляйте никакие существующие данные, но всегда вставляйте новую версию.
  • тогда «отменить сохранение» означает только «получить предыдущую версию данных»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...