Click here to Skip to main content
Click here to Skip to main content

A Google Docs based backup applicaiton

, 7 Mar 2013 CPOL
Rate this:
Please Sign up or sign in to vote.
A C++ client for uploading documents to your Google Docs account.

Introduction

I wanted to write a small application which allows dragging and dropping multiple files and folders into a container in order to send them to an online storage. This article was written before Google introduced Google Drive, but it is still practical to use it for quick upload of multiple files to your Google Drive. 

This article explains how to develop such an application that will use the free and the paid GoogleDocs service of storing documents and files online, allowing the end user to drag and drop files and entire folders and by doing so, backing up the selected files to a pre-defined GoogleDocs account.

Google Docs allows users to create and upload documents and files, work on them, and store them online. The service is free of charge; however, there are limitations which don’t exist when the paid service is used.

Google Docs Account Types

As described here, the free account type has its limitations when it comes to the types of files allowed to be uploaded. These limitations apply to the programmatic usage of the service, as opposed to using the online interface (docs.google.com).

To lift some of the limitations, the end user should hold a Premier account. Users of the free account can only upload HTML, PDF, Word, Excel, PowerPoint, OpenOffice, text, and images.

Implementation

As a base, we have developed a class library named SmartHTTP.

We have defined:

#define HTTP_POST_VERB                      L"POST"
#define HTTP_CONTENT_LENGTH                 L"Content-Length"
#define HTTP_CONTENT_TYPE                   L"Content-Type"
#define HTTP_MIME_BINARY                    L"application/octet-stream"
#define HTTP_MIME_FORM_URL_ENCODED          L"application/x-www-form-urlencoded"

Connecting to the GoogleDocs server is done by using:

BOOL Connect(LPCTSTR szServerName, INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT);

and the call:

if (!m_internet.Connect(GOOGLE_LOGIN_SERVER, INTERNET_DEFAULT_HTTPS_PORT))
    SetWinInetError(m_internet.GetError());
