#include <creaImageIOSystem.h>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
-
+//#include "io.h"
#ifndef PATH_MAX // If not defined yet : do it
# define PATH_MAX 2048
#endif
}
//==============================================================
+ //==============================================================
+ void Gimmick::Initialize(const std::string& path)
+ {
+ Initialize();
+ }
//==============================================================
void Gimmick::Initialize()
CreateUserSettingsDirectory();
// Sets the current directory to the home dir
mCurrentDirectory = GetHomeDirectory();
- mSynchronizer= new Synchronizer(GetUserSettingsDirectory());
+ mSynchronizer= new Synchronizer(GetUserSettingsDirectory()+"Shared/gimmick/");
mSettings = new Settings(mCurrentDirectory);
std::string dbpath = GetLocalDatabasePath();
// Create or open local database
- std::string dpath= mCurrentDirectory + "/.gimmick/localdatabase_Descriptor.txt";
+ std::string dpath= mCurrentDirectory + "/.gimmick/Shared/gimmick/localdatabase_Descriptor.txt";
boost::algorithm::replace_all( dpath,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
//Add additional DB from user Settings
addDBSettings();
- // Creates files and directories database
- mTimestampDatabase = new TimestampDatabaseHandler(GetTimestampDatabasePath());
- // Create or open local database
- if (! boost::filesystem::exists( GetTimestampDatabasePath() ) )
- {
- std::string mess = "Timestamp database '";
- mess += GetTimestampDatabasePath();
- mess += "' does not exist : creating it";
- GimmickMessage(1,mess<<std::endl);
- if ( ! mTimestampDatabase->Create() )
- {
- GimmickError("ERROR CREATING '"<<GetTimestampDatabasePath()<<"'");
- }
-
- }
- else
- {
- /// Open and test it
- GimmickMessage(1,"Opening Timestamp database '"
- <<GetTimestampDatabasePath()<<"' "
- <<std::endl);
- if ( ! mTimestampDatabase->Open() )
- {
- GimmickError("ERROR OPENING '"<<GetTimestampDatabasePath()<<"'");
- }
-
- }
-
}
///////////////////////////////////////////////////////////////////////
}
}
-
///////////////////////////////////////////////////////////////////////////
// create a DB from a attributes descriptor file for medical images //
// @param i_name : DB name //
{
delete it->second;
}
- delete mTimestampDatabase;
}
//==============================================================
}
//================================================================
- //================================================================
- int Gimmick::GetBinaryDirectory(char *pname, size_t pathsize)
- {
-
- #ifdef LINUX
- /* Oddly, the readlink(2) man page says no NULL is appended. */
- /* So you have to do it yourself, based on the return value: */
- pathsize --; /* Preserve a space to add the trailing NULL */
- long result = readlink("/proc/self/exe", pname, pathsize);
- if (result > 0)
- {
- pname[result] = 0; /* add the #@!%ing NULL */
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL (falls
- through) */
- }
- #endif /* LINUX */
-
- #ifdef WIN32
- long result = GetModuleFileName(NULL, pname, pathsize);
- if (result > 0)
- {
- /* fix up the dir slashes... */
- int len = strlen(pname);
- int idx;
- for (idx = 0; idx < len; idx++)
- {
- if (pname[idx] == '\\') pname[idx] = '/';
- }
-
- for (idx = len-1; idx >=0 ; idx--)
- {
- if (pname[idx] == '/')
- {
- pname[idx+1] = '\0';
- idx = -1;
- }
- }
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL (falls
- through) */
- }
- #endif /* WIN32 */
-
- #ifdef SOLARIS
- char *p = getexecname();
- if (p)
- {
- /* According to the Sun manpages, getexecname will
- "normally" return an */
- /* absolute path - BUT might not... AND that IF it is not,
- pre-pending */
- /* getcwd() will "usually" be the correct thing... Urgh!
- */
-
- /* check pathname is absolute (begins with a / ???) */
- if (p[0] == '/') /* assume this means we have an
- absolute path */
- {
- strncpy(pname, p, pathsize);
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- }
- else /* if not, prepend getcwd() then check if file
- exists */
- {
- getcwd(pname, pathsize);
- long result = strlen(pname);
- strncat(pname, "/", (pathsize - result));
- result ++;
- strncat(pname, p, (pathsize - result));
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL
- (falls through) */
- }
- }
- #endif /* SOLARIS */
-
- #ifdef MACOSX /* assume this is OSX */
- /*
- from http://www.hmug.org/man/3/NSModule.html
-
- extern int _NSGetExecutablePath(char *buf, unsigned long
- *bufsize);
-
- _NSGetExecutablePath copies the path of the executable
- into the buffer and returns 0 if the path was successfully
- copied in the provided buffer. If the buffer is not large
- enough, -1 is returned and the expected buffer size is
- copied in *bufsize. Note that _NSGetExecutablePath will
- return "a path" to the executable not a "real path" to the
- executable. That is the path may be a symbolic link and
- not the real file. And with deep directories the total
- bufsize needed could be more than MAXPATHLEN.
- */
-
- int status = -1;
- char *given_path = (char*)malloc(MAXPATHLEN * 2);
- if (!given_path) return status;
-
- uint32_t npathsize = MAXPATHLEN * 2;
- long result = _NSGetExecutablePath(given_path, &npathsize);
- if (result == 0)
- { /* OK, we got something - now try and resolve the real path...
- */
- if (realpath(given_path, pname) != NULL)
- {
- if ((access(pname, 0) == 0))
- status = 0; /* file exists, return OK */
- }
- }
- free (given_path);
- return status;
- #endif /* MACOSX */
-
- return -1; /* Path Lookup Failed */
- }
//================================================================
const std::string& Gimmick::GetLocalDatabasePath()
if (mLocalDatabasePath.size()==0)
{
mLocalDatabasePath = GetUserSettingsDirectory();
- mLocalDatabasePath += "local_database.sqlite3";
+ mLocalDatabasePath += "Shared/gimmick/local_database.sqlite3";
boost::algorithm::replace_all( mLocalDatabasePath,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
return mLocalDatabasePath;
}
- //================================================================
- //================================================================
- const std::string& Gimmick::GetTimestampDatabasePath()
- {
- if (mTimestampDatabasePath.size()==0)
- {
- mTimestampDatabasePath = GetUserSettingsDirectory();
- mTimestampDatabasePath += "timestamp_database.sqlite3";
- boost::algorithm::replace_all( mTimestampDatabasePath,
- INVALID_FILE_SEPARATOR ,
- VALID_FILE_SEPARATOR);
- }
- return mTimestampDatabasePath;
- }
//========================================================================
//========================================================================
boost::algorithm::replace_all( setDir,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
+ setDir+="Shared/";
+ boost::filesystem::create_directory( setDir );
+ setDir+="gimmick/";
+ boost::filesystem::create_directory( setDir );
setDir+="localdatabase_Descriptor.txt";
- //if(!boost::filesystem::is_regular_file(setDir)) //JPRX
+
if(!boost::filesystem::is_regular(setDir))
{
char name[PATH_MAX];
- int err = GetBinaryDirectory(name, PATH_MAX);
+//EED int err = GetBinaryDirectory(name, PATH_MAX);
+ crea::System::GetAppPath(name,PATH_MAX);
+ std::cout<<name<<std::endl;
+
std::string path=name;
path=path.substr(0,path.size()-1);
path=path.substr(0,path.find_last_of("/"));
- path+="/data/localdatabase_Descriptor.txt";
+ //Creating directories
+ path+="/bin/Shared/gimmick/localdatabase_Descriptor.txt";
+ std::cout<<"From: "<<path<<std::endl;
+ std::cout<<"To: "<<setDir<<std::endl;
boost::algorithm::replace_all( path,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
return i->second;
}
- //========================================================================
- ///Returns the timestamp database handler
- TimestampDatabaseHandler* Gimmick::GetTimestampDatabase() const
- {
- return mTimestampDatabase;
- }
//========================================================================
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(GetTreeHandler(d));
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
- mImageAdder.AddFiles(filenames);
+ mImageAdder.AddFiles(filenames);
}
//========================================================================
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.AddDirectory(f,recurse);
}
{
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetSynchronizer(mSynchronizer);
- mTimestampDatabase->RemoveNode("PATH",node,d);
mImageAdder.RemoveFile(node);
}
//========================================================================
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.CopyFiles(filenames, mSettings->getValue(SETTINGS_COPY_PATH));
}
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
return mImageAdder.Synchronize(repair, checkAttributes);
}
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.GetAttributes(params, filename, results);
}
mImageAdder.SetTreeHandler(it->second);
mImageAdder.DeleteDriveFromMainDB(drive);
}
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.DeleteDriveFromOtherDB(drive);
}