# US 2014/0195638 A1 · Synchronized content library

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2014/0195638 A1
- Document ID: US20140195638A1
- Status: Published application
- Kind: A1
- Application number: 13/847,294
- Filed: 2013-03-19
- Published: 2014-07-10
- Earliest claimed: 2013-01-07
- Assignees: Dropbox, Inc.
- Applicants: Dropbox, Inc.
- Inventors: Drew Houston
- Web page: https://patentgrep.com/patent/US20140195638A1

## CPC

- H04L 67/1095: Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
- H04L 67/06: specially adapted for file transfer, e.g. file transfer protocol [FTP]
- H04L 67/1097: for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

The disclosed technology addresses the need in the art for synchronizing a content library between a content management system and client devices. Each content item in a user's content library is stored on the content management system and a record of each change to the content library is recorded in a content journal. A client device transmits a synchronization request that a portion of the content journal representing unsynchronized changes be processed to update the content library on the client device. The synchronization request includes a content library identifier and a content journal number identifying the content entry in the content journal last processed by the client device. Synchronization commands are sent based on the content entries not processed by the client device. Updated synchronization data representing the processed content entries is sent to the client device after synchronization is completed.

## Claims

### Claim 1

A computer-implemented method comprising:
receiving, by a processor, a synchronization request from a client device, the synchronization request identifying:
a content journal of recorded changes made to a content library; and
a first content journal position identifying a first portion of the content journal representing a state of the content library known to the client device; and
transmitting to the client device by a processor:
a second portion of the content journal representing changes made to the content library that are unknown to the client device; and
a second content journal position identifying a third portion of the content journal representing an updated state of the content library known to the client device, wherein the third portion of the content journal includes the first portion of the content journal and the second portion of the content journal.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
determining, by a processor, the second portion of the content journal representing changes made to the content library that are unknown to the client device based on the first content journal position received from the client device.

### Claim 3 (depends on 1)

The method of claim 1, wherein the second content journal position is transmitted as an opaque data type.

### Claim 4 (depends on 3)

The method of claim 3, further comprising:
generating, by a processor, an opaque string identifying the second content journal position.

### Claim 5 (depends on 1)

The method of claim 1, further comprising:
determining, by a processor, the first content journal position from an opaque data string received from the client device.

### Claim 6 (depends on 1)

The method of claim 1, wherein the content journal includes a first content entry associated with a content item in the content library, the first content entry recording a change to the content library.

### Claim 7 (depends on 6)

The method of claim 6, further comprising:
creating, by a processor, a second content entry in the content journal that records a change to the content item, wherein the second content entry includes a latest flag set to indicate that no content entries associated with the content item have been created after the new content entry was created.

### Claim 8 (depends on 7)

The method of claim 7, further comprising:
changing, by a processor, a latest flag in the first content entry to indicate that the new content entry associated with the content item was created after the old content entry was created.

### Claim 9 (depends on 8)

The method of claim 8, wherein the first content entry and the second content entry are not part of the first portion of the content journal, the method further comprising:
excluding, by a processor, the first content entry from the second portion of the content journal based on the latest flag included in the first content entry.

### Claim 10 (depends on 9)

The method of claim 9, further comprising:
excluding, by a processor, the second content entry from the second portion of the content journal upon a determination that:
the change to the content item recorded by the second content entry is a deletion of the content item from the content library; and
the synchronization request is the first synchronization request received from the client device.

### Claim 11 (depends on 7)

The method of claim 7, further comprising:
deleting, by a processor, the first content entry upon creation of the second content entry.

### Claim 12

A system comprising:
a processor; and
a memory containing processor-executable instructions for causing the processor to:
receive a synchronization request from a client device, the synchronization request identifying:
a content journal of recorded changes made to a content library; and
a first content journal position identifying a first portion of the content journal representing a state of the content library known to the client device; and
transmit, to the client device:
a second portion of the content journal representing changes made to the content library that are unknown to the client device; and
a second content journal position identifying a third portion of the content journal representing an updated state of the content library known to the client device, wherein the third portion of the content journal includes the first portion of the content journal and the second portion of the content journal.

### Claim 13 (depends on 12)

The system of claim 12, wherein the instructions further cause the processor to:
determine the second portion of the content journal representing changes made to the content library that are unknown to the client device based on the first content journal position received from the client device.

### Claim 14 (depends on 12)

The system of claim 12, wherein the second content journal position is transmitted as an opaque data type.

