From a2e188cd0731dd54b422dacd75d37649c03cb397 Mon Sep 17 00:00:00 2001 From: dez-dk <> Date: Mon, 27 Feb 2012 21:42:27 +0100 Subject: Adds dates to HTTP directories. This commit adds dates to directories and files listed from an HTTP source and thus enables the user to sort them by date. It has been made with Apache and Nginx autoindex modules in mind. There's also a small change that enables XBMC to read the filesize from Nginx and it adds the static method MonthStringToMonthNum() to CDateTime. CHTTPDirectory uses this method to add dates to files/directories. --- xbmc/XBDateTime.cpp | 12 +++++++++ xbmc/XBDateTime.h | 1 + xbmc/filesystem/HTTPDirectory.cpp | 55 +++++++++++++++++++++++++++++++++------ 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/xbmc/XBDateTime.cpp b/xbmc/XBDateTime.cpp index 5e97385d5d..e01e17d0dc 100644 --- a/xbmc/XBDateTime.cpp +++ b/xbmc/XBDateTime.cpp @@ -1286,3 +1286,15 @@ CStdString CDateTime::GetAsRFC1123DateTime() const result.Format("%s, %02i %s %04i %02i:%02i:%02i GMT", DAY_NAMES[time.GetDayOfWeek()], time.GetDay(), MONTH_NAMES[time.GetMonth()-1], time.GetYear(), time.GetHour(), time.GetMinute(), time.GetSecond()); return result; } + +int CDateTime::MonthStringToMonthNum(const CStdString& month) +{ + const char* months[] = {"january","february","march","april","may","june","july","august","september","october","november","december"}; + const char* abr_months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"}; + + int i = 0; + for (; i < 12 && month.CompareNoCase(months[i]) != 0 && month.CompareNoCase(abr_months[i]) != 0; i++); + i++; + + return i; +} diff --git a/xbmc/XBDateTime.h b/xbmc/XBDateTime.h index d4a36fea13..ee48ddd289 100644 --- a/xbmc/XBDateTime.h +++ b/xbmc/XBDateTime.h @@ -99,6 +99,7 @@ public: static CDateTime GetCurrentDateTime(); static CDateTime GetUTCDateTime(); + static int MonthStringToMonthNum(const CStdString& month); const CDateTime& operator =(const SYSTEMTIME& right); const CDateTime& operator =(const FILETIME& right); diff --git a/xbmc/filesystem/HTTPDirectory.cpp b/xbmc/filesystem/HTTPDirectory.cpp index 2a0b97b0bb..d60636aa2c 100644 --- a/xbmc/filesystem/HTTPDirectory.cpp +++ b/xbmc/filesystem/HTTPDirectory.cpp @@ -54,6 +54,18 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item CRegExp reItem(true); // HTML is case-insensitive reItem.RegComp("(.*)"); + CRegExp reDateTime(true); + reDateTime.RegComp("