diff options
-rw-r--r-- | src/server/game/Calendar/CalendarMgr.cpp | 87 | ||||
-rw-r--r-- | src/server/game/Calendar/CalendarMgr.h | 16 | ||||
-rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 8 |
3 files changed, 61 insertions, 50 deletions
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index 763e0132c10..5f73ee48380 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -40,6 +40,12 @@ CalendarMgr::CalendarMgr() CalendarMgr::~CalendarMgr() { + for (CalendarEventStore::iterator itr = _events.begin(); itr != _events.end(); ++itr) + delete *itr; + + for (CalendarEventInviteStore::iterator itr = _invites.begin(); itr != _invites.end(); ++itr) + for (CalendarInviteStore::iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) + delete *itr2; } void CalendarMgr::LoadFromDB() @@ -153,7 +159,7 @@ void CalendarMgr::RemoveEvent(uint64 eventId, uint64 remover) PreparedStatement* stmt; MailDraft mail(calendarEvent->BuildCalendarMailSubject(remover), calendarEvent->BuildCalendarMailBody()); - std::vector<CalendarInvite*>::iterator itr = _invites[eventId].begin(); + CalendarInviteStore::iterator itr = _invites[eventId].begin(); while (itr != _invites[eventId].end()) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CALENDAR_INVITE); @@ -187,7 +193,7 @@ void CalendarMgr::RemoveInvite(uint64 inviteId, uint64 eventId, uint64 /*remover if (!calendarEvent) return; - std::vector<CalendarInvite*>::iterator itr = _invites[eventId].begin(); + CalendarInviteStore::iterator itr = _invites[eventId].begin(); for (; itr != _invites[eventId].end(); ++itr) if ((*itr)->GetInviteId() == inviteId) break; @@ -254,8 +260,8 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(uint64 guid) if ((*itr)->GetCreatorGUID() == guid) RemoveEvent((*itr)->GetEventId(), 0); // don't send mail if removing a character - std::vector<CalendarInvite*> playerInvites = GetPlayerInvites(guid); - for (std::vector<CalendarInvite*>::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr) + CalendarInviteStore playerInvites = GetPlayerInvites(guid); + for (CalendarInviteStore::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr) RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid); } @@ -265,14 +271,14 @@ void CalendarMgr::RemovePlayerGuildEventsAndSignups(uint64 guid, uint32 guildId) if ((*itr)->GetCreatorGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement())) RemoveEvent((*itr)->GetEventId(), guid); - std::vector<CalendarInvite*> playerInvites = GetPlayerInvites(guid); - for (std::vector<CalendarInvite*>::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr) + CalendarInviteStore playerInvites = GetPlayerInvites(guid); + for (CalendarInviteStore::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr) if (CalendarEvent* calendarEvent = GetEvent((*itr)->GetEventId())) if (calendarEvent->IsGuildEvent() && calendarEvent->GetGuildId() == guildId) RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid); } -CalendarEvent* CalendarMgr::GetEvent(uint64 eventId) +CalendarEvent* CalendarMgr::GetEvent(uint64 eventId) const { for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr) if ((*itr)->GetEventId() == eventId) @@ -282,10 +288,10 @@ CalendarEvent* CalendarMgr::GetEvent(uint64 eventId) return NULL; } -CalendarInvite* CalendarMgr::GetInvite(uint64 inviteId) +CalendarInvite* CalendarMgr::GetInvite(uint64 inviteId) const { - for (CalendarInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) - for (std::vector<CalendarInvite*>::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) + for (CalendarEventInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) + for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) if ((*itr2)->GetInviteId() == inviteId) return *itr2; @@ -305,12 +311,10 @@ uint64 CalendarMgr::GetFreeEventId() { if (_freeEventIds.empty()) return ++_maxEventId; - else - { - uint64 eventId = _freeEventIds.front(); - _freeEventIds.pop_front(); - return eventId; - } + + uint64 eventId = _freeEventIds.front(); + _freeEventIds.pop_front(); + return eventId; } void CalendarMgr::FreeInviteId(uint64 id) @@ -325,20 +329,18 @@ uint64 CalendarMgr::GetFreeInviteId() { if (_freeInviteIds.empty()) return ++_maxInviteId; - else - { - uint64 inviteId = _freeInviteIds.front(); - _freeInviteIds.pop_front(); - return inviteId; - } + + uint64 inviteId = _freeInviteIds.front(); + _freeInviteIds.pop_front(); + return inviteId; } CalendarEventStore CalendarMgr::GetPlayerEvents(uint64 guid) { CalendarEventStore events; - for (CalendarInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) - for (std::vector<CalendarInvite*>::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) + for (CalendarEventInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) + for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) if ((*itr2)->GetInviteeGUID() == guid) events.insert(GetEvent(itr->first)); @@ -350,17 +352,17 @@ CalendarEventStore CalendarMgr::GetPlayerEvents(uint64 guid) return events; } -std::vector<CalendarInvite*> CalendarMgr::GetEventInvites(uint64 eventId) +CalendarInviteStore const& CalendarMgr::GetEventInvites(uint64 eventId) { return _invites[eventId]; } -std::vector<CalendarInvite*> CalendarMgr::GetPlayerInvites(uint64 guid) +CalendarInviteStore CalendarMgr::GetPlayerInvites(uint64 guid) { - std::vector<CalendarInvite*> invites; + CalendarInviteStore invites; - for (CalendarInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) - for (std::vector<CalendarInvite*>::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) + for (CalendarEventInviteStore::const_iterator itr = _invites.begin(); itr != _invites.end(); ++itr) + for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2) if ((*itr2)->GetInviteeGUID() == guid) invites.push_back(*itr2); @@ -369,13 +371,22 @@ std::vector<CalendarInvite*> CalendarMgr::GetPlayerInvites(uint64 guid) uint32 CalendarMgr::GetPlayerNumPending(uint64 guid) { - std::vector<CalendarInvite*> const& invites = GetPlayerInvites(guid); + CalendarInviteStore const& invites = GetPlayerInvites(guid); uint32 pendingNum = 0; - for (std::vector<CalendarInvite*>::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) - // correct? - if ((*itr)->GetStatus() == CALENDAR_STATUS_INVITED || (*itr)->GetStatus() == CALENDAR_STATUS_TENTATIVE || (*itr)->GetStatus() == CALENDAR_STATUS_NOT_SIGNED_UP) - ++pendingNum; + for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) + { + switch ((*itr)->GetStatus()) + { + case CALENDAR_STATUS_INVITED: + case CALENDAR_STATUS_TENTATIVE: + case CALENDAR_STATUS_NOT_SIGNED_UP: + ++pendingNum; + break; + default: + break; + } + } return pendingNum; } @@ -531,7 +542,7 @@ void CalendarMgr::SendCalendarEvent(uint64 guid, CalendarEvent const& calendarEv if (!player) return; - std::vector<CalendarInvite*> const& eventInviteeList = _invites[calendarEvent.GetEventId()]; + CalendarInviteStore const& eventInviteeList = _invites[calendarEvent.GetEventId()]; WorldPacket data(SMSG_CALENDAR_SEND_EVENT, 60 + eventInviteeList.size() * 32); data << uint8(sendType); @@ -549,7 +560,7 @@ void CalendarMgr::SendCalendarEvent(uint64 guid, CalendarEvent const& calendarEv data << uint32(calendarEvent.GetGuildId()); data << uint32(eventInviteeList.size()); - for (std::vector<CalendarInvite*>::const_iterator itr = eventInviteeList.begin(); itr != eventInviteeList.end(); ++itr) + for (CalendarInviteStore::const_iterator itr = eventInviteeList.begin(); itr != eventInviteeList.end(); ++itr) { CalendarInvite const* calendarInvite = (*itr); uint64 inviteeGuid = calendarInvite->GetInviteeGUID(); @@ -627,8 +638,8 @@ void CalendarMgr::SendPacketToAllEventRelatives(WorldPacket packet, CalendarEven guild->BroadcastPacket(&packet); // Send packet to all invitees if event is non-guild, in other case only to non-guild invitees (packet was broadcasted for them) - std::vector<CalendarInvite*> invites = _invites[calendarEvent.GetEventId()]; - for (std::vector<CalendarInvite*>::iterator itr = invites.begin(); itr != invites.end(); ++itr) + CalendarInviteStore invites = _invites[calendarEvent.GetEventId()]; + for (CalendarInviteStore::iterator itr = invites.begin(); itr != invites.end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer((*itr)->GetInviteeGUID())) if (!calendarEvent.IsGuildEvent() || (calendarEvent.IsGuildEvent() && player->GetGuildId() != calendarEvent.GetGuildId())) player->SendDirectMessage(&packet); diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h index 3674e707399..d1b3d0a9dd6 100644 --- a/src/server/game/Calendar/CalendarMgr.h +++ b/src/server/game/Calendar/CalendarMgr.h @@ -261,9 +261,9 @@ struct CalendarEvent std::string _title; std::string _description; }; - +typedef std::vector<CalendarInvite*> CalendarInviteStore; typedef std::set<CalendarEvent*> CalendarEventStore; -typedef std::map<uint64 /* eventId */, std::vector<CalendarInvite*> > CalendarInviteStore; +typedef std::map<uint64 /* eventId */, CalendarInviteStore > CalendarEventInviteStore; class CalendarMgr { @@ -274,7 +274,7 @@ class CalendarMgr ~CalendarMgr(); CalendarEventStore _events; - CalendarInviteStore _invites; + CalendarEventInviteStore _invites; std::deque<uint64> _freeEventIds; std::deque<uint64> _freeInviteIds; @@ -284,14 +284,14 @@ class CalendarMgr public: void LoadFromDB(); - CalendarEvent* GetEvent(uint64 eventId); + CalendarEvent* GetEvent(uint64 eventId) const; CalendarEventStore const& GetEvents() const { return _events; } CalendarEventStore GetPlayerEvents(uint64 guid); - CalendarInvite* GetInvite(uint64 inviteId); - CalendarInviteStore const& GetInvites() const { return _invites; } - std::vector<CalendarInvite*> GetEventInvites(uint64 eventId); - std::vector<CalendarInvite*> GetPlayerInvites(uint64 guid); + CalendarInvite* GetInvite(uint64 inviteId) const; + CalendarEventInviteStore const& GetInvites() const { return _invites; } + CalendarInviteStore const& GetEventInvites(uint64 eventId); + CalendarInviteStore GetPlayerInvites(uint64 guid); void FreeEventId(uint64 id); uint64 GetFreeEventId(); diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 9dbc4bec199..86f943cf1bf 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -57,9 +57,9 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/) WorldPacket data(SMSG_CALENDAR_SEND_CALENDAR, 1000); // Average size if no instance - std::vector<CalendarInvite*> invites = sCalendarMgr->GetPlayerInvites(guid); + CalendarInviteStore invites = sCalendarMgr->GetPlayerInvites(guid); data << uint32(invites.size()); - for (std::vector<CalendarInvite*>::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) + for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) { data << uint64((*itr)->GetEventId()); data << uint64((*itr)->GetInviteId()); @@ -347,9 +347,9 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData) newEvent->SetEventTime(time_t(time)); sCalendarMgr->AddEvent(newEvent, CALENDAR_SENDTYPE_COPY); - std::vector<CalendarInvite*> invites = sCalendarMgr->GetEventInvites(eventId); + CalendarInviteStore invites = sCalendarMgr->GetEventInvites(eventId); - for (std::vector<CalendarInvite*>::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) + for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId())); // should we change owner when somebody makes a copy of event owned by another person? |