### Claim 15 (depends on 14)

The system of claim 14, wherein the instructions further cause the processor to:
generate an opaque string identifying the second content journal position.

### Claim 16 (depends on 12)

The system of claim 12, wherein the instructions further cause the processor to:
determine the first content journal position from an opaque data string received from the client device.

### Claim 17 (depends on 12)

The system of claim 12, wherein the content journal includes a first content entry associated with a content item in the content library, the first content entry recording a change to the content library.

### Claim 18 (depends on 17)

The system of claim 17, wherein the instructions further cause the processor to:
create a second content entry in the content journal that records a change to the content item, wherein the second content entry includes a latest flag set to indicate that no content entries associated with the content item have been created after the new content entry was created.

### Claim 19 (depends on 18)

The system of claim 18, wherein the instructions further cause the processor to:
change a latest flag in the first content entry to indicate that the new content entry associated with the content item was created after the old content entry was created.

### Claim 20 (depends on 19)

The system of claim 19, wherein the first content entry and the second content entry are not part of the first portion of the content journal, and the instructions further cause the processor to:
exclude the first content entry from the second portion of the content journal based on the latest flag included in the first content entry.

### Claim 21 (depends on 20)

The system of claim 20, wherein the instructions further cause the processor to:
exclude the second content entry from the second portion of the content journal upon a determination that:
the change to the content item recorded by the second content entry is a deletion of the content item from the content library; and
the synchronization request is the first synchronization request received from the client device.

### Claim 22 (depends on 18)

The system of claim 18, wherein the instructions further cause the processor to:
delete the first content entry upon creation of the second content entry.

### Claim 23

A non-transitory computer-readable medium containing processor-executable instructions for causing a processor to:
receive a synchronization request from a client device, the synchronization request identifying:
a content journal of recorded changes made to a content library; and
a first content journal position identifying a first portion of the content journal representing a state of the content library known to the client device; and
transmit, to the client device:
a second portion of the content journal representing changes made to the content library that are unknown to the client device; and
a second content journal position identifying a third portion of the content journal representing an updated state of the content library known to the client device, wherein the third portion of the content journal includes the first portion of the content journal and the second portion of the content journal.

### Claim 24 (depends on 23)

The non-transitory computer-readable medium of claim 23, wherein the instructions further cause a processor to:
determine the second portion of the content journal representing changes made to the content library that are unknown to the client device based on the first content journal position received from the client device.

### Claim 25 (depends on 23)

The non-transitory computer-readable medium of claim 23, wherein the second content journal position is transmitted as an opaque data type.

### Claim 26 (depends on 25)

The non-transitory computer-readable medium of claim 25, wherein the instructions further cause a processor to:
generate an opaque string identifying the second content journal position.

### Claim 27 (depends on 23)

The non-transitory computer-readable medium of claim 23, wherein the instructions further cause a processor to:
determine the first content journal position from an opaque data string received from the client device.

### Claim 28 (depends on 23)

The non-transitory computer-readable medium of claim 23, wherein the content journal includes a first content entry associated with a content item in the content library, the first content entry recording a change to the content library.

### Claim 29 (depends on 28)

The non-transitory computer-readable medium of claim 28, wherein the instructions further cause a processor to:
create a second content entry in the content journal that records a change to the content item, wherein the second content entry includes a latest flag set to indicate that no content entries associated with the content item have been created after the new content entry was created.

### Claim 30 (depends on 29)

The non-transitory computer-readable medium of claim 29, wherein the instructions further cause a processor to:
change a latest flag in the first content entry to indicate that the new content entry associated with the content item was created after the old content entry was created.

### Claim 31 (depends on 30)

The non-transitory computer-readable medium of claim 30, wherein the first content entry and the second content entry are not part of the first portion of the content journal and the instructions further cause a processor to:
exclude the first content entry from the second portion of the content journal based on the latest flag included in the first content entry.

### Claim 32 (depends on 31)

The non-transitory computer-readable medium of claim 31, wherein the instructions further cause a processor to:
exclude the second content entry from the second portion of the content journal upon a determination that:
the change to the content item recorded by the second content entry is a deletion of the content item from the content library; and
the synchronization request is the first synchronization request received from the client device.

### Claim 33 (depends on 29)

The non-transitory computer-readable medium of claim 29, wherein the instructions further cause a processor to:
delete the first content entry upon creation of the second content entry.
