Phụ liệu đồng bộ hóa

Các trò chuyện đám cung cấp những khả năng mới cho mọi thiết bị. Bây giờ, nó là có thể đồng bộ hóa lịch sử giữa các thiết bị bằng cách chia sẻ kho lưu trữ liên quan. thiết bị đồng bộ hóa cần phải được định nghĩa lại để theo dõi những thay đổi đó.

Nhiều kịch bản được định nghĩa trong tài liệu thiết kế Swarm, tuy nhiên, điều này không có nghĩa là đồng bộ hóa các cuộc trò chuyện giữa các thiết bị cho cùng một người dùng. Một số kịch bản mới phải được viết.

Phương pháp cũ

Các thiết bị đồng bộ đã được thực hiện thông qua DHT. Bởi vì mỗi giá trị KHÔNG CHO vượt quá 64k, các cuộc trò chuyện không được gửi trong đồng bộ thiết bị, hoặc hồ sơ thành viên, bởi vì nó quá nặng. Đây là một vấn đề và CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO CHO

Trong phương pháp cũ, daemon đang nghe trên "inbox:DEVICE_ID" cho các giá trị DeviceSync chứa danh sách liên lạc để đồng bộ hóa (xem AccountManager::startSync() );

Ghi chú

The current DeviceSync value present on the DHT is deprecated with this draft.

Phương pháp mới

Since Jami has the ConnectionManager, using p2p socket is possible to perform sync quickly with big values (cause the socket is not limited in data).

Đây là kịch bản được sử dụng để đồng bộ hóa:

  1. When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.

  2. Các thiết bị khác (!A) sẽ phát hiện thông báo đó và sẽ yêu cầu thiết bị này thông qua ConnectionManager để mở một kênh mới có tên là "sync://DEVICE_ID_A". (Lưu ý: A sẽ nhận thông báo từ các thiết bị khác, vì vậy nó sẽ yêu cầu các kênh đồng bộ hóa cũng vậy).

  3. Ngay khi kênh này được mở, thiết bị yêu cầu kênh này sẽ gửi một giá trị DeviceSync (xem phần tiếp theo) chứa các cuộc trò chuyện và liên lạc được biết đến của nó.

  4. A sẽ kiểm tra giá trị DeviceSync và:

    • Xóa các liên lạc nếu nó phát hiện các liên lạc đã bị xóa

    • Thêm liên lạc nếu nó phát hiện thêm liên lạc

    • Xóa các cuộc trò chuyện nếu nó phát hiện các cuộc trò chuyện đã bị xóa

    • Thêm các cuộc trò chuyện nếu nó phát hiện thêm các cuộc trò chuyện

    • Xóa yêu cầu của cuộc trò chuyện nếu yêu cầu được chấp nhận (nay đang trong cuộc trò chuyện) / từ chối

    • Thêm yêu cầu của cuộc trò chuyện nếu phát hiện

Ghi chú

If A detects new conversations, it will asks the device which announced that conversation to clone the repository through a git channel (so like described in Swarm chat design).

Truy cập thiết bị

Giá trị này là một JSON chứa:

{
    "contacts": [/* Contacts (TODO) */],
    "conversation": [
        { "id":"convID", "created":TIMESTAMP, "removed":OPTIONAL_TIMESTAMP },
        { "id":"convID2", "created":TIMESTAMP2, "removed":OPTIONAL_TIMESTAMP2 } /* ... */
    ],
    "conversationsRequests": [
        { "id":"convID", "received":TIMESTAMP, "declined":OPTIONAL_TIMESTAMP,
          "members":[], "metadatas:[] },
        { "id":"convID2", "received":TIMESTAMP2, "declined":OPTIONAL_TIMESTAMP2
          "members":[], "metadatas:[] } /* ... */
    ],
}

Câu chuyện người dùng

Đồng bộ khi thêm thiết bị

  • Alice tạo ra một cuộc trò chuyện

  • Alice thêm một số tin nhắn

  • Alice thêm một thiết bị khác

  • Thiết bị khác sẽ nhận và đồng bộ hóa cuộc trò chuyện đã tạo trước đó

Đồng bộ hóa khi kết nối thiết bị

  • Alice tạo ra một cuộc trò chuyện

  • Alice thêm một số tin nhắn

  • Alice kết nối một thiết bị khác

  • Thiết bị khác sẽ nhận và đồng bộ hóa cuộc trò chuyện đã tạo trước đó

Truyền hợp giữa nhiều thiết bị

  • Alice có 2 thiết bị.

  • Alice tạo ra một cuộc trò chuyện

  • Thiết bị khác nên nhận và đồng bộ hóa cuộc trò chuyện được tạo trên một trong các thiết bị

Đồng bộ hóa để phát hiện các yêu cầu mới

  • Alice nhận được yêu cầu để trò chuyện

  • Alice thêm một thiết bị mới

  • Thiết bị khác nên lấy lại các yêu cầu từ thiết bị A

Đồng bộ hóa cho các yêu cầu được chấp nhận

  • Alice có 2 thiết bị.

  • Alice chấp nhận yêu cầu của một cuộc trò chuyện

  • Thiết bị khác sẽ phát hiện yêu cầu được chấp nhận

Đồng bộ hóa cho yêu cầu từ chối

  • Alice có 2 thiết bị.

  • Alice từ chối yêu cầu để nói chuyện

  • Thiết bị khác nên phát hiện yêu cầu từ chối

Thực hiện hiện hiện tại

gerrit#15584 thực hiện trang này