[mythtv] New Country

Anil Gupte anil-list at icinema.com
Mon Jul 11 07:27:28 EDT 2005


Thanx, that gives us a lot to work with and digest!  Really appreciate the 
detailed reply and all the code.

As I understand it (please correct me if I am wrong), we can get it working in a 
fashion without a functioning grabber, just by using a perl script to fill in 
the schedules, and perhaps update them too.  We want to see how it works first 
(just for some oohs and ahs :-)), and then we will roll up our sleeves and dig 
into code and write a grabber.

Thanx again,
Anil Gupte

----- Original Message ----- 
From: "Jack Porter" <jack at porter.net.au>
To: "Development of mythtv" <mythtv-dev at mythtv.org>
Sent: Monday, July 11, 2005 12:37 PM
Subject: Re: [mythtv] New Country


> Hi Anil,
>
> I successfully added support for South Korea, made an xmltv grabber and
> added simple Hangul (Korean script) program finder.
>
> I'd recommend working from the latest code rather than any prebuilt
> binaries because you're definitely going to have to recompile and if you
> run into any bugs you won't get any help here if you're not running the
> latest code.
>
> The very first thing you'll need to do is add support for an indian
> grabber (filldata.cpp) and a menu option to select it in the setup
> program (videosource.cpp).  Attached are my patches for these files.
> (Actually, the majority of the changes to filldata.cpp are for an
> optional command-line param for tv_grab_* grabbers "xmltv_options" so
> you might night want to bother merging those lines)
>
> One you've got that going, you'll need to write a video listing grabber
> for find some other way to populate the program table.
>
> I used the tv_grab_jp as an example but I didn't support anything like
> daily updates or options for date ranges.  I just run it once a week as
> "mythfilldatabase --nodelete" and it runs tv_grab_kr and reads the xmltv
> data it generates.
>
> If you don't want to go that route, you can easily just insert new
> programs directly into the program table using SQL from a perl script.
> I do this for some programs that the website I use for my source doesn't
> reliably list.
>
> Once you've got program data in there, the rest of it is pretty easy.  I
> use a cable box so tuning wasn't a problem.  Not sure about Indian
> television standards but it should be pretty straight-forward to add
> support if one of the existing frequency tables don't work.  All the
> important code is in libs/libmythtv, just have a look around and search
> with grep.
>
> Unicode support is pretty complete and the only thing you need to do is
> choose an OSD font that will display your character set. (put a TTF file
> in /usr/local/share/mythtv/)
>
> Let me know if you want any more of my patches or help, I haven't
> submitted them because they're all pretty hacky but they work for me.
>
> Good luck!
>
> Cheers
> Jack
>
>
>
>
>
> Anil Gupte wrote:
>> Looking for expertise in MythTV and XMLTV setup for a new country.  We
>> are setting up MythTV in India and having a heck of a (bad) time.
>> Initially, we are setting it up using Knoppix, although we will
>> recompile from scratch eventually.  We just want to get it up and
>> running first.  If someone (some team) has set up a new country,
>> including writing a grabber, discovering frequencies and all that, we
>> sure could use your help and/or advice.  We have lots of Linux and C
>> expertise and we can probably find Perl skills (for XMLTV).  If you know
>> of someone and they are not on this list or not on this list anymore,
>> please forward this request to them.
>>
>> We will really, really appreciate it.
>>
>> Anil Gupte
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> mythtv-dev mailing list
>> mythtv-dev at mythtv.org
>> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>


--------------------------------------------------------------------------------


