aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnova <arnova77@gmail.com>2012-03-26 22:21:06 -0700
committerarnova <arnova77@gmail.com>2012-03-26 22:21:06 -0700
commit0a7ce638a8b49b7ccea4aecd399dda8306dd7d65 (patch)
tree8c4958cd8fa900b4a8d1c0dde7d9b7afe3181308
parent84d1d8d24451106898974c180a0d7688d2a7f9ab (diff)
parenta2e188cd0731dd54b422dacd75d37649c03cb397 (diff)
Merge pull request #736 from dez-dk/master
Add dates to files and directories listed from an HTTP source
-rw-r--r--xbmc/XBDateTime.cpp12
-rw-r--r--xbmc/XBDateTime.h1
-rw-r--r--xbmc/filesystem/HTTPDirectory.cpp55
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("<a href=\"(.*)\">(.*)</a>");
+ CRegExp reDateTime(true);
+ reDateTime.RegComp("<td align=\"right\">([0-9]{2})-([A-Z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}) +</td>");
+
+ CRegExp reDateTimeNginx(true);
+ reDateTimeNginx.RegComp("</a> +([0-9]{2})-([A-Z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}) ");
+
+ CRegExp reSize(true);
+ reSize.RegComp(">*([0-9.]+)(B|K|M|G| )</td>");
+
+ CRegExp reSizeNginx;
+ reSizeNginx.RegComp("([0-9]+)$");
+
/* read response from server into string buffer */
char buffer[MAX_PATH + 1024];
while(http.ReadString(buffer, sizeof(buffer)-1))
@@ -98,18 +110,32 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item
if(URIUtils::HasSlashAtEnd(pItem->GetPath()))
pItem->m_bIsFolder = true;
- if (!pItem->m_bIsFolder && g_advancedSettings.m_bHTTPDirectoryStatFilesize)
+ CStdString day, month, year, hour, minute;
+
+ if (reDateTime.RegFind(strBuffer.c_str()) >= 0)
{
- CFileCurl file;
- file.Open(url);
- pItem->m_dwSize= file.GetLength();
- file.Close();
+ day = reDateTime.GetReplaceString("\\1");
+ month = reDateTime.GetReplaceString("\\2");
+ year = reDateTime.GetReplaceString("\\3");
+ hour = reDateTime.GetReplaceString("\\4");
+ minute = reDateTime.GetReplaceString("\\5");
+ }
+ else if (reDateTimeNginx.RegFind(strBuffer.c_str()) >= 0)
+ {
+ day = reDateTimeNginx.GetReplaceString("\\1");
+ month = reDateTimeNginx.GetReplaceString("\\2");
+ year = reDateTimeNginx.GetReplaceString("\\3");
+ hour = reDateTimeNginx.GetReplaceString("\\4");
+ minute = reDateTimeNginx.GetReplaceString("\\5");
+ }
+
+ if (day.length() > 0 && month.length() > 0 && year.length() > 0)
+ {
+ pItem->m_dateTime = CDateTime(atoi(year.c_str()), CDateTime::MonthStringToMonthNum(month), atoi(day.c_str()), atoi(hour.c_str()), atoi(minute.c_str()), 0);
}
- if (!pItem->m_bIsFolder && pItem->m_dwSize == 0)
+ if (!pItem->m_bIsFolder)
{
- CRegExp reSize(true);
- reSize.RegComp(">*([0-9.]+)(B|K|M|G| )</td>");
if (reSize.RegFind(strBuffer.c_str()) >= 0)
{
double Size = atof(reSize.GetReplaceString("\\1"));
@@ -124,6 +150,19 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item
pItem->m_dwSize = (int64_t)Size;
}
+ else if (reSizeNginx.RegFind(strBuffer.c_str()) >= 0)
+ {
+ double Size = atof(reSizeNginx.GetReplaceString("\\1"));
+ pItem->m_dwSize = (int64_t)Size;
+ }
+ }
+
+ if (!pItem->m_bIsFolder && pItem->m_dwSize == 0 && g_advancedSettings.m_bHTTPDirectoryStatFilesize)
+ {
+ CFileCurl file;
+ file.Open(url);
+ pItem->m_dwSize= file.GetLength();
+ file.Close();
}
items.Add(pItem);