コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}