[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("&nbsp;"," ");
+	
+	QString movieRuntimetmp = parseData(data,">Dur","</FONT>");
+	movieRuntime = parseData(movieRuntimetmp,"e&nbsp;:&nbsp;","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