将 C++ 应用程序与 Ubuntu One 同步

3 development ubuntu-one ubuntu-one-api

我目前正在用 C++ 开发一个应用程序,它将它的数据与 Ubuntu One 同步,但我在网上找不到任何文档来解释如何做到这一点。我发现Ryan Paul 的 Ars Technica 文章提供了在 Python 中执行此操作的出色介绍,同时提到存在一个可以在 C 中促进此操作的库,但它没有提供有关在哪里可以找到此基于 C 的解决方案的提示. 我在谷歌上搜索了一段时间,但似乎没有人在谈论开发利用 Ubuntu One 同步的应用程序。

有谁知道我可以从哪里获得有关这个基于 C 的接口的信息?

sil*_*sil 8

Ubuntu One 通过 desktopcouch 提供数据同步,它是 CouchDB 的本地版本,可自动与 Ubuntu One 和您的所有机器同步。此处 Ubuntu One提供了一些有关云和 Python API 的文档,如果您想构建与 Ubuntu C++ 应用程序使用相同数据的 Web 应用程序或移动应用程序,这可能会很有用。

C/C++ API 尚未在开发人员网站上发布(很快就会发布!),因此这里的摘要应该足以让您入门。

对于 C/C++,您有 couchdb-glib 和 desktopcouch-glib。couchdb-glib 提供了通用的 CouchDB API,而 desktopcouch-glib 只提供了一个对象,它创建了一个 Session 对象,其中包含连接到 Ubuntu One 的 desktopcouch 所需的所有内容。

所以:

DesktopcouchSession *dc = desktopcouch_session_new ();
Run Code Online (Sandbox Code Playgroud)

DesktopcouchSession 是 CouchdbSession 的一个子类,因此一旦获得它的一个实例,就可以使用 CouchdbSession 中的方法访问底层 CouchDB 实例:

GSList              *couchdb_session_list_databases (CouchdbSession *session, 
                                                     GError **error);
CouchdbDatabase     *couchdb_session_get_database (CouchdbSession *session, 
                                                   const char *dbname, 
                                                   GError **error);
gboolean             couchdb_session_create_database (CouchdbSession *session, 
                                                      const char *dbname, 
                                                      GError **error);
gboolean             couchdb_session_delete_database (CouchdbSession *session, 
                                                      const char *dbname, 
                                                      GError **error);
Run Code Online (Sandbox Code Playgroud)

使用这些方法管理数据库,使用 get_database 和 create_database 可以获得 CouchdbDatabase 对象的实例,它允许您管理数据库中的文档:

GSList       *couchdb_database_get_all_documents (CouchdbDatabase *database, 
                                                  GError **error);
gboolean      couchdb_database_put_document (CouchdbDatabase *database,
                                             CouchdbDocument *document,
                                             GError **error);
gboolean      couchdb_database_delete_document (CouchdbDatabase *database, 
                                                CouchdbDocument *document, 
                                                GError **error);
Run Code Online (Sandbox Code Playgroud)

如您所见,为了管理文档本身,还有另一个对象 CouchdbDocument。此外,还有用于管理特定类型文档的这一类的子类,例如 CouchdbDocumentContact(用于联系人)。

您可以通过安装 # libcouchdb-glib-doc获得完整的 API 参考 安装 libcouchdb-glib-doc包裹。安装 # libdesktopcouch-glib-dev 安装 libdesktopcouch-glib-dev 应该拉入您需要的所有库。

该 API 使您可以访问 CouchDB,因此您当然需要知道 CouchDB 本身是如何工作的,以及如何在其中存储数据。简短的回答是:数据存储在 JSON 文档中,并通过文档 ID 或使用预先计算的视图提取。http://guide.couchdb.org/是 CouchDB 的书,它更详细地解释了 Couch 的数据存储方法。

如果你有问题,请在freenode上的#ubuntuone上ping我(水瓶座)或rodrigo。我很乐意与您讨论您打算做什么以及在 Ubuntu One 数据存储系统中对数据进行建模的好方法。