[mythtv] [Patch] mythvideo - french movie database
MaxPower
maxpower44 at tiscali.fr
Wed Nov 26 12:40:32 EST 2003
I just create un patch for videomanager.cpp.
It allow french user to grab movie information in french.
To use it, just select Français in setup => Apparence => Language
I have change the storage of poster, the name of picture is now the
number of IMDB + picture extension.
I have made thie change because for the french version of IMDB, the
filenames of coverfile are often the same.
Please apply this patch
I believe that mythtv cvs version have a bug.
Language in setting table of mysql store the entire word (not just the
two first letter).
Then translation can be load for any language because
gContext->GetSetting("Language") get this :
for German => Deutsch in place of DE
for French => Français in place of FR.
Mythtv can't load mythvideo_deutch.ts.
It the same trouble for each language and translation file.
Just try to change language to see this bug.
I don't know enough mythtv then i don't know in which file the bug is.
-------------- next part --------------
--- /usr/local/src/cvs/myth/mythvideo/mythvideo/videomanager.cpp 2003-09-24 05:09:58.000000000 +0200
+++ mythvideo/videomanager.cpp 2003-11-26 18:02:12.000000000 +0100
@@ -323,8 +323,15 @@
QMap<QString, QString> VideoManager::parseMovieList(QString data)
{
QMap<QString, QString> listing;
- QString beg = "<A HREF=\"/Title";
- QString end = "</A>";
+ QString beg = "";
+ QString end = "";
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ beg = "<A HREF=\"/film/fichefilm_gen_cfilm=";
+ end = "</TD></TR>";
+ }else{
+ beg = "<A HREF=\"/Title";
+ end = "</A>";
+ };
QString ret = "";
QString movieNumber = "";
@@ -344,12 +351,18 @@
while (start != ((int)beg.length() - 1))
{
ret = data.mid(start, endint - start);
-
- int fnd = ret.find("title/tt") + 4;
- movieNumber = ret.mid(fnd, ret.find("/\">") - fnd);
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ movieNumber = ret.mid(0,ret.find(".html\"><FONT color=#003399>"));
+ movieTitle = ret.right(ret.length()-ret.find("<FONT color=#003399>")-20);
+ movieTitle.remove("<B>");
+ movieTitle.remove("</B>");
+ movieTitle.replace("</FONT></A>", " - ");
+ }else{
+ int fnd = ret.find("title/tt") + 4;
+ movieNumber = ret.mid(fnd, ret.find("/\">") - fnd);
- movieTitle = ret.right(ret.length() - ret.find("\">") - 2);
-
+ movieTitle = ret.right(ret.length() - ret.find("\">") - 2);
+ };
listing[movieNumber] = movieTitle;
data = data.right(data.length() - endint);
@@ -404,11 +417,19 @@
if (movieNum == "Local")
return(QString("<NULL>"));
- QString host = "www.imdb.com";
- QString path = "";
-
- QUrl url("http://" + host + "/title/tt" + movieNum + "/posters");
+ QUrl url;
+ QString host = "<NULL>";
+ QString path ="<NULL>";
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ host = "www.allocine.fr";
+
+ url = "http://" + host + "/film/galerie_gen_cfilm=" + movieNum + "&big=1&page=1.html";
+ }else{
+ host = "www.imdb.com";
+ path = "";
+ url = "http://" + host + "/title/tt" + movieNum + "/posters";
+ };
//cout << "Grabbing Poster HTML From: " << url.toString() << endl;
if (httpGrabber)
@@ -431,63 +452,75 @@
QString beg, end, filename = "<NULL>";
- // Check for posters on impawards.com first, since their posters
- // are usually much better quality
-
- beg = "Posters on other sites</h2></p>\n<ul>\n<li><a href=\"";
- end = "\">http://www.impawards.com";
- QString impsite = parseDataAnchorEnd(res, beg, end);
- if (impsite != "<NULL>")
- {
-
- //cout << "Retreiving poster from " << impsite << endl;
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ beg="<A HREF=\"/film/galerie_gen_cfilm="+movieNum+".html\" target=\"\"><IMG border=0 src=\"";
+ end = "\" Zatl";
+ filename = parseData(res,beg,end);
+ path = filename;
+ path.remove("http://" + host);
+ path = path.right(path.length()- path.findRev("/"));
+ filename = filename.left(filename.findRev("/"));
+ }else{
+ // Check for posters on impawards.com first, since their posters
+ // are usually much better quality
+
+ beg = "Posters on other sites</h2></p>\n<ul>\n<li><a href=\"";
+ end = "\">http://www.impawards.com";
+ QString impsite = parseDataAnchorEnd(res, beg, end);
+ if (impsite != "<NULL>")
+ {
+
+ //cout << "Retreiving poster from " << impsite << endl;
- QUrl impurl(impsite);
+ QUrl impurl(impsite);
- //cout << "Grabbing Poster HTML From: " << url.toString() << endl;
+ //cout << "Grabbing Poster HTML From: " << url.toString() << endl;
- if (httpGrabber)
- {
- httpGrabber->stop();
- delete httpGrabber;
- }
+ if (httpGrabber)
+ {
+ httpGrabber->stop();
+ delete httpGrabber;
+ }
- httpGrabber = new HttpComms(impurl);
+ httpGrabber = new HttpComms(impurl);
- while (!httpGrabber->isDone())
- {
- qApp->processEvents();
- usleep(10000);
- }
+ while (!httpGrabber->isDone())
+ {
+ qApp->processEvents();
+ usleep(10000);
+ }
- QString impres;
+ QString impres;
- impres = httpGrabber->getData();
- beg = "<img SRC=\"posters/";
- end = "\" ALT";
-
- filename = parseData(impres, beg, end);
- //cout << "Imp found: " << filename << endl;
-
- host = parseData(impsite, "//", "/");
- path = impsite.replace(QRegExp("http://" + host), QString(""));
- path = path.left(impsite.findRev("/") + 1) + "posters/";
- }
+ impres = httpGrabber->getData();
+ beg = "<img SRC=\"posters/";
+ end = "\" ALT";
+
+ filename = parseData(impres, beg, end);
+ //cout << "Imp found: " << filename << endl;
+
+ host = parseData(impsite, "//", "/");
+ path = impsite.replace(QRegExp("http://" + host), QString(""));
+ path = path.left(impsite.findRev("/") + 1) + "posters/";
+ }
- // If the impawards site failed or wasn't available
- // just grab the poster from imdb
- if (filename == "<NULL>")
- {
- host = "posters.imdb.com";
- path = "/posters/";
+ // If the impawards site failed or wasn't available
+ // just grab the poster from imdb
+ if (filename == "<NULL>")
+ {
+ host = "posters.imdb.com";
+ path = "/posters/";
- //cout << "Retreiving poster from imdb.com" << endl;
- beg = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" "
+ //cout << "Retreiving poster from imdb.com" << endl;
+ beg = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" "
"background=\"http://posters.imdb.com/posters/";
- end = "\"><td><td><a href=\"";
+ end = "\"><td><td><a href=\"";
- filename = parseData(res, beg, end);
+ filename = parseData(res, beg, end);
+ }
}
+
+ //cout << "IMDB"<< host << " - " << path <<" - " << filename << endl;
if (filename == "<NULL>")
{
@@ -510,12 +543,14 @@
//cout << "Copying (" << filename << ")...";
QUrlOperator *op = new QUrlOperator();
- op->copy(QString("http://" + host + path + filename),
- "file:" + fileprefix);
+
//cout << "Done.\n";
- filename = filename.right(filename.length() - filename.findRev("/") - 1);
- fileprefix = fileprefix + "/" + filename;
+ fileprefix = fileprefix + "/" + movieNum + filename.right(filename.length()-filename.findRev("."));
+
+ op->copy(QString("http://" + host + path + filename),
+ "file:"+fileprefix,false,false);
+
return fileprefix;
@@ -524,9 +559,15 @@
void VideoManager::GetMovieData(QString movieNum)
{
movieNumber = movieNum;
- QString host = "www.imdb.com";
-
- QUrl url("http://" + host + "/title/tt" + movieNum + "/");
+ QUrl url;
+ QString host ="<NULL>";
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ host = "www.allocine.fr";
+ url = "http://" + host + "/film/fichefilm_gen_cfilm=" + movieNum + ".html";
+ }else{
+ host = "www.imdb.com";
+ url = "http://" + host + "/title/tt" + movieNum + "/";
+ }
//cout << "Grabbing Data From: " << url.toString() << endl;
@@ -555,13 +596,23 @@
int VideoManager::GetMovieListing(QString movieName)
{
int ret = -1;
- QString host = "us.imdb.com";
- theMovieName = movieName;
+ QString host = "<NULL>";
+ QUrl url;
- QUrl url("http://" + host + "/Tsearch?title=" + movieName +
- "&type=fuzzy&from_year=1890" +
- "&to_year=2010&sort=smart&tv=off&x=12&y=14");
+ //cout << "Language " << gContext->GetSetting("Language").left(2).lower() << endl;
+ if(gContext->GetSetting("Language").left(2).lower()=="fr"){
+ host = "www.allocine.fr";
+ theMovieName = movieName;
+
+ url = "http://" + host + "/recherche/rubrique.html?typerecherche=3&motcle="+movieName;
+ }else{
+ host = "us.imdb.com";
+ theMovieName = movieName;
+ url = "http://" + host + "/Tsearch?title=" + movieName +
+ "&type=fuzzy&from_year=1890" +
+ "&to_year=2010&sort=smart&tv=off&x=12&y=14";
+ };
//cout << "Grabbing Listing From: " << url.toString() << endl;
if (httpGrabber)
@@ -588,9 +639,13 @@
QString res;
res = httpGrabber->getData();
-
- QString movies = parseData(res, "<A NAME=\"mov\">Movies</A></H2>", "</TABLE>");
-
+ QString movies = "<NULL>";
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ movies = parseData (res,"<TABLE width=96% cellPadding=0 cellSpacing=2 border=0>","</TABLE>");
+ //cout << movies << endl;
+ }else{
+ movies = parseData(res, "<A NAME=\"mov\">Movies</A></H2>", "</TABLE>");
+ }
movieList.clear();
if (movies != "<NULL>")
@@ -619,42 +674,92 @@
movieList["reset"] = tr("Reset Entry");
movieList["cancel"] = tr("Cancel");
ret = 2;
-
return ret;
}
void VideoManager::ParseMovieData(QString data)
{
- movieTitle = parseData(data, "<title>", "(");
- QString mYear = parseData(data, "(", ")");
- if (mYear.find("/") > 0)
- movieYear = mYear.left(mYear.find("/")).toInt();
- else
- movieYear = mYear.toInt();
+ if (gContext->GetSetting("Language").left(2).lower()=="fr"){
+ //cout << data << endl;
+ movieTitle = parseData(data,"<FONT Class=\"titrePage\">","</FONT>");
+ movieTitle.remove("<font >");
+ QString tmpData = parseData(data,"<TD><font >","</font>.");
+ QString mYear = parseData(tmpData,"<font >(",")");
+ movieYear = mYear.toInt();
+ int movieLevel;
+ QString level = parseData(data,"Interdit aux moins de ","ans");
+ if (level != "<NULL>"){
+ switch (level.toInt()){
+ case 18:movieLevel=4;break;
+ case 16:movieLevel=3;break;
+ case 12:movieLevel=2;break;
+ }
+ }
+ movieDirector="<NULL>";
+
+ moviePlot = parseData(data,"<DIV Align='Justify'><FONT class=\"size2\">","</FONT></DIV>");
+ moviePlot.replace("<BR>","\n");
+ moviePlot.remove("<br>");
+
+ QString rating = parseData(data,"Presse","</TABLE>");
+ int nbvote = 0;
+ float sommevote = 0;
+ rating = parseData(rating,"etoile_",".gif");
+ if (rating !="<NULL>"){
+ sommevote = rating.toInt();
+ nbvote ++;
+ }
+ rating = parseData(data,"Spectateurs","</TABLE>");
+ rating = parseData(rating,"etoile_",".gif");
+ if (rating != "<NULL>"){
+ sommevote += rating.toInt();
+ nbvote ++;
+ }
+ if (nbvote>0){movieUserRating=sommevote/nbvote;};
+
+ movieRating = parseData(data,"<TD><font >","<font >(");
+ QString mR = parseData(data,")</font>. <FONT Class=\"size2\">","<FONT Class=\"size2\">Du");
+ movieRating = movieRating + "\n" + mR;
+// movieRating.remove("</font>");
+ movieRating.remove("</FONT>");
+ movieRating.remove("<FONT Class=\"size2\">");
+ movieRating.replace(" "," ");
+
+ QString movieRuntimetmp = parseData(data,">Dur","</FONT>");
+ movieRuntime = parseData(movieRuntimetmp,"e : ","h").toInt()*60+parseData(movieRuntimetmp,"h","mn.").toInt();
+
+ }else{
+ movieTitle = parseData(data, "<title>", "(");
+ QString mYear = parseData(data, "(", ")");
+ if (mYear.find("/") > 0)
+ movieYear = mYear.left(mYear.find("/")).toInt();
+ else
+ movieYear = mYear.toInt();
- movieDirector = parseData(data, ">Directed by</b><br>\n<a href=\"/name/nm", "</a><br>");
- if (movieDirector != "<NULL>")
- movieDirector = movieDirector.right(movieDirector.length() - movieDirector.find("\">") - 2);
- moviePlot = parseData(data, "<b class=\"ch\">Plot Outline:</b> ", "<a href=\"");
- if (moviePlot == "<NULL>")
- moviePlot = parseData(data, "<b class=\"ch\">Plot Summary:</b> ", "<a href=\"");
-
- QString rating = parseData(data, "<b class=\"ch\">User Rating:</b>", " (");
- rating = parseData(rating, "<b>", "/");
- movieUserRating = rating.toFloat();
-
- movieRating = parseData(data, "<b class=\"ch\"><a href=\"/mpaa\">MPAA</a>:</b> ", "<br>");
- if (movieRating == "<NULL>")
- {
- movieRating = parseData(data, "<b class=\"ch\">Certification:</b>", "<br>");
- movieRating = parseData(movieRating, "<a href=\"/List?certificates=" + ratingCountry, "/a>");
- movieRating = parseData(movieRating, "\">", "<");
+ movieDirector = parseData(data, ">Directed by</b><br>\n<a href=\"/name/nm", "</a><br>");
+ if (movieDirector != "<NULL>")
+ movieDirector = movieDirector.right(movieDirector.length() - movieDirector.find("\">") - 2);
+ moviePlot = parseData(data, "<b class=\"ch\">Plot Outline:</b> ", "<a href=\"");
+ if (moviePlot == "<NULL>")
+ moviePlot = parseData(data, "<b class=\"ch\">Plot Summary:</b> ", "<a href=\"");
+
+ QString rating = parseData(data, "<b class=\"ch\">User Rating:</b>", " (");
+ rating = parseData(rating, "<b>", "/");
+ movieUserRating = rating.toFloat();
+
+ movieRating = parseData(data, "<b class=\"ch\"><a href=\"/mpaa\">MPAA</a>:</b> ", "<br>");
+ if (movieRating == "<NULL>")
+ {
+ movieRating = parseData(data, "<b class=\"ch\">Certification:</b>", "<br>");
+ movieRating = parseData(movieRating, "<a href=\"/List?certificates=" + ratingCountry, "/a>");
+ movieRating = parseData(movieRating, "\">", "<");
+ }
+ movieRuntime = parseData(data, "<b class=\"ch\">Runtime:</b>", " min").toInt();
}
- movieRuntime = parseData(data, "<b class=\"ch\">Runtime:</b>", " min").toInt();
QString movieCoverFile = "";
movieCoverFile = GetMoviePoster(movieNumber);
- /*
+ /*
cout << " Title:\t" << movieTitle << endl;
cout << " Year:\t" << movieYear << endl;
cout << " Director:\t" << movieDirector << endl;
@@ -663,7 +768,7 @@
cout << " Rating:\t" << movieRating << endl;
cout << " Runtime:\t" << movieRuntime << endl;
cout << " Cover File:\t" << movieCoverFile << endl;
- */
+ */
if (movieTitle == "<NULL>")
ResetCurrentItem();
More information about the mythtv-dev
mailing list