bool playlist_manager::playlist_update_content(t_size playlist, metadb_handle_list_cref content, bool bUndoBackup) { metadb_handle_list old; playlist_get_all_items(playlist, old); if (old.get_size() == 0) { if (content.get_size() == 0) return false; if (bUndoBackup) playlist_undo_backup(playlist); playlist_add_items(playlist, content, bit_array_false()); return true; } pfc::avltree_t<metadb_handle::nnptr> itemsOld, itemsNew; for(t_size walk = 0; walk < old.get_size(); ++walk) itemsOld += old[walk]; for(t_size walk = 0; walk < content.get_size(); ++walk) itemsNew += content[walk]; bit_array_bittable removeMask(old.get_size()); bit_array_bittable filterMask(content.get_size()); bool gotNew = false, filterNew = false, gotRemove = false; for(t_size walk = 0; walk < content.get_size(); ++walk) { const bool state = !itemsOld.have_item(content[walk]); if (state) gotNew = true; else filterNew = true; filterMask.set(walk, state); } for(t_size walk = 0; walk < old.get_size(); ++walk) { const bool state = !itemsNew.have_item(old[walk]); if (state) gotRemove = true; removeMask.set(walk, state); } if (!gotNew && !gotRemove) return false; if (bUndoBackup) playlist_undo_backup(playlist); if (gotRemove) { playlist_remove_items(playlist, removeMask); } if (gotNew) { if (filterNew) { metadb_handle_list temp(content); temp.filter_mask(filterMask); playlist_add_items(playlist, temp, bit_array_false()); } else { playlist_add_items(playlist, content, bit_array_false()); } } { playlist_get_all_items(playlist, old); pfc::array_t<t_size> order; if (pfc::guess_reorder_pattern<pfc::list_base_const_t<metadb_handle_ptr> >(order, old, content)) { playlist_reorder_items(playlist, order.get_ptr(), order.get_size()); } } return true; }
bool playlist_manager::activeplaylist_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection) { t_size playlist = get_active_playlist(); if (playlist != pfc_infinite) return playlist_add_items(playlist,data,p_selection); else return false; }
bool AudioPlayer::set_value(std::string value) { if (!isEnabled()) return true; std::string val = value; cInfoDom("output") << "AudioPlayer(" << get_param("id") << "): got action \"" << val << "\""; //list of all available player functions if (val == "play") Play(); else if (val == "pause") Pause(); else if (val == "stop") Stop(); else if (val == "next") Next(); else if (val == "previous") Previous(); else if (val == "power on") Power(true); else if (val == "power off") Power(false); else if (val.compare(0, 6, "sleep ") == 0) { val.erase(0, 6); Sleep(atoi(val.c_str())); } else if (val.compare(0, 5, "sync ") == 0) { val.erase(0, 5); Synchronize(val.c_str(), true); } else if (val.compare(0, 7, "unsync ") == 0) { val.erase(0, 7); Synchronize(val.c_str(), false); } else if (val.compare(0, 5, "play ") == 0) { val.erase(0, 5); playlist_play_items(val); } else if (val.compare(0, 4, "add ") == 0) { val.erase(0, 4); playlist_add_items(val); } else if (val.compare(0, 11, "volume set ") == 0) { val.erase(0, 11); int vol; from_string(val, vol); set_volume(vol); } else if (val.compare(0, 10, "volume up ") == 0) { val.erase(0, 10); AudioPlayerData data; data.svalue = val; get_volume(sigc::mem_fun(*this, &AudioPlayer::get_volume_cb), data); } else if (val.compare(0, 12, "volume down ") == 0) { val.erase(0, 12); AudioPlayerData data; data.svalue = "-" + val; get_volume(sigc::mem_fun(*this, &AudioPlayer::get_volume_cb), data); } EventManager::create(CalaosEvent::EventIOChanged, { { "id", get_param("id") }, { "state", value } }); return true; }