Обмен видео один на один: запросы, предложения и торг

На tapeshelf приватное видео не лежит в ленте, и купить его нельзя. Чтобы его получить, нужно попросить у того, у кого оно есть. Иногда человек просто поделится, но часто захочет что-нибудь взамен. Ниже рассказываем, как это выглядит на экране, а в конце — как устроено внутри.
Как попросить видео
Откройте приватное видео на чужой полке. Вместо плеера там будут обложка, превью из 16 кадров и кнопка «Запросить это видео» с полем для сообщения, которое можно оставить пустым. Если вы уже знаете, что дадите взамен, нажмите «+ Предложить что-то взамен» и выберите свои видео: владелец увидит обе стороны и сможет сразу согласиться. Если он написал в профиле, что ищет и чего ему не предлагать («Ищу», «Не предлагать»), это будет рядом с кнопкой. Чтобы попросить сразу несколько видео, выделите их на полке и отправьте один запрос, до 20 видео.
Кнопка появляется не всегда:
- Запрос уходит тому, на чьей полке вы сейчас, даже если он не автор. Это его копия, ему и решать.
- Закладки публичных видео запросить нельзя, вместо кнопки будет ссылка на автора.
- Нельзя запросить видео, которое вы и так можете смотреть, или то, на которое у вас уже есть открытый запрос у кого угодно.
- Если один из вас заблокировал другого, запросов между вами нет.
- В день можно запросить до 30 видео.
Если ваша полка пока пуста, приложение посоветует сначала загрузить несколько своих видео. Совет дельный: с теми, кому есть что предложить взамен, делятся гораздо охотнее.
Что может ответить владелец
Владелец получает уведомление и находит запрос на странице «Запросы». Он может:
- Поделиться бесплатно. Вы получаете копии всего, что просили.
- Предложить обмен. Он выбирает на вашей полке, что хотел бы получить взамен.
- Отклонить, если хочет, с комментарием.
- Заблокировать. Все открытые запросы между вами закрываются. Свой запрос вы увидите отклонённым, о блокировке вам не скажут.
Если вы сразу что-то предложили, владелец может просто принять обмен.
Раунды
Как только кто-то предложил обмен, запрос превращается в короткий торг. На странице видно, чей ход: «ваш ход» или «ждём ответа». В свой ход можно принять предложение, отклонить его или предложить обмен со своей стороны, с другим набором видео.
Раундов сколько угодно. Меняться можно одно на одно, одно на несколько или несколько на несколько, но каждая сторона отдаёт хотя бы одно видео. Предложить можно всё, что стоит на вашей полке, кроме закладок публичных видео, в том числе полученное в прошлых обменах, но не то, что у другой стороны уже есть. А пока идёт торг, владелец может в любой момент поделиться бесплатно или заблокировать, а тот, кто просил, может отозвать запрос.
Пример. Маша просит у Лёши «Гавань на рассвете». Лёша готов отдать её за Машин «Ночной поезд». Маша предлагает вместо него «Дождь по крыше». Лёша соглашается, и оба получают копии в один и тот же момент.
Запросы между пользователями не истекают. Они ждут на странице «Запросы», во вкладках «Входящие», «Исходящие» и «История», пока кто-нибудь не ответит, а в ветке сохраняется каждый раунд. О каждом шаге приходит уведомление в колокольчик, а если вы это включили, то и письмо.
Отказ и неделя паузы
Любой отказ, с любой стороны и в любом раунде, запускает паузу на семь дней. Неделю попросивший не может снова запросить это видео ни у кого из тех, у кого оно есть. Так торг не превращается в бесконечный пинг-понг, а «нет» не обойти, попросив копию у кого-то ещё. Сколько дней осталось, написано на кнопке запроса.
Если вы сами отозвали запрос, паузы не будет, но видео из него всё равно засчитаются в дневной лимит.
Что остаётся у вас
Полученную копию никто не может у вас забрать. Видео появится в папке «От других» вашей библиотеки и в разделе «От других авторов», который видят гости вашей полки. Его можно смотреть, скачивать в пределах тарифа, класть в категорию, скрывать от посетителей и менять дальше. Имя автора остаётся на нём везде, а места на полке оно не занимает: считаются только ваши собственные загрузки.
Копия пропадёт, только если автор удалит видео (тогда оно исчезнет со всех полок сразу) или если вы удалите её сами. Во втором случае уходит лишь ваша копия.
Если посреди торга что-то изменилось, например видео из текущего предложения удалили или его больше нет у одной из сторон, предложение аннулируется и запрос возвращается к тому, о чём просили изначально. Если и от этого ничего не осталось, запрос закрывается. Уведомление получат оба.
Обмен с теми, у кого нет аккаунта
Меняться с вами могут и люди без аккаунта, если им есть что дать взамен. Отправьте им ссылку на обмен («Скопировать ссылку → На обмен», работает, пока вы её не отзовёте) или просто дайте найти ваше приватное видео: там гость увидит кнопку «Предложить обмен». В обоих случаях он попадёт на страницу «Честный обмен» и загрузит до пяти своих видео. Пока вы оба не согласились, они хранятся закрытыми, смотреть и скачивать их никто не может. В ваших «Запросах» такая сделка подписана «Гость», и отвечаете вы на неё как на любую другую.
Сделка с гостем ждёт ответа 3 дня, и каждый новый шаг любой из сторон продлевает её ещё на 3 дня. Если сделку отклонили, отменили или она истекла, видео гостя сразу удаляются с серверов. Чтобы гости не предлагали обмен на странице ваших видео, выключите «Принимать обмены от гостей» в «Настройки → Профиль → Обмен». Ссылки на обмен при этом продолжат работать.
Как это устроено
Всё это одна машина состояний. Запрос либо открыт, либо закрыт, и закрыться он может пятью способами: завершён, отклонён, отозван, заблокирован или закрыт системой. Сделка с гостем может ещё и истечь. Сам запрос считается нулевым раундом: владелец отдаёт то, о чём просили, просящий отдаёт то, что приложил (чаще всего ничего), а «Поделиться бесплатно» значит, что владелец отдаёт своё и ничего не берёт взамен. Каждое встречное предложение открывает новый раунд, а прежнее помечается как заменённое. В самой записи запроса хранятся текущий раунд, предложение на столе и чей сейчас ход, поэтому всё, что ждёт вашего ответа, достаётся из базы одной выборкой по индексу.
Каждое действие выполняется в одной транзакции, которая первым делом блокирует строку запроса. Если двое нажали кнопки в одну и ту же секунду, действия выполнятся по очереди.
Принимая предложение, вы указываете именно то, которое видите. Если мгновением раньше пришло встречное, сервер ответит конфликтом, а страница перезагрузит ветку. Принять предложение, которого вы не видели, не получится.
В момент принятия всё проверяется заново: видео на месте и готовы, у каждой стороны есть то, что она отдаёт, никто никого не заблокировал. Затем обе стороны получают копии в той же транзакции.
Новые запросы одного человека создаются строго по одному, поэтому двойной клик или две открытые вкладки не создадут дубль и не проскочат мимо дневного лимита или паузы.
Уведомления и письма записываются в исходящий ящик (outbox) той же транзакцией, что и само действие, а фоновый обработчик рассылает их после её фиксации. Если действие сорвалось и откатилось, никто не узнает о том, чего не было. Если процесс перезапустился на полпути, ничего не потеряется.
Коротко обо всём этом — на страницах «Как это работает» и «Вопросы и ответы».