HK1138079B - Synchronization methods and systems - Google Patents
Synchronization methods and systems Download PDFInfo
- Publication number
- HK1138079B HK1138079B HK10104480.7A HK10104480A HK1138079B HK 1138079 B HK1138079 B HK 1138079B HK 10104480 A HK10104480 A HK 10104480A HK 1138079 B HK1138079 B HK 1138079B
- Authority
- HK
- Hong Kong
- Prior art keywords
- synchronization
- host
- data
- data class
- synchronized
- Prior art date
Links
Description
The various examples and embodiments described herein relate to systems and methods for synchronizing data between two or more data processing systems such as a desktop computer system and a handheld computer system. The invention particularly relates to a machine implemented method for synchronization between a device and a host, wherein the device and the host are physically separated and a link software component maintains an authenticated connection link between the device and the host, thereby allowing passing of commands and data between the device and the host during the synchronization process. The invention also relates to a computer readable storage medium containing executable program instructions, and a device.
Modern data processing systems, such as a general purpose computer, a handheld computer, a cellular telephone, media players, etc. have been reduced in size to the point that they can often be readily carried around by a user. Furthermore, these devices are powerful enough that they can provide substantial computing power to allow a user to maintain contact information, maintain calendar information, provide email functionality, and even provide web browsing. These devices also may include support for a task or a To Do list or database and other sources of data for a user. An example of a small handheld computer is the Palm Treo, and other examples of handheld computers include those which run a Windows CE operating system.
These handheld computers typically allow a user to synchronize their data between the handheld computer and another computer, such as a user's desktop computer, such that both computers maintain the same set of information, such as the same calendar for the user, thereby allowing the user to view their calendar on either the desktop computer or the handheld computer. The synchronization is typically performed by coupling together the host computer with a handheld computer through a mechanical and electrical connection provided by a dock. Figure 1 shows an example in the prior art of a handheld computer being coupled mechanically and electrically to a host computer through the dock 26. The system 10 includes the host computer 12 and the handheld computer 14. Synchronization software 16, running on the host, performs the synchronization between the respective databases, such as the contacts database 18 which is synchronized with the handheld contacts database 20. Furthermore, the synchronization software 16 synchronizes the calendar database 22 on the host computer with the handheld's calendar database 24. Synchronization software 16 on the host computer can synchronize each of the databases separately through the use of "conduits." The synchronization software 16 opens and maintains a data connection link through a conduit, and each conduit must implement all the software needed to make and maintain the link in order to synchronize a particular database. The handheld computer merely acts as a storage device by vending its storage memory, such as a hard drive or a flash memory, to the host computer which, through the synchronization software 16, opens each database to perform the synchronization. There is often no active agent on the handheld computer 14 which participates in the synchronization process; in other words, the synchronization software 16 on the host computer 12 performs the synchronization operations for both sets of databases on both devices. When there is a synchronization agent on the handheld computer, it does not have the facilities and architecture described in this disclosure, including, for example, providing a plug-in model on both the handheld and the host for different data classes, and does not allow applications on the handheld computer to run concurrently with the synchronization process, and various other features described herein. There is no use of authentication and encryption using self-signed certificates with private key/public key cryptography. Certain existing systems allow for limited synchronization of emails between a host and a handheld computer, but there is no synchronization of changes in email account setup information. Certain systems also allow for the synchronization of bookmarks for web browsing between a host and a handheld computer. These systems allow for the synchronization of a set of bookmarks having the same format in both the handheld and the host. Certain synchronization systems are described under the name "SyncML" and further information about these systems can be found at www.openmobilealliance.org and at www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html.
From "SyncML Representation Protocol, version 1.0", SYNCML REPRESENTATION PROTOCOL, XX, XX, 7 December 2000 (2000-12-07), pages 1-104, XP002217062 it is known that SyncML is a specification for a common data synchronization framework and XML-based format, or representation protocol, for synchronizing data on network devices. SyncML is designated fro use between mobile devices that are intermittently connected to the network and network services that are continuously available on the network. SyncML can also be used for peer-to-peer data synchronization. SyncML is specifically designed to handle the case where the network services and the mobile devices store the data they are synchronizing in different formats or use different software systems.
"SyncML Sync Protocol, version 1", SYNCML SYNC PROTOCOL, XX, XX, no. version 1.0, 7 December 2000 (2000-12-07), pages 1-60, XP002955174, further defines a synchronization protocol between a SyncML client and servber in form of message sequence charts.
"SyncML Device Information DTD", 7 December 2000 (2000-12-07), XP002665278,
URL:http://xml.coverpages.org/symbol/synccml_devinf_v10_2001207.pdf [retreived on 2011-12-08] defines the Document Type Definition (DTD) for the XML representation of the Device Information document. The document describes the capabilities of the device and is used in SyncML data synchronization protocol operations.
Wikipedia : "Modul (Software), 20 October 2006 (2006-10-30), URL: http://de.wikipedia.org/w/index.php?title=Module_(Software)&oldid=23206899 [retrieved on 2014-05-09] gives some background information about software modules being self-contained parts of a software program consisting of a sequence of instructions and data structures.
Olaf Zwitscher: "Software-Komponenten im Uberblick", 2005, W2L-Verlag, Nochum, ISBN: 3-937137-60-2, pages 20-26, notes in chapter 2.2 about the term software component that there are various definitions of different scope. One problem to be solved by software components is to compose software of smaller, independent and exchangeable modules so that in case of an error or in case the component is out-dated to replace just this module.
This description relates to systems, methods and computer readable media which allow for synchronization tasks and non-synchronization tasks to be executed concurrently.
The problem that both of the device and the host are able to have both non-synchronization processes and synchronization processes occurring concurrently is solved by synchronization method steps of claim1. A computer readable storage medium contain executable program instructions when executed is claimed by independent claim 5. A data processing system is claimed by independent claim 9. Dependent claims refer to further aspects and embodiments of the invention.
In one embodiment, a method includes executing at least one non-synchronization processing thread, such as at least one user-level non-synchronization processing thread, and executing at least one synchronization processing thread concurrently with the executing of the at least one non-synchronization processing thread. The execution of at least one non-synchronization processing thread may include operations to access a first database which is synchronized by the at least one synchronization processing thread during a synchronization operation between the first database on a first data processing system and a second database on a second data processing system.
In at least certain embodiments, a method as described herein allows a user to operate both a host and a device while the two systems are performing synchronization operations. Hence, for example, a user may manipulate or view a calendar while a synchronization operation, which synchronizes structured data from, for example, the calendar or other databases such as a contact database, is being performed.
In at least certain embodiments, the at least one synchronization processing thread may be provided by a synchronization software component which is configured to cause retrieval and storage of structured data from a first store and wherein the at least one user-level non-synchronization processing thread is provided by a user application which provides a user interface to allow a user to access and edit the structured data in the first store. These different threads may be in different address spaces. In at least certain embodiments, the synchronization software component acquires a lock on the first store in order to prevent the user application from affecting the first store while a synchronization process is occurring. In at least certain embodiments, the synchronization software component attempts to acquire the lock, and if it fails to do so, the synchronization software component sends a message to the user application to obtain the lock on the first store. The lock, in certain embodiments, may be the FLOCK Unix command. The synchronization software component may cancel synchronization for at least one data class if the user application fails to release the lock on the first store after a period of time subsequent to sending of the message.
The present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings in which like references indicate similar elements.
- Figure 1 shows in block diagram form an example of a prior art synchronization system.
- Figure 2 shows an example of a data processing system, such as a host computer.
- Figure 3 shows an example of a data processing system, such as a handheld computer or other type of data processing system.
- Figure 4 shows an example of a software architecture for implementing synchronization between, for example, a device and a host.
- Figure 5 is a flow chart showing events in time between a device and a host according to one example of a synchronization process.
- Figures 6A and 6B are flow charts which illustrate a synchronization process on, for example, a host.
- Figures 7A and 7B are flow charts illustrating a synchronization process on, for example, a device.
- Figures 8A and 8B are flow charts illustrating the use of version identifiers according to at least certain examples of the inventions.
- Figures 9A and 9B illustrate two examples of data formats for two different types of data classes; in particular, Figure 9A shows a data format for a contacts data class which contains structured data, and Figure 9B shows a data format for a calendar data class.
- Figure 10 shows an example of a software architecture having multiple layers as described herein.
- Figure 11 is a flow chart illustrating an embodiment of a method which may be performed with the software architecture shown in Figure 10.
- Figure 12 illustrates the result of a two-way authentication process which may be used in at least certain embodiments described herein.
- Figures 13A and 13B are flowcharts which illustrate one method in which synchronization and non-synchronization operations may be performed concurrently by one or both of a host and a device during a synchronization process.
- Figures 14A, 14B, 14C, and 14D illustrate various possible formats for bookmarks for different types of web browsers.
- Figures 15A, 15B, 15C, and 15D illustrate a modified bookmark structure which occurs after synchronization through, in at least one example, an intermediate or canonical format for a bookmark data structure.
- Figure 16A shows an example of mapping relationships between a web browser on a host and a web browser on a device, wherein this mapping relationship also shows the mapping between the data structure of the bookmarks on the host and the device relative to an intermediate format.
- Figure 16B is a flow chart illustrating a method according to one example described herein.
- Figure 16C is a flow chart illustrating another example relating to the synchronization of bookmarks.
- Figures 16D, 16E, and 16F provide examples of user interfaces for allowing preference settings with respect to the synchronization of bookmarks between two data processing systems, such as between a device and a host.
- Figure 17 is a flow chart illustrating a method for synchronization of email account or other electronic message account setup information.
- Figure 18 shows a memory of a device and a memory of a host which store email account setup information as shown in the figure.
- Figure 19 is a flow chart which illustrates one method for synchronizing notes which may include embedded To Do's in at least certain examples described herein.
- Figure 20 is a flow chart illustrating an example of a method for creating a To Do within a note to create an embedded To Do.
- Figure 21 shows an example of a method for using a filter to decide whether or not a note is to be synchronized.
Various embodiments and aspects of the inventions will be described with reference to details discussed below, and the accompanying drawings will illustrate the various embodiments. The following description and drawings are illustrative of the invention and are not to be construed as limiting the invention. Numerous specific details are described to provide a through understanding of various embodiments of the present invention. However, in certain instances, well-known or conventional details are not described in order to provide a concise discussion of embodiments of the present inventions.
The present invention can relate to an apparatus for performing one or more of the operations described herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a machine (e.g. computer) readable storage medium, such as, but is not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), erasable programmable ROMs (EPROMs), electrically erasable programmable ROMs (EEPROMs), magnetic or optical cards, or any type of media suitable for storing electronic instructions, and each coupled to a bus.
A machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine (e.g., a computer). For example, a machine-readable medium includes read only memory ("ROM"); random access memory ("RAM"); magnetic disk storage media; optical storage media; flash memory devices; electrical, optical, acoustical or other form of propagated signals (e.g., carrier waves, infrared signals, digital signals, etc.); etc.
Prior to describing the various different embodiments in connection with synchronization architectures, systems, methods and computer readable media, a brief discussion will be provided in connection with the data processing systems which may be part of the synchronization process. The term "host" and the term "device" are intended to refer generally to data processing systems rather than specifically to a particular form factor for the host versus a form factor for the device. Figures 2 and 3 show examples of two different data processing systems, where the system shown in Figure 2 may be referred to as a host while the system shown in Figure 3 may be referred to as a device, although the system shown in Figure 2 may be referred to as a device while the system shown in Figure 3 may be referred to as a host.
As shown in Figure 2 , the computer system 45 includes a bus 51 which is coupled to one or more microprocessors which form a processing system 47. The bus 51 is also coupled to memory 49 and to a non-volatile memory 50, which may be a magnetic hard drive in certain embodiments, or flash memory in other embodiments. The bus is also coupled to a display controller and display 52 and one or more input/output (I/O) devices 53. Further, the bus is coupled to an optional dock 54 and to one or more wireless transceivers 55, which may be a Bluetooth transceiver or a WiFi transceiver or an infrared transceiver. It will be appreciated that the wireless transceivers 55 are optional as shown in Figure 2 . The processing system 47 may optionally be coupled to optional cache 48. The processing system 47 may include one or more microprocessors, such as a microprocessor from Intel or IBM. The bus 51 interconnects these various components together in a manner which is known in the art. Typically, the input/output devices 53 are coupled to the system through input/output controllers. The memory 49 may be implemented as dynamic RAM (DRAM) which provides fast access to data but requires power continually in order to refresh or maintain the data in the memory. The non-volatile memory 50 may be a magnetic hard drive or other non-volatile memory which retains data even after power is removed from the system. While Figure 2 shows that the non-volatile memory 50 is a local device coupled directly to the rest of the components in the data processing system, it will be appreciated that other embodiments may utilize a non-volatile memory which is remote from a system, such as a network storage device, which is coupled to the data processing system through a network interface, such as a modem or an Ethernet interface. The bus 51, as is well known in the art, may include one or more buses connected to each other through various bridges, controllers, and/or adapters as is known in the art. In one embodiment, the I/O controller 53 may include a USB adapter for controlling USB peripherals and an IEEE-1394 controller for IEEE-1394 compliant peripherals.
It will be apparent from this description that aspects of the inventions may be embodied, at least in part, in software. That is, the techniques may be carried out in a computer system or other data processing system in response to its processor or processing system executing sequences of instructions contained in a memory, such as memory 49 or non-volatile memory 50 or the memory 63 shown in Figure 3 . In various embodiments, hardwired circuitry may be used in combination with the software instructions to implement the present inventions. Thus, the techniques are not limited to any specific combination of hardware circuitry and software nor to any particular source for the instructions executed by the data processing system. In addition, throughout this description, various functions and operations are described as being performed by or caused by software code to simplify description. However, those skilled in the art will recognize that what is meant by such expressions is that the functions result from execution of the code by a processing system.
The dock 54 and/or the wireless transceivers 55 provide a physical interface for coupling the data processing system shown in Figure 2 to another data processing system, such as the data processing system shown in Figure 3 , or to another data processing system which resembles the system shown in Figure 2 . The dock 54 may be similar to a dock in the prior art, such as the dock 26, such that it provides both a mechanical and electrical connection between one data processing system and another data processing system to allow a synchronization process to be performed between the two systems. In other embodiments, the wireless transceivers 55 may provide an electrical connection between the two systems for the purpose of a synchronization process without providing a mechanical connection between the two systems.
At least certain embodiments of the inventions may be part of a digital media player, such as a portable music and/or video media player, which may include a media processing system to present the media, a storage device to store the media and may further include a radio frequency (RF) transceiver (e.g., an RF transceiver for a cellular telephone) coupled with an antenna system and the media processing system. In certain embodiments, media stored on a remote storage device may be transmitted to the media player through the RF transceiver. The media may be, for example, one or more of music or other audio, still pictures, or motion pictures.
The portable media player may include a media selection device, such as a click wheel input device on an iPod® or iPod Nano® media player from Apple Computer, Inc. of Cupertino, CA, a touch screen input device, pushbutton device, movable pointing input device or other input device. The media selection device may be used to select the media stored on the storage device and/or the remote storage device. The portable media player may, in at least certain embodiments, include a display device which is coupled to the media processing system to display titles or other indicators of media being selected through the input device and being presented, either through a speaker or earphone(s), or on the display device, or on both display device and a speaker or earphone(s). Examples of a portable media player are described in published U.S. patent application numbers 2003/0095096 and 2004/0224638 , both of which are incorporated herein by reference.
In certain embodiments, the data processing system 60 may be implemented in a small form factor which resembles a handheld computer having a tablet-like input device which may be a multi-touch input panel device which is integrated with a liquid crystal display. Examples of such devices are provided in U.S. Patent Application No. 11/586,862, filed October 24, 2006 , and entitled "AUTOMATED RESPONSE TO AND SENSING OF USER ACTIVITY IN PORTABLE DEVICES," which is assigned to the same assignee as the instant application. This foregoing application is hereby incorporated herein by reference.
In the following description, various software components which are used for both synchronization and non-synchronization processing operations are described. It will be understood that in at least certain embodiments, these various software components may be stored in the memory 49 and/or memory 50 shown in Figure 2 for one type of data processing system, and in the case of a system such as that shown in Figure 3 , these various different software components may be stored in the memory 63 which may include volatile memory as well as non-volatile memory, such as flash memory or a magnetic hard drive.
The software architecture shown in Figure 4 includes a plurality of software components on the device side 101 and a plurality of software components on the host side 103. There is, in addition, device link software 107 which in effect bridges the connection between the two software components which are separated by the line 105 which represents the physical separation between the device and the host. It will be appreciated that the software components on each side are stored in respective memory on each data processing system. The device includes one or more user application programs which are used to access and edit structured data in a particular data class. Figure 4 shows examples of three such user application programs. In particular, calendar application program 125 is used to access and edit calendar data in the calendar store database 119. Similarly, the contacts application program is used by a user to access and edit contacts or address book information stored in the contacts store database 121. Similarly, the other application programs 129, which may include a notes application program, widget programs for presenting widgets, a web browser having bookmarks, an email program which includes email account setup information, a To Do list program, and possibly other programs which have structured data, are represented by the other application programs 129 which have access to and provide the ability to edit information in other stored databases 123. These user application programs, such as application programs 125 and 127, are separate from the synchronization software components which are responsible for synchronizing structured data in each of the different classes. These software components are shown in Figure 4 as data sources 113, 115, and 117. In particular, the calendar data source 113 is responsible for causing the retrieval and storage of the structured data from its particular data class, which is the calendar data class, during a synchronization process. Similarly, the contacts data source 115 is responsible for causing the retrieval and storage of structured data in the contacts stored database 121, which may represent the user's address book or other contact information database. Similarly, other data sources, such as other data sources 117, are responsible for causing the retrieval and storage of structured data from other structured data stores. This may include databases for notes, emails, bookmarks, and/or To Do lists and other databases or stores of data. The data sources may also perform other functions, such as formatting the data either for storage on the device or for transmission to the host, transmitting and/or receiving version identifiers with respect to each data source relative to each data class handler for a particular data class, sending device and host anchors as described herein in order to ensure that synchronization operations are performed as atomic transactions to ensure that the synchronization is either completed or not, allowing the system to roll back to a prior state if it is not completed (in order to ensure that synchronization can be performed even if the connection is interrupted). Further, the data sources may also remap unique identification values for records on the device to records on the host so that the device can maintain a unique record regardless of a record ID (identifier) provided by a host. Each data source is coupled through software based messages to a sync agent software component 109 which is responsible for, at least in part, maintaining a data connection between the device and the host through a device link software stack 107, an example of which is shown in Figure 10 and described herein. The sync agent 109 provides services, through software based messages, such as calls or APIs (Application Program Interface), to various data sources. In at least one embodiment, the sync agent 109 may implement or handle or determine the order of synchronization of the various data classes by specifying directly or indirectly the order. For example, the sync agent 109 may determine and specify that the calendar data class is synchronized first and then the contacts data class is synchronized next and then the To Do list data class is synchronized next, etc. The sync agent 109, in another embodiment, may receive the order through one or more commands or messages from the sync client and, in turn, may implement that order by sending messages to the data sources in that order. The sync agent 109 also alerts a data source if a link fails when synchronization is occurring, and it will tell the data source to roll back to a prior synchronization state if the link fails before synchronization is completed. Further, the sync agent may ask a data source to commit changes if the synchronization has been successful, which causes the data source to write the data to a particular store for the particular data class.
The software architecture of Figure 4 provides abstractions that allow plugging in of many different data classes; including "after market" plug-ins by third party suppliers in at least certain embodiments. In effect, this architecture creates a "sync client" which is split into two pieces (one on the host in the form of synch client 111 and one on the device in the form of sync agent 109) and uses a sync server, in the form of sync services 141, which operates with both the synch client 111 and the sync agent 109. The device, in an embodiment in this architecture, does not interact directly with the sync server (e.g. sync services 141) but instead exchanges messages with the sync client 111 which interacts (through software based messages) with the sync server. In one embodiment, the Sync Server manages storing, comparing (mingling), and differencing data from various clients (applications, other servers, and Sync Client for a device). The Sync Client, in one embodiment, manages the connection (with authentication and cryptography) to the device, transferring and modifying data between the device and the computer, as well as handling sync anchors, control flow to arbitrate between the sync server and the device, checking versioning of data classes, and providing a plug-in model to optimize and organize handling of different data classes (DataClassHandlers). The Sync Client, in one embodiment, also does all the filtering (only syncing contacts in specific groups, or events in specific calendars, events within a date range, a subset of mail accounts, and notes or note attachments with a size threshold). In one embodiment, SyncAgent has a plug-in model for Data Sources, and runs as a separate process from applications on the device which manage/display the data, but can interact with them in parallel (with locking, or concurrent access), and notifies the applications when data changes.
The device link software component 107 includes a plurality of software components, such as the layers of software components shown in Figure 10 , and the device link 107 maintains, in at least one embodiment, an authenticated connection link between the device and the host, thereby allowing the passing of commands and data between the two data processing systems during the synchronization process. In addition, as shown in Figure 10 , the device link software components 107 also provide for, in at least certain embodiments, the connection to be used for additional applications to transfer other information back and forth between the device and the host including, but not limited to, a backup application or a configuration application and diagnostic tools. Further details with respect to the device link 107 are provided below in connection with Figures 10 , 11 , and 12 . In at least certain embodiments, at least a portion of the device link software stack may reside on both the device and the host memory. In preferred embodiments, a portion of the device link software stack resides and executes on both the device and the host.
The device link software component 107 provides for a communication link between the sync agent 109 executing on the device 101 and the sync client 111 executing on the host 103. The device link 107 passes software based messages, such as calls and responses to calls, between software components as well as the structured data prepared in a format for synchronization in at least certain embodiments. The sync client 111 operates, at least in part, to maintain an authenticated connection between the host and device in at least certain embodiments. Moreover, the sync client, in one embodiment, may send device and host anchors as described herein, and may cause the saving of next device and next host anchors in response to a successful synchronization for a particular data class as described further herein. In one embodiment, the sync client will determine the synchronization mode as described further below and will also invoke the correct data class handler for a particular data class to manage the handling of data during the synchronization session for that data class, such as determining the entity types which are to be synchronized for that data class, transforming records to and from the device, determining the order to pull changes from the sync server (sync services) based on entity type, and to perform filtering on records pulled from the sync server (sync services). The sync client 111 is coupled to a data class handler for each data class which is supported by the host. In the example shown in Figure 4 , there is a data class handler for the calendar data class 135, and a data class handler for a contacts data class 137, as well as data class handlers for one or more other data classes 139. Each of these data class handlers is dedicated to providing synchronization services during a synchronization process for a particular data class. For example, when synchronizing calendar data, the data class handler will format calendar data obtained from a calendar data store 143A so that such data may be transmitted to the device for storage on the calendar store 119. Similarly, the data class handler may format data received from the device so that it may be stored in a database on the host. For example, the data class handler may perform, in at least certain embodiments, reformatting operations on data received from the device 101. In at least certain embodiments, the data class handlers for each data class may perform one or more functions for that particular data class. For example, the data class handler may cause the retrieval and storage of structured data from the store for that data class. Furthermore, the data class handler may format data for the device, and may filter structured data when synchronizing data. This filtering may be based upon a group, such as a personal group or business group for a contacts data store or may be based on size, such as for a notes data store as described further below. Moreover, a data class handler may send its version identifier to its corresponding data source for a particular data type on the device and may receive an identifier of the version of the data source for that particular data class. Moreover, a data class handler may create a new filter based on new records sent to the device or received from the device or perform operations with respect to modifying filters, such as a filter based on group or size or other parameters, as a result of the synchronization process, and SyncClient will save the modified filters. Moreover, SyncClient may cause the saving of remapped identifiers obtained from the device for records on the device as described herein. It will be understood that a data class handler for a particular class will typically be executing at the same time as a data source of the same class on the device. These two software components, together with a sync agent on the device and the sync client on the host, form active agents on both data processing systems which are active in executing software components as part of the synchronization process. In one embodiment, the data class handlers may not directly cause the storage and retrieval of structured data from data stores on the host. They transmit messages to the sync client 111 which in turn requests the sync services 141 which may in turn directly or indirectly cause retrieval and storage from the calendar stored database 143A or the contacts stored database 145A or other stored databases 147A. In another embodiment, Sync Client drives the saving and retrieval process, and gets data from sync services, and calls out to functions in the Data Class handler. The Sync Client asks the data class handler what entity types to synchronize with sync services. When it gets records it asks the data class handler to transform them for the device (note that the data class handler might return the same record untransformed in many cases). The Sync Client wires the Data Class Handler directly to the Sync Server (sync services) for purposes of filtering, so that the sync server directly asks the DataClassHandler whether or not to filter a record, and then the Sync Client asks the Data Class Handler (both after it has finished pushing records from the device and after it has pulled records from sync services for the device). The Data Class Handler is "responsive;" it responds to requests from the Sync Client (and in the case of filtering, the Sync Server), and it is the Sync Client that is the active agency responsible for controlling the sync operation on the host side.
The host may also include user application programs, such as a calendar application program 143, a contacts application program 145, and other application programs 147 which are used by a user to access and edit corresponding data classes having structured data stored in a corresponding stored database, such as a calendar stored database 143A. The architecture shown in Figure 4 shows the data stores on the host side as being coupled directly to the application program; it will be appreciated that there is typically a file management system on a host data processing system which manages each database and which receives calls or other requests from software components such as the application programs 143 or 145 or other components, such as data class handlers or the sync services 141 in order to affect reading and writing of data to a particular stored database.
The following tables set out the functions of each of the following software components shown in Figure 4 : (1) a data source component; (2) sync agent component; (3) sync client component; and (4) data class handler component.
| Open data source (database or files used to house data) |
| Provide version, determine if can sync if Sync Client (Data Class handler) |
| version is smaller |
| Manage Computer (host) and Device Sync Anchors on device side, determine if can fast or slow sync |
| Coordinate with applications using data from data source |
| Clear all data if being reset |
| Send changed/new/deleted records to Sync Client |
| Coordinate with application(s) for its data class to keep track of which records have changed since last synchronization (Change History) |
| Process and Commit data from Sync Client side |
| Remap record identifiers for new records from Sync Client side |
| Manage connection from the device to the Sync Client on computer side |
| Manage control flow/state machine for synchronization operation on device side |
| Interface to DeviceLink for connection layer on device (which also does the authentication and cryptography) |
| Set up the correct Data Source for a given Data Class |
| Provide process infrastructure for synchronization |
| Launch on demand so Sync Client can connect to device to synchronize |
| Cleanly handle connection loss or cancel request from Computer (host) side |
| Handle cancel notification on device side (i.e. from a user interface on the device) to stop synchronizing at user request |
| Manage connection to Sync Server (sync services) on computer (host), and Sync Agent on device |
| Manage control flow/state machine for synchronization operation on computer (host) side |
| Manage Computer and Device Sync Anchors on computer (host) side |
| Interface to DeviceLink for connection layer on computer (host) (which also does the authentication and cryptography) |
| Set up the correct Data Class Handler and load filtering information for a given Data Class |
| Interface to Sync Server (sync services) - manage sync type (fast, slow, reset) and synchronization operation with Sync Server (sync services) |
| Get changes from Sync Server (sync services) to send to Device |
| Tell Sync Server about remapped record identifiers from Sync Client (Data Source) |
| Cleanly handle connection loss or cancel request from device side |
| Handle cancel notification on computer (host) side (i.e. from a user interface on the computer (host)) to stop synchronizing at user request |
| Provide version, determine if can synchronize if Sync Agent (Data Source) version is smaller (older) |
| Specify which data types to synchronize |
| Provide Filtering on all records |
| Specify which order to pull different record types from Sync Server (sync services) (to make device side processing of added/changed records more efficient) |
| Transform records (e.g. from one format to another format) pulled from Sync Services on computer (Sync Server) to be sent to the device (to optimize transfer and work for device) |
| Transform records (e.g. from one format to another format) from device (Sync |
| Agent/Data Source) to be pushed into SyncServices (to optimize transfer and work for device) |
After operation 189, the host, in operation 191, sends a next host anchor and the previous device anchor to the device. The device, in operation 193, sends its next device anchor and the previous host anchor. These anchors are used, as is known in the art, to attempt to make the synchronization operations essentially atomic transactions such that a synchronization is either completed or not and each of the host and the device can recognize that a prior synchronization is incomplete and hence the data was rolled back to its prior state without making changes which would have occurred if a particular synchronization session had been completed. In each of operations 191 and 193, the host and the device respectively may also transmit to the other system a synchronization type, which indicates a particular type of synchronization which the sending system thinks it needs to perform in the current synchronization operation. There are typically at least three different types of synchronization operations: (1) a complete synchronization, which typically occurs the first time that a host and a device are synchronized; (2) a changes synchronization, which merely synchronizes the changes that occurred since the last synchronization; and (3) a reset operation in which data on one or more system is reset to a default or factory setting, which typically means all user data is erased or removed from the system which has been reset. The type of synchronization requested by each device is considered in a synchronization type negotiation. Typically, both systems will send the same synchronization type (e.g. a changes type), but in some instances, one system may request a complete or slow synchronization while another will request a changes (fast) synchronization, and in such instance, in at least one example, the two systems will negotiate to select the "worst" synchronization operation in the sense of time. Since the complete synchronization takes longer than a changes synchronization, in most cases, the complete synchronization (a "slow" synchronization) will be selected over a fast synchronization (a "changes" synchronization). The negotiation of the type of synchronization is performed with knowledge of the status of the anchors. As is known in the art, a comparison of the anchors will reveal whether the prior synchronization was completed or not. If it was interrupted, then the previous host anchor from the device will not match the host's version of its previous host anchor. Similarly, if the prior synchronization was interrupted or otherwise incomplete, the previous device anchor from the host will not match the previous device anchor at the device when the comparison is performed at the device. The fact that there is a mismatch reveals a problem with the prior synchronization which will cause either the host or the device to request a complete (slow) synchronization type. An anchor may be a value which is used by one or both systems in a synchronization process to determine the state of synchronization of the systems. Typically, the fact that anchors match indicates that the last synchronization was successfully completed.
After the synchronization type has been negotiated, then in operation 195 a synchronization begins by the host requesting either the changes if it is a fast sync or all records if it is a full or complete sync. Then in operation 197, the device sends the changes, or all records depending on the type of synchronization, to the host. The host acknowledges in 199 the transmission transactions resulting from operation 197. These acknowledgements may be performed at one or more levels, including at a packet level or a record level, etc. A final acknowledgement from the host will cause the device, in operation 201, to save its next device anchor at the device. As is known in the art, at the end of a successful synchronization, all "next" anchors, such as a next device anchor which has been saved, will become a previous device anchor for use in a future synchronization. In at least one example, the sync agent maintains for each class the previous host anchor as well as the previous device anchor and will create the next device anchor for a particular data class during a synchronization operation. Similarly, in at least one example, the sync client will maintain for each class a previous host anchor and a previous device anchor and may create the next host anchor for use in the processes shown in Figures 5 , 6A , 6B , 7A , and 7B . The device may acknowledge after operation 201 that it has saved its next device anchor in operation 201 which will cause the host in operation 203 to save the next device anchor at the host and to commit to a data store the changes or all records for the particular data class. This may occur by having the data class handler for a particular class request sync services 141, or in other examples, a file system software component, to make changes to the database or store for the structured data of the particular data class being synchronized. Then in operation 205, the device indicates that it is ready to pull. This indicates to the host that the device is ready to accept either changes or all records depending on the synchronization type which was negotiated. In response, the host in operation 207 sends changes or all records, depending on the synchronization type, and the device acknowledges (operation 211) these data transmissions from operation 207 at one or more levels of granularity as indicated above. Then, in one example, in operation 211, the device sends a map which indicates the relationship between identifiers (ID) for each record maintained at the host relative to a corresponding ID maintained at the device for the same record; in an alternative example, the device may indicate the map information when it acknowledges the records received from the host computer rather than as a separate message in the protocol. It will be appreciated that in alternative implementations, the same identifier may be used, but at least in certain examples, it may be desirable to have a distinct and separate ID maintained by the device for each record which may be different than an ID maintained for that same record on the host. Hence, a map or a relationship between the corresponding IDs may be maintained. In this case, the map is created by the device and transmitted to the host. In response to receiving the record ID map, the host provisionally stores the map indicating the relationships between a device ID for a record and the host ID for the same record. After all records have been sent to the device, and acknowledged from the device (and the record mappings have been provisionally stored on the host), the host transmits a commit request to the device in operation 213 which will cause the device to save either the changes or all records, depending on the synchronization type, from the current synchronization session to its data store for the current data class. Also, in operation 215, the device will save the next host anchor. Then in operation 217, the device responds with an acknowledgement signal which will cause the host in operation 219 to commit the pulled records and to save the next host anchor. The committing of pulled records also commits the provisionally stored map indicating the relationship between a device ID for a record and the host ID for the same record.
The method shown in Figure 5 is repeated for each data class which is to be synchronized. When all data classes have been synchronized, then the host and the device can disconnect.
It will be appreciated that the method shown in Figure 5 may be implemented differently in alternative examples; for example, certain operations may be omitted and the order of those operations may be different. For example, the transmission of the version numbers may be omitted or the transmission of the ID map may be omitted. Furthermore, in an alternative example, the order of operations may be altered such that the device pulls changes or all records from the host first before sending its changes or all records to the host. Furthermore, the connection may be initiated by the device rather than the host and the device may perform certain operations that the host performs in the method shown in Figure 5 .
In operation 277, the host asks the device for changes in the current data set if the synchronization is a fast synchronization. The records are processed in operation 279 at the host and one or more acknowledgement may be sent to the device. The processing of the records in operation 279 may be performed by the data class handler for the current data class, and this processing may include "mutation" of records and other changes to put the structured data into the proper format for storage in the data store for the current data class. Then, in one example in operation 281, the host saves the next device anchor, and in operation 283 it asks sync services, such as the sync services component 141, to prepare to pull, which involves transmitting changes or all records to the device as the second part of synchronization from the host's side. The form of synchronization is determined in operation 285. If it is a fast synchronization, then operation 289 follows. In one example, if it is a slow (complete) synchronization (e.g. a reset synchronization), then operation 287 follows. One or more acknowledgments are received from the device; the host may also receive with these acknowledgments from the device a record ID map which shows the relationship between the device ID for a record and the corresponding host ID for that record. This ID map is saved at the host by the data class handler for the current data class. Then in operation 293, the host sends a message to the device asking whether it can commit to the changes. If not, then synchronization is canceled, leaving the device anchors as they were previously, which indicates an incomplete synchronization when the next synchronization process begins. If the device can confirm commitment, it will do so in operation 295, which includes receiving a message from the device that it can commit to the changes or all records. At this point, in operation 297, the host commits the pulled records by saving the ID map it received from the device and saving the next host anchor. In one example, saving of the ID map (recording remapping) is performed only if the commit succeeds and the host commits the pulled records and saves the next host anchor. Then the host proceeds to the next data class by reverting back to operation 253 in Figure 6A . It will be appreciated that in alternative examples, some of the operations may be omitted or additional operations may be performed and the sequence of operations may be changed relative to that shown in Figures 6A and 6B .
Another aspect of at least certain examples described herein relates to a manner in which a software layer for creating and maintaining a data connection for one or more services may be used for each of those services and may provide an interface to one or more stream handlers which implement transport protocols to send structured data, files and other data through a physical interface, such as a wired USB interface or a Bluetooth wireless interface or other wireless interfaces, such as a WiFi interface or a wireless cellular telephone interface. The same layer may also provide for encrypted authentication, and this authentication may be a two-way authentication which establishes an authenticated connection throughout the transmission back and forth between a device and a host through the device link connection layer. The software architecture shown in Figure 4 shows a device link 107 which may be implemented in the manner shown in Figure 10 which illustrates a software architecture in which layers of software interface with each other through messages or calls at the interface between the software layers. The software architecture 450 is shown as having four layers which include a device link connection layer 457, a stream handler layer 459, and stream libraries layer 465 as well as an upper layer for one or more applications or services, such as a backup application or service or a configuration application or service or synchronization services provided by the sync client software component and the sync agent software component described herein. The sync client and sync agent software components 454 provide the synchronization functions and operations described with respect to Figures 4-8B . The application software component 452 may be a backup application which backs up data, including data which has not been synchronized, or alternatively a configuration application or one or more other types of applications which need to make a connection in a secure and authenticated manner through the device link connection layer 457. The stream handler layer 459 includes one or more stream handlers. In the particular embodiment shown in Figure 10 , there is a USB stream handler 461 and a Bluetooth stream handler 462 and a TCP stream handler 463. These different stream handlers implement the communication protocols and handle the stream over the different interface represented by USB or Bluetooth or TCP (which may be a WiFi or other wireless interface which utilizes TCP/IP). The stream library layer 465 is called upon by the stream handler to transmit and receive data through the particular protocol represented by the stream handler. For example, the USB stream handler may make calls to a particular group of stream libraries in order to transmit data over a USB interface. Similarly, the Bluetooth stream handler 462 may make calls to one or more libraries in the libraries layer 465 in order to transmit and receive data through a wireless Bluetooth interface. The device link connection layer 457 provides a unified interface to all the stream handlers in the stream handlers layer 459 by making calls to the appropriate stream handler based upon the currently used physical interface to connect the device to the host. The device link connection layer 457 includes both connection functionality and authentication and/or encryption functionality represented by the sublayers 456 and 458, respectively. The sublayer 456 is responsible for selecting the particular physical interface and establishing a connection through the interface by authenticating, as described below, the host to the device and the device to the host, and at the same time by invoking a particular stream handler for the selected interface which in turn invokes the appropriate stream libraries to create packets or other data structures for transmission over the physical interface. The device link connection layer 457 may be responsive to either a user input to synchronize or back up or configure a device, or may be responsive to an automatic discovery of the device through a technology such as Bonjour from Apple Computer, Inc. For example, docking a device in a dock which is coupled to the host may cause Bonjour to recognize that a device has been docked to a host and that the user may desire to synchronize the device. This may cause a display of a user interface asking the user if the device should be synchronized, or alternatively, the device may be automatically synchronized as a result of placing it in the dock. This will then cause the sync agent and sync client to begin a synchronization process as described herein and to also make calls to the device link connection layer in order to transmit data between the host and the device. Calls made by the sync client or the sync agent in the process of synchronization (or calls made by an application such as a backup application 452) result in the device link connection layer 457 making software based calls or sending other types of messages to the stream handlers layer 459, which in turn call particular libraries in the stream libraries layer 465. With an architecture such as that shown in Figure 10 , the synchronization software components, such as the sync client and the sync agent components, are isolated from the stream handlers. Thus, a sync agent software component and a sync client software component do not need to implement such handlers. Further, the device connection layer provides a uniform interface which authenticates the device to the host across three different physical interfaces and many different stream handlers; this isolates the synchronization software components as well as the other application components from the authentication software. Hence, a developer of a synchronization client or a synchronization agent or a data source for a data class or a data class handler for a data class do not need to recreate code (e.g. software program) to implement stream handlers or to implement authentication or encryption or to implement software to create the connection between a device and a host. Furthermore, by integrating the authentication and the encryption layer with the device connection layer, all services which use the device connection layer, such as the synchronization services or the application services 452 (e.g. backup applications, configure applications, diagnostic applications, etc.), obtain the benefit of automatic, two-way authentication, in at least certain embodiments, as a result of making calls to the device link connection layer 457 which in turn causes authentication and/or encryption to any one of the possible physical interfaces and their corresponding stream handlers. The use of the authentication and encryption layer 458 at a layer of abstraction between the transport and the protocol (stream handler) layers makes the architecture useable by more than just synchronization.
In one embodiment, the architecture shown in Figure 10 provides a number of useful features. DeviceLink 457 may handle all authentication and encryption automatically for the application (the application may merely have to indicate where to find the certificates used by the security code). Further, the DeviceLink connection authenticates both the device and the host. DeviceLink 457 may provide asynchronous behavior for all stream handlers (transports) doing I/O between the device and host, so the transport just has to read/write synchronously, and DeviceLink 457 manages the thread control to make it appear as asynchronous to the application, so the application never blocks reading and writing - the application (such as Sync Client on the host or Sync Agent on the device) is notified of incoming data (and other related things, such as connection/disconnection) via callbacks. DeviceLink 457 does all the authorization at the top of the stream (transport) layer, so all transport types which may be plugged in get authentication and encryption without needing to implement anything special. In one embodiment, Device Link 457 may have file transfer facilities built directly into DeviceLink's protocol. This may be used for backup, and other tools (and can be used in future applications based on device link 457). The protocol of DeviceLink 457 may include a function to do efficient transfer of a file in pieces, so that a file does not have to be read completely in memory at one time. Further, DeviceLink 457 may provide Unix style "stat" information (by itself, or with the file), such as the size of the file and the last modified date, so the applications can keep track of the file's state to tell if it needs to copy it or not (this may be useful for incremental backups). Once connected via DeviceLink 457, an application can use the protocol to request information about a file, and to request the file itself. The file is sent in chunks to avoid reading a huge file into memory all at once (on both sides). DeviceLink 457 may provide some default behavior when the file is requested to just get the file and send it (so the application doesn't need to respond to the callback for the request and take explicit action), although the application can respond if it wants to do custom handling (and use its own code if it wants). Similarly, when receiving pieces of a file, a default callback handles simply writing the file to disk, but that may be overridden in some embodiments. DeviceLink 457 may provide a "white list" of which files (or directories) can be requested, and which files or directories can be written into, so the two sides can control access. Other file copying solutions on the device may also exist independently of DeviceLink 457; for example, a media player (e.g. iTunes) may provide file copying facilities; however, DeviceLink 457 provides considerable infrastructure (authentication, asynchronous interface, part of the existing DeviceLink protocol for ease of use by an application), and has more functionality then a simple file copy API (it has the white lists, and default handling which can be overridden, and chunks the files).
An example of a sequence of operations which involve the use of device link connection layer 457 will now be provided. In one embodiment, a synchronization initiator (for example, either Sync Agent 109 on the device or Sync Client 111 on the host) will be launched (e.g. by the user or by the system, such as by a Bonjour discovery process). The initiator will then try to connect to the other side. The initiator, through DeviceLink connection layer 457, will establish a basic (unauthenticated) connection, which causes the launching of the other application (e.g. if Sync Client 111 initiates the process then basic connection may cause the launching of Sync Agent 109 on the device; conversely, if Sync Agent 109 initiates the process then basic connection may cause the launching of Sync Client 109 on the host). At this point, the DeviceLink connection layer 457 attempts to perform a two-way authentication process, described further herein; if that process succeeds, then an authenticated connection between the host and the device has been created and the synchronization initiator gets a callback from the DeviceLink connection layer 457 that the connection was made and the connectee application (that was launched by the basic connection) gets a notification that an incoming connection was made; for example, if authentication is successful and if Sync Client 111 was the initiator, then Sync Client 111 will receive the callback and Sync Agent 109 is the connectee application. If authentication fails, the initiator receives a connection failed callback and there is no connection, and the connectee will normally exit after some time interval.
The non-synchronization threads or processes may be user-level or non-user-level threads or processes which are not synchronization tasks. The synchronization threads or processes are synchronization tasks performed by one or more synchronization software components such as Sync Agent 109 or Sync Client 111 or other synchronization software components. The concurrent execution of the non-synchronization threads or processes and the synchronization threads or processes may occur on one or both of the device and the host. Operation 575 in Figure 13A shows that non-synchronization threads or processes may be performed on both the device and the host. In operation 577, execution of synchronization software begins on, in this embodiment, both the device and the host while execution of non-synchronization threads or processes continues on both the device and the host. In operation 579, a synchronization software component, such as the Sync Agent 109, attempts to acquire a lock on a store for a data class which is to be synchronized. Sync Agent 109 in one embodiment may do this by invoking the Unix FLOCK call to lock the file containing, for example, the bookmarks to be synchronized. Also in one embodiment, if a synchronization software component accesses an SQlite database, if may not need to acquire a lock as the database may handle this function itself. In one embodiment, Contacts, Calendars and Notes may be stored in databases which handle their own locking at a lower level. Also in one embodiment, Sync Client may not attempt to acquire any locks. If the lock is acquired, as determined in operation 580, then synchronizing is begun in operation 591. On the other hand, if the lock is not acquired then the synchronization component, in operation 581, may notify the application using the data class that the synchronization component requests the lock and the synchronization component waits for a response. The application may receive a response indicating the lock is acquired, in which case processing proceeds to operation 591; otherwise, if the lock is not acquired after the notification, the processing proceeds to operation 583 in which synchronizing of the current data class is canceled and operation 579 follows if further data classes need to be synchronized (otherwise the process ends). If, while synchronizing is being performed, the user attempts to change the store for the data class being synchronized, the system (e.g. either the device or the host) may present, in operation 593, an alert to the user that the system cannot accept changes until synchronizing is completed. After synchronization for the current data class is completed, in operation 595, the lock is released and processing proceeds to the next data class, if one still remains to be synchronized, or synchronization is finished.
It will be appreciated that in alternative embodiments, only one of the host and the device may support concurrent operation of non-synchronization processes and synchronization processes..
Another aspect of at least certain examples described herein relate to methods and systems for synchronizing bookmarks or favorites on one or both of the device and the host when synchronizing structured data. The bookmarks of various web browsers on each of the device and the host may be collected together and stored in an intermediate or canonical topology which is used to synchronize the bookmarks and collections of bookmarks on at least two web browsers, one being on the device and one being on the host. In certain examples, there may be multiple web browsers operating or used by a user on the host and one web browser used on the device. The intermediate topology collects the various bookmarks from the different web browsers, aggregates those into the canonical topology, and then uses that topology to synchronize the bookmark structures for each of the web browsers on such a system. In addition, the synchronizing may also include converting between one format (e.g. a URL data type to another format (e.g. a string representing the URL) for each of the one or more bookmarks in each web browser.
The synchronization of bookmarks on different browsers may require a mechanism to convert or otherwise deal with the difference in the format of the hierarchy of bookmarks. For example, different web browsers have different data structures for maintaining a hierarchy of a collection of bookmarks. Each of these data structures may be considered a topology. Figures 14A, 14B, 14C, and 14D provide examples of those different topologies. The example shown in Figure 14A may be the topology of the web browser known as Safari from Apple Computer, Inc. of Cupertino, while the topology shown in Figure 14B may be the topology of Internet Explorer from Microsoft Corporation, and the topology shown in Figure 14C may be the topology of Firefox, and the topology shown in Figure 14D may be the topology of a web browser on a device, such as a handheld computer with wireless cellular telephone capabilities or other wireless interfaces, such as WiFi, which may be used to access the Internet and browse the Internet. The topologies shown in Figures 14A, 14B, 14C, and 14D represent the topology prior to synchronization among the web browsers. The topology 625 includes a bookmarks menu 627 and a bookmarks bar 629 as well as one or more folders 631 which may be arranged in a hierarchy including folders 632 and 633. The topology 637 in Figure 14B does not include a bookmarks menu but does include a bookmarks bar 638. Another difference between the topology 637 and the topology 625 is the existence of bookmarks at a top level in the topology, such as the bookmarks 639 and 640. In the topology 625, there is no support for bookmarks at the top level; in other words, the bookmarks must be within a folder or in the bookmarks menu or in the bookmarks bar. In contrast, the topology of 637 supports bookmarks at the top level, such as the bookmarks 639 and 640. The topology 637 also includes a collection of one or more folders which may be arranged in a hierarchy, such as folders 641 and folders 642 and 643. The topology 651 is similar to the topology 625 except that bookmarks at the top level, such as bookmarks 639 and 654, may be included in the topology 651 but they are not included or allowed in the topology 625. The topology 651 includes a bookmarks menu 652, a bookmarks bar 653, bookmarks at the top level, such as bookmarks 639 and 654, and a collection of folders containing bookmarks, such as folders 656 and 657 and 658.
The method of Figure 16C assumes that an intermediate topology is used and that there is a mapping between each of the web browsers and the intermediate topology. It will be understood that at least in certain examples, the host or the device may maintain a complete data structure of all bookmarks in the intermediate topology which can then be used to update the bookmark structure of each web browser. In operation 715, first bookmarks in a first topology for a first web browser on a host are mapped to an intermediate topology which may be maintained on the host or the device. In operation 717, second bookmarks in a second topology for a second web browser on the host are also mapped into the intermediate topology. Then in operation 719, the first bookmarks and the second bookmarks on the host are synchronized with third bookmarks on a device which is coupled to the host during the synchronizing period. In this particular method, two different web browsers having two different topologies on the host are synchronized with a web browser on the device. In at least certain examples, the device's topology for its web browser may be different than the first topology and different than the second topology and the intermediate topology.
In an example, the system may perform this synchronization automatically without user interaction and without requesting any input from a user. While this may reduce the complexity required to configure such a system, it may be desirable to present one or more user interfaces which allow a user to set preference settings or other settings which indicate how the synchronization of bookmarks is to be performed among two or more web browsers. The user interface 725 shown in Figure 16D allows a user to select one option from three possible options by selecting one of the three check boxes 727, 729, and 731. The check mark shown in the check box 727 indicates that a user has selected the first option which synchronizes the device's bookmarks to the host's bookmarks and the host's bookmarks to the device's bookmarks; this is considered a two-way synchronization. The other two options are one-way only synchronizations. In particular, if the user had selected check box 729, then synchronization would be performed only to synchronize from the device's bookmarks to the host's bookmarks. If the user had selected check box 731, then synchronization would be performed from the host's bookmarks to the device's bookmarks only.
The user interface 750 shown in Figure 16F allows the user to limit synchronization to selected folders. This option has not been selected as can be seen by the absence of a check mark in the check box 751. If the user does select check box 751, then one or more browser windows may be caused to appear to allow a user to browse through windows containing lists of various bookmarks and bookmark folders, and bookmark bars on a system. It will be appreciated that each of these user interfaces may be used individually or in combination to allow a user to control how bookmarks are synchronized in at least certain examples described herein.
The flow chart of Figure 17 provides one example of how account information may be synchronized. Figure 18 shows a memory structure of the device and a memory structure of the host with respect to email account setup information. The method of Figure 17 may begin in operation 781 in which a data processing system receives setup information for an email account (or for other types of electronic message systems). This information is received on the device and may be for an account "A." The setup information 791 may be an example, in Figure 18 , of such setup information. In operation 783, the host may receive information to set up an email account which may be account "B" and is shown as setup information 795 in Figure 18 . Synchronization may occur after establishing a connection between the device and the host as in operation 785. During the synchronization operation 787, account B, which was established on the host, may be synchronized as a new account on the device. The synchronization may be a one-way synchronization in at least one example; this is represented by the arrow 790 shown in Figure 18 . In this case, the email account which was set up on the device is not synchronized back to the host. In this example, the device ends up having a superset of the email accounts. This may be desirable in cases where the user prefers greater privacy on the device than the host, for example.
It will be appreciated that in alternative examples, the direction of synchronization may be reversed such that it is from the device to the host and not from the host to the device. In this case, any account set up on the device will be synchronized and established on the host, but not vice versa.
Another aspect of at least certain examples relate to transformations of data as part of the synchronization process between the host and the device. Examples of these transformations include: converting data types such as a URL to a text string (e.g., in synchronizing bookmarks) or converting date formats for calendar events or converting contact images, etc. In each case, the device and the host may use a different format; for example, the device may use a first date format for calendar events and the host may use a second date format for calendar events. In one example, the Data Class Handler for a data class on the host may perform the transformations for that data class for both the host and the device as noted in Table D. In other examples, the Data Source on the device for a data class and the Data Class Handler on the host for that data class may share the tasks of transforming between formats for that data class.
Further information will now be provided with respect to transformation of image formats. For example, the device may support contact images (e.g. for a contacts or address book application on the device) having a richer (e.g. more varied) format than contact images (for contacts or address book application on the host) on the host. Further, the device may store previously clipped versions of an image and previously scaled versions of images for a contact so it can display them quickly.
On the host, there may be just one small image for a contact's picture. This image can be fairly large if set via API (Application Program Interface) from another application, but if created in a contacts or address application on a host, it may be small, and if it is created from an original image that is larger, that original image is lost. In contrast, on the device, in one example, the original image which was used to create a contact image may be maintained in its entirety. For example, a user can pick images from a photo or camera application and apply them as a contact's image - these can be any size, so the user may choose the visible area of the image to use, and that visible area is, if necessary, scaled (e.g. scaled down) so it fits on the screen. The device may store a clip rectangle which the user chooses (though some user interface) to choose the portion of that image to be displayed. The device may also store clipped and scaled images for a rectangular-sized and square-sized image. The rectangular image may be the size of the screen, and may be shown on an incoming call. The square image may be shown scaled down even smaller as part of the contact, and used in situations where there is only some of the screen (a square area) which is available to display the image. In one example, when the user chooses the clip rectangle, the user interface shows how the rectangular and square images will look. If the user wants to regenerate what the device displays, the user will, in this example, still have the original image, so the user can go back to the original image and choose another clip rectangle, and regenerate the saved images in rectangular and square sizes and shapes.
Synchronization of contacts/address book, at least in one example, includes synchronizing the images in the contacts/address book and this includes synchronizing the clip rectangle as well as the original image. The synchronizing process may also have to regenerate the optimized images in certain cases, such as if the user changes the image in their Address Book on the host, or if the user gets an image from a device and synchronizes it to another device (e.g., the user gets an image from a device with one sized screen and wants to synchronize it to a device with a differently sized screen). The Data Class Handler may, in one example, clip/scale new/changed images when synchronizing them onto the device because that may be faster than having the device do it (and the device may also be memory constrained. Because there might be more than one device synchronizing the same contact images, and those devices could have different sized displays, in one example, separate clip rectangles are saved for each unique device display size, so an image can be clipped differently on one device with a different size than another device. The Data Class Handler in one example manages keeping track of the different rectangles (since each device will only know about the one rectangle that matches its screen size). For example, if a device has 320x480 screen, and a contact image is originally 1024x800, the synchronization process stores optimized images for the entire screen (320x480) and a square 320x320 representation as well. The user can pick the clip rectangle out of the original image which is then scaled down to 320x480 (and the device cuts out a 320x320 part), and this is synchronized to the host. If the image changes on the host, the synchronization process (through the Data Class Handler, for example) recomputes the 320x480 and 320x320 images for the device. If a new image is synchronized to a device with a different size, if the original image is still large enough to cover the screen, the synchronization process, in one example, will find the center of the image in the clip area for one of the existing clip rectangles (for the other size device screen), and expand/contract the clip rectangle accordingly to fit the different size (e.g. larger size) screen. If the new device has a smaller screen, the synchronizing process may merely scale the image down to that size.
Another aspect of at least certain examples relate to frameworks and architecture for synchronizing widgets. Generally, widgets are user interface elements that include information and one or more tools that let the user perform tasks and/or provide access to information. Widgets can perform a variety of tasks, including, for example, communicating with a remote server or other source of data to provide information to a user (e.g., weather report; stock prices; sunrise/sunset times; current phase of the moon; current exchange rates; etc.), providing commonly needed functionality (e.g., a calculator; a calendar; a clock; etc.), or acting as an information repository (e.g., a notebook). Widgets can be displayed and accessed through an environment referred to as a "unified interest layer," "dashboard layer," "dashboard environment," or "dashboard." Widgets and dashboards are described in co-pending U.S. Patent Application No. 10/877,968 , entitled "Unified Interest Layer for User Interface," filed on June 25, 2004, which patent application is incorporated herein by reference in its entirety.
Widgets on a device may be synchronized, using any one of the examples described herein, with widgets on a host or another device. The synchronization may be one-way (from device to host or another device only or from host or another device to device only) or two-way. In the case of two-way synchronizations, both systems will normally end up with a common set of widgets, assuming both systems can support the full, common set of widgets.
Widgets may be treated, at least in certain examples, as another data class and may be synchronized using the architecture shown in Figure 4 and described throughout this disclosure. In one example, a Data Source for widgets may exist on a device and a Data Class Handler for widgets may exist on a host. The executable software which implements the widget may not be synchronized but the configuration settings for the widget may be synchronized between a device and a host or between a device and another device. Each widget on a system may have configuration settings and these settings may be stored as one file for a particular type of widget. For example, a weather widget may have settings which specify three cities (e.g. San Francisco, Los Angeles, and Washington, D.C.) and those settings are stored as one file or record for purposes of synchronization.
In the foregoing specification, the invention has been described with reference to specific exemplary embodiments thereof. It will be evident that various modifications may be made thereto. The specification and drawings are, accordingly, to be regarded in an illustrative sense.
Claims (12)
- A machine implemented method for synchronization between a device (101) and a host (103), wherein the device (101) and the host (103) are physically separated and a link software component maintains an authenticated connection link between the device (101) and the host (103), thereby allowing passing of commands and data between the device (101) and the host (103) during the synchronization process, wherein- multiple different data classes are synchronized between the device (101) and the host (103), the different data classes being structured data having different structures or formats;- the device (101) includes one or more user application programs for accessing and editing structured data in a particular data class- both of the device and the host are able to have both non-synchronization processes and synchronization processes occurring concurrently, wherein the synchronization threads or processes are synchronization tasks performed by one or more synchronization software components such as Sync Agent (109)the method comprises:- beginning the execution of synchronization software on both the device (101) and the host (103) while execution of non-synchronization threads or processes continues on both the device (101) and the host (103)- after performing the above step, the synchronization software of the device (101) or the host (103) carrying out the following sequence of stepsa) acquiring a lock (579) on a store for a data class which is to be synchronizedb) determining (580) if the lock was acquiredc) if the lock is acquired, beginning synchronizing (591) for the currently processed data classd) if the lock is not acquired notifying (581) the application which uses the currently processed data class that the synchronization component requests the lock and the synchronization component waits for a responsee) if the lock is not acquired after the notification, cancelling synchronizing (583) of the current data class, and if further data classes need to be synchronized, proceeding to step a) for further data classes, and if there are no further classes that need to be synchronized ending the processf) if a response is received from the application indicating that the lock is acquired, beginning synchronizing (591) for the currently processed data classh) after synchronization for the current data class is completed (595), releasing the locki) if at least one data class still remains to be synchronized proceeding back (599) to step a) and if there are no more data classes to be synchronized, ending the process (600).
- The synchronization method of claim 1 wherein the non-synchronization threads or processes may be user-level or non-user-level threads or processes which are not synchronization tasks.
- The synchronization method of claim 1 or 2 wherein while synchronizing is being performed, if the user attempts to change the store for the data class being synchronized, presenting an alert to the user that the system cannot accept changes until synchronizing is completed.
- The synchronization method of any of claims 1 to 3, wherein the data class is one of: (a) calendar data; (b) contact data; (c) email account setup information; (d) bookmarks; (e) notes; and (f) To Do items.
- A computer readable storage medium containing executable program instructions for synchronization between a device (101) and a host (103), wherein the device (101) and the host (103) are physically separated and a link software component maintains an authenticated connection link between the device (101) and the host (103), thereby allowing passing of commands and data between the device (101) and the host (103) during the synchronization process, wherein- multiple different data classes are synchronized between the device (101) and the host (103), the different data classes being structured data having different structures or formats;- the device (101) includes one or more user application programs for accessing and editing structured data in a particular data class- both of the device and the host are able to have both non-synchronization processes and synchronization processes occurring, wherein the synchronization threads or processes are synchronization tasks performed by one or more synchronization software components such as Sync Agent (109) the instructions when executed by the device (101) and the host (103), cause the device and the host to- begin the execution of synchronization software on both the device (101) and the host (103) while execution of non-synchronization threads or processes continues on both the device (101) and the host (103)- after performing the above step, the instructions when executed by the device or the host cause the synchronization software of the device (101) or the host to carry out the following sequence of stepsa) acquiring a lock (579) on a store for a data class which is to be synchronizedb) determining (580) if the lock was acquiredc) if the lock is acquired, beginning synchronizing (591) for the currently processed data classd) if the lock is not acquired notifying (581) the application which uses the currently processed data class that the synchronization component requests the lock and the synchronization component waits for a responsee) if the lock is not acquired after the notification, cancelling synchronizing (583) of the current data class, and if further data classes need to be synchronized, proceeding to step a) for further data classes, and if there are no further classes that need to be synchronized ending the processf) if a response is received from the application indicating that the lock is acquired, beginning synchronizing (591) for the currently processed data classh) after synchronization for the current data class is completed (595), releasing the locki) if at least one data class still remains to be synchronized proceeding back (599) to step a) and if there are no more data classes to be synchronized, ending the process (600).
- The computer readable storage medium of claim 5, wherein the non-synchronization threads or processes may be user-level or non-user-level threads or processes which are not synchronization tasks.
- The computer readable storage medium of claims 5 or 6 wherein while synchronizing is being performed, if the user attempts to change the store for the data class being synchronized, presenting an alert to the user that the system cannot accept changes until synchronizing is completed.
- The computer readable storage medium of claim of any of claims 5 to 7, wherein the data class is one of: (a) calendar data; (b) contact data; (c) email account setup information; (d) bookmarks; (e) notes; and (f) To Do items.
- A data processing system comprising a device and a host (103) which are physically separated from each other comprising:a link software component which maintains an authenticated connection link between the device (101) and the host (103), thereby allowing passing of commands and data between the device (101) and the host (103) during a synchronization process, wherein- multiple different data classes are synchronized between the device (101) and the host (103), the different data classes being structured data having different structures or formats;- the device (101) includes one or more user application programs for accessing and editing structured data in a particular data class- both the device and the host are able to have both non-synchronization processes and synchronization processes occurring concurrently, wherein the synchronization threads or processes are synchronization tasks performed by one or more synchronization software components such as a Sync Agent (109)- the execution of synchronization software begins on both the device (101) and the host (103) while execution of non-synchronization threads or processes continues on both the device (101) and the host (103)- the device and the host are configured to- begin the execution of synchronization software on both the device (101) and the host (103) while execution of non-synchronization threads or processes continues on both the device (101) and the host (103)- after performing the above step, the synchronization software of the device (101) or the host (103) carries out the following sequence of stepsa) acquiring a lock (579) on a store for a data class which is to be synchronizedb) determining (580) if the lock was acquiredc) if the lock is acquired, beginning synchronizing (591) for the currently processed data classd) if the lock is not acquired notifying (581) the application which uses the currently processed data class that the synchronization component requests the lock and the synchronization component waits for a responsee) if the lock is not acquired after the notification, cancelling synchronizing (583) of the current data class, and if further data classes need to be synchronized, proceeding to step a) for further data classes, and if there are no further classes that need to be synchronized ending the processf) if a response is received from the application indicating that the lock is acquired, beginning synchronizing (591) for the currently processed data classh) after synchronization for the current data class is completed (595), releasing the locki) if at least one data class still remains to be synchronized proceeding back (599) to step a) and if there are no more data classes to be synchronized, ending the process (600).
- The device (101) or host (103) of claim 9, wherein the non-synchronization threads or processes may be user-level or non-user-level threads or processes which are not synchronization tasks.
- The device (101) or host (103) of claim 9 or 10 wherein while synchronizing is being performed, if the user attempts to change the store for the data class being synchronized, presenting an alert to the user that the system cannot accept changes until synchronizing is completed.
- The device (101) or host (103) of any of claims 9 to 11, wherein the data class is one of: (a) calendar data; (b) contact data; (c) email account setup information; (d) bookmarks; (e) notes; and (f) To Do items.
Applications Claiming Priority (6)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/650,721 | 2007-01-07 | ||
| US11/650,624 | 2007-01-07 | ||
| US11/650,728 | 2007-01-07 | ||
| US11/650,726 | 2007-01-07 | ||
| US11/650,729 | 2007-01-07 | ||
| US11/650,730 | 2007-01-07 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| HK1138079A HK1138079A (en) | 2010-08-13 |
| HK1138079B true HK1138079B (en) | 2018-05-04 |
Family
ID=
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US10891301B2 (en) | Synchronization methods and systems | |
| US7660831B2 (en) | Synchronization methods and systems | |
| US7991738B2 (en) | Synchronization methods and systems | |
| US7739410B2 (en) | Synchronization methods and systems | |
| US7761414B2 (en) | Asynchronous data synchronization amongst devices | |
| US8375112B2 (en) | Synchronization methods and systems | |
| EP2115627B1 (en) | Synchronization methods and systems | |
| US20080163743A1 (en) | Synchronization methods and systems | |
| US20060200570A1 (en) | Discovering and mounting network file systems via ad hoc, peer-to-peer networks | |
| HK1138079A (en) | Synchronization methods and systems | |
| HK1138079B (en) | Synchronization methods and systems |