else
{
//... here we upload the documents, etc.

The Google Docs server is defined here:

GOOGLE_LOGIN_SERVER is L”www.google.com”

You may need to open an account with Google. A GMail account will do. If you are logged in, just go to http://docs.google.com.

319435/File_shown_in_GoogleDocs.jpg

Basically, my application is a container to which files and entire folders can be dragged and dropped, causing all files within them, including files inside subfolders, to be sent to the GoogleDocs server. When the application is started, the container appears.

319435/DocsOnline1.jpg

Closing it will send it to the IconTray. The Icon application's Tray Icon is used to display status messages during runtime. For example, when a file is dragged to the container, it is being added to the queue, and the following message appears:

319435/DocsOnline3.jpg

About the conversion to Google Docs format

Google Docs offers documents uploaded to be converted to Google Docs format. This conversion is explained here. From my experience, some types of documents may get corrupted as a result of such conversion, especially Word documents in right to left languages (Arabic, Hebrew, etc.).

For that reason, I have added a checkbox to allow the end user to decide whether to convert or not.

But before the first file can be copied, the Settings dialog pops up allowing the end user to enter the Google Docs account details. In addition, the following options can be set:

  • Google Apps Premier Account - allows indicating the type of the account.
  • List of Mirror Folders - allows adding (or deleting) local folders which will be mirrored at the server side keeping the structure of the files and folders under the given path.
  • Recreate Folder Structure in Google Docs - when this option is set, documents are copied to a folder with the same name as the local one.
  • Upload all Documents to the Root Google Docs folder - when this option is set, documents are copied to the root directory at the server side.
  • Start Program on Windows Startup - launches DocsOnline when Windows starts.

319435/DocsOnline2.jpg

Premier account holders can copy more types of files which are restricted for regular (free) accounts.

The logic behind my intuitive backup

I believe applications and utilities should be intuitive and easy to use. For example, my application allows dragging and dropping folders, and by doing so, all files, and files within all subfolders, are backed up, after checking against previous copies already on the server. The logic I use for such "intuitive backup" is done using an examination of each file and a calculation of a hash which represents its contents. This logic addresses the following scenarios:

  1. Different files having the same name - copy, but automatically generate a new name. Add a log entry.
  2. Identical files having different names - add a log entry (in a later version, we shall unite such files in to a single one with a single name).
  3. Identical files having the same name - skip.

Credits

The SystemTraySDK class by Chris Maunder, used in my application, is a light wrapper around the Windows system tray stuff. It adds an icon to the system tray with the specified tooltip text and callback notification value, which is sent back to the parent window.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Michael N. Haephrati
CEO
United States United States
Michael Haephrati, is an entrepreneur, inventor and a musician. Haephrati worked on many ventures starting from HarmonySoft, designing Rashumon, the first Graphical Multi-lingual word processor for Amiga computer. During 1995-1996 he worked as a Contractor with Apple at Cupertino. Worked at a research institute made the fist steps developing the credit scoring field in Israel. He founded Target Scoring and developed a credit scoring system named ThiS, based on geographical statistical data, participating VISA CAL, Isracard, Bank Leumi and Bank Discount (Target Scoring, being the VP Business Development of a large Israeli institute).

During 2000, he founded Target Eye, and developed the first remote PC surveillance and monitoring system, named Target Eye.

Other ventures included: Data Cleansing (as part of the DataTune system which was implemented in many organizations.


Follow on   Twitter   Google+   LinkedIn

Comments and Discussions

 
QuestionWhy not Google Drive? PinprofessionalMarco Bertschi4-Feb-14 3:41 
AnswerRe: Why not Google Drive? PinmemberMichael Haephrati4-Feb-14 4:52 
GeneralRe: Why not Google Drive? PinprofessionalMarco Bertschi4-Feb-14 4:58 
QuestionUpload Error Pinmembersid28819864-Oct-13 21:39 
AnswerRe: Upload Error PinmvpMichael Haephrati4-Oct-13 23:09 
GeneralRe: Upload Error Pinmembersid28819865-Oct-13 1:02 
GeneralMy vote of 5 Pingroupalonbarak14-Jun-13 11:56 
QuestionGood Article PinmemberSajeeshCheviry11-Mar-13 6:47 
QuestionListing Pinmemberbothan7-Mar-13 21:49 
AnswerRe: Listing PinmvpMichael Haephrati7-Mar-13 23:02 
Questionrequesting a report for this topic PinmemberMember 984874422-Feb-13 7:16 
AnswerRe: requesting a report for this topic PinmvpMichael Haephrati22-Feb-13 7:19 
GeneralMy vote of 5 PinmemberMember 416352421-Feb-13 6:23 
GeneralRe: My vote of 5 PinmvpMichael Haephrati21-Feb-13 6:27 
QuestionWhy was my message removed? [modified] PinmemberCristian Amarie17-Feb-13 21:56 
AnswerMessage Removed PinmvpMichael Haephrati מיכאל האפרתי17-Feb-13 22:06 
GeneralMessage Removed PinmemberCristian Amarie18-Feb-13 0:44 
GeneralRe: Why was my message removed? PinmvpMichael Haephrati מיכאל האפרתי18-Feb-13 2:26 
GeneralRe: Why was my message removed? Pinmemberyafan18-Feb-13 5:01 
GeneralRe: Why was my message removed? [modified] PinmvpMichael Haephrati מיכאל האפרתי18-Feb-13 5:03 
GeneralRe: Why was my message removed? PinmvpMichael Haephrati מיכאל האפרתי19-Feb-13 8:56 
GeneralMy vote of 5 PinmemberWebBHTAN16-Feb-13 5:59 
GeneralMy vote of 5 Pinmemberliliflower35525-Jan-13 2:07 
GeneralMy vote of 5 Pinmemberresi243125-Jan-13 1:06 
GeneralMy vote of 5 Pinmembermidulm25-Jan-13 0:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.141220.1 | Last Updated 7 Mar 2013
Article Copyright 2012 by Michael N. Haephrati
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid