void VideoMetadata::toMap(MetadataMap &metadataMap) { if (this == NULL) return; QString coverfile; if (IsHostSet() && !GetCoverFile().startsWith("/") && !GetCoverFile().isEmpty() && !IsDefaultCoverFile(GetCoverFile())) { coverfile = generate_file_url("Coverart", GetHost(), GetCoverFile()); } else { coverfile = GetCoverFile(); } metadataMap["coverfile"] = coverfile; QString screenshotfile; if (IsHostSet() && !GetScreenshot().startsWith("/") && !GetScreenshot().isEmpty()) { screenshotfile = generate_file_url("Screenshots", GetHost(), GetScreenshot()); } else { screenshotfile = GetScreenshot(); } metadataMap["screenshotfile"] = screenshotfile; QString bannerfile; if (IsHostSet() && !GetBanner().startsWith("/") && !GetBanner().isEmpty()) { bannerfile = generate_file_url("Banners", GetHost(), GetBanner()); } else { bannerfile = GetBanner(); } metadataMap["bannerfile"] = bannerfile; QString fanartfile; if (IsHostSet() && !GetFanart().startsWith("/") && !GetFanart().isEmpty()) { fanartfile = generate_file_url("Fanart", GetHost(), GetFanart()); } else { fanartfile = GetFanart(); } metadataMap["fanartfile"] = fanartfile; metadataMap["filename"] = GetFilename(); metadataMap["title"] = GetTitle(); metadataMap["subtitle"] = GetSubtitle(); metadataMap["tagline"] = GetTagline(); metadataMap["director"] = GetDirector(); metadataMap["studio"] = GetStudio(); metadataMap["description"] = GetPlot(); metadataMap["genres"] = GetDisplayGenres(*this); metadataMap["countries"] = GetDisplayCountries(*this); metadataMap["cast"] = GetDisplayCast(*this).join(", "); metadataMap["rating"] = GetDisplayRating(GetRating()); metadataMap["length"] = GetDisplayLength(GetLength()); metadataMap["year"] = GetDisplayYear(GetYear()); metadataMap["releasedate"] = MythDateToString(GetReleaseDate(), kDateFull); metadataMap["userrating"] = GetDisplayUserRating(GetUserRating()); metadataMap["season"] = GetDisplaySeasonEpisode(GetSeason(), 1); metadataMap["episode"] = GetDisplaySeasonEpisode(GetEpisode(), 1); if (GetSeason() > 0 || GetEpisode() > 0) { metadataMap["s##e##"] = QString("s%1e%2").arg(GetDisplaySeasonEpisode (GetSeason(), 2)) .arg(GetDisplaySeasonEpisode(GetEpisode(), 2)); metadataMap["##x##"] = QString("%1x%2").arg(GetDisplaySeasonEpisode (GetSeason(), 1)) .arg(GetDisplaySeasonEpisode(GetEpisode(), 2)); } else metadataMap["s##e##"] = metadataMap["##x##"] = QString(); metadataMap["trailerstate"] = TrailerToState(GetTrailer()); metadataMap["userratingstate"] = QString::number((int)(GetUserRating())); metadataMap["watchedstate"] = WatchedToState(GetWatched()); metadataMap["videolevel"] = ParentalLevelToState(GetShowLevel()); metadataMap["insertdate"] = MythDateToString(GetInsertdate(), kDateFull); metadataMap["inetref"] = GetInetRef(); metadataMap["homepage"] = GetHomepage(); metadataMap["child_id"] = QString::number(GetChildID()); metadataMap["browseable"] = GetDisplayBrowse(GetBrowse()); metadataMap["watched"] = GetDisplayWatched(GetWatched()); metadataMap["processed"] = GetDisplayProcessed(GetProcessed()); metadataMap["category"] = GetCategory(); }
bool CSector::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { NULL, INT_MAX } }; switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SC_CLIENTS: sVal.FormatVal(m_Chars_Active.HasClients()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return( true ); case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( GetCharComplexity()))) ? "1" : "0"; return( true ); } sVal.FormatVal( GetCharComplexity()); return( true ); case SC_FLAGS: sVal.FormatHex(m_dwFlags); return( true ); case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return( true ); case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return( true ); case SC_NUMBER: sVal.FormatVal(m_index); return( true ); case SC_ISDARK: sVal.FormatVal( IsDark() ); return( true ); case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return( true ); case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return( true ); case SC_ITEMCOUNT: sVal.FormatVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal(static_cast<int>(GetSeason())); return true; case SC_WEATHER: sVal.FormatVal(static_cast<int>(GetWeather())); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
void CSector::r_Write() { ADDTOCALLSTACK_INTENSIVE("CSector::r_Write"); if ( m_fSaveParity == g_World.m_fSaveParity ) return; // already saved. CPointMap pt = GetBasePoint(); m_fSaveParity = g_World.m_fSaveParity; bool bHeaderCreated = false; if ( m_dwFlags > 0) { g_World.m_FileWorld.WriteSection("SECTOR %d,%d,0,%d", pt.m_x, pt.m_y, pt.m_map ); g_World.m_FileWorld.WriteKeyHex("FLAGS", m_dwFlags); bHeaderCreated = true; } if (g_Cfg.m_bAllowLightOverride && IsLightOverriden()) { if ( bHeaderCreated == false ) { g_World.m_FileWorld.WriteSection("SECTOR %d,%d,0,%d", pt.m_x, pt.m_y, pt.m_map); bHeaderCreated = true; } g_World.m_FileWorld.WriteKeyVal("LIGHT", GetLight()); } if (!g_Cfg.m_fNoWeather && (IsRainOverriden() || IsColdOverriden())) { if ( bHeaderCreated == false ) { g_World.m_FileWorld.WriteSection("SECTOR %d,%d,0,%d", pt.m_x, pt.m_y, pt.m_map); bHeaderCreated = true; } if ( IsRainOverriden() ) g_World.m_FileWorld.WriteKeyVal("RAINCHANCE", GetRainChance()); if ( IsColdOverriden() ) g_World.m_FileWorld.WriteKeyVal("COLDCHANCE", GetColdChance()); } if (GetSeason() != SEASON_Summer) { if ( bHeaderCreated == false ) g_World.m_FileWorld.WriteSection("SECTOR %d,%d,0,%d", pt.m_x, pt.m_y, pt.m_map); g_World.m_FileWorld.WriteKeyVal("SEASON", GetSeason()); } // Chars in the sector. CChar *pCharNext = NULL; for ( CChar *pChar = static_cast<CChar*>(m_Chars_Active.GetHead()); pChar != NULL; pChar = pCharNext ) { pCharNext = pChar->GetNext(); pChar->r_WriteParity(pChar->m_pPlayer ? g_World.m_FilePlayers : g_World.m_FileWorld); } // Inactive Client Chars, ridden horses and dead NPCs (NOTE: Push inactive player chars out to the account files here?) for ( CChar *pChar = static_cast<CChar*>(m_Chars_Disconnect.GetHead()); pChar != NULL; pChar = pCharNext ) { pCharNext = pChar->GetNext(); pChar->r_WriteParity(pChar->m_pPlayer ? g_World.m_FilePlayers : g_World.m_FileWorld); } // Items on the ground. CItem *pItemNext = NULL; for ( CItem *pItem = static_cast<CItem*>(m_Items_Inert.GetHead()); pItem != NULL; pItem = pItemNext ) { pItemNext = pItem->GetNext(); if ( pItem->IsType(IT_MULTI_CUSTOM) ) pItem->r_WriteSafe(g_World.m_FileMultis); else if ( !pItem->IsAttr(ATTR_STATIC) ) pItem->r_WriteSafe(g_World.m_FileWorld); } for ( CItem *pItem = static_cast<CItem*>(m_Items_Timer.GetHead()); pItem != NULL; pItem = pItemNext ) { pItemNext = pItem->GetNext(); if ( pItem->IsType(IT_MULTI_CUSTOM) ) pItem->r_WriteSafe(g_World.m_FileMultis); else if ( !pItem->IsAttr(ATTR_STATIC) ) pItem->r_WriteSafe(g_World.m_FileWorld); } }
CDate::ECompare CDate_std::Compare(const CDate_std& date) const { if (GetYear() < date.GetYear()) { return CDate::eCompare_before; } else if (GetYear() > date.GetYear()) { return CDate::eCompare_after; } if ((CanGetSeason() || date.CanGetSeason()) && ( !CanGetSeason() || !date.CanGetSeason() || GetSeason() != date.GetSeason())) { return CDate::eCompare_unknown; } if (CanGetMonth() || date.CanGetMonth()) { if ( !CanGetMonth() || !date.CanGetMonth()) { return CDate::eCompare_unknown; } else if (GetMonth() < date.GetMonth()) { return CDate::eCompare_before; } else if (GetMonth() > date.GetMonth()) { return CDate::eCompare_after; } } if (CanGetDay() || date.CanGetDay()) { if ( !CanGetDay() || !date.CanGetDay()) { return CDate::eCompare_unknown; } else if (GetDay() < date.GetDay()) { return CDate::eCompare_before; } else if (GetDay() > date.GetDay()) { return CDate::eCompare_after; } } if (CanGetHour() || date.CanGetHour()) { if ( !CanGetHour() || !date.CanGetHour()) { return CDate::eCompare_unknown; } else if (GetHour() < date.GetHour()) { return CDate::eCompare_before; } else if (GetHour() > date.GetHour()) { return CDate::eCompare_after; } } if (CanGetMinute() || date.CanGetMinute()) { if ( !CanGetMinute() || !date.CanGetMinute()) { return CDate::eCompare_unknown; } else if (GetMinute() < date.GetMinute()) { return CDate::eCompare_before; } else if (GetMinute() > date.GetMinute()) { return CDate::eCompare_after; } } if (CanGetSecond() || date.CanGetSecond()) { if ( !CanGetSecond() || !date.CanGetSecond()) { return CDate::eCompare_unknown; } else if (GetSecond() < date.GetSecond()) { return CDate::eCompare_before; } else if (GetSecond() > date.GetSecond()) { return CDate::eCompare_after; } } return CDate::eCompare_same; }
void CDate_std::GetDate(string* label, const string& format) const { static const char* const kMonths[] = { "0", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static const int kNumMonths = sizeof (kMonths) / sizeof (char*); if (!label) { return; } unsigned int depth = 0; vector<pair<SIZE_TYPE, SIZE_TYPE> > starts; starts.push_back(make_pair(label->size(), (SIZE_TYPE)0)); ITERATE (string, it, format) { if (*it != '%') { *label += *it; continue; } if (++it == format.end()) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): incomplete % expression", it - format.begin()); } // Check for things that can only immediately follow % if (*it == '%') { *label += '%'; continue; } else if (*it == '{') { depth++; starts.push_back(make_pair(label->size(), SIZE_TYPE(it - format.begin()))); continue; } else if (*it == '}') { if (depth == 0) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): unbalanced %}", it - format.begin()); } depth--; starts.pop_back(); continue; } else if (*it == '|') { // We survived, so just look for the appropriate %}. if (depth == 0) { return; // Can ignore rest of format } unsigned int depth2 = 0; for (;;) { while (++it != format.end() && *it != '%') ; if (it == format.end() || ++it == format.end()) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): unbalanced %{", starts.back().second); } if (*it == '}') { if (depth2 == 0) { depth--; starts.pop_back(); break; } else { depth2--; } } else if (*it == '{') { depth2++; } } continue; } unsigned int length = 0; int value = -1; while (isdigit((unsigned char)(*it))) { length = length * 10 + *it - '0'; if (++it == format.end()) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): incomplete % expression", it - format.begin()); } } switch (*it) { case 'Y': value = GetYear(); break; case 'M': case 'N': value = CanGetMonth() ? GetMonth() : -1; break; case 'D': value = CanGetDay() ? GetDay() : -1; break; case 'S': value = CanGetSeason() ? 1 : -1; break; case 'h': value = CanGetHour() ? GetHour() : -1; break; case 'm': value = CanGetMinute() ? GetMinute() : -1; break; case 's': value = CanGetSecond() ? GetSecond() : -1; break; default: NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): unrecognized format specifier", it - format.begin()); } if (value >= 0) { if (*it == 'N') { // special cases const char* name; if (value >= kNumMonths) { name = "inv"; } else { name = kMonths[value]; } if (length > 0) { label->append(name, length); } else { *label += name; } } else if (*it == 'S') { if (length > 0) { label->append(GetSeason(), 0, length); } else { *label += GetSeason(); } } else { // just a number if (length > 0) { // We want exactly <length> digits. CNcbiOstrstream oss; oss << setfill('0') << setw(length) << value; string s = CNcbiOstrstreamToString(oss); label->append(s, s.size() > length ? s.size() - length : 0, length); } else { *label += NStr::IntToString(value); } } } else { // missing...roll back label and look for alternatives, or // throw if at top level and none found label->erase(starts.back().first); char request = *it; unsigned int depth2 = 0; for (;;) { while (++it != format.end() && *it != '%') ; if (it == format.end() || ++it == format.end()) { if (depth > 0 || depth2 > 0) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): unbalanced %{", starts.back().second); } else { NCBI_THROW2(CGeneralParseException, eFormat, string("CDate_std::GetDate():" " missing required field %") + request, it - format.begin() - 1); } } if (*it == '|' && depth2 == 0) { break; } else if (*it == '}') { if (depth2 == 0) { if (depth == 0) { NCBI_THROW2(CGeneralParseException, eFormat, "CDate_std::GetDate(): unbalanced %}", it - format.begin()); } depth--; starts.pop_back(); break; } else { depth2--; } } else if (*it == '{') { depth2++; } } } } }
bool CSector::r_WriteVal( lpctstr pszKey, CSString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT32_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { nullptr, INT32_MAX } }; SC_TYPE key = (SC_TYPE)FindTableHead(pszKey, sm_szLoadKeys, CountOf(sm_szLoadKeys) - 1); switch ( key ) { case SC_CANSLEEP: { pszKey += 8; bool fCheckAdjacents = Exp_GetVal(pszKey); sVal.FormatBVal(CanSleep(fCheckAdjacents)); return true; } case SC_CLIENTS: sVal.FormatSTVal(m_Chars_Active.GetClientsNumber()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return true; case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( (int)GetCharComplexity() )) ) ? "1" : "0"; return true; } sVal.FormatSTVal( GetCharComplexity() ); return true; case SC_FLAGS: sVal.FormatHex(m_dwFlags); return true; case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return true; case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return true; case SC_NUMBER: sVal.FormatVal(m_index); return true; case SC_ISDARK: sVal.FormatVal( IsDark() ); return true; case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return true; case SC_ISSLEEPING: sVal.FormatVal(IsSleeping()); return true; case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return true; case SC_ITEMCOUNT: sVal.FormatSTVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal((int)GetSeason()); return true; case SC_WEATHER: sVal.FormatVal((int)GetWeather()); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }