NS_IMETHODIMP nsAbMDBDirectory::GetDatabase(nsIAddrDatabase **aResult) { NS_ENSURE_ARG_POINTER(aResult); nsresult rv; nsCOMPtr<nsIFile> databaseFile; rv = GetDatabaseFile(getter_AddRefs(databaseFile)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIAddrDatabase> addrDBFactory = do_GetService(NS_ADDRDATABASE_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); return addrDBFactory->Open(databaseFile, false /* no create */, true, aResult); }
nsresult OpenDatabaseHelper::DoDatabaseWork() { #ifdef DEBUG { bool correctThread; NS_ASSERTION(NS_SUCCEEDED(IndexedDatabaseManager::Get()->IOThread()-> IsOnCurrentThread(&correctThread)) && correctThread, "Running on the wrong thread!"); } #endif mState = eFiringEvents; // In case we fail somewhere along the line. if (IndexedDatabaseManager::IsShuttingDown()) { return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; } nsCOMPtr<nsIFile> dbFile; nsresult rv = GetDatabaseFile(mASCIIOrigin, mName, getter_AddRefs(dbFile)); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); rv = dbFile->GetPath(mDatabaseFilePath); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); nsCOMPtr<nsIFile> dbDirectory; rv = dbFile->GetParent(getter_AddRefs(dbDirectory)); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); bool exists; rv = dbDirectory->Exists(&exists); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); if (exists) { bool isDirectory; rv = dbDirectory->IsDirectory(&isDirectory); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); NS_ENSURE_TRUE(isDirectory, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); } else { rv = dbDirectory->Create(nsIFile::DIRECTORY_TYPE, 0755); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); } IndexedDatabaseManager* mgr = IndexedDatabaseManager::Get(); NS_ASSERTION(mgr, "This should never be null!"); rv = mgr->EnsureQuotaManagementForDirectory(dbDirectory); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); nsCOMPtr<mozIStorageConnection> connection; rv = CreateDatabaseConnection(mName, dbFile, getter_AddRefs(connection)); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); // Get the data version. nsCOMPtr<mozIStorageStatement> stmt; rv = connection->CreateStatement(NS_LITERAL_CSTRING( "SELECT dataVersion " "FROM database" ), getter_AddRefs(stmt)); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); bool hasResult; rv = stmt->ExecuteStep(&hasResult); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); if (!hasResult) { NS_ERROR("Database has no dataVersion!"); return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; } PRInt64 dataVersion; rv = stmt->GetInt64(0, &dataVersion); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); if (dataVersion > JS_STRUCTURED_CLONE_VERSION) { NS_ERROR("Bad data version!"); return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; } if (dataVersion < JS_STRUCTURED_CLONE_VERSION) { // Need to upgrade the database, here, before returning to the main thread. NS_NOTYETIMPLEMENTED("Implement me!"); } rv = IDBFactory::LoadDatabaseInformation(connection, mDatabaseId, &mCurrentVersion, mObjectStores); NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR); for (PRUint32 i = 0; i < mObjectStores.Length(); i++) { nsAutoPtr<ObjectStoreInfo>& objectStoreInfo = mObjectStores[i]; for (PRUint32 j = 0; j < objectStoreInfo->indexes.Length(); j++) { IndexInfo& indexInfo = objectStoreInfo->indexes[j]; mLastIndexId = NS_MAX(indexInfo.id, mLastIndexId); } mLastObjectStoreId = NS_MAX(objectStoreInfo->id, mLastObjectStoreId); } // See if we need to do a VERSION_CHANGE transaction // Optional version semantics. if (!mRequestedVersion) { // If the requested version was not specified and the database was created, // treat it as if version 1 were requested. if (mCurrentVersion == 0) { mRequestedVersion = 1; } else { // Otherwise, treat it as if the current version were requested. mRequestedVersion = mCurrentVersion; } } if (mCurrentVersion > mRequestedVersion) { return NS_ERROR_DOM_INDEXEDDB_VERSION_ERR; } if (mCurrentVersion != mRequestedVersion) { mState = eSetVersionPending; } return NS_OK; }
void SnippetsConsole() { if (s_bConsoleVisible) { // Hide the window and uncheck the menu item SendMessage(g_nppData._nppHandle, NPPM_DMMHIDE, 0, (LPARAM) s_hDlg); SendMessage(g_nppData._nppHandle, NPPM_SETMENUITEMCHECK, (WPARAM) g_funcItem[0]._cmdID, (LPARAM) FALSE); // The console is not visible anymore s_bConsoleVisible = false; } else { // The console window will become visible. // Set it now already so other routines work properly s_bConsoleVisible = true; if (!s_bConsoleInitialized) { // Get the right database filename if (!GetDatabaseFile()) { MsgBox("Unable to find the database, check your installation!"); return; } // Check if we have a version of Notepad++ that supports NPPM_GETLANGUAGENAME DWORD ver = (DWORD) SendMessage(g_nppData._nppHandle, NPPM_GETNPPVERSION, (WPARAM) 0, (LPARAM) 0); g_HasLangMsgs = (ver >= MAKELONG(93, 5)); // Load the icon s_hTabIcon = (HICON) LoadImage(g_hInst, MAKEINTRESOURCE(IDI_SNIPPETS), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_COLOR | LR_LOADTRANSPARENT); // Initialize everything for the console window tTbData tbd; ZeroMemory(&tbd, sizeof(tTbData)); tbd.dlgID = -1; // Nr of menu item to assign (!= _cmdID, beware) tbd.pszModuleName = L"Snippets"; // name of the dll this dialog belongs to tbd.pszName = L"Snippets"; // Name for titlebar tbd.hClient = s_hDlg; // HWND Handle of window this dock belongs to tbd.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB; // Put it on the right tbd.hIconTab = s_hTabIcon; // Put the icon in SendMessage(g_nppData._nppHandle, NPPM_DMMREGASDCKDLG, 0, (LPARAM) &tbd); // Register it // It should initialize now s_bConsoleInitialized = true; } // Put the items in the combo and the list UpdateSnippetsList(); // Show the window and check the menu item SendMessage(g_nppData._nppHandle, NPPM_DMMSHOW, 0, (LPARAM) s_hDlg); SendMessage(g_nppData._nppHandle, NPPM_SETMENUITEMCHECK, (WPARAM) g_funcItem[0]._cmdID, (LPARAM) TRUE); // Set the focus back on the main window SetFocusOnEditor(); } // Store the visiblity in the options g_Options->showConsoleDlg = s_bConsoleVisible; }