// static void LLWebProfile::reportImageUploadStatus(bool ok) { if (mStatusCallback) { mStatusCallback(ok); } }
void MediaPlayer::initialize(){ if(mInitialized) return; const int mediaType = mResource.getType(); if(mediaType == ds::Resource::ERROR_TYPE || mediaType == ds::Resource::FONT_TYPE){ // this is not a useful warning message in the very common case of setting the size of a MediaPlayer before loading the media // GN: This is a VERY useful message if your media isn't showing up, so we'll just check for emptiness instead of no warning if(!mResource.empty()){ DS_LOG_WARNING("Whoopsies - tried to open a media player on an invalid file type. " << mResource.getAbsoluteFilePath()); } return; } // do this first to avoid recursion problems mInitialized = true; float contentWidth = 1.0f; float contentHeight = 1.0f; mContentAspectRatio = 1.0f; bool showThumbnail = true; if(mediaType == ds::Resource::IMAGE_TYPE){ int flags = 0; if(mMediaViewerSettings.mCacheImages){ flags |= Image::IMG_CACHE_F; } mPrimaryImage = new ds::ui::Image(mEngine, mResource, flags); addChildPtr(mPrimaryImage); mPrimaryImage->checkStatus(); if(mPrimaryImage->isLoaded()){ showThumbnail = false; } else { mPrimaryImage->setOpacity(0.0f); mPrimaryImage->setStatusCallback([this](ds::ui::Image::Status status){ if(status.mCode == status.STATUS_LOADED && mPrimaryImage){ mPrimaryImage->tweenOpacity(1.0f, mAnimDuration); if(mStatusCallback){ mStatusCallback(true); } } }); } mContentAspectRatio = mPrimaryImage->getWidth() / mPrimaryImage->getHeight(); contentWidth = mPrimaryImage->getWidth(); contentHeight = mPrimaryImage->getHeight(); } else if(mediaType == ds::Resource::VIDEO_TYPE){ mVideoPlayer = new VideoPlayer(mEngine, mEmbedInterface); addChildPtr(mVideoPlayer); mVideoPlayer->setErrorCallback([this](const std::string& msg){ if(mErrorCallback) mErrorCallback(msg); }); mVideoPlayer->setGoodStatusCallback([this]{ if(mStatusCallback) mStatusCallback(true); }); mVideoPlayer->setPan(mMediaViewerSettings.mVideoPanning); mVideoPlayer->setAutoSynchronize(mMediaViewerSettings.mVideoAutoSync); mVideoPlayer->setPlayableInstances(mMediaViewerSettings.mVideoPlayableInstances); mVideoPlayer->setAutoPlayFirstFrame(mMediaViewerSettings.mVideoAutoPlayFirstFrame); mVideoPlayer->setVideoLoop(mMediaViewerSettings.mVideoLoop); mVideoPlayer->setMedia(mResource.getAbsoluteFilePath()); mContentAspectRatio = mVideoPlayer->getWidth() / mVideoPlayer->getHeight(); contentWidth = mVideoPlayer->getWidth(); contentHeight = mVideoPlayer->getHeight(); } else if(mediaType == ds::Resource::VIDEO_STREAM_TYPE){ mStreamPlayer = new StreamPlayer(mEngine, mEmbedInterface); addChildPtr(mStreamPlayer); mStreamPlayer->setErrorCallback([this](const std::string& msg){ if(mErrorCallback) mErrorCallback(msg); }); mStreamPlayer->setGoodStatusCallback([this]{ if(mStatusCallback) mStatusCallback(true); }); mStreamPlayer->setResource(mResource); mContentAspectRatio = mStreamPlayer->getWidth() / mStreamPlayer->getHeight(); contentWidth = mStreamPlayer->getWidth(); contentHeight = mStreamPlayer->getHeight(); } else if(mediaType == ds::Resource::PDF_TYPE){ mPDFPlayer = new PDFPlayer(mEngine, mEmbedInterface); addChildPtr(mPDFPlayer); mPDFPlayer->setMedia(mResource.getAbsoluteFilePath()); mPDFPlayer->setErrorCallback([this](const std::string& msg){ if(mErrorCallback) mErrorCallback(msg); }); mPDFPlayer->setGoodStatusCallback([this]{ if(mStatusCallback){ mStatusCallback(true); } }); mContentAspectRatio = mPDFPlayer->getWidth() / mPDFPlayer->getHeight(); contentWidth = mPDFPlayer->getWidth(); contentHeight = mPDFPlayer->getHeight(); } else if(mediaType == ds::Resource::WEB_TYPE){ mWebPlayer = new WebPlayer(mEngine, mEmbedInterface); addChildPtr(mWebPlayer); mWebPlayer->setWebViewSize(mMediaViewerSettings.mWebDefaultSize); mWebPlayer->setKeyboardParams(mMediaViewerSettings.mWebKeyboardPanelSize, mMediaViewerSettings.mWebKeyboardKeyScale, mMediaViewerSettings.mWebAllowKeyboard); mWebPlayer->setAllowTouchToggle(mMediaViewerSettings.mWebAllowTouchToggle); mWebPlayer->setMedia(mResource.getAbsoluteFilePath()); if(mWebPlayer->getWeb()){ mWebPlayer->getWeb()->setDocumentReadyFn([this]{ if(mStatusCallback) mStatusCallback(true); }); mWebPlayer->getWeb()->setErrorCallback([this](const std::string& errorMsg){ if(mErrorCallback) mErrorCallback(errorMsg); }); } mContentAspectRatio = mWebPlayer->getWidth() / mWebPlayer->getHeight(); contentWidth = mWebPlayer->getWidth(); contentHeight = mWebPlayer->getHeight(); } else { DS_LOG_WARNING("Whoopsies - tried to open a media player on an invalid file type. " << mResource.getAbsoluteFilePath() << " " << ds::utf8_from_wstr(mResource.getTypeName())); } if(showThumbnail && (mResource.getThumbnailId() > 0 || !mResource.getThumbnailFilePath().empty())){ int flags = 0; if(mMediaViewerSettings.mCacheImages){ flags |= Image::IMG_CACHE_F; } mThumbnailImage = new ds::ui::Image(mEngine); addChildPtr(mThumbnailImage); mThumbnailImage->sendToBack(); if(mResource.getThumbnailId() > 0){ mThumbnailImage->setImageResource(mResource.getThumbnailId(), flags); } else { mThumbnailImage->setImageFile(mResource.getThumbnailFilePath(), flags); } mThumbnailImage->setOpacity(0.0f); mThumbnailImage->setStatusCallback([this](ds::ui::Image::Status status){ if(status.mCode == status.STATUS_LOADED && mThumbnailImage){ mThumbnailImage->tweenOpacity(1.0f, mAnimDuration); } }); } setSize(contentWidth, contentHeight); if(mInitializedCallback){ mInitializedCallback(); } }