[DEV] better async but not work on GUI when request mark to redraw
This commit is contained in:
parent
95fdcfcc34
commit
5f35b6e912
@ -128,51 +128,74 @@ void appl::widget::ListViewer::searchElements(std::string _filter) {
|
|||||||
// TODO : Add the reference on the typed future in the function andTrn ... ==> then we can add later the cancel
|
// TODO : Add the reference on the typed future in the function andTrn ... ==> then we can add later the cancel
|
||||||
appl::widget::ListViewerShared tmpWidget = ememory::staticPointerCast<appl::widget::ListViewer>(sharedFromThis());
|
appl::widget::ListViewerShared tmpWidget = ememory::staticPointerCast<appl::widget::ListViewer>(sharedFromThis());
|
||||||
remoteServiceVideo.mediaMetadataGetKey(it, "title")
|
remoteServiceVideo.mediaMetadataGetKey(it, "title")
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_title = futTmp.get();;
|
APPL_INFO(" [" << elem->m_id << "] get title: " << futTmp.get());
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
|
elem->m_title = futTmp.get();
|
||||||
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
remoteServiceVideo.mediaMetadataGetKey(it, "series-name")
|
remoteServiceVideo.mediaMetadataGetKey(it, "series-name")
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_serie = futTmp.get();;
|
APPL_ERROR(" [" << elem->m_id << "] get serie: " << futTmp.get());
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
|
elem->m_serie = futTmp.get();
|
||||||
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
remoteServiceVideo.mediaMetadataGetKey(it, "saison")
|
remoteServiceVideo.mediaMetadataGetKey(it, "saison")
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_saison = futTmp.get();;
|
APPL_INFO(" [" << elem->m_id << "] get saison: " << futTmp.get());
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
|
elem->m_saison = futTmp.get();
|
||||||
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
remoteServiceVideo.mediaMetadataGetKey(it, "episode")
|
remoteServiceVideo.mediaMetadataGetKey(it, "episode")
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_episode = futTmp.get();;
|
APPL_INFO(" [" << elem->m_id << "] get episode: " << futTmp.get());
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
|
elem->m_episode = futTmp.get();
|
||||||
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
remoteServiceVideo.mediaMetadataGetKey(it, "description")
|
remoteServiceVideo.mediaMetadataGetKey(it, "description")
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_description = futTmp.get();;
|
APPL_INFO(" [" << elem->m_id << "] get description: " << futTmp.get());
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
|
elem->m_description = futTmp.get();
|
||||||
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
elem->m_thumb = egami::load("DATA:Home.svg", ivec2(128,128));
|
|
||||||
remoteServiceVideo.mediaMineTypeGet(it)
|
remoteServiceVideo.mediaMineTypeGet(it)
|
||||||
.andThen([&](zeus::FutureBase _fut){
|
.andThen([=](zeus::FutureBase _fut) mutable {
|
||||||
zeus::Future<std::string> futTmp(_fut);
|
zeus::Future<std::string> futTmp(_fut);
|
||||||
elem->m_mineType = futTmp.get();
|
APPL_INFO(" [" << elem->m_id << "] get mine-type: " << futTmp.get());
|
||||||
if (etk::start_with(elem->m_mineType, "video") == true) {
|
{
|
||||||
// TODO : Optimise this ...
|
std::unique_lock<std::mutex> lock(elem->m_mutex);
|
||||||
elem->m_thumb = egami::load("DATA:Video.svg", ivec2(128,128));
|
elem->m_mineType = futTmp.get();
|
||||||
} else if (etk::start_with(elem->m_mineType, "audio") == true) {
|
if (etk::start_with(elem->m_mineType, "video") == true) {
|
||||||
// TODO : Optimise this ...
|
// TODO : Optimise this ...
|
||||||
elem->m_thumb = egami::load("DATA:MusicNote.svg", ivec2(128,128));
|
elem->m_thumb = egami::load("DATA:Video.svg", ivec2(128,128));
|
||||||
|
} else if (etk::start_with(elem->m_mineType, "audio") == true) {
|
||||||
|
// TODO : Optimise this ...
|
||||||
|
elem->m_thumb = egami::load("DATA:MusicNote.svg", ivec2(128,128));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmpWidget->markToRedraw();
|
tmpWidget->markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
@ -197,6 +220,7 @@ void appl::widget::ListViewer::searchElements(std::string _filter) {
|
|||||||
//elem->m_thumb = remoteServiceVideo.mediaThumbGet(it, 128).wait().get();
|
//elem->m_thumb = remoteServiceVideo.mediaThumbGet(it, 128).wait().get();
|
||||||
m_listElement.push_back(elem);
|
m_listElement.push_back(elem);
|
||||||
}
|
}
|
||||||
|
APPL_INFO("Request All is done");
|
||||||
}
|
}
|
||||||
|
|
||||||
void appl::widget::ListViewer::onDraw() {
|
void appl::widget::ListViewer::onDraw() {
|
||||||
@ -374,6 +398,9 @@ void appl::ElementDisplayed::generateDisplay(vec2 _startPos, vec2 _size) {
|
|||||||
|
|
||||||
m_pos = _startPos;
|
m_pos = _startPos;
|
||||||
m_size = _size;
|
m_size = _size;
|
||||||
|
|
||||||
|
std::unique_lock<std::mutex> lock(m_property->m_mutex);
|
||||||
|
|
||||||
// --------------------------------------------
|
// --------------------------------------------
|
||||||
// -- Display text...
|
// -- Display text...
|
||||||
// --------------------------------------------
|
// --------------------------------------------
|
||||||
@ -414,6 +441,7 @@ void appl::ElementDisplayed::generateDisplay(vec2 _startPos, vec2 _size) {
|
|||||||
m_image.setSource("DATA:MusicNote.svg", 128);
|
m_image.setSource("DATA:MusicNote.svg", 128);
|
||||||
} else {
|
} else {
|
||||||
APPL_INFO("Set image: Unknow type '" << m_property->m_mineType << "'");
|
APPL_INFO("Set image: Unknow type '" << m_property->m_mineType << "'");
|
||||||
|
m_image.setSource("DATA:Home.svg", 128);
|
||||||
}
|
}
|
||||||
m_image.setPos(_startPos+vec2(10,10));
|
m_image.setPos(_startPos+vec2(10,10));
|
||||||
m_image.print(vec2(_size.y(), _size.y())-vec2(20,20));
|
m_image.print(vec2(_size.y(), _size.y())-vec2(20,20));
|
||||||
|
@ -29,6 +29,7 @@ namespace appl {
|
|||||||
};
|
};
|
||||||
class ElementProperty {
|
class ElementProperty {
|
||||||
public:
|
public:
|
||||||
|
std::mutex m_mutex;
|
||||||
uint32_t m_id; //!< Remote Id of the Media
|
uint32_t m_id; //!< Remote Id of the Media
|
||||||
bool m_metadataUpdated; //!< Check value to know when metadata is getted (like thumb ...)
|
bool m_metadataUpdated; //!< Check value to know when metadata is getted (like thumb ...)
|
||||||
egami::Image m_thumb; //!< simple image describing the element
|
egami::Image m_thumb; //!< simple image describing the element
|
||||||
|
Loading…
x
Reference in New Issue
Block a user