From b0dc735c08218787e84a161c41ec8253c2ac44b0 Mon Sep 17 00:00:00 2001 From: "Jeremy B. Merrill" Date: Mon, 11 Nov 2013 23:01:41 -0500 Subject: [PATCH 1/4] add untested binary plist support for lin/win --- otrapps/adium.py | 15 ++++++++++++--- setup.py | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/otrapps/adium.py b/otrapps/adium.py index aab0453..84bc25f 100644 --- a/otrapps/adium.py +++ b/otrapps/adium.py @@ -4,7 +4,10 @@ from __future__ import print_function import os import platform -import plistlib +if platform.system() == 'Darwin': + import plistlib +else: + import biplist import sys if __name__ == '__main__': @@ -38,10 +41,16 @@ def _get_accounts_from_plist(settingsdir): print('Adium ERROR: No usable Accounts.plist file found, cannot create Adium files!') return [] # make sure the plist is in XML format, not binary, - # this should be converted to use python-biplist. + AdiumProperties._convert_binary_plist_to_xml_plist(accountsfile) + return plistlib.readPlist(accountsfile)['Accounts'] + + @staticmethod + def _convert_binary_plist_to_xml_plist(binary_plist): if platform.system() == 'Darwin': os.system("plutil -convert xml1 '" + accountsfile + "'") - return plistlib.readPlist(accountsfile)['Accounts'] + else: + plist_data = readPlist(binary) + writePlist(plist_data, binary_plist) @staticmethod def parse(settingsdir=None): diff --git a/setup.py b/setup.py index 65c2512..e9f65b9 100644 --- a/setup.py +++ b/setup.py @@ -54,6 +54,7 @@ def read(fname): elif sys.platform == 'win32': dependencies.append('pyinstaller') dependencies.append('pywin32') + dependencies.append('biplist') # PIL doesn't build on Windows, so use Pillow instead, pegged at # 2.1.0 until pyinstaller supports newer version dependencies.append('Pillow==2.1.0') @@ -61,6 +62,7 @@ def read(fname): else: dependencies.append('PIL') dependencies.append('pymtp>=0.0.6') + dependencies.append('biplist') extra_options = dict() From d2a7bf016d20c34ea015a3b2482c66bd598f717d Mon Sep 17 00:00:00 2001 From: "Jeremy B. Merrill" Date: Tue, 12 Nov 2013 11:57:03 -0500 Subject: [PATCH 2/4] use biplist on non-Mac platforms to parse Adium plists, convert them to XML --- otrapps/adium.py | 15 +++++++-------- setup.py | 3 +-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/otrapps/adium.py b/otrapps/adium.py index 84bc25f..7d6fb22 100644 --- a/otrapps/adium.py +++ b/otrapps/adium.py @@ -4,10 +4,9 @@ from __future__ import print_function import os import platform -if platform.system() == 'Darwin': - import plistlib -else: - import biplist +import plistlib + +import biplist import sys if __name__ == '__main__': @@ -42,15 +41,15 @@ def _get_accounts_from_plist(settingsdir): return [] # make sure the plist is in XML format, not binary, AdiumProperties._convert_binary_plist_to_xml_plist(accountsfile) - return plistlib.readPlist(accountsfile)['Accounts'] + return biplist.readPlist(accountsfile)['Accounts'] @staticmethod def _convert_binary_plist_to_xml_plist(binary_plist): if platform.system() == 'Darwin': - os.system("plutil -convert xml1 '" + accountsfile + "'") + os.system("plutil -convert xml1 '" + binary_plist + "'") else: - plist_data = readPlist(binary) - writePlist(plist_data, binary_plist) + plist_data = biplist.readPlist(binary_plist) + biplist.writePlist(plist_data, binary_plist, False) #False => XML, not Binary formatted PList @staticmethod def parse(settingsdir=None): diff --git a/setup.py b/setup.py index e9f65b9..3edcf31 100644 --- a/setup.py +++ b/setup.py @@ -19,6 +19,7 @@ def read(fname): 'pgpdump', 'qrcode >= 4.0.1', 'six', + 'biplist', ] # argparse and ordereddict are included in Python starting in 2.7 @@ -54,7 +55,6 @@ def read(fname): elif sys.platform == 'win32': dependencies.append('pyinstaller') dependencies.append('pywin32') - dependencies.append('biplist') # PIL doesn't build on Windows, so use Pillow instead, pegged at # 2.1.0 until pyinstaller supports newer version dependencies.append('Pillow==2.1.0') @@ -62,7 +62,6 @@ def read(fname): else: dependencies.append('PIL') dependencies.append('pymtp>=0.0.6') - dependencies.append('biplist') extra_options = dict() From 20574720be616974354fee3cb7e24706fa9b0c37 Mon Sep 17 00:00:00 2001 From: "Jeremy B. Merrill" Date: Tue, 12 Nov 2013 11:59:22 -0500 Subject: [PATCH 3/4] whitespace --- otrapps/adium.py | 1 - 1 file changed, 1 deletion(-) diff --git a/otrapps/adium.py b/otrapps/adium.py index 7d6fb22..fd5afe7 100644 --- a/otrapps/adium.py +++ b/otrapps/adium.py @@ -5,7 +5,6 @@ import os import platform import plistlib - import biplist import sys From a20c0a74367d85eb508cb566b5217ffe611409a7 Mon Sep 17 00:00:00 2001 From: "Jeremy B. Merrill" Date: Tue, 12 Nov 2013 14:28:07 -0500 Subject: [PATCH 4/4] use biplist for all platforms, remove plistlib call on Mac --- otrapps/adium.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/otrapps/adium.py b/otrapps/adium.py index fd5afe7..c97e625 100644 --- a/otrapps/adium.py +++ b/otrapps/adium.py @@ -44,11 +44,8 @@ def _get_accounts_from_plist(settingsdir): @staticmethod def _convert_binary_plist_to_xml_plist(binary_plist): - if platform.system() == 'Darwin': - os.system("plutil -convert xml1 '" + binary_plist + "'") - else: - plist_data = biplist.readPlist(binary_plist) - biplist.writePlist(plist_data, binary_plist, False) #False => XML, not Binary formatted PList + plist_data = biplist.readPlist(binary_plist) + biplist.writePlist(plist_data, binary_plist, False) #False => XML, not Binary formatted PList @staticmethod def parse(settingsdir=None):