> Index: mythtv/libs/libmythtv/videosource.cpp
> ===================================================================
> RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/videosource.cpp,v
> retrieving revision 1.80
> diff -u -r1.80 videosource.cpp
> --- mythtv/libs/libmythtv/videosource.cpp 10 May 2005 23:33:56 -0000 1.80
> +++ mythtv/libs/libmythtv/videosource.cpp 18 Jun 2005 08:20:38 -0000
> @@ -559,6 +559,9 @@
>
>     addTarget("tv_grab_jp", new XMLTV_generic_config(parent, "tv_grab_jp"));
>     grabber->addSelection("Japan", "tv_grab_jp");
> +
> +    addTarget("tv_grab_kr", new XMLTV_generic_config(parent, "tv_grab_kr"));
> +    grabber->addSelection("South Korea", "tv_grab_kr");
>
>     addTarget("tv_grab_pt", new XMLTV_generic_config(parent, "tv_grab_pt"));
>     grabber->addSelection("Portugal", "tv_grab_pt");
> Index: mythtv/programs/mythfilldatabase/filldata.cpp
> ===================================================================
> RCS file: /var/lib/mythcvs/mythtv/programs/mythfilldatabase/filldata.cpp,v
> retrieving revision 1.177
> diff -u -r1.177 filldata.cpp
> --- mythtv/programs/mythfilldatabase/filldata.cpp 3 May 2005 21:56:29 -0000 
> 1.177
> +++ mythtv/programs/mythfilldatabase/filldata.cpp 18 Jun 2005 08:20:38 -0000
> @@ -43,6 +43,7 @@
> bool no_delete = false;
> bool isNorthAmerica = false;
> bool isJapan = false;
> +bool isKorea = false;
> bool interrupted = false;
> bool refresh_today = false;
> bool refresh_tomorrow = true;
> @@ -57,6 +58,7 @@
> QString lastdduserid;
> DataDirectProcessor ddprocessor;
> QString graboptions = "";
> +QString koreamovie = "";
>
> class ChanInfo
> {
> @@ -189,6 +191,7 @@
>     int id;
>     QString name;
>     QString xmltvgrabber;
> +    QString xmltvgrabberoptions;
>     QString userid;
>     QString password;
>     QString lineupid;
> @@ -1355,6 +1358,11 @@
>                     // Hack for tv_grab_uk_rt
>                     pginfo->catType = "movie";
>                 }
> +
> +                if( isKorea && cat.contains(koreamovie) )
> +                {
> +                    pginfo->catType = "movie";
> +                }
>             }
>             else if (info.tagName() == "date" && pginfo->airdate == "")
>             {
> @@ -2485,6 +2493,7 @@
> bool grabData(Source source, int offset, QDate *qCurrentDate = 0)
> {
>     QString xmltv_grabber = source.xmltvgrabber;
> +    QString xmltv_options = source.xmltvgrabberoptions;
>
>     if (xmltv_grabber == "datadirect")
>         return grabDDData(source, offset, *qCurrentDate, DD_ZAP2IT);
> @@ -2508,78 +2517,87 @@
>     QString command;
>
>     if (xmltv_grabber == "tv_grab_uk")
> -        command.sprintf("nice %s --days 7 --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(), configfile.ascii(),
> +        command.sprintf("nice %s %s --days 7 --config-file '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_uk_rt")
> -        command.sprintf("nice %s --days 14 --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(),
> +        command.sprintf("nice %s %s --days 14 --config-file '%s' --output 
> %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(),
>                         configfile.ascii(), filename.ascii());
>     else if (xmltv_grabber == "tv_grab_au")
> -        command.sprintf("nice %s --days 7 --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(), configfile.ascii(),
> +        command.sprintf("nice %s %s --days 7 --config-file '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_de_tvtoday")
> -        command.sprintf("nice %s --slow --days 1 --config-file '%s' --offset 
> %d --output %s",
> -                        xmltv_grabber.ascii(), configfile.ascii(),
> +        command.sprintf("nice %s %s --slow --days 1 --config-file 
> '%s' --offset %d --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                         offset, filename.ascii());
>     else if (xmltv_grabber == "tv_grab_fr")
> -        command.sprintf("nice %s --days 7 '%s' --output %s",
> -                        xmltv_grabber.ascii(), configfile.ascii(),
> +        command.sprintf("nice %s %s --days 7 '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_nl")
> -        command.sprintf("nice %s --output %s",
> -                        xmltv_grabber.ascii(),
> +        command.sprintf("nice %s %s --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_fi")
>         // Use the default of 10 days for Finland's grabber
> -        command.sprintf("nice %s --offset %d --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(), offset,
> +        command.sprintf("nice %s %s --offset %d --config-file '%s' --output 
> %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), offset,
>                         configfile.ascii(), filename.ascii());
>     else if (xmltv_grabber == "tv_grab_es")
>         // Use fixed interval of 3 days for Spanish grabber
> -        command.sprintf("nice %s --days=4  --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(),
> +        command.sprintf("nice %s %s --days=4  --config-file '%s' --output 
> %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(),
>                         configfile.ascii(), filename.ascii());
>     else if (xmltv_grabber == "tv_grab_jp")
>     {
>          // Use fixed interval of 7 days for Japanese grabber
> -         command.sprintf("nice %s --days 7 --enable-readstr --config-file 
> '%s' --output %s",
> -                         xmltv_grabber.ascii(), configfile.ascii(),
> +         command.sprintf("nice %s %s --days 7 --enable-readstr --config-file 
> '%s' --output %s",
> +                         xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                          filename.ascii());
>          isJapan = true;
>     }
> +    else if (xmltv_grabber == "tv_grab_kr")
> +    {
> + // Use fixed interval of 7 days for Korean grabber
> + command.sprintf("nice %s %s --output %s",
> + xmltv_grabber.ascii(), xmltv_options.ascii(),
> + filename.ascii());
> + isKorea = true;
> + koreamovie = QString::fromUtf8("영화");
> + }
>     else if (xmltv_grabber == "tv_grab_no")
> -        command.sprintf("nice %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> -                        xmltv_grabber.ascii(), offset, configfile.ascii(),
> +        command.sprintf("nice %s %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), offset, 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_se_swedb")
> -         command.sprintf("nice %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> -                         xmltv_grabber.ascii(), offset, configfile.ascii(),
> +         command.sprintf("nice %s %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> +                         xmltv_grabber.ascii(), xmltv_options.ascii(), 
> offset, configfile.ascii(),
>                          filename.ascii());
>     else if (xmltv_grabber == "tv_grab_dk")
>         // Use fixed interval of 7 days for Danish grabber
> -        command.sprintf("nice %s --days 7 --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(), configfile.ascii(),
> +        command.sprintf("nice %s %s --days 7 --config-file '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_pt")
>         // Use fixed interval of 3 days for Portuguese grabber
> -        command.sprintf("nice %s --days=4  --config-file '%s' --output %s",
> -                        xmltv_grabber.ascii(),
> +        command.sprintf("nice %s %s --days=4  --config-file '%s' --output 
> %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(),
>                         configfile.ascii(), filename.ascii());
>     else if (xmltv_grabber == "tv_grab_be_tvb")
> -        command.sprintf("nice %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> -                        xmltv_grabber.ascii(), offset, configfile.ascii(),
> +        command.sprintf("nice %s %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), offset, 
> configfile.ascii(),
>                         filename.ascii());
>     else if (xmltv_grabber == "tv_grab_be_tlm")
> -        command.sprintf("nice %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> -                        xmltv_grabber.ascii(), offset, configfile.ascii(),
> +        command.sprintf("nice %s %s --days 1 --offset %d --config-file 
> '%s' --output %s",
> +                        xmltv_grabber.ascii(), xmltv_options.ascii(), offset, 
> configfile.ascii(),
>                         filename.ascii());
>     else
>     {
>         isNorthAmerica = true;
> -        command.sprintf("nice %s --days 1 --offset %d --config-file '%s' "
> -                        "--output %s", xmltv_grabber.ascii(),
> +        command.sprintf("nice %s %s --days 1 --offset %d --config-file '%s' "
> +                        "--output %s", xmltv_grabber.ascii(), 
> xmltv_options.ascii(),
>                         offset, configfile.ascii(), filename.ascii());
>     }
>
> @@ -2596,6 +2614,7 @@
>          xmltv_grabber == "tv_grab_nl" ||
>          xmltv_grabber == "tv_grab_fr" ||
>          xmltv_grabber == "tv_grab_fi" ||
> +         xmltv_grabber == "tv_grab_kr" ||
>          xmltv_grabber == "tv_grab_jp" ||
>          xmltv_grabber == "tv_grab_pt" ||
>          xmltv_grabber == "tv_grab_be_tvb" ||
> @@ -2746,7 +2765,7 @@
>             xmltv_grabber == "tv_grab_fi" || xmltv_grabber == "tv_grab_es" ||
>             xmltv_grabber == "tv_grab_nl" || xmltv_grabber == "tv_grab_au" ||
>             xmltv_grabber == "tv_grab_fr" || xmltv_grabber == "tv_grab_jp" ||
> -            xmltv_grabber == "tv_grab_pt")
> +            xmltv_grabber == "tv_grab_pt" || xmltv_grabber == "tv_grab_kr" )
>         {
>             // These don't support the --offset option, so just grab the max.
>             if (!grabData(*it, -1))
> @@ -3520,7 +3539,7 @@
>
>         MSqlQuery sourcequery(MSqlQuery::InitCon());
>         QString querystr = QString("SELECT sourceid,name,xmltvgrabber,userid,"
> -                                   "password,lineupid "
> +                                   "password,lineupid,xmltvgrabberoptions "
>                                    "FROM videosource ORDER BY sourceid;");
>         sourcequery.exec(querystr);
>
> @@ -3535,6 +3554,7 @@
>                        newsource.id = sourcequery.value(0).toInt();
>                        newsource.name = sourcequery.value(1).toString();
>                        newsource.xmltvgrabber = 
> sourcequery.value(2).toString();
> +        newsource.xmltvgrabberoptions = sourcequery.value(6).toString();
>                        newsource.userid = sourcequery.value(3).toString();
>                        newsource.password = sourcequery.value(4).toString();
>                        newsource.lineupid = sourcequery.value(5).toString();
>


--------------------------------------------------------------------------------


_______________________________________________
mythtv-dev mailing list
mythtv-dev at mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev



More information about the mythtv-dev mailing list