mirror of https://github.com/vitalif/grive2
refactored old GDoc API into v1 namespace. using v2 namespace for new Google Drive API
parent
738435837b
commit
62dc542341
|
@ -23,13 +23,11 @@
|
||||||
#include <QtGui/QApplication>
|
#include <QtGui/QApplication>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
#include "drive/CommonUri.hh"
|
#include "drive2/Feed.hh"
|
||||||
#include "drive/Entry.hh"
|
|
||||||
#include "drive/Feed.hh"
|
|
||||||
|
|
||||||
#include "http/CurlAgent.hh"
|
#include "http/CurlAgent.hh"
|
||||||
#include "http/Header.hh"
|
#include "http/Header.hh"
|
||||||
//#include "http/XmlResponse.hh"
|
#include "protocol/JsonResponse.hh"
|
||||||
|
|
||||||
#include "protocol/Json.hh"
|
#include "protocol/Json.hh"
|
||||||
#include "protocol/OAuth2.hh"
|
#include "protocol/OAuth2.hh"
|
||||||
|
@ -38,11 +36,13 @@
|
||||||
#include "util/File.hh"
|
#include "util/File.hh"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
const std::string client_id = "22314510474.apps.googleusercontent.com" ;
|
const std::string client_id = "22314510474.apps.googleusercontent.com" ;
|
||||||
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v2 ;
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
int main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
|
@ -55,7 +55,7 @@ int main( int argc, char **argv )
|
||||||
OAuth2 token( refresh_token, client_id, client_secret ) ;
|
OAuth2 token( refresh_token, client_id, client_secret ) ;
|
||||||
AuthAgent agent( token, std::auto_ptr<http::Agent>( new http::CurlAgent ) ) ;
|
AuthAgent agent( token, std::auto_ptr<http::Agent>( new http::CurlAgent ) ) ;
|
||||||
|
|
||||||
Feed feed ;
|
/* Feed feed ;
|
||||||
feed.Start( &agent, feed_base + "/-/folder?max-results=50&showroot=true" ) ;
|
feed.Start( &agent, feed_base + "/-/folder?max-results=50&showroot=true" ) ;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -67,6 +67,16 @@ int main( int argc, char **argv )
|
||||||
qDebug() << e.Name().c_str() ;
|
qDebug() << e.Name().c_str() ;
|
||||||
}
|
}
|
||||||
} while ( feed.GetNext( &agent ) ) ;
|
} while ( feed.GetNext( &agent ) ) ;
|
||||||
|
*/
|
||||||
|
/* http::JsonResponse jsp ;
|
||||||
|
agent.Get( "https://www.googleapis.com/drive/v2/files", &jsp, http::Header() ) ;
|
||||||
|
std::cout << jsp.Response() << std::endl ;
|
||||||
|
*/
|
||||||
|
Feed feed( "https://www.googleapis.com/drive/v2/files" ) ;
|
||||||
|
while ( feed.Next(&agent) )
|
||||||
|
{
|
||||||
|
std::cout << feed.Content() << std::endl ;
|
||||||
|
}
|
||||||
|
|
||||||
QApplication app( argc, argv ) ;
|
QApplication app( argc, argv ) ;
|
||||||
MainWnd wnd ;
|
MainWnd wnd ;
|
||||||
|
|
|
@ -48,6 +48,7 @@ const std::string client_id = "22314510474.apps.googleusercontent.com" ;
|
||||||
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v1 ;
|
||||||
namespace po = boost::program_options;
|
namespace po = boost::program_options;
|
||||||
|
|
||||||
// libgcrypt insist this to be done in application, not library
|
// libgcrypt insist this to be done in application, not library
|
||||||
|
|
|
@ -45,7 +45,7 @@ include_directories(
|
||||||
)
|
)
|
||||||
|
|
||||||
file(GLOB DRIVE_HEADERS
|
file(GLOB DRIVE_HEADERS
|
||||||
${libgrive_SOURCE_DIR}/src/drive/*.hh
|
${libgrive_SOURCE_DIR}/src/drive/*.hh
|
||||||
)
|
)
|
||||||
|
|
||||||
file (GLOB PROTOCOL_HEADERS
|
file (GLOB PROTOCOL_HEADERS
|
||||||
|
@ -62,6 +62,7 @@ file (GLOB XML_HEADERS
|
||||||
|
|
||||||
file (GLOB LIBGRIVE_SRC
|
file (GLOB LIBGRIVE_SRC
|
||||||
src/drive/*.cc
|
src/drive/*.cc
|
||||||
|
src/drive2/*.cc
|
||||||
src/http/*.cc
|
src/http/*.cc
|
||||||
src/protocol/*.cc
|
src/protocol/*.cc
|
||||||
src/util/*.cc
|
src/util/*.cc
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "CommonUri.hh"
|
#include "CommonUri.hh"
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
std::string ChangesFeed( int changestamp )
|
std::string ChangesFeed( int changestamp )
|
||||||
{
|
{
|
||||||
|
@ -28,4 +28,4 @@ std::string ChangesFeed( int changestamp )
|
||||||
return changestamp > 0 ? (feed%changestamp).str() : feed_changes ;
|
return changestamp > 0 ? (feed%changestamp).str() : feed_changes ;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} }
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace gr
|
namespace gr { namespace v1
|
||||||
{
|
{
|
||||||
const std::string feed_base = "https://docs.google.com/feeds/default/private/full" ;
|
const std::string feed_base = "https://docs.google.com/feeds/default/private/full" ;
|
||||||
const std::string feed_changes = "https://docs.google.com/feeds/default/private/changes" ;
|
const std::string feed_changes = "https://docs.google.com/feeds/default/private/changes" ;
|
||||||
|
@ -33,4 +33,4 @@ namespace gr
|
||||||
"https://docs.google.com/feeds/upload/create-session/default/private/full" ;
|
"https://docs.google.com/feeds/upload/create-session/default/private/full" ;
|
||||||
|
|
||||||
std::string ChangesFeed( int changestamp ) ;
|
std::string ChangesFeed( int changestamp ) ;
|
||||||
}
|
} }
|
||||||
|
|
|
@ -44,15 +44,15 @@
|
||||||
// for debugging only
|
// for debugging only
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const std::string state_file = ".grive_state" ;
|
const std::string state_file = ".grive_state" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
Drive::Drive( http::Agent *http, const Json& options ) :
|
Drive::Drive( http::Agent *agent, const Json& options ) :
|
||||||
m_http ( http ),
|
m_http ( agent ),
|
||||||
m_root ( options["path"].Str() ),
|
m_root ( options["path"].Str() ),
|
||||||
m_state ( m_root / state_file, options ),
|
m_state ( m_root / state_file, options ),
|
||||||
m_options ( options )
|
m_options ( options )
|
||||||
|
@ -197,4 +197,4 @@ void Drive::UpdateChangeStamp( )
|
||||||
std::atoi(xrsp.Response()["docs:largestChangestamp"]["@value"].front().Value().c_str()) ) ;
|
std::atoi(xrsp.Response()["docs:largestChangestamp"]["@value"].front().Value().c_str()) ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -35,12 +35,14 @@ namespace http
|
||||||
class Agent ;
|
class Agent ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
class Entry ;
|
class Entry ;
|
||||||
|
|
||||||
class Drive
|
class Drive
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
Drive( http::Agent *http, const Json& options ) ;
|
Drive( http::Agent *agent, const Json& options ) ;
|
||||||
|
|
||||||
void DetectChanges() ;
|
void DetectChanges() ;
|
||||||
void Update() ;
|
void Update() ;
|
||||||
|
@ -64,4 +66,4 @@ private :
|
||||||
Json m_options ;
|
Json m_options ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
/// construct an entry for the root folder
|
/// construct an entry for the root folder
|
||||||
Entry::Entry( ) :
|
Entry::Entry( ) :
|
||||||
|
@ -195,4 +195,4 @@ std::string Entry::Name() const
|
||||||
return (m_kind == "file" || m_kind == "pdf") ? m_filename : m_title ;
|
return (m_kind == "file" || m_kind == "pdf") ? m_filename : m_title ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace xml
|
||||||
class Node ;
|
class Node ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
/*! \brief corresponds to an "entry" in the resource feed
|
/*! \brief corresponds to an "entry" in the resource feed
|
||||||
|
|
||||||
This class is decodes an entry in the resource feed. It will stored the properties like
|
This class is decodes an entry in the resource feed. It will stored the properties like
|
||||||
|
@ -95,4 +97,4 @@ private :
|
||||||
bool m_is_removed ;
|
bool m_is_removed ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
Feed::Feed( )
|
Feed::Feed( )
|
||||||
{
|
{
|
||||||
|
@ -123,4 +123,4 @@ const xml::Node& Feed::Root() const
|
||||||
return m_root ;
|
return m_root ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -36,6 +36,8 @@ namespace http
|
||||||
class Header ;
|
class Header ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
class Feed
|
class Feed
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
|
@ -88,4 +90,4 @@ private :
|
||||||
reference dereference() const ;
|
reference dereference() const ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
// for debugging
|
// for debugging
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
// hard coded XML file
|
// hard coded XML file
|
||||||
const std::string xml_meta =
|
const std::string xml_meta =
|
||||||
|
@ -668,11 +668,11 @@ bool Resource::HasID() const
|
||||||
return !m_href.empty() && !m_id.empty() ;
|
return !m_href.empty() && !m_id.empty() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
void swap( gr::Resource& c1, gr::Resource& c2 )
|
void swap( gr::v1::Resource& c1, gr::v1::Resource& c2 )
|
||||||
{
|
{
|
||||||
c1.Swap( c2 ) ;
|
c1.Swap( c2 ) ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,12 @@ namespace http
|
||||||
class Agent ;
|
class Agent ;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Entry ;
|
|
||||||
class Json ;
|
class Json ;
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
|
class Entry ;
|
||||||
|
|
||||||
/*! \brief A resource can be a file or a folder in the google drive
|
/*! \brief A resource can be a file or a folder in the google drive
|
||||||
|
|
||||||
The google drive contains a number of resources, which is represented by this class.
|
The google drive contains a number of resources, which is represented by this class.
|
||||||
|
@ -158,9 +161,9 @@ private :
|
||||||
State m_state ;
|
State m_state ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
void swap( gr::Resource& c1, gr::Resource& c2 ) ;
|
void swap( gr::v1::Resource& c1, gr::v1::Resource& c2 ) ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
using namespace details ;
|
using namespace details ;
|
||||||
|
|
||||||
|
@ -155,4 +155,4 @@ ResourceTree::iterator ResourceTree::end()
|
||||||
return m_set.get<ByIdentity>().end() ;
|
return m_set.get<ByIdentity>().end() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -32,6 +32,8 @@ namespace gr {
|
||||||
|
|
||||||
class Json ;
|
class Json ;
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
namespace details
|
namespace details
|
||||||
{
|
{
|
||||||
using namespace boost::multi_index ;
|
using namespace boost::multi_index ;
|
||||||
|
@ -96,4 +98,4 @@ private :
|
||||||
Resource* m_root ;
|
Resource* m_root ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr { namespace v1 {
|
||||||
|
|
||||||
State::State( const fs::path& filename, const Json& options ) :
|
State::State( const fs::path& filename, const Json& options ) :
|
||||||
m_res ( options["path"].Str() ),
|
m_res ( options["path"].Str() ),
|
||||||
|
@ -63,7 +63,7 @@ bool State::IsIgnore( const std::string& filename )
|
||||||
return filename[0] == '.' ;
|
return filename[0] == '.' ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void State::FromLocal( const fs::path& p, gr::Resource* folder )
|
void State::FromLocal( const fs::path& p, Resource* folder )
|
||||||
{
|
{
|
||||||
assert( folder != 0 ) ;
|
assert( folder != 0 ) ;
|
||||||
assert( folder->IsFolder() ) ;
|
assert( folder->IsFolder() ) ;
|
||||||
|
@ -294,4 +294,4 @@ void State::ChangeStamp( long cstamp )
|
||||||
m_cstamp = cstamp ;
|
m_cstamp = cstamp ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -34,6 +34,9 @@ namespace http
|
||||||
}
|
}
|
||||||
|
|
||||||
class Json ;
|
class Json ;
|
||||||
|
|
||||||
|
namespace v1 {
|
||||||
|
|
||||||
class Resource ;
|
class Resource ;
|
||||||
class Entry ;
|
class Entry ;
|
||||||
|
|
||||||
|
@ -80,4 +83,4 @@ private :
|
||||||
std::vector<Entry> m_unresolved ;
|
std::vector<Entry> m_unresolved ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} } // end of namespace gr::v1
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2013 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Drive.hh"
|
||||||
|
|
||||||
|
namespace gr { namespace v2 {
|
||||||
|
|
||||||
|
Drive::Drive( ) :
|
||||||
|
m_root( "", "", "" )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Drive::Refresh( http::Agent *agent )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} } // end of namespace gr::v2
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2013 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Resource.hh"
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
|
||||||
|
namespace http
|
||||||
|
{
|
||||||
|
class Agent ;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace v2 {
|
||||||
|
|
||||||
|
class Drive
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
Drive( ) ;
|
||||||
|
|
||||||
|
void Refresh( http::Agent *agent ) ;
|
||||||
|
|
||||||
|
private :
|
||||||
|
Resource m_root ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
} } // end of namespace gr::v2
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2012 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Feed.hh"
|
||||||
|
|
||||||
|
#include "http/Agent.hh"
|
||||||
|
#include "http/Header.hh"
|
||||||
|
#include "protocol/JsonResponse.hh"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace gr { namespace v2 {
|
||||||
|
|
||||||
|
Feed::Feed( const std::string& base )
|
||||||
|
{
|
||||||
|
// Next() will grab this link
|
||||||
|
m_content.Add( "nextLink", Json(base) ) ;
|
||||||
|
|
||||||
|
Json url ;
|
||||||
|
m_content.Get("nextLink", url) ;
|
||||||
|
std::cout << "link = " << url.Str() << std::endl ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Feed::Next( http::Agent *agent )
|
||||||
|
{
|
||||||
|
Json url ;
|
||||||
|
if ( !m_content.Get("nextLink", url) )
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
http::JsonResponse out ;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
agent->Get( url.Str(), &out, http::Header() ) ;
|
||||||
|
}
|
||||||
|
catch ( Exception& e )
|
||||||
|
{
|
||||||
|
e << DriveFeed_( m_content ) ;
|
||||||
|
throw ;
|
||||||
|
}
|
||||||
|
m_content = out.Response() ;
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json Feed::Content() const
|
||||||
|
{
|
||||||
|
return m_content ;
|
||||||
|
}
|
||||||
|
|
||||||
|
} } // end of namespace
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2012 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "protocol/Json.hh"
|
||||||
|
#include "util/Exception.hh"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace gr
|
||||||
|
{
|
||||||
|
namespace http
|
||||||
|
{
|
||||||
|
class Agent ;
|
||||||
|
class Header ;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Json ;
|
||||||
|
|
||||||
|
namespace v2 {
|
||||||
|
|
||||||
|
class Feed
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
// exception info
|
||||||
|
typedef boost::error_info<struct DriveFeed, Json> DriveFeed_ ;
|
||||||
|
|
||||||
|
public :
|
||||||
|
Feed( const std::string& base ) ;
|
||||||
|
bool Next( http::Agent *agent ) ;
|
||||||
|
|
||||||
|
Json Content() const ;
|
||||||
|
|
||||||
|
private :
|
||||||
|
Json m_content ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
} } // end of namespace gr::v2
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2013 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Resource.hh"
|
||||||
|
|
||||||
|
namespace gr { namespace v2 {
|
||||||
|
|
||||||
|
Resource::Resource( const std::string& id, const std::string& mime, const std::string& title ) :
|
||||||
|
m_id( id ),
|
||||||
|
m_mime( mime ),
|
||||||
|
m_title( title )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Resource::ID() const
|
||||||
|
{
|
||||||
|
return m_id ;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Resource::Mime() const
|
||||||
|
{
|
||||||
|
return m_mime ;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Resource::Title() const
|
||||||
|
{
|
||||||
|
return m_title ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Resource::IsFolder() const
|
||||||
|
{
|
||||||
|
return m_mime == "application/vnd.google-apps.folder" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Resource::Add( const Resource& child )
|
||||||
|
{
|
||||||
|
m_children.push_back( child ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
} } // end of namespace gr::v2
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
grive: an GPL program to sync a local directory with Google Drive
|
||||||
|
Copyright (C) 2013 Wan Wai Ho
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace gr { namespace v2 {
|
||||||
|
|
||||||
|
class Resource
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
Resource( const std::string& id, const std::string& mime, const std::string& title ) ;
|
||||||
|
|
||||||
|
std::string ID() const ;
|
||||||
|
std::string Mime() const ;
|
||||||
|
std::string Title() const ;
|
||||||
|
|
||||||
|
bool IsFolder() const ;
|
||||||
|
|
||||||
|
void Add( const Resource& child ) ;
|
||||||
|
|
||||||
|
private :
|
||||||
|
std::string m_id ;
|
||||||
|
std::string m_mime ;
|
||||||
|
std::string m_title ;
|
||||||
|
|
||||||
|
std::vector<Resource> m_children ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
} } // end of namespace gr::v2
|
|
@ -63,9 +63,11 @@ Json::Json( const char *str ) :
|
||||||
) ;
|
) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Note that json_object_new_string_len() is not used.
|
||||||
|
*/
|
||||||
struct json_object* Json::InitStr( const char *str, std::size_t n )
|
struct json_object* Json::InitStr( const char *str, std::size_t n )
|
||||||
{
|
{
|
||||||
struct json_object *j = ::json_object_new_string_len( str, n ) ;
|
struct json_object *j = ::json_object_new_string( str ) ;
|
||||||
if ( j == 0 )
|
if ( j == 0 )
|
||||||
BOOST_THROW_EXCEPTION(
|
BOOST_THROW_EXCEPTION(
|
||||||
Error()
|
Error()
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
namespace grut {
|
namespace grut {
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v1 ;
|
||||||
|
|
||||||
EntryTest::EntryTest( )
|
EntryTest::EntryTest( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
namespace grut {
|
namespace grut {
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v1 ;
|
||||||
|
|
||||||
ResourceTest::ResourceTest( )
|
ResourceTest::ResourceTest( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
namespace grut {
|
namespace grut {
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v1 ;
|
||||||
|
|
||||||
ResourceTreeTest::ResourceTreeTest( )
|
ResourceTreeTest::ResourceTreeTest( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
namespace grut {
|
namespace grut {
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
using namespace gr::v1 ;
|
||||||
|
|
||||||
StateTest::StateTest( )
|
StateTest::StateTest( )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue