Exemple #1
0
// enumerate all plugins that had valid DatabasePluginInfo()
static int FindDbPluginForProfile(const char*, DATABASELINK * dblink, LPARAM lParam)
{
	TCHAR* tszProfile = ( TCHAR* )lParam;

	int res = DBPE_CONT;
	if ( dblink && dblink->cbSize == sizeof(DATABASELINK)) {
		char* szProfile = makeFileName(tszProfile);
		// liked the profile?
		int err = 0;
		if (dblink->grokHeader(szProfile, &err) == 0) {
			// added APIs?
			if ( !dblink->Load(szProfile, &pluginCoreLink)) {
				fillProfileName( tszProfile );
				res = DBPE_DONE;
			}
			else res = DBPE_HALT;
		}
		else {
			res = DBPE_HALT;
			switch ( err ) {
			case EGROKPRF_CANTREAD:
			case EGROKPRF_UNKHEADER:
				// just not supported.
				res = DBPE_CONT;

			case EGROKPRF_VERNEWER:
			case EGROKPRF_DAMAGED:
				break;
			}
		} //if
		mir_free(szProfile);
	}
	return res;
}
// enumerate all plugins that had valid DatabasePluginInfo()
int tryOpenDatabase(const TCHAR *tszProfile)
{
	bool bWasOpened = false;

	for (int i=arDbPlugins.getCount()-1; i >= 0; i--) {
		DATABASELINK *p = arDbPlugins[i];

		// liked the profile?
		int err = p->grokHeader(tszProfile);
		if (err != ERROR_SUCCESS) { // smth went wrong
			switch (err) {
			case EGROKPRF_CANTREAD:
			case EGROKPRF_UNKHEADER:
				// just not supported.
				continue;
			}
			return err;
		}

		bWasOpened = true;

		// try to load database
		MIDatabase *pDb = p->Load(tszProfile);
		if (pDb) {
			fillProfileName(tszProfile);
			currDblink = p;
			db_setCurrent(currDb = pDb);
			return 0;
		}
	}

	return (bWasOpened) ? -1 : EGROKPRF_CANTREAD;
}
Exemple #3
0
// enumerate all plugins that had valid DatabasePluginInfo()
static int FindDbPluginAutoCreate(const char*, DATABASELINK * dblink, LPARAM lParam)
{
	TCHAR* tszProfile = ( TCHAR* )lParam;

	int res = DBPE_CONT;
	if (dblink && dblink->cbSize == sizeof(DATABASELINK)) {
		CreatePathToFileT( tszProfile );

		int err;
		char *szProfile = makeFileName( tszProfile );
		if (dblink->makeDatabase(szProfile, &err) == 0) {
			dbCreated = true;
			if ( !dblink->Load(szProfile, &pluginCoreLink)) {
				fillProfileName( tszProfile );
				res = DBPE_DONE;
			}
			else res = DBPE_HALT;
		}
		mir_free(szProfile);
	}
	return res;
}
// enumerate all plugins that had valid DatabasePluginInfo()
static int tryCreateDatabase(const TCHAR* ptszProfile)
{
	TCHAR* tszProfile = NEWTSTR_ALLOCA(ptszProfile);
	CreatePathToFileT(tszProfile);

	for (int i=0; i < arDbPlugins.getCount(); i++) {
		DATABASELINK* p = arDbPlugins[i];

		int err = p->makeDatabase(tszProfile);
		if (err == ERROR_SUCCESS) {
			g_bDbCreated = true;
			MIDatabase *pDb = p->Load(tszProfile);
			if (pDb != NULL) {
				fillProfileName(tszProfile);
				currDblink = p;
				db_setCurrent(currDb = pDb);
				return 0;
			}
			return 1;
		}
	}
	return 1;
}