| /* | |
| * Kamera.cpp | |
| * | |
| * Created on: Apr 19, 2011 | |
| * Author: Anis Kadri <anis@adobe.com> | |
| * | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| */ | |
| #include "../inc/Kamera.h" | |
| Kamera::Kamera(Web* pWeb) : CordovaCommand(pWeb) { | |
| } | |
| Kamera::~Kamera() { | |
| } | |
| void | |
| Kamera::Run(const String& command) { | |
| if(!command.IsEmpty()) { | |
| Uri commandUri; | |
| commandUri.SetUri(command); | |
| String method = commandUri.GetHost(); | |
| StringTokenizer strTok(commandUri.GetPath(), L"/"); | |
| if(strTok.GetTokenCount() < 1) { | |
| AppLogException("Not enough params"); | |
| return; | |
| } | |
| strTok.GetNextToken(callbackId); | |
| if(method == "org.apache.cordova.Camera.getPicture" && !callbackId.IsEmpty()) { | |
| GetPicture(); | |
| } | |
| } | |
| } | |
| void | |
| Kamera::GetPicture() { | |
| AppLogDebug("Taking picture"); | |
| ArrayList* pDataList = null; | |
| pDataList = new ArrayList(); | |
| pDataList->Construct(); | |
| String* pData = null; | |
| pData = new String(L"type:camera"); | |
| pDataList->Add(*pData); | |
| AppControl* pAc = AppManager::FindAppControlN(APPCONTROL_CAMERA, OPERATION_CAPTURE); | |
| if(pAc) | |
| { | |
| pAc->Start(pDataList, this); | |
| delete pAc; | |
| } | |
| pDataList->RemoveAll(true); | |
| delete pDataList; | |
| } | |
| void | |
| Kamera::OnAppControlCompleted (const String &appControlId, const String &operationId, const IList *pResultList) { | |
| //This method is invoked when an application control callback event occurs. | |
| String* pCaptureResult = null; | |
| if (appControlId.Equals(APPCONTROL_CAMERA) && operationId.Equals(OPERATION_CAPTURE)) | |
| { | |
| pCaptureResult = (Osp::Base::String*)pResultList->GetAt(0); | |
| if (pCaptureResult->Equals(String(APPCONTROL_RESULT_SUCCEEDED))) | |
| { | |
| String eval; | |
| AppLog("Camera capture success."); | |
| String* pCapturePath = (String*)pResultList->GetAt(1); | |
| // copying to app Home Folder | |
| String homeFilename; | |
| homeFilename.Format(128, L"/Home/%S", File::GetFileName(*pCapturePath).GetPointer()); | |
| result r = File::Copy(*pCapturePath, homeFilename, true); | |
| if(IsFailed(r)) { | |
| AppLogException("Could not copy picture"); | |
| eval.Format(512, L"Cordova.callbacks['%S'].fail('Could not copy picture')", callbackId.GetPointer()); | |
| AppLogDebug("%S", eval.GetPointer()); | |
| pWeb->EvaluateJavascriptN(eval); | |
| } | |
| // Uri imageUri; | |
| // imageUri.setUri(homeFilename); | |
| eval.Clear(); | |
| eval.Format(512, L"Cordova.callbacks['%S'].success('file://%S')", callbackId.GetPointer(), homeFilename.GetPointer()); | |
| AppLogDebug("%S", eval.GetPointer()); | |
| pWeb->EvaluateJavascriptN(eval); | |
| } | |
| else if (pCaptureResult->Equals(String(APPCONTROL_RESULT_CANCELED))) | |
| { | |
| AppLog("Camera capture canceled."); | |
| String eval; | |
| eval.Format(512, L"Cordova.callbacks['%S'].fail('Camera capture canceled')", callbackId.GetPointer()); | |
| pWeb->EvaluateJavascriptN(eval); | |
| } | |
| else if (pCaptureResult->Equals(String(APPCONTROL_RESULT_FAILED))) | |
| { | |
| AppLog("Camera capture failed."); | |
| String eval; | |
| eval.Format(512, L"Cordova.callbacks['%S'].fail('Camera capture failed')", callbackId.GetPointer()); | |
| pWeb->EvaluateJavascriptN(eval); | |
| } | |
| } | |
| } |