Index: programs/mythbackend/httpstatus.cpp
===================================================================
--- programs/mythbackend/httpstatus.cpp	(revision 12909)
+++ programs/mythbackend/httpstatus.cpp	(working copy)
@@ -83,6 +83,10 @@
     if (sURI == "getCMGRDesc"          ) return( HSM_GetCMGRDesc     );
     if (sURI == "getMSRRDesc"          ) return( HSM_GetMSRRDesc     );
 
+    if (sURI == "getRecProfiles"       ) return( HSM_GetRecProfiles   );
+    if (sURI == "delRecProfiles"       ) return( HSM_DelRecProfiles   );
+    if (sURI == "createRecProfiles"    ) return( HSM_CreateRecProfiles);
+
     if (sURI == "*"                    ) return( HSM_Asterisk        );
 
     return( HSM_Unknown );
@@ -124,6 +128,10 @@
                 case HSM_GetMusic       : GetMusic       ( pThread, pRequest ); return( true );
                 case HSM_GetVideo       : GetVideo       ( pThread, pRequest ); return( true );
 
+                case HSM_GetRecProfiles    : GetRecProfiles    ( pRequest ); return( true );
+                case HSM_DelRecProfiles    : DelRecProfiles    ( pRequest ); return( true );
+                case HSM_CreateRecProfiles : CreateRecProfiles ( pRequest ); return( true );
+
                 default: 
                 {
 				    pRequest->m_eResponseType   = ResponseTypeHTML;
@@ -1236,6 +1244,252 @@
 //
 /////////////////////////////////////////////////////////////////////////////
 
+void HttpStatus::GetRecProfiles( HTTPRequest *pRequest )
+{
+    QString group_name = pRequest->m_mapParams[ "groupname" ];
+
+    // Build Response XML
+    QDomDocument doc( "Profiles" );
+
+    QDomElement root = doc.createElement("Profiles");
+    doc.appendChild(root);
+
+    root.setAttribute("asOf"      , QDateTime::currentDateTime().toString( Qt::ISODate ));
+    root.setAttribute("version"   , MYTH_BINARY_VERSION           );
+    root.setAttribute("protoVer"  , MYTH_PROTO_VERSION            );
+
+    MSqlQuery query(MSqlQuery::InitCon());
+    MSqlQuery query2(MSqlQuery::InitCon());
+
+    if (group_name != "")
+    {
+        query.prepare( "SELECT r.* FROM recordingprofiles r,profilegroups p" 
+                        " WHERE p.name=:GROUPNAME AND r.profilegroup = p.id" );
+        query.bindValue(":GROUPNAME", group_name);
+    } else
+        query.prepare( "SELECT * FROM recordingprofiles" );
+
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("No Profiles", query);
+
+    if (query.size() > 0)
+    {
+
+        while (query.next())
+        {
+            QDomElement profile = doc.createElement("Profile");
+            root.appendChild(profile);
+
+            profile.setAttribute("acodec"   , query.value(3).toString());
+            profile.setAttribute("vcodec"   , query.value(2).toString());
+            profile.setAttribute("name"     , query.value(1).toString());
+            profile.setAttribute("id"       , query.value(0).toString());
+
+            QDomElement options = doc.createElement("Options");
+            profile.appendChild(options);
+
+            query2.prepare( "SELECT name,value FROM codecparams" 
+                           " WHERE profile=:ID" );
+            query2.bindValue(":ID", query.value(0).toString());
+
+            query2.exec();
+
+            while (query2.next())
+            {
+                options.setAttribute(query2.value(0).toString(), query2.value(1).toString());
+            }
+
+        }
+
+    }
+
+    // Sends back the response
+    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
+    pRequest->m_eResponseType = ResponseTypeXML;
+    pRequest->m_response << doc.toString();
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////////
+void HttpStatus::CreateRecProfiles( HTTPRequest *pRequest )
+{
+    pRequest->m_eResponseType   = ResponseTypeXML;
+    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
+
+    QString profile_name                = pRequest->m_mapParams[ "profilename" ];
+    QString group_name                  = pRequest->m_mapParams[ "groupname" ];
+    QString vcodec                      = pRequest->m_mapParams[ "vcodec" ];
+    QString acodec                      = pRequest->m_mapParams[ "acodec" ];
+    QString* transcodelossless          = &(pRequest->m_mapParams[ "transcodelossless" ]);
+    QString* transcoderesize            = &(pRequest->m_mapParams[ "transcoderesize" ]);
+    QString* width                      = &(pRequest->m_mapParams[ "width" ]);
+    QString* height                     = &(pRequest->m_mapParams[ "height" ]);
+    QString* rtjpegquality              = &(pRequest->m_mapParams[ "rtjpegquality" ]);
+    QString* rtjpeglumafilter           = &(pRequest->m_mapParams[ "rtjpeglumafilter" ]);
+    QString* rtjpegchromafilter         = &(pRequest->m_mapParams[ "rtjpegchromafilter" ]);
+    QString* mpeg4bitrate               = &(pRequest->m_mapParams[ "mpeg4bitrate" ]);
+    QString* mpeg4maxquality            = &(pRequest->m_mapParams[ "mpeg4maxquality" ]);
+    QString* mpeg4minquality            = &(pRequest->m_mapParams[ "mpeg4minquality" ]);
+    QString* mpeg4qualdiff              = &(pRequest->m_mapParams[ "mpeg4qualdiff" ]);
+    QString* mpeg4scalebitrate          = &(pRequest->m_mapParams[ "mpeg4scalebitrate" ]);
+    QString* mpeg4optionvhq             = &(pRequest->m_mapParams[ "mpeg4optionvhq" ]);
+    QString* mpeg4option4mv             = &(pRequest->m_mapParams[ "mpeg4option4mv" ]);
+    QString* mpeg4optionidct            = &(pRequest->m_mapParams[ "mpeg4optionidct" ]);
+    QString* mpeg4optionime             = &(pRequest->m_mapParams[ "mpeg4optionime" ]);
+    QString* hardwaremjpegquality       = &(pRequest->m_mapParams[ "hardwaremjpegquality" ]);
+    QString* hardwaremjpeghdecimation   = &(pRequest->m_mapParams[ "hardwaremjpeghdecimation" ]);
+    QString* hardwaremjpegvdecimation   = &(pRequest->m_mapParams[ "hardwaremjpegvdecimation" ]);
+    QString* mpeg2streamtype            = &(pRequest->m_mapParams[ "mpeg2streamtype" ]);
+    QString* mpeg2aspectratio           = &(pRequest->m_mapParams[ "mpeg2aspectratio" ]);
+    QString* mpeg2bitrate               = &(pRequest->m_mapParams[ "mpeg2bitrate" ]);
+    QString* mpeg2maxbitrate            = &(pRequest->m_mapParams[ "mpeg2maxbitrate" ]);
+    QString* samplerate                 = &(pRequest->m_mapParams[ "samplerate" ]);
+    QString* mp3quality                 = &(pRequest->m_mapParams[ "mp3quality" ]);
+    QString* volume                     = &(pRequest->m_mapParams[ "volume" ]);
+    QString* mpeg2audtype               = &(pRequest->m_mapParams[ "mpeg2audtype" ]);
+    QString* mpeg2audbitratel1          = &(pRequest->m_mapParams[ "mpeg2audbitratel1" ]);
+    QString* mpeg2audbitratel2          = &(pRequest->m_mapParams[ "mpeg2audbitratel2" ]);
+    QString* mpeg2audvolume             = &(pRequest->m_mapParams[ "mpeg2audvolume" ]);
+
+    QPtrList<const char> list_opts;
+    QPtrList<QString> list;
+    list_opts.append("transcodelossless"); 
+    list.append(transcodelossless);
+    list_opts.append("transcoderesize"); list.append(transcoderesize);
+    list_opts.append("width"); list.append(width);
+    list_opts.append("height"); list.append(height);
+    list_opts.append("rtjpegquality"); list.append(rtjpegquality);
+    list_opts.append("rtjpeglumafilter"); list.append(rtjpeglumafilter);
+    list_opts.append("rtjpegchromafilter"); list.append(rtjpegchromafilter);
+    list_opts.append("mpeg4bitrate"); list.append(mpeg4bitrate);
+    list_opts.append("mpeg4maxquality"); list.append(mpeg4maxquality);
+    list_opts.append("mpeg4minquality"); list.append(mpeg4minquality);
+    list_opts.append("mpeg4qualdiff"); list.append(mpeg4qualdiff);
+    list_opts.append("mpeg4scalebitrate"); list.append(mpeg4scalebitrate);
+    list_opts.append("mpeg4optionvhq"); list.append(mpeg4optionvhq);
+    list_opts.append("mpeg4option4mv"); list.append(mpeg4option4mv);
+    list_opts.append("mpeg4optionidct"); list.append(mpeg4optionidct);
+    list_opts.append("mpeg4optionime"); list.append(mpeg4optionime);
+    list_opts.append("hardwaremjpegquality"); list.append(hardwaremjpegquality);
+    list_opts.append("hardwaremjpeghdecimation"); list.append(hardwaremjpeghdecimation);
+    list_opts.append("hardwaremjpegvdecimation"); list.append(hardwaremjpegvdecimation);
+    list_opts.append("mpeg2streamtype"); list.append(mpeg2streamtype);
+    list_opts.append("mpeg2aspectratio"); list.append(mpeg2aspectratio);
+    list_opts.append("mpeg2bitrate"); list.append(mpeg2bitrate);
+    list_opts.append("mpeg2maxbitrate"); list.append(mpeg2maxbitrate);
+    list_opts.append("samplerate"); list.append(samplerate);
+    list_opts.append("mp3quality"); list.append(mp3quality);
+    list_opts.append("volume"); list.append(volume);
+    list_opts.append("mpeg2audtype"); list.append(mpeg2audtype);
+    list_opts.append("mpeg2audbitratel1"); list.append(mpeg2audbitratel1);
+    list_opts.append("mpeg2audbitratel2"); list.append(mpeg2audbitratel2);
+    list_opts.append("mpeg2audvolume"); list.append(mpeg2audvolume);
+
+    if (profile_name != "" && vcodec != "" && acodec != "" && group_name != "")
+    {
+        MSqlQuery query(MSqlQuery::InitCon());
+
+        query.prepare("SELECT id FROM profilegroups WHERE name=:GROUPNAME");
+        query.bindValue(":GROUPNAME", group_name);
+
+        if (!query.exec() || !query.isActive())
+            MythContext::DBError("Query problem while trying to " 
+                                 "retrieve id from Group_Name", query);
+
+        if (query.size() > 0)
+        {
+            query.first();
+            QString group = query.value(0).toString();
+
+            query.prepare("INSERT INTO recordingprofiles VALUES"
+                        " (NULL,:PNAME,:VCODEC,:ACODEC,:GROUP)" );
+            query.bindValue(":PNAME", profile_name );
+            query.bindValue(":VCODEC", vcodec );
+            query.bindValue(":ACODEC", acodec );
+            query.bindValue(":GROUP", group );
+
+            if (!query.exec() || !query.isActive())
+            {
+                MythContext::DBError("Problems while inserting profile", query);
+                pRequest->m_response <<  "<Error>Problem with the MySQL Query</Error>";
+            }
+            else
+            {
+
+                query.prepare("SELECT id FROM recordingprofiles WHERE name=:PNAME");
+                query.bindValue(":PNAME", profile_name);
+                query.exec();
+
+                query.first();
+                QString id = query.value(0).toString();
+                query.prepare("INSERT INTO codecparams VALUES (:ID, :OPTION, :VALUE)");
+                query.bindValue(":ID", id);
+                QString* value;
+
+                uint i = 0;
+                while (i < list_opts.count())
+                {
+                    if (list_opts.at(i) != "")
+                    {
+                        query.bindValue(":OPTION", list_opts.at(i));
+                        value = list.at(i);
+                        query.bindValue(":VALUE", *value);
+                        query.exec();
+                    }
+                    i++;
+                }
+
+                pRequest->m_response <<  "<Success>Profile Created</Success>";
+            }
+
+        }
+        else
+            pRequest->m_response <<  "<Error>No Result from SQL Query</Error>";
+    }
+    else
+        pRequest->m_response <<  "<Error>You must specify ALL the parameters</Error>";
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////////
+
+void HttpStatus::DelRecProfiles( HTTPRequest *pRequest )
+{
+    pRequest->m_eResponseType   = ResponseTypeXML;
+    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
+
+    QString profile_id = pRequest->m_mapParams[ "id" ];
+
+    if (profile_id != "")
+    {
+        MSqlQuery query(MSqlQuery::InitCon());
+        MSqlQuery query2(MSqlQuery::InitCon());
+
+        query.prepare("DELETE FROM recordingprofiles WHERE id = :ID" );
+        query2.prepare("DELETE FROM codecparams WHERE profile = :ID" );
+        query.bindValue(":ID", profile_id );
+        query2.bindValue(":ID", profile_id );
+
+        if (!query.exec() || !query.isActive() || !query2.exec() || !query2.isActive())
+        {
+            MythContext::DBError("Problems while deleting profile", query);
+            pRequest->m_response <<  "<Error>Problem with the MySQL Query</Error>";
+        }
+        else
+            pRequest->m_response <<  "<Success>Profile Deleted</Success>";
+
+    }
+    else
+        pRequest->m_response <<  "<Error>You must specify the id to delete</Error>";
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////////
+
 void HttpStatus::GetStatusXML( HTTPRequest *pRequest )
 {
     QDomDocument doc( "Status" );                        
Index: programs/mythbackend/httpstatus.h
===================================================================
--- programs/mythbackend/httpstatus.h	(revision 12909)
+++ programs/mythbackend/httpstatus.h	(working copy)
@@ -1,4 +1,5 @@
-//////////////////////////////////////////////////////////////////////////////
+//////////
+////////////////////////////////////////////////////////////////////
 // Program Name: httpstatus.h
 //                                                                            
 // Purpose - Html & XML status HttpServerExtension 
@@ -51,8 +52,12 @@
     HSM_GetProgramDetails = 18,
 
     HSM_GetVideo        = 19,
-    HSM_GetMSRRDesc     = 20
+    HSM_GetMSRRDesc     = 20,
 
+    HSM_GetRecProfiles    = 21,
+    HSM_DelRecProfiles    = 22,
+    HSM_CreateRecProfiles = 23
+
 } HttpStatusMethod;
 
 /////////////////////////////////////////////////////////////////////////////
@@ -180,6 +185,10 @@
         void    GetVideo       ( HttpWorkerThread *pThread,
                                  HTTPRequest      *pRequest );
 
+        void    GetRecProfiles    ( HTTPRequest *pRequest );
+        void    DelRecProfiles    ( HTTPRequest *pRequest );
+        void    CreateRecProfiles ( HTTPRequest *pRequest );
+
         void    GetDeviceDesc  ( HTTPRequest *pRequest ); 
         void    GetFile        ( HTTPRequest *pRequest, QString sFileName );
 
