nautilus-scripts : copie de fichier ZIP
authorProgfou <jean-christophe.andre@auf.org>
Wed, 12 Mar 2014 19:47:25 +0000 (15:47 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Wed, 12 Mar 2014 19:47:25 +0000 (15:47 -0400)
nautilus-scripts/Déverrouillage de formulaire

index 59c5b13..ca67b0d 100755 (executable)
@@ -6,6 +6,7 @@
 # Created: 2014-03-11
 # Debian-Depends: python (>= 2.6)
 import sys
+import os.path
 import zipfile
 from xml.dom import minidom
 
@@ -15,15 +16,8 @@ if len(sys.argv) < 2:
 for filename in sys.argv[1:]:
     if not zipfile.is_zipfile(filename):
         continue
-
-    # file copy
-    filename_base, filename_ext = filename.rsplit('.', 1)
-    copyname = filename_base + '-déverrouillé.' + filename_ext
-    file(copyname, 'wb').write(file(filename, 'rb').read())
-
-    odf = zipfile.ZipFile(copyname, 'a', zipfile.ZIP_DEFLATED)
-
     # sanity checks
+    odf = zipfile.ZipFile(filename, 'r')
     if not odf:
         continue # u"WARNING: skipping '%s': not a ZIP file" % filename
     if not odf.namelist():
@@ -35,40 +29,48 @@ for filename in sys.argv[1:]:
         odf.close()
         continue # u"WARNING: skipping '%s': not an ODF file" % filename
 
-    ## content parsing
-    #modified = False
-    #content = minidom.parseString(odf.read('content.xml'))
-    ## unlock section protection
-    #for node in content.getElementsByTagName("text:section"):
-    #    if node.getAttribute("text:protected") == 'true':
-    #        node.setAttribute("text:protected", "false")
-    #        modified = True
-    ## save content changes, only if necessary
-    #if modified:
-    #    odf.getinfo("content.xml").filename = "content.old"
-    #    odf.writestr("content.xml", content.toxml().encode('utf-8'))
+    # copy creation
+    filename_base, filename_ext = os.path.splitext(filename)
+    copyname = filename_base + '-déverrouillé' + filename_ext
+    new_odf = zipfile.ZipFile(copyname, 'w', zipfile.ZIP_DEFLATED)
 
-    # settings parsing
-    modified = False
-    settings = minidom.parseString(odf.read('settings.xml'))
-    for node in settings.getElementsByTagName("config:config-item"):
-        name = node.getAttribute("config:name")
-        if not node.firstChild:
-            continue
-        value = node.firstChild.wholeText
-        # unlock form protection
-        if name == 'ProtectForm' and value == 'true':
-            node.firstChild.replaceWholeText('false')
-            modified = True
-        # unlock document editing
-        elif name == 'LoadReadonly' and value == 'true':
-            node.firstChild.replaceWholeText('false')
-            modified = True
-    # save settings changes, only if necessary
-    if modified:
-        odf.getinfo("settings.xml").filename = "settings.old"
-        odf.writestr("settings.xml", settings.toxml().encode('utf-8'))
+    for info in odf.infolist():
+        data = odf.read(info.filename)
+        if info.filename == 'content.xml':
+            modified = False
+            # content parsing
+            content = minidom.parseString(data)
+            # unlock section protection
+            #for node in content.getElementsByTagName("text:section"):
+            #    if node.getAttribute("text:protected") == 'true':
+            #        node.setAttribute("text:protected", "false")
+            #        modified = True
+            # save content changes, only if necessary
+            if modified:
+                data = content.toxml().encode('utf-8')
+        elif info.filename == 'settings.xml':
+            modified = False
+            # settings parsing
+            settings = minidom.parseString(data)
+            for node in settings.getElementsByTagName("config:config-item"):
+                name = node.getAttribute("config:name")
+                if not node.firstChild:
+                    continue
+                value = node.firstChild.wholeText
+                # unlock form protection
+                if name == 'ProtectForm' and value == 'true':
+                    node.firstChild.replaceWholeText('false')
+                    modified = True
+                # unlock document editing
+                elif name == 'LoadReadonly' and value == 'true':
+                    node.firstChild.replaceWholeText('false')
+                    modified = True
+            # save settings changes, only if necessary
+            if modified:
+                data = settings.toxml().encode('utf-8')
+        new_odf.writestr(info, data)
 
+    new_odf.close()
     odf.close()
 
 sys.exit(0)