|
@ -0,0 +1,92 @@ |
|
|
|
|
|
From c8245740c3a8699cfe7d7e5aa0d427b931018ad5 Mon Sep 17 00:00:00 2001 |
|
|
|
|
|
From: Yusuke Yanbe <y.yanbe@gmail.com> |
|
|
|
|
|
Date: Mon, 4 Jul 2016 08:20:46 +0900 |
|
|
|
|
|
Subject: [PATCH] Add support for grouping videos by directory for Panasonic |
|
|
|
|
|
TVs |
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
upnpsoap.c | 24 +++++++++++++++++++----- |
|
|
|
|
|
upnpsoap.h | 5 ++++- |
|
|
|
|
|
2 files changed, 23 insertions(+), 6 deletions(-) |
|
|
|
|
|
|
|
|
|
|
|
--- a/upnpsoap.c
|
|
|
|
|
|
+++ b/upnpsoap.c
|
|
|
|
|
|
@@ -1052,6 +1052,15 @@ callback(void *args, int argc, char **ar
|
|
|
|
|
|
add_res(size, duration, bitrate, sampleFrequency, nrAudioChannels, |
|
|
|
|
|
resolution, dlna_buf, mime, detailID, ext, passed_args); |
|
|
|
|
|
} |
|
|
|
|
|
+
|
|
|
|
|
|
+ DPRINTF(E_DEBUG, L_HTTP, "Title: %s - %d Returned / %d childCount\n",
|
|
|
|
|
|
+ title, passed_args->returned, passed_args->childCount);
|
|
|
|
|
|
+
|
|
|
|
|
|
+ ret = strcatf(str, "<pxn:groupTopFlag>%d</pxn:groupTopFlag>"
|
|
|
|
|
|
+ "<pxn:groupID>%s</pxn:groupID>"
|
|
|
|
|
|
+ "<pxn:groupTitle>%s</pxn:groupTitle>"
|
|
|
|
|
|
+ "<pxn:groupMemberNum>%d</pxn:groupMemberNum>",
|
|
|
|
|
|
+ passed_args->returned == passed_args->childCount, parent, passed_args->parentTitle, passed_args->childCount);
|
|
|
|
|
|
break; |
|
|
|
|
|
case ESamsungSeriesCDE: |
|
|
|
|
|
case ELGDevice: |
|
|
|
|
|
@@ -1314,8 +1323,11 @@ BrowseContentDirectory(struct upnphttp *
|
|
|
|
|
|
if (!where[0]) |
|
|
|
|
|
sqlite3_snprintf(sizeof(where), where, "PARENT_ID = '%q'", ObjectID); |
|
|
|
|
|
|
|
|
|
|
|
- if (!totalMatches)
|
|
|
|
|
|
+ if (!totalMatches) {
|
|
|
|
|
|
totalMatches = get_child_count(ObjectID, magic); |
|
|
|
|
|
+ args.childCount = totalMatches;
|
|
|
|
|
|
+ args.parentTitle = sql_get_text_field(db, "SELECT d.TITLE FROM OBJECTS o LEFT JOIN DETAILS d ON (d.ID = o.DETAIL_ID) WHERE OBJECT_ID='%q'", ObjectID);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
ret = 0; |
|
|
|
|
|
if (SortCriteria && !orderBy) |
|
|
|
|
|
{ |
|
|
|
|
|
@@ -1354,14 +1366,16 @@ BrowseContentDirectory(struct upnphttp *
|
|
|
|
|
|
SoapError(h, 709, "Unsupported or invalid sort criteria"); |
|
|
|
|
|
goto browse_error; |
|
|
|
|
|
} |
|
|
|
|
|
-
|
|
|
|
|
|
sql = sqlite3_mprintf("SELECT %s, %s, %s, " COLUMNS |
|
|
|
|
|
"from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" |
|
|
|
|
|
- " where %s %s limit %d, %d;",
|
|
|
|
|
|
+ " where %s order by d.date limit %d, %d;",
|
|
|
|
|
|
objectid_sql, parentid_sql, refid_sql, |
|
|
|
|
|
- where, THISORNUL(orderBy), StartingIndex, RequestedCount);
|
|
|
|
|
|
+ where, StartingIndex, RequestedCount);
|
|
|
|
|
|
DPRINTF(E_DEBUG, L_HTTP, "Browse SQL: %s\n", sql); |
|
|
|
|
|
ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg); |
|
|
|
|
|
+ if (args.parentTitle) {
|
|
|
|
|
|
+ sqlite3_free(args.parentTitle);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
} |
|
|
|
|
|
if( (ret != SQLITE_OK) && (zErrMsg != NULL) ) |
|
|
|
|
|
{ |
|
|
|
|
|
@@ -1795,7 +1809,7 @@ SearchContentDirectory(struct upnphttp *
|
|
|
|
|
|
(*ContainerID == '*') ? NULL : |
|
|
|
|
|
sqlite3_mprintf("UNION ALL " SELECT_COLUMNS |
|
|
|
|
|
"from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" |
|
|
|
|
|
- " where OBJECT_ID = '%q' and (%s) ", ContainerID, where),
|
|
|
|
|
|
+ " where OBJECT_ID = '%q' and (%s) ORDER BY d.date", ContainerID, where),
|
|
|
|
|
|
orderBy, StartingIndex, RequestedCount); |
|
|
|
|
|
DPRINTF(E_DEBUG, L_HTTP, "Search SQL: %s\n", sql); |
|
|
|
|
|
ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg); |
|
|
|
|
|
--- a/upnpsoap.h
|
|
|
|
|
|
+++ b/upnpsoap.h
|
|
|
|
|
|
@@ -27,7 +27,8 @@
|
|
|
|
|
|
#define CONTENT_DIRECTORY_SCHEMAS \ |
|
|
|
|
|
" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"" \ |
|
|
|
|
|
" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\"" \ |
|
|
|
|
|
- " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\""
|
|
|
|
|
|
+ " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"" \
|
|
|
|
|
|
+ " xmlns:pxn=\"urn:schemas-panasonic-com:pxn\""
|
|
|
|
|
|
#define DLNA_NAMESPACE \ |
|
|
|
|
|
" xmlns:dlna=\"urn:schemas-dlna-org:metadata-1-0/\"" |
|
|
|
|
|
#define PV_NAMESPACE \ |
|
|
|
|
|
@@ -39,6 +40,8 @@ struct Response
|
|
|
|
|
|
int start; |
|
|
|
|
|
int returned; |
|
|
|
|
|
int requested; |
|
|
|
|
|
+ int childCount;
|
|
|
|
|
|
+ char *parentTitle;
|
|
|
|
|
|
int iface; |
|
|
|
|
|
uint32_t filter; |
|
|
|
|
|
uint32_t flags; |