browserutilities/favouritesengine/ClientServer/utilsrc/BookmarkDumpMain.cpp
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/favouritesengine/ClientServer/utilsrc/BookmarkDumpMain.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*      Entry point and main function for Bookmark Dump utility application.
+*      
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <bacline.h>
+#include <FavouritesDb.h>
+#include <FavouritesLimits.h>
+#include <FavouritesItemList.h>
+#include "UnicodeFile.h"
+
+// CONSTANTS
+
+/// Formatting buffer size. Longest data is URL (plus format stuff).
+LOCAL_D const TInt KFormatBufLen = KFavouritesMaxUrl + 20;
+
+// ================= LOCAL FUNCTIONS =======================
+
+/**
+* Main function. Process command line arguments and import bookmark data.
+*/
+LOCAL_D void MainL()
+    {
+    TBuf<KFormatBufLen> buf;
+    TInt num;
+    CCommandLineArguments* args = CCommandLineArguments::NewLC();
+    if( args->Count() != 2 )
+        {
+        // Expecting command line 'Appname outfile'.
+        User::Leave( KErrArgument );
+        }
+    RFs fs;
+    User::LeaveIfError( fs.Connect() );
+    CleanupClosePushL<RFs>( fs );
+    RUnicodeFile file;
+    User::LeaveIfError( file.ReplaceL
+        ( fs, args->Arg( 1 ), EFileWrite | EFileShareExclusive ) );
+    CleanupClosePushL<RUnicodeFile>( file );
+    RFavouritesSession sess;
+    User::LeaveIfError( sess.Connect() );
+    CleanupClosePushL<RFavouritesSession>( sess );
+    RFavouritesDb db;
+    User::LeaveIfError( db.Open( sess, KBrowserBookmarks ) );
+    CleanupClosePushL<RFavouritesDb>( db );
+    User::LeaveIfError( db.Begin( /*aWrite=*/EFalse ) );
+    db.CleanupRollbackPushL();
+
+    CFavouritesItemList* items = new (ELeave) CFavouritesItemList();
+    CleanupStack::PushL( items );
+    const CFavouritesItem* item;
+    User::LeaveIfError( db.GetAll( *items ) );
+    buf.Format( _L("%d entries\r\n"), items->Count() );
+    User::LeaveIfError( file.Write( buf ) );
+    for ( TInt i = 0; i < items->Count(); i++ )
+        {
+        User::LeaveIfError( file.Write( _L("\r\n") ) );
+        item = items->At( i );
+        // Uid.
+        num = item->Uid();
+        buf.Format( _L("Uid=(%d)"), num );
+        User::LeaveIfError( file.Write( buf ) );
+        // Fixed Uid info.
+        if ( num == KFavouritesRootUid )
+            {
+            User::LeaveIfError( file.Write( _L(" (root folder)\r\n") ) );
+            }
+        else if ( num == KFavouritesHomepageUid )
+            {
+            User::LeaveIfError( file.Write( _L(" (homepage)\r\n") ) );
+            }
+        else if ( num == KFavouritesLastVisitedUid )
+            {
+            User::LeaveIfError( file.Write( _L(" (last visited)\r\n") ) );
+            }
+        else
+            {
+            User::LeaveIfError( file.Write( _L("\r\n") ) );
+            }
+        // Type.
+        if ( item->Type() == CFavouritesItem::EFolder )
+            {
+            User::LeaveIfError( file.Write( _L("Type=Folder\r\n") ) );
+            }
+        else if ( item->Type() == CFavouritesItem::EItem )
+            {
+            User::LeaveIfError( file.Write( _L("Type=Item\r\n") ) );
+            }
+        else
+            {
+            User::LeaveIfError( file.Write( _L("Type=HUH???\r\n") ) );
+            }
+        TPtrC ptr;
+        // Name
+        ptr.Set( item->Name() );
+        buf.Format( _L("Name=<%S>\r\n"), &ptr );
+        User::LeaveIfError( file.Write( buf ) );
+        // Parent.
+        buf.Format( _L("ParentFolder=(%d)\r\n"), item->ParentFolder() );
+        User::LeaveIfError( file.Write( buf ) );
+        // Url.
+        ptr.Set( item->Url() );
+        buf.Format( _L("Url=<%S>\r\n"), &ptr );
+        User::LeaveIfError( file.Write( buf ) );
+        // Access Point.
+        if ( item->WapAp().IsNull() )
+            {
+            User::LeaveIfError( file.Write( _L("WapAp=Null\r\n") ) );
+            }
+        else if ( item->WapAp().IsDefault() )
+            {
+            User::LeaveIfError( file.Write( _L("WapAp=Default\r\n") ) );
+            }
+        else
+            {
+            buf.Format( _L("WapAp=(%d)\r\n"), item->WapAp().ApId() );
+            User::LeaveIfError( file.Write( buf ) );
+            }
+        // UserName.
+        ptr.Set( item->UserName() );
+        buf.Format( _L("UserName=<%S>\r\n"), &ptr );
+        User::LeaveIfError( file.Write( buf ) );
+        // Password.
+        ptr.Set( item->Password() );
+        buf.Format( _L("Password=<%S>\r\n"), &ptr );
+        User::LeaveIfError( file.Write( buf ) );
+        // Read-only.
+        buf.Format( _L("ReadOnly=(%d)\r\n"), item->IsReadOnly() );
+        User::LeaveIfError( file.Write( buf ) );
+        // Factory item.
+        buf.Format( _L("FactoryItem=(%d)\r\n"), item->IsFactoryItem() );
+        User::LeaveIfError( file.Write( buf ) );
+        // ContextId.
+        buf.Format( _L("ContextId=(0x%x)\r\n"), item->ContextId() );
+        User::LeaveIfError( file.Write( buf ) );
+        // Modified.
+        item->Modified().FormatL
+            ( buf, _L("Modified=<%F%Y/%M/%D %H:%T:%S>\r\n") );
+        User::LeaveIfError( file.Write( buf ) );
+        // Preferred uid.
+        if ( item->Type() == CFavouritesItem::EFolder )
+            {
+            User::LeaveIfError( db.PreferredUid( item->Uid(), num ) );
+            buf.Format( _L("PreferredUid=(%d)\r\n"), num );
+            User::LeaveIfError( file.Write( buf ) );
+            }
+        }
+    CleanupStack::PopAndDestroy();      // items
+
+    User::LeaveIfError( db.Commit() );
+    CleanupStack::Pop();                // Pop the rollback
+
+    CleanupStack::PopAndDestroy( 5 );   // sess, db, file, fs, args
+    }
+
+/**
+* Entry point to the application.
+* @return Error code.
+*/
+GLDEF_C TInt E32Main()
+    {
+    TInt err = KErrNone;
+    CTrapCleanup* trapCleanup = CTrapCleanup::New();
+    if ( trapCleanup )
+        {
+        TRAP( err, MainL() );
+        delete trapCleanup;
+        }
+    else
+        {
+        err = KErrNoMemory;
+        }
+    return err;
+    }