Я сейчас тестирую Google API. Это кажется многообещающим, но я застрял в «простой» проблеме. Я хочу обновить существующий документ локальной копией.
Моя идея состояла в том, чтобы загрузить все документы Google в папку, используя doc-download. Это работает. При следующем запуске я проверяю даты, если удаленный документ более новый, возьмите его снова. Если локальный документ более новый, загрузите его и замените текущую онлайн-версию.
Я не могу найти функцию для замены документа. Существует Upload (имя файла, doctitle), но это создает новый документ. Кто-нибудь знает, возможно ли это, и может указать мне направление коррекции. Нужно ли разбирать атомную ленту (это содержимое документа где-то внутри него ..). «загрузить / изменить слово / загрузить» выглядело так мило: -)
Chris
А для всех, кто интересуется, довольно просто и приятно использовать API. Вот краткий пример WPF (конечно, без учетных данных)
var settings = new RequestSettings("GoogleDocumentsSample", _credentials);
AllDocuments = new ObservableCollection<Document>();
settings.AutoPaging = true;
settings.PageSize = 10;
service = new DocumentsService("DocListUploader");
((GDataRequestFactory)service.RequestFactory).KeepAlive = false;
service.setUserCredentials(username, password);
//force the service to authenticate
var query = new DocumentsListQuery {NumberToRetrieve = 1};
service.Query(query);
var request = new DocumentsRequest(settings);
Feed<Document> feed = request.GetEverything();
// this takes care of paging the results in
foreach (Document entry in feed.Entries)
{
AllDocuments.Add(entry);
if (entry.Type == Document.DocumentType.Document)
{
var fI = new FileInfo(@"somepath" + entry.DocumentId + ".doc");
if (!fI.Exists || fI.LastWriteTime < entry.Updated)
{
Debug.WriteLine("Download doc " + entry.DocumentId);
var type = Document.DownloadType.doc;
Stream stream = request.Download(entry, type);
if (fI.Exists) fI.Delete();
Stream file = fI.OpenWrite();
int nBytes = 2048;
int count = 0;
Byte[] arr = new Byte[nBytes];
do
{
count = stream.Read(arr, 0, nBytes);
file.Write(arr, 0, count);
} while (count > 0);
file.Flush();
file.Close();
stream.Close();
fI.CreationTimeUtc = entry.Updated;
fI.LastWriteTimeUtc = entry.Updated;
}
else
{
if (entry.Updated == fI.LastWriteTime)
{
Debug.WriteLine("Document up to date " + entry.DocumentId);
}
else
{
Debug.WriteLine(String.Format("Local version newer {0} [LOCAL {1}] [REMOTE {2}]", entry.DocumentId, fI.LastWriteTimeUtc, entry.Updated));
service.UploadDocument(fI.FullName, entry.Title);
}
}
}
}