{"id":973,"date":"2010-10-05T19:22:32","date_gmt":"2010-10-05T17:22:32","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=973"},"modified":"2010-10-05T19:22:32","modified_gmt":"2010-10-05T17:22:32","slug":"modifier-le-path-des-photos-dans-shotwell","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2010\/10\/modifier-le-path-des-photos-dans-shotwell\/","title":{"rendered":"Modifier le path des photos dans Shotwell"},"content":{"rendered":"<p>Dans quelques jours sortira la version officielle d&rsquo;Ubuntu 10.10. Dans cette nouvelle version, <em>Shotwell<\/em> remplacera <em>F-Spot<\/em> pour la gestion des photos.<br \/>\nJe ne sais pas ce qu&rsquo;il en sera de la version qui sera propos\u00e9e dans <em>Maverick<\/em> mais jusqu&rsquo;\u00e0 pr\u00e9sent, il n&rsquo;est pas possible de changer le chemin des photos une fois que celles-ci ont \u00e9t\u00e9 import\u00e9es dans <em>Shotwell<\/em>. Cela veut dire que si vous changez vos photos de place, que vous les placez dans un autre r\u00e9pertoire, il n&rsquo;est pas possible de l&rsquo;indiquer \u00e0 <em>Shotwell<\/em>. Vous continuerez \u00e0 voir les miniatures s&rsquo;afficher dans <em>Shotwell<\/em> mais impossible d&rsquo;afficher la photo \u00e0 sa taille r\u00e9elle parce que, forc\u00e9ment, <em>Shotwell<\/em> ne connait pas le nouveau chemin.<\/p>\n<p>Je me suis trouv\u00e9 devant ce probl\u00e8me et la seule solution que j&rsquo;ai trouv\u00e9e est de modifier le chemin des photos directement dans la base de donn\u00e9es utilis\u00e9e par <em>Shotwell<\/em>.<br \/>\nIl faut savoir que <em>Shotwell<\/em> stoque les informations sur les photos dans une base de donn\u00e9es <em>sqlite<\/em> qui se trouve dans le r\u00e9pertoire <em>~\/.shotwell\/data\/photo.db<\/em>.<br \/>\nSi vous jeter un oeil au contenu de cette base de donn\u00e9es <em>sqlite<\/em>, vous verrez qu&rsquo;une des tables s&rsquo;appelle <em>PhotoTable<\/em>. Celle-ci contient un num\u00e9ro d&rsquo;index unique pour chaque photo, le chemin complet et le nom de fichier de la photo. <\/p>\n<p>Il suffit donc simplement d&rsquo;\u00e9crire un petit script simple pour modifier dans la base de donn\u00e9es le chemin des photos. La base de donn\u00e9es \u00e9tant une base de donn\u00e9es <em>sqlite<\/em>, j&rsquo;ai choisi d&rsquo;\u00e9crire le programme en python puisque celui-ci supporte nativement <em>sqlite<\/em>. De plus, comme son nom l&rsquo;indique, <em>sqlite<\/em> permet de dialoguer avec la base de donn\u00e9es au moyen de commandes <em>SQL<\/em>, ce qui simplifie les choses.<\/p>\n<p>Voici le script que j&rsquo;ai utilis\u00e9:<\/p>\n<pre class=\"codesource\">\r\n<span class=\"codecomment\">#!&nbsp;\/usr\/bin\/env&nbsp;python\r\n<\/span><span class=\"codecomment\">#&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-\r\n<\/span>\r\n<span class=\"reservedname\">import<\/span>&nbsp;sqlite3\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;<span class=\"codecomment\">#&nbsp;!!!&nbsp;Donnez&nbsp;\u00e0&nbsp;oldpath&nbsp;et&nbsp;newpath&nbsp;les&nbsp;bonnes&nbsp;valeurs&nbsp;!!!\r\n<\/span>oldpath&nbsp;=&nbsp;\/ancien\/path\/des\/photos\r\nnewpath&nbsp;=&nbsp;\/nouveau\/path\r\n\r\nconn&nbsp;=&nbsp;sqlite3.connect(<span class=\"quotedstring\">'~\/.shotwell\/data\/photo.db'<\/span>)\r\n\r\n<span class=\"codecomment\">#&nbsp;Permet&nbsp;d'acc\u00e9der&nbsp;aux&nbsp;colonnes&nbsp;en&nbsp;utilisant&nbsp;leur&nbsp;nom\r\n<\/span>conn.row_factory&nbsp;=&nbsp;sqlite3.Row\r\nc&nbsp;=&nbsp;conn.cursor()\r\n\r\n<span class=\"codecomment\">#&nbsp;On&nbsp;utilise&nbsp;l'index&nbsp;le&nbsp;plus&nbsp;\u00e9lev\u00e9&nbsp;comme&nbsp;limite&nbsp;de&nbsp;la&nbsp;boucle\r\n<\/span>last_rowid&nbsp;=&nbsp;c.execute(<span class=\"quotedstring\">\"\"<\/span><span class=\"quotedstring\">\"SELECT&nbsp;MAX(id)&nbsp;FROM&nbsp;PhotoTable\"<\/span><span class=\"quotedstring\">\"\"<\/span>).fetchone()[0]\r\n\r\n<span class=\"reservedname\">for<\/span>&nbsp;row&nbsp;<span class=\"reservedname\">in<\/span>&nbsp;xrange(1,&nbsp;last_rowid+1):\r\n&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;c.execute(<span class=\"quotedstring\">\"\"<\/span><span class=\"quotedstring\">\"SELECT&nbsp;*&nbsp;FROM&nbsp;PhotoTable&nbsp;where&nbsp;id=?\"<\/span><span class=\"quotedstring\">\"\"<\/span>,&nbsp;(row,)).fetchone()\r\n&nbsp;&nbsp;<span class=\"codecomment\">#&nbsp;Certaines&nbsp;lignes&nbsp;ont&nbsp;pu&nbsp;\u00eatre&nbsp;supprim\u00e9es&nbsp;et&nbsp;donc&nbsp;certains&nbsp;index&nbsp;ne&nbsp;pas&nbsp;exister\r\n<\/span>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"reservedname\">if<\/span>&nbsp;line:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newline&nbsp;=&nbsp;line[<span class=\"quotedstring\">'filename'<\/span>].replace(<span class=\"quotedstring\">'oldpath'<\/span>,&nbsp;<span class=\"quotedstring\">'newpath'<\/span>)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowid&nbsp;=&nbsp;line[<span class=\"quotedstring\">'id'<\/span>]\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.execute(<span class=\"quotedstring\">\"\"<\/span><span class=\"quotedstring\">\"UPDATE&nbsp;PhotoTable&nbsp;SET&nbsp;filename=?&nbsp;where&nbsp;id=?\"<\/span><span class=\"quotedstring\">\"\"<\/span>,&nbsp;(newline,&nbsp;rowid))\r\n\r\nconn.commit()\r\n\r\nc.close()\r\n<\/pre>\n<p>Si vous utilisez ce script, n&rsquo;oubliez pas de modifier dans celui-ci les variables <em>oldpath<\/em> et <em>newpath<\/em> en y mettant l&rsquo;ancien chemin et le nouveau.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans quelques jours sortira la version officielle d&rsquo;Ubuntu 10.10. Dans cette nouvelle version, Shotwell remplacera F-Spot pour la gestion des photos. Je ne sais pas ce qu&rsquo;il en sera de la version qui sera propos\u00e9e dans Maverick mais jusqu&rsquo;\u00e0 pr\u00e9sent, il n&rsquo;est pas possible de changer le chemin des photos une fois que celles-ci ont [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/973"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=973"}],"version-history":[{"count":2,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/973\/revisions"}],"predecessor-version":[{"id":975,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/973\/revisions\/975"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}