Beispiel #1
0
status_t
launch_media_server(bigtime_t timeout,
	bool (*progress)(int stage, const char* message, void* cookie),
	void* cookie, uint32 flags)
{
	if (BMediaRoster::IsRunning())
		return B_ALREADY_RUNNING;

	status_t err = B_MEDIA_SYSTEM_FAILURE;
	BMediaRoster* roster = BMediaRoster::Roster(&err);
	if (roster == NULL || err != B_OK)
		return err;

	if (progress == NULL && roster->Lock()) {
		MediaRosterEx(roster)->EnableLaunchNotification(true, true);
		roster->Unlock();
	}

	// The media_server crashed
	if (be_roster->IsRunning(B_MEDIA_ADDON_SERVER_SIGNATURE)) {
		progress_startup(10, progress, cookie);
		kill_team(be_roster->TeamFor(B_MEDIA_ADDON_SERVER_SIGNATURE));
	}

	// The media_addon_server crashed
	if (be_roster->IsRunning(B_MEDIA_SERVER_SIGNATURE)) {
		progress_startup(20, progress, cookie);
		kill_team(be_roster->TeamFor(B_MEDIA_SERVER_SIGNATURE));
	}

	progress_startup(50, progress, cookie);

	err = BLaunchRoster().Start(B_MEDIA_SERVER_SIGNATURE);

	if (err != B_OK)
		progress_startup(90, progress, cookie);
	else if (progress != NULL) {
		progress_startup(100, progress, cookie);
		err = B_OK;
	}

	return err;
}
void
ServerApp::ReadyToRun()
{
	gNodeManager->LoadState();

	progress_startup(50, NULL, NULL);

	// make sure any previous media_addon_server is gone
	_QuitAddOnServer();
	// and start a new one
	_LaunchAddOnServer();

}
void
ServerApp::MessageReceived(BMessage* msg)
{
	TRACE("ServerApp::MessageReceived %lx enter\n", msg->what);
	switch (msg->what) {
		case MEDIA_SERVER_REQUEST_NOTIFICATIONS:
		case MEDIA_SERVER_CANCEL_NOTIFICATIONS:
		case MEDIA_SERVER_SEND_NOTIFICATIONS:
			gNotificationManager->EnqueueMessage(msg);
			break;

		case MEDIA_FILES_MANAGER_SAVE_TIMER:
			gMediaFilesManager->TimerMessage();
			break;

		case MEDIA_SERVER_ADD_SYSTEM_BEEP_EVENT:
			gMediaFilesManager->HandleAddSystemBeepEvent(msg);
			break;

		case MEDIA_SERVER_RESCAN_COMPLETED:
		{
			gAppManager->NotifyRosters();
			progress_startup(100, NULL, NULL);
			break;
		}

		case B_SOME_APP_QUIT:
		{
			BString mimeSig;
			if (msg->FindString("be:signature", &mimeSig) != B_OK)
				return;

			if (mimeSig == B_MEDIA_ADDON_SERVER_SIGNATURE)
				gNodeManager->CleanupDormantFlavorInfos();

			team_id id;
			if (msg->FindInt32("team", &id) == B_OK
					&& gAppManager->HasTeam(id)) {
				gAppManager->UnregisterTeam(id);
			}
			break;
		}

		default:
			BApplication::MessageReceived(msg);
			TRACE("\nmedia_server: unknown message received!\n");
			break;
	}
	TRACE("ServerApp::MessageReceived %lx leave\n", msg->what);
}