ImagePrint/ImagePrintUI/imageprinteng/src/cdiscoverymanager.cpp
changeset 0 d11fb78c4374
child 2 acc370d7f2f6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintUI/imageprinteng/src/cdiscoverymanager.cpp	Thu Dec 17 08:45:53 2009 +0200
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  
+*
+*/
+
+
+#include <eikenv.h>
+#include <bluetooth/hci/hcierrors.h>
+
+#include "tprinter.h"
+#include "cdiscoverymanager.h"
+#include "ciffactory.h"
+#include "cprintjobmanager.h"
+#include "csettingsmanager.h"
+#include "imageprint.h"
+#include "cimageprint.h"
+#include "clog.h"
+
+const TInt KMMCID( 1 );
+
+//  CONSTRUCTION
+CDiscoveryManager* CDiscoveryManager::NewL(
+    CIFFactory* aFactory )
+    {
+    CDiscoveryManager* self = CDiscoveryManager::NewLC( aFactory );
+    CleanupStack::Pop();    // self
+
+    return self;
+    }
+
+CDiscoveryManager* CDiscoveryManager::NewLC(
+    CIFFactory* aFactory )
+    {
+    CDiscoveryManager* self =
+        new ( ELeave ) CDiscoveryManager( aFactory );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// Constructor
+CDiscoveryManager::CDiscoveryManager(
+    CIFFactory* aFactory ) :
+      iFactory( aFactory )
+    {
+    }
+
+// Destruction
+CDiscoveryManager::~CDiscoveryManager()
+    {
+    }
+
+// 2nd phase constructor
+void CDiscoveryManager::ConstructL()
+    {
+    }
+
+// Returns supported protocols
+TUint CDiscoveryManager::SupportedProtocols()
+    {
+    return iFactory->Engine()->SupportedProtocols();
+    }
+
+// Initiates device discovery
+void CDiscoveryManager::StartDeviceDiscoveryL(
+    MDiscoveryObserver* aNotifier,
+    TUint aProtocol )
+    {
+    TInt discoveryError( KErrNone );
+    LOG("CDiscoveryManager::StartDeviceDiscoveryL BEGIN");
+    iMMCUid = -1;
+    iCancelling = EFalse;
+    iOnGoingDiscovery = ETrue;
+    iDiscoveryObserver = aNotifier;
+    TRAP_IGNORE( discoveryError = iFactory->Engine()->StartDiscoveryL( *this, aProtocol ) );
+    LOG1("CDiscoveryManager::StartDeviceDiscoveryL END, error = %d", discoveryError);
+	User::LeaveIfError( discoveryError );
+    }
+
+// Cancels the discovery notification
+void CDiscoveryManager::CancelDeviceDiscoveryL()
+    {
+    if ( iOnGoingDiscovery )
+        {
+        User::LeaveIfError( iFactory->Engine()->CancelDiscovery() );
+        iCancelling = ETrue;
+        iOnGoingDiscovery = EFalse;
+        }
+    }
+
+// Chooses the printer
+TInt CDiscoveryManager::ChoosePrinterL(
+    TInt aPrinterUid )
+    {
+	LOG("CDiscoveryManager::ChoosePrinterL BEGIN");
+	TInt err = 0;
+
+    // Create print job
+    CPrintJobManager* printJobManager =
+        static_cast<CPrintJobManager*>( iFactory->PrintJobIF() );
+    iOnGoingDiscovery = EFalse;
+
+    err = printJobManager->CreatePrintJobL( aPrinterUid );
+    LOG2("CDiscoveryManager::ChoosePrinterL printjob ret: %d with printer uid: %d", err, aPrinterUid );
+	if ( err == KErrNone )
+		{
+		if( aPrinterUid == KMMCID )
+		    {
+		    iMMCUid = KMMCID;    
+		    }		
+
+		// Do initialization of the settings manager once print job is
+        // created and the settings can be fetched
+        CSettingsManager* settings =
+            static_cast<CSettingsManager*>( iFactory->SettingsIF() );
+        settings->InitSettingsL( aPrinterUid, iMMCUid );
+
+        iPrinterUid = aPrinterUid;
+		}		
+    
+	LOG("CDiscoveryManager::ChoosePrinterL END");
+	return err;
+    }
+
+// Called when the server finds the printer
+void CDiscoveryManager::FoundPrinterL(
+    const TPrinter& aPrinterInfo )
+    {
+    HBufC* name = HBufC::NewLC( aPrinterInfo.iDisplayName.Length() );
+    name->Des().Copy( aPrinterInfo.iDisplayName );
+
+    MDiscoveryObserver::TPrinterType type;
+    switch ( aPrinterInfo.iProtocol )
+        {
+        case KImagePrint_PrinterProtocol_BPP:
+            type = MDiscoveryObserver::EBPP;
+            break;
+        case KImagePrint_PrinterProtocol_DPOF:
+            type = MDiscoveryObserver::EMMC;
+            iMMCUid = aPrinterInfo.iPrinterID;
+            break;
+        case KImagePrint_PrinterProtocol_PictBridge:
+            type = MDiscoveryObserver::EUSB;
+            break;
+
+        case KImagePrint_PrinterProtocol_OPP_Printer: //fallthrough
+        case KImagePrint_PrinterProtocol_OPP_PC:
+            type = MDiscoveryObserver::EOPP;
+            break;
+        case KImagePrint_PrinterProtocol_UPnP:
+        	type = MDiscoveryObserver::EWLAN;
+            break;
+        default:
+            type = MDiscoveryObserver::EBPP;
+            break;
+        }
+
+    if( iOnGoingDiscovery != EFalse )
+        {
+        iDiscoveryObserver->NotifyNewPrintDeviceL(
+            name, aPrinterInfo.iPrinterID,
+            aPrinterInfo.iProperties & TPrinter::Cached,
+            type, aPrinterInfo.iVendor );
+        }
+    CleanupStack::PopAndDestroy();  // name
+    }
+
+// Called to inform the status
+void CDiscoveryManager::DiscoveryStatusL(
+    TInt aStatus,
+    TInt aErrorCode,
+    TInt /*aErrorStringCode*/ )
+    {
+    // When Bluetooth discovery is finished, but Bluetooth is not enabled pass error code to UI.   
+    if ( aErrorCode == ENoConnection )
+    	{
+    	if (iDiscoveryObserver){
+    	iDiscoveryObserver->DiscoveryError( aErrorCode ); 
+    	}
+	}		
+	if ( iCancelling )
+        {
+        // Exection continues in CancelDiscoveryL()
+
+        if ( iDiscoveryObserver )
+           {
+           iDiscoveryObserver->DeviceDiscoveryCompleted();
+		   }
+        }
+    else
+        {
+        if ( iOnGoingDiscovery )
+            {
+            if ( aStatus == EDiscovering )
+                {
+                iOnGoingDiscovery = EFalse;
+                iDiscoveryObserver->DeviceDiscoveryCompleted();
+                }
+            else if ( aStatus == EDoneDiscovery )
+                {
+                iOnGoingDiscovery = EFalse;
+                iDiscoveryObserver->DeviceDiscoveryCompleted();
+                }
+            else if ( aStatus == ECancellingDiscovery )
+                {
+                iDiscoveryObserver->DiscoveryError( aErrorCode );
+                }
+            else
+                {
+                User::Leave( KErrUnknown );
+                }
+            }
+        }
+    }
+
+// Removes cached printer from the list
+void CDiscoveryManager::RemovePrinterL( const TPrinter& aPrinterInfo )
+    {
+    if( iOnGoingDiscovery != EFalse )
+        {
+        iDiscoveryObserver->RemoveCachedPrinterL( aPrinterInfo.iPrinterID );
+        }
+    }
+
+TInt CDiscoveryManager::IsPictBridgeMode()
+    {
+    LOG("CDiscoveryManager::IsPictBridgeMode() START");
+    TInt retValue = -999;
+    retValue = iFactory->ImagePrintClient().IsPictBridgeMode();
+    LOG1("IsPictBridgeMode() returned: %d", retValue);
+    LOG("CDiscoveryManager::IsPictBridgeMode() END");
+    return retValue;
+    }
+    
+void CDiscoveryManager::RemoveDiscoveryObserver()
+	{
+	iOnGoingDiscovery = EFalse;
+	iDiscoveryObserver = 0;
+	}
+
+//  End of File