Click here to Skip to main content
15,868,076 members
Articles / Desktop Programming / MFC

A Google Docs Based Backup Application

Rate me:
Please Sign up or sign in to vote.
4.89/5 (71 votes)
20 Mar 2015CPOL4 min read 97.7K   3.9K   121   50
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:

C++
#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:

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

and the call:

C++
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:

C++
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 into 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)


Written By
CEO Secured Globe, Inc.
United States United States
Michael Haephrati is a music composer, an inventor and an expert specializes in software development and information security, who has built a unique perspective which combines technology and the end user experience. He is the author of a the book Learning C++ , which teaches C++ 20, and was published in August 2022.

He is the CEO of Secured Globe, Inc., and also active at Stack Overflow.

Read our Corporate blog or read my Personal blog.





Comments and Discussions

 
QuestionWhy not Google Drive? Pin
Marco Bertschi4-Feb-14 2:41
protectorMarco Bertschi4-Feb-14 2:41 
AnswerRe: Why not Google Drive? Pin
Michael Haephrati4-Feb-14 3:52
professionalMichael Haephrati4-Feb-14 3:52 
GeneralRe: Why not Google Drive? Pin
Marco Bertschi4-Feb-14 3:58
protectorMarco Bertschi4-Feb-14 3:58 
QuestionUpload Error Pin
sid28819864-Oct-13 20:39
sid28819864-Oct-13 20:39 
AnswerRe: Upload Error Pin
Michael Haephrati4-Oct-13 22:09
professionalMichael Haephrati4-Oct-13 22:09 
GeneralRe: Upload Error Pin
sid28819865-Oct-13 0:02
sid28819865-Oct-13 0:02 
GeneralMy vote of 5 Pin
alonbarak14-Jun-13 10:56
alonbarak14-Jun-13 10:56 
QuestionGood Article Pin
SajeeshCheviry11-Mar-13 5:47
SajeeshCheviry11-Mar-13 5:47 
AnswerRe: Good Article Pin
Michael Haephrati21-Sep-17 9:21
professionalMichael Haephrati21-Sep-17 9:21 
QuestionListing Pin
bothan7-Mar-13 20:49
bothan7-Mar-13 20:49 
AnswerRe: Listing Pin
Michael Haephrati7-Mar-13 22:02
professionalMichael Haephrati7-Mar-13 22:02 
Questionrequesting a report for this topic Pin
Member 984874422-Feb-13 6:16
Member 984874422-Feb-13 6:16 
AnswerRe: requesting a report for this topic Pin
Michael Haephrati22-Feb-13 6:19
professionalMichael Haephrati22-Feb-13 6:19 
GeneralRe: requesting a report for this topic Pin
phil.o21-Mar-15 1:08
professionalphil.o21-Mar-15 1:08 
GeneralMy vote of 5 Pin
Member 416352421-Feb-13 5:23
Member 416352421-Feb-13 5:23 
GeneralRe: My vote of 5 Pin
Michael Haephrati21-Feb-13 5:27
professionalMichael Haephrati21-Feb-13 5:27 
QuestionWhy was my message removed? Pin
Cristian Amarie17-Feb-13 20:56
Cristian Amarie17-Feb-13 20:56 
AnswerMessage Closed Pin
17-Feb-13 21:06
professionalMichael Haephrati17-Feb-13 21:06 
GeneralMessage Closed Pin
17-Feb-13 23:44
Cristian Amarie17-Feb-13 23:44 
GeneralRe: Why was my message removed? Pin
Michael Haephrati18-Feb-13 1:26
professionalMichael Haephrati18-Feb-13 1:26 
GeneralRe: Why was my message removed? Pin
yafan18-Feb-13 4:01
yafan18-Feb-13 4:01 
GeneralRe: Why was my message removed? Pin
Michael Haephrati18-Feb-13 4:03
professionalMichael Haephrati18-Feb-13 4:03 
Thanks for your comment.

modified 18-Feb-13 16:10pm.

GeneralRe: Why was my message removed? Pin
Michael Haephrati19-Feb-13 7:56
professionalMichael Haephrati19-Feb-13 7:56 
GeneralMy vote of 5 Pin
BH TAN16-Feb-13 4:59
professionalBH TAN16-Feb-13 4:59 
GeneralMy vote of 5 Pin
liliflower35525-Jan-13 1:07
liliflower35525-Jan-13 1:07 

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

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