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); }; }; };