Example #1
0
void FeedListener::MessageReceived(BMessage *msg) {
	switch (msg->what) {
		case B_SOME_APP_LAUNCHED: {
			const char *signature = NULL;
			if (msg->FindString("be:signature", &signature) != B_OK) return;
			
			if (strcmp(signature, FeedKit::ServerSignature) == 0) {
				fMsgr = BMessenger(FeedKit::ServerSignature);
				
				if ((fListening == true) && (fRegistered == false)) {
					AddListener(fTarget);
				};
								
				for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
					(*hIt)->ServerStarted();
				}
			};
		} break;
		
		case B_SOME_APP_QUIT: {
			const char *signature = NULL;
			if (msg->FindString("be:signature", &signature) != B_OK) return;
			
			if ((fRegistered == true) && (strcmp(signature, FeedKit::ServerSignature) == 0)) {
				fRegistered = false;
				
				for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
					(*hIt)->ServerShutdown();
				};
			};
		} break;
		
		case FeedKit::Private::FromServer::RegisterFeedComplete: {
			Feed feed;
			if (msg->FindFlat("feed", &feed) == B_OK) {
				for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
					(*hIt)->FeedRegistered(&feed);
				};
			};
		} break;
		
		case FeedKit::Private::FromServer::ChannelUpdated: {
			Feed feed;
			const char *channelUUID;
			Channel *channel;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			
			channel = feed.ChannelByUUID(channelUUID);
						
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->ChannelUpdated(&feed, channel);
			};
		} break;

		case FeedKit::Private::FromServer::ItemRead: {
			Feed feed;
			const char *channelUUID;
			const char *itemUUID;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindString("item", &itemUUID) != B_OK) return;
			
			Channel *channel = feed.ChannelByUUID(channelUUID);
			Item *item = channel->ItemByUUID(itemUUID);
			
			channel->ParentFeed(&feed);
			item->ParentChannel(channel);
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->ItemRead(&feed, channel, item);
			};
		} break;
		
		case FeedKit::Private::FromServer::RegisterFeedError: {
			Feed feed;
			ErrorDetails error;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindFlat("error", &error) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedRegisteredError(&feed, &error);
			};
		} break;
		
		case FeedKit::Private::FromServer::DownloadFeedStarted: {
			Feed feed;
			DownloadProgress progress;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindFlat("download", &progress) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedDownloadStarted(&feed, &progress);
			};		
		} break;
		
		case FeedKit::Private::FromServer::DownloadFeedError: {
			Feed feed;
			DownloadProgress progress;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindFlat("download", &progress) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedDownloadError(&feed, &progress);
			};		
		} break;

		case FeedKit::Private::FromServer::DownloadFeedProgress: {
			Feed feed;
			DownloadProgress progress;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindFlat("download", &progress) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedDownloadProgress(&feed, &progress);
			};
		} break;

		case FeedKit::Private::FromServer::DownloadFeedFinished: {
			Feed feed;
			DownloadProgress progress;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindFlat("download", &progress) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedDownloadFinished(&feed, &progress);
			};
		} break;

		case FeedKit::Private::FromServer::DownloadEnclosureStarted: {
			Feed feed;
			const char *channelUUID = NULL;
			const char *itemUUID = NULL;
			const char *enclosureUUID = NULL;
					
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindString("item", &itemUUID) != B_OK) return;
			if (msg->FindString("enclosure", &enclosureUUID) != B_OK) return;
			
			Channel *channel = feed.ChannelByUUID(channelUUID);
			Item *item = channel->ItemByUUID(itemUUID);
			Enclosure *enclosure = item->EnclosureByUUID(enclosureUUID);
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->EnclosureDownloadStarted(&feed, item, enclosure);
			};
		} break;
		
		case FeedKit::Private::FromServer::DownloadEnclosureProgress: {
			Feed feed;
			const char *channelUUID = NULL;
			const char *itemUUID = NULL;
			const char *enclosureUUID = NULL;

			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindString("item", &itemUUID) != B_OK) return;
			if (msg->FindString("enclosure", &enclosureUUID) != B_OK) return;

			Channel *channel = feed.ChannelByUUID(channelUUID);
			Item *item = channel->ItemByUUID(itemUUID);
			Enclosure *enclosure = item->EnclosureByUUID(enclosureUUID);

			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->EnclosureDownloadProgress(&feed, item, enclosure);
			};
		} break;
		
		case FeedKit::Private::FromServer::DownloadEnclosureFinished: {	
			Feed feed;
			const char *channelUUID = NULL;
			const char *itemUUID = NULL;
			const char *enclosureUUID = NULL;

			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindString("item", &itemUUID) != B_OK) return;
			if (msg->FindString("enclosure", &enclosureUUID) != B_OK) return;
			
			Channel *channel = feed.ChannelByUUID(channelUUID);
			Item *item = channel->ItemByUUID(itemUUID);
			Enclosure *enclosure = item->EnclosureByUUID(enclosureUUID);
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->EnclosureDownloadFinished(&feed, item, enclosure);
			};
		} break;
		
		case FeedKit::Private::FromServer::EnclosureDownloadStatusChanged: {
			Feed feed;
			const char *channelUUID = NULL;
			const char *itemUUID = NULL;
			const char *enclosureUUID = NULL;

			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindString("item", &itemUUID) != B_OK) return;
			if (msg->FindString("enclosure", &enclosureUUID) != B_OK) return;
			
			Channel *channel = feed.ChannelByUUID(channelUUID);
			Item *item = channel->ItemByUUID(itemUUID);
			Enclosure *enclosure = item->EnclosureByUUID(enclosureUUID);
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->EnclosureDownloadStatusChanged(&feed, item, enclosure);
			};
		} break;
		
		case FeedKit::Private::FromServer::ChannelIconUpdated: {
			Feed feed;
			const char *channelUUID = NULL;
			Channel *channel = NULL;
			entry_ref ref;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			if (msg->FindString("channel", &channelUUID) != B_OK) return;
			if (msg->FindRef("ref", &ref) != B_OK) return;

			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->ChannelIconUpdated(&feed, channel, ref);
			};
		} break;
		
		case FeedKit::Private::FromServer::FeedSubscriptionChanged: {
			Feed feed;
			
			if (msg->FindFlat("feed", &feed) != B_OK) return;
			
			for (handler_t::iterator hIt = fHandler.begin(); hIt != fHandler.end(); hIt++) {
				(*hIt)->FeedSubscriptionChanged(&feed);
			};
		} break;
		
		default: {
			BLooper::MessageReceived(msg);
		};
	};
};