├── .gitignore
├── .npmignore
├── LICENSE
├── README.md
├── lib
└── plist.js
├── package.json
└── tests
├── Cordova.plist
├── Xcode-Info.plist
├── Xcode-PhoneGap.plist
├── airplay.xml
├── iTunes-BIG.xml
├── iTunes-small.xml
├── sample1.plist
├── sample2.plist
├── test-base64.js
├── test-big-xml.js
├── test-build.js
├── test-parseFile.js
├── test-parseString.js
└── utf8data.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .npmignore
2 | .DS_Store
3 | tests/
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010-2011- Nathan Rajlich
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ##### Atom and all repositories under Atom will be archived on December 15, 2022. Learn more in our [official announcement](https://github.blog/2022-06-08-sunsetting-atom/)
2 | # node-plist
3 |
4 | Provides facilities for reading and writing Mac OS X Plist (property list) files. These are often used in programming OS X and iOS applications, as well as the iTunes
5 | configuration XML file.
6 |
7 | Plist files represent stored programming "object"s. They are very similar
8 | to JSON. A valid Plist file is representable as a native JavaScript Object and vice-versa.
9 |
10 | ## Tests
11 | `npm test`
12 |
13 | ## Usage
14 | Parsing a plist from filename
15 | ``` javascript
16 | var plist = require('plist');
17 |
18 | var obj = plist.parseFileSync('myPlist.plist');
19 | console.log(JSON.stringify(obj));
20 | ```
21 |
22 | Parsing a plist from string payload
23 | ``` javascript
24 | var plist = require('plist');
25 |
26 | var obj = plist.parseStringSync('Hello World!');
27 | console.log(obj); // Hello World!
28 | ```
29 |
30 | Given an existing JavaScript Object, you can turn it into an XML document that complies with the plist DTD
31 |
32 | ``` javascript
33 | var plist = require('plist');
34 |
35 | console.log(plist.build({'foo' : 'bar'}).toString());
36 | ```
37 |
38 |
39 |
40 | ### Deprecated methods
41 | These functions work, but may be removed in a future release. version 0.4.x added Sync versions of these functions.
42 |
43 | Parsing a plist from filename
44 | ``` javascript
45 | var plist = require('plist');
46 |
47 | plist.parseFile('myPlist.plist', function(err, obj) {
48 | if (err) throw err;
49 |
50 | console.log(JSON.stringify(obj));
51 | });
52 | ```
53 |
54 | Parsing a plist from string payload
55 | ``` javascript
56 | var plist = require('plist');
57 |
58 | plist.parseString('Hello World!', function(err, obj) {
59 | if (err) throw err;
60 |
61 | console.log(obj[0]); // Hello World!
62 | });
63 | ```
64 |
--------------------------------------------------------------------------------
/lib/plist.js:
--------------------------------------------------------------------------------
1 | ;(function (exports, DOMParser, xmlbuilder) {
2 | // Checks if running in a non-browser environment
3 |
4 | var inNode = typeof process !== "undefined" && process.versions && !!process.versions.node
5 | , utf8_to_b64
6 | , b64_to_utf8;
7 |
8 |
9 |
10 | // this library runs in browsers and nodejs, set up functions accordingly
11 | if (inNode) {
12 | exports.parseFile = function (filename, callback) {
13 | console.warn('parseFile is deprecated. Please use parseFileSync instead.');
14 | var fs = require('fs');
15 | var inxml = fs.readFileSync(filename, 'utf8');
16 | exports.parseString(inxml, callback);
17 | }
18 |
19 | exports.parseFileSync = function (filename) {
20 | var fs = require('fs');
21 | var inxml = fs.readFileSync(filename, 'utf8');
22 | return exports.parseStringSync(inxml);
23 | }
24 |
25 | // set up base64 encode/decode functions
26 | utf8_to_b64= function ( str ) {
27 | return new Buffer(str).toString('base64');
28 | }
29 | b64_to_utf8 = function ( str ) {
30 | return new Buffer(str, 'base64').toString('utf8');
31 | }
32 | } else {
33 | // we're in a browser context, find the DOMParser
34 | if (typeof window.DOMParser != 'undefined') {
35 | DOMParser = function(xmlStr) {
36 | return ( new window.DOMParser() ).parseFromString(xmlStr, 'text/xml');
37 | };
38 | } else if (typeof window.ActiveXObject != 'undefined' &&
39 | new window.ActiveXObject('Microsoft.XMLDOM')) {
40 | DOMParser = function(xmlStr) {
41 | var xmlDoc = new window.ActiveXObject('Microsoft.XMLDOM');
42 | xmlDoc.async = 'false';
43 | xmlDoc.loadXML(xmlStr);
44 | return xmlDoc;
45 | };
46 | } else {
47 | throw new Error('No XML parser found');
48 | }
49 |
50 | // set up base64 encode/decode functions
51 | if (typeof window.btoa == 'undefined') {
52 | throw new Error('No base64 support found');
53 | // TODO: shim btoa and atob if not present (ie < 10)
54 | //http://stackoverflow.com/questions/246801/how-can-you-encode-to-base64-using-javascript/247261#247261
55 | } else {
56 | utf8_to_b64= function ( str ) {
57 | return window.btoa(unescape(encodeURIComponent( str )));
58 | }
59 |
60 | b64_to_utf8 = function ( str ) {
61 | return decodeURIComponent(escape(window.atob( str )));
62 | }
63 | }
64 |
65 | }
66 |
67 | exports.parseString = function (xml, callback) {
68 | console.warn('parseString is deprecated. Please use parseStringSync instead.');
69 | var doc, error, plist;
70 | try {
71 | doc = buildDOMParser().parseFromString(xml);
72 | plist = parsePlistXML(doc.documentElement);
73 | } catch(e) {
74 | error = e;
75 | }
76 | callback(error, plist);
77 | }
78 |
79 | exports.parseStringSync = function (xml) {
80 | var doc = buildDOMParser().parseFromString(xml);
81 | var plist;
82 | if (doc.documentElement.nodeName !== 'plist') {
83 | throw new Error('malformed document. First element should be ');
84 | }
85 | plist = parsePlistXML(doc.documentElement);
86 |
87 | // if the plist is an array with 1 element, pull it out of the array
88 | if(isArray(plist) && plist.length == 1) {
89 | plist = plist[0];
90 | }
91 | return plist;
92 | }
93 |
94 | /**
95 | * convert an XML based plist document into a JSON representation
96 | *
97 | * @param object xml_node current XML node in the plist
98 | * @return built up JSON object
99 | */
100 | function parsePlistXML(node) {
101 | var i, new_obj, key, val, new_arr;
102 | if (!node)
103 | return null;
104 |
105 | if (node.nodeName === 'plist') {
106 | new_arr = [];
107 | for (i=0;i < node.childNodes.length;i++) {
108 | // ignore comment nodes (text)
109 | if (node.childNodes[i].nodeType !== 3) {
110 | new_arr.push( parsePlistXML(node.childNodes[i]));
111 | }
112 | }
113 | return new_arr;
114 | }
115 | else if(node.nodeName === 'dict') {
116 | new_obj = {};
117 | key = null;
118 | for (i=0;i < node.childNodes.length;i++) {
119 | // ignore comment nodes (text)
120 | if (node.childNodes[i].nodeType !== 3) {
121 | if (key === null) {
122 | key = parsePlistXML(node.childNodes[i]);
123 | } else {
124 | new_obj[key] = parsePlistXML(node.childNodes[i]);
125 | key = null;
126 | }
127 | }
128 | }
129 | return new_obj;
130 | }
131 | else if(node.nodeName === 'array') {
132 | new_arr = [];
133 | for (i=0;i < node.childNodes.length;i++) {
134 | // ignore comment nodes (text)
135 | if (node.childNodes[i].nodeType !== 3) {
136 | res = parsePlistXML(node.childNodes[i]);
137 | if (res) new_arr.push( res );
138 | }
139 | }
140 | return new_arr;
141 | }
142 | else if(node.nodeName === '#text') {
143 | // TODO: what should we do with text types? (CDATA sections)
144 | }
145 | else if(node.nodeName === 'key') {
146 | return node.childNodes[0].nodeValue;
147 | }
148 | else if(node.nodeName === 'string') {
149 | var res = '';
150 | for (var d=0; d < node.childNodes.length; d++)
151 | {
152 | res += node.childNodes[d].nodeValue;
153 | }
154 | return res;
155 | }
156 | else if(node.nodeName === 'integer') {
157 | // parse as base 10 integer
158 | return parseInt(node.childNodes[0].nodeValue, 10);
159 | }
160 | else if(node.nodeName === 'real') {
161 | var res = '';
162 | for (var d=0; d < node.childNodes.length; d++)
163 | {
164 | if(node.childNodes[d].nodeType === 3) {
165 | res += node.childNodes[d].nodeValue;
166 | }
167 | }
168 | return parseFloat(res);
169 | }
170 | else if(node.nodeName === 'data') {
171 | var res = '';
172 | for (var d=0; d < node.childNodes.length; d++)
173 | {
174 | if(node.childNodes[d].nodeType === 3) {
175 | res += node.childNodes[d].nodeValue;
176 | }
177 | }
178 |
179 | // validate that the string is encoded as base64
180 | var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
181 | if (!base64Matcher.test(res.replace(/\s/g,'')) ) {
182 | throw new Error('malformed document. element is not base64 encoded');
183 | }
184 |
185 | // decode base64 data as utf8 string
186 | return b64_to_utf8(res);
187 | }
188 | else if(node.nodeName === 'date') {
189 | return new Date(node.childNodes[0].nodeValue);
190 | }
191 | else if(node.nodeName === 'true') {
192 | return true;
193 | }
194 | else if(node.nodeName === 'false') {
195 | return false;
196 | }
197 | }
198 |
199 |
200 | function ISODateString(d){
201 | function pad(n){return n<10 ? '0'+n : n}
202 | return d.getUTCFullYear()+'-'
203 | + pad(d.getUTCMonth()+1)+'-'
204 | + pad(d.getUTCDate())+'T'
205 | + pad(d.getUTCHours())+':'
206 | + pad(d.getUTCMinutes())+':'
207 | + pad(d.getUTCSeconds())+'Z'
208 | }
209 |
210 | // instanceof is horribly unreliable so we use these hackish but safer checks
211 | // http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray
212 | function isArray(obj) {
213 | return Object.prototype.toString.call(obj) === '[object Array]';
214 | }
215 |
216 | function isDate(obj) {
217 | return Object.prototype.toString.call(obj) === '[object Date]';
218 | }
219 |
220 | function isBoolean(obj) {
221 | return (obj === true || obj === false || toString.call(obj) == '[object Boolean]');
222 | }
223 |
224 | function isNumber(obj) {
225 | return Object.prototype.toString.call(obj) === '[object Number]';
226 | }
227 |
228 | function isObject(obj) {
229 | return Object.prototype.toString.call(obj) === '[object Object]';
230 | }
231 |
232 | function isString(obj) {
233 | return Object.prototype.toString.call(obj) === '[object String]';
234 | }
235 |
236 | /**
237 | * generate an XML plist string from the input object
238 | *
239 | * @param object obj the object to convert
240 | * @return string converted plist
241 | */
242 | exports.build = function(obj) {
243 | var XMLHDR = { 'version': '1.0','encoding': 'UTF-8'}
244 | , XMLDTD = { 'ext': 'PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"'}
245 | , doc = xmlbuilder.create()
246 | , child = doc.begin('plist', XMLHDR, XMLDTD).att('version', '1.0');
247 |
248 | walk_obj(obj, child);
249 | return child.end({pretty: true });
250 | }
251 |
252 | // depth first, recursive traversal of a javascript object. when complete,
253 | // next_child contains a reference to the build XML object.
254 | function walk_obj(next, next_child) {
255 | var tag_type, i, prop;
256 |
257 | if(isArray(next)) {
258 | next_child = next_child.ele('array');
259 | for(i=0 ;i < next.length;i++) {
260 | walk_obj(next[i], next_child);
261 | }
262 | }
263 | else if (isObject(next)) {
264 | if (inNode && next instanceof Buffer) {
265 | next_child.ele('data').raw(next.toString('base64'));
266 | } else {
267 | next_child = next_child.ele('dict');
268 | for(prop in next) {
269 | if(next.hasOwnProperty(prop)) {
270 | next_child.ele('key').txt(prop);
271 | walk_obj(next[prop], next_child);
272 | }
273 | }
274 | }
275 | }
276 | else if(isNumber(next)) {
277 | // detect if this is an integer or real
278 | tag_type =(next % 1 === 0) ? 'integer' : 'real';
279 | next_child.ele(tag_type).txt(next.toString());
280 | }
281 | else if(isDate(next)) {
282 | next_child.ele('date').raw(ISODateString(new Date(next)));
283 | }
284 | else if(isBoolean(next)) {
285 | val = next ? 'true' : 'false';
286 | next_child.ele(val);
287 | }
288 | else if(isString(next)) {
289 | //if (str!=obj || str.indexOf("\n")>=0) str = "";
290 | var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
291 | if (!inNode && base64Matcher.test(next.replace(/\s/g,''))) {
292 | // data is base 64 encoded so assume it's a node
293 | next_child.ele('data').raw(utf8_to_b64(next));
294 | } else {
295 | // it's not base 64 encoded, assume it's a node
296 | next_child.ele('string').raw(next);
297 | }
298 | }
299 | };
300 |
301 | function buildDOMParser() {
302 | // prevent the parser from logging non-fatel errors
303 | return new DOMParser({errorHandler: function() {}});
304 | }
305 |
306 | })(typeof exports === 'undefined' ? plist = {} : exports, typeof require !== 'undefined' ? require('xmldom').DOMParser : null, typeof require !== 'undefined' ? require('xmlbuilder') : xmlbuilder)
307 | // the above line checks for exports (defined in node) and uses it, or creates
308 | // a global variable and exports to that. also, if in node, require DOMParser
309 | // node-style, in browser it should already be present
310 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@atom/plist",
3 | "description": "Mac OS X Plist parser/builder for NodeJS. Convert a Plist file or string into a native JS object and native JS object into a Plist file.",
4 | "version": "0.4.4",
5 | "author": "Nathan Rajlich ",
6 | "contributors": [
7 | "Hans Huebner ",
8 | "Pierre Metrailler",
9 | "Mike Reinstein ",
10 | "Vladimir Tsvang",
11 | "Mathieu D'Amours"
12 | ],
13 | "repository": {
14 | "type": "git",
15 | "url": "git://github.com/TooTallNate/node-plist.git"
16 | },
17 | "keywords": [
18 | "apple",
19 | "mac",
20 | "plist",
21 | "parser",
22 | "xml"
23 | ],
24 | "main": "./lib/plist",
25 | "dependencies": {
26 | "xmlbuilder": "0.4.x",
27 | "xmldom": "0.1.x"
28 | },
29 | "devDependencies": {
30 | "nodeunit": "0.7.x"
31 | },
32 | "scripts": {
33 | "test": "nodeunit tests"
34 | },
35 | "engines": {
36 | "node": ">= 0.1.100"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/tests/Cordova.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
24 |
25 | UIWebViewBounce
26 |
27 | TopActivityIndicator
28 | gray
29 | EnableLocation
30 |
31 | EnableViewportScale
32 |
33 | AutoHideSplashScreen
34 |
35 | ShowSplashScreenSpinner
36 |
37 | MediaPlaybackRequiresUserAction
38 |
39 | AllowInlineMediaPlayback
40 |
41 | OpenAllWhitelistURLsInWebView
42 |
43 | BackupWebStorage
44 |
45 | ExternalHosts
46 |
47 | *
48 |
49 | Plugins
50 |
51 | Device
52 | CDVDevice
53 | Logger
54 | CDVLogger
55 | Compass
56 | CDVLocation
57 | Accelerometer
58 | CDVAccelerometer
59 | Camera
60 | CDVCamera
61 | NetworkStatus
62 | CDVConnection
63 | Contacts
64 | CDVContacts
65 | Debug Console
66 | CDVDebugConsole
67 | Echo
68 | CDVEcho
69 | File
70 | CDVFile
71 | FileTransfer
72 | CDVFileTransfer
73 | Geolocation
74 | CDVLocation
75 | Notification
76 | CDVNotification
77 | Media
78 | CDVSound
79 | Capture
80 | CDVCapture
81 | SplashScreen
82 | CDVSplashScreen
83 | Battery
84 | CDVBattery
85 |
86 |
87 |
--------------------------------------------------------------------------------
/tests/Xcode-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIconFiles
12 |
13 | CFBundleIdentifier
14 | com.joshfire.ads
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | ${PRODUCT_NAME}
19 | CFBundlePackageType
20 | APPL
21 | CFBundleShortVersionString
22 | 1.0
23 | CFBundleSignature
24 | ????
25 | CFBundleVersion
26 | 1.0
27 | LSRequiresIPhoneOS
28 |
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | CFBundleAllowMixedLocalizations
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/tests/Xcode-PhoneGap.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | TopActivityIndicator
6 | gray
7 | EnableLocation
8 |
9 | EnableViewportScale
10 |
11 | AutoHideSplashScreen
12 |
13 | ShowSplashScreenSpinner
14 |
15 | MediaPlaybackRequiresUserAction
16 |
17 | AllowInlineMediaPlayback
18 |
19 | OpenAllWhitelistURLsInWebView
20 |
21 | ExternalHosts
22 |
23 | *
24 |
25 | Plugins
26 |
27 | com.phonegap.accelerometer
28 | PGAccelerometer
29 | com.phonegap.camera
30 | PGCamera
31 | com.phonegap.connection
32 | PGConnection
33 | com.phonegap.contacts
34 | PGContacts
35 | com.phonegap.debugconsole
36 | PGDebugConsole
37 | com.phonegap.file
38 | PGFile
39 | com.phonegap.filetransfer
40 | PGFileTransfer
41 | com.phonegap.geolocation
42 | PGLocation
43 | com.phonegap.notification
44 | PGNotification
45 | com.phonegap.media
46 | PGSound
47 | com.phonegap.mediacapture
48 | PGCapture
49 | com.phonegap.splashscreen
50 | PGSplashScreen
51 | com.joshfire.sas
52 | PGSmartAdServer
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/tests/airplay.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | duration
6 | 5555.0495000000001
7 | loadedTimeRanges
8 |
9 |
10 | duration
11 | 5555.0495000000001
12 | start
13 | 0.0
14 |
15 |
16 | playbackBufferEmpty
17 |
18 | playbackBufferFull
19 |
20 | playbackLikelyToKeepUp
21 |
22 | position
23 | 4.6269989039999997
24 | rate
25 | 1
26 | readyToPlay
27 |
28 | seekableTimeRanges
29 |
30 |
31 | duration
32 | 5555.0495000000001
33 | start
34 | 0.0
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/tests/iTunes-small.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Major Version1
6 | Minor Version1
7 | Application Version9.0.3
8 | Features5
9 | Show Content Ratings
10 | Music Folderfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/
11 | Library Persistent ID6F81D37F95101437
12 | Tracks
13 |
14 | 96
15 |
16 | Track ID96
17 | NameEXP
18 | ArtistJimi Hendrix
19 | Album ArtistJimi Hendrix
20 | AlbumAxis: Bold As Love
21 | GenreRock
22 | KindMPEG audio file
23 | Size2317095
24 | Total Time115617
25 | Track Number1
26 | Year1967
27 | Date Modified2010-01-26T04:42:36Z
28 | Date Added2010-02-06T03:05:30Z
29 | Bit Rate160
30 | Sample Rate44100
31 | CommentsEAC-Lame3.92-Extreme
32 | Skip Count1
33 | Skip Date2010-02-22T23:30:15Z
34 | Persistent IDE4A63A7D3E89DBDF
35 | Track TypeFile
36 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/01%20EXP.mp3
37 | File Folder Count5
38 | Library Folder Count1
39 |
40 | 98
41 |
42 | Track ID98
43 | NameUp From The Skies
44 | ArtistJimi Hendrix
45 | Album ArtistJimi Hendrix
46 | ComposerJimi Hendrix
47 | AlbumAxis: Bold As Love
48 | GenreRock
49 | KindMPEG audio file
50 | Size3552687
51 | Total Time177397
52 | Track Number2
53 | Year1967
54 | Date Modified2010-01-26T14:22:57Z
55 | Date Added2010-02-06T03:05:30Z
56 | Bit Rate160
57 | Sample Rate44100
58 | CommentsEAC-Lame3.92-Extreme
59 | Play Count3
60 | Play Date3349908136
61 | Play Date UTC2010-02-25T09:02:16Z
62 | Persistent ID91D3875329AE6FAE
63 | Track TypeFile
64 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/02%20Up%20From%20The%20Skies.mp3
65 | File Folder Count5
66 | Library Folder Count1
67 |
68 | 100
69 |
70 | Track ID100
71 | NameSpanish Castle Magic
72 | ArtistJimi Hendrix
73 | Album ArtistJimi Hendrix
74 | ComposerJimi Hendrix
75 | AlbumAxis: Bold As Love
76 | GenreRock
77 | KindMPEG audio file
78 | Size3718303
79 | Total Time185678
80 | Track Number3
81 | Year1967
82 | Date Modified2010-01-26T04:36:55Z
83 | Date Added2010-02-06T03:05:30Z
84 | Bit Rate160
85 | Sample Rate44100
86 | CommentsEAC-Lame3.92-Extreme
87 | Play Count2
88 | Play Date3349701378
89 | Play Date UTC2010-02-22T23:36:18Z
90 | Persistent ID85E821CD210991D4
91 | Track TypeFile
92 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/03%20Spanish%20Castle%20Magic.mp3
93 | File Folder Count5
94 | Library Folder Count1
95 |
96 | 102
97 |
98 | Track ID102
99 | NameWait Until Tomorrow
100 | ArtistJimi Hendrix
101 | Album ArtistJimi Hendrix
102 | ComposerJimi Hendrix
103 | AlbumAxis: Bold As Love
104 | GenreRock
105 | KindMPEG audio file
106 | Size3644116
107 | Total Time181968
108 | Track Number4
109 | Year1967
110 | Date Modified2010-01-26T14:22:31Z
111 | Date Added2010-02-06T03:05:30Z
112 | Bit Rate160
113 | Sample Rate44100
114 | CommentsEAC-Lame3.92-Extreme
115 | Play Count2
116 | Play Date3349701560
117 | Play Date UTC2010-02-22T23:39:20Z
118 | Persistent IDE08451DAFE2C4CDB
119 | Track TypeFile
120 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/04%20Wait%20Until%20Tomorrow.mp3
121 | File Folder Count5
122 | Library Folder Count1
123 |
124 | 104
125 |
126 | Track ID104
127 | NameAin't No Telling
128 | ArtistJimi Hendrix
129 | Album ArtistJimi Hendrix
130 | ComposerJimi Hendrix
131 | AlbumAxis: Bold As Love
132 | GenreRock
133 | KindMPEG audio file
134 | Size2197454
135 | Total Time109635
136 | Track Number5
137 | Year1967
138 | Date Modified2010-01-26T04:42:49Z
139 | Date Added2010-02-06T03:05:30Z
140 | Bit Rate160
141 | Sample Rate44100
142 | CommentsEAC-Lame3.92-Extreme
143 | Play Count2
144 | Play Date3349701670
145 | Play Date UTC2010-02-22T23:41:10Z
146 | Persistent ID532B79B4E0A7FEDB
147 | Track TypeFile
148 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/05%20Ain't%20No%20Telling.mp3
149 | File Folder Count5
150 | Library Folder Count1
151 |
152 | 106
153 |
154 | Track ID106
155 | NameLittle Wing
156 | ArtistJimi Hendrix
157 | Album ArtistJimi Hendrix
158 | ComposerJimi Hendrix
159 | AlbumAxis: Bold As Love
160 | GenreRock
161 | KindMPEG audio file
162 | Size2952393
163 | Total Time147382
164 | Track Number6
165 | Year1967
166 | Date Modified2010-01-26T10:06:03Z
167 | Date Added2010-02-06T03:05:30Z
168 | Bit Rate160
169 | Sample Rate44100
170 | CommentsEAC-Lame3.92-Extreme
171 | Play Count2
172 | Play Date3349908296
173 | Play Date UTC2010-02-25T09:04:56Z
174 | Persistent ID77D07266F04B6994
175 | Track TypeFile
176 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/06%20Little%20Wing.mp3
177 | File Folder Count5
178 | Library Folder Count1
179 |
180 | 108
181 |
182 | Track ID108
183 | NameIf 6 Was 9
184 | ArtistJimi Hendrix
185 | Album ArtistJimi Hendrix
186 | ComposerJimi Hendrix
187 | AlbumAxis: Bold As Love
188 | GenreRock
189 | KindMPEG audio file
190 | Size6674842
191 | Total Time333505
192 | Track Number7
193 | Year1967
194 | Date Modified2010-01-26T06:39:09Z
195 | Date Added2010-02-06T03:05:30Z
196 | Bit Rate160
197 | Sample Rate44100
198 | CommentsEAC-Lame3.92-Extreme
199 | Persistent ID3E7764A9FF51A43E
200 | Track TypeFile
201 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/07%20If%206%20Was%209.mp3
202 | File Folder Count5
203 | Library Folder Count1
204 |
205 | 110
206 |
207 | Track ID110
208 | NameYou Got Me Floatin'
209 | ArtistJimi Hendrix
210 | Album ArtistJimi Hendrix
211 | ComposerJimi Hendrix
212 | AlbumAxis: Bold As Love
213 | GenreRock
214 | KindMPEG audio file
215 | Size3354679
216 | Total Time167497
217 | Track Number8
218 | Year1967
219 | Date Modified2010-01-26T09:53:19Z
220 | Date Added2010-02-06T03:05:30Z
221 | Bit Rate160
222 | Sample Rate44100
223 | CommentsEAC-Lame3.92-Extreme
224 | Persistent ID77F9E16E1A27D117
225 | Track TypeFile
226 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/08%20You%20Got%20Me%20Floatin'.mp3
227 | File Folder Count5
228 | Library Folder Count1
229 |
230 | 112
231 |
232 | Track ID112
233 | NameCastles Made Of Sand
234 | ArtistJimi Hendrix
235 | Album ArtistJimi Hendrix
236 | ComposerJimi Hendrix
237 | AlbumAxis: Bold As Love
238 | GenreRock
239 | KindMPEG audio file
240 | Size3346842
241 | Total Time167105
242 | Track Number9
243 | Year1967
244 | Date Modified2010-01-26T09:59:58Z
245 | Date Added2010-02-06T03:05:30Z
246 | Bit Rate160
247 | Sample Rate44100
248 | CommentsEAC-Lame3.92-Extreme
249 | Play Count1
250 | Play Date3348245334
251 | Play Date UTC2010-02-06T03:08:54Z
252 | Persistent IDCC85AD893315D8F3
253 | Track TypeFile
254 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/09%20Castles%20Made%20Of%20Sand.mp3
255 | File Folder Count5
256 | Library Folder Count1
257 |
258 | 114
259 |
260 | Track ID114
261 | NameShe's So Fine
262 | ArtistJimi Hendrix
263 | Album ArtistJimi Hendrix
264 | ComposerNoel Redding
265 | AlbumAxis: Bold As Love
266 | GenreRock
267 | KindMPEG audio file
268 | Size3186450
269 | Total Time159085
270 | Track Number10
271 | Year1967
272 | Date Modified2010-01-26T10:06:13Z
273 | Date Added2010-02-06T03:05:30Z
274 | Bit Rate160
275 | Sample Rate44100
276 | CommentsEAC-Lame3.92-Extreme
277 | Persistent ID40F80094B78C21A9
278 | Track TypeFile
279 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/10%20She's%20So%20Fine.mp3
280 | File Folder Count5
281 | Library Folder Count1
282 |
283 | 116
284 |
285 | Track ID116
286 | NameOne Rainy Wish
287 | ArtistJimi Hendrix
288 | Album ArtistJimi Hendrix
289 | ComposerJimi Hendrix
290 | AlbumAxis: Bold As Love
291 | GenreRock
292 | KindMPEG audio file
293 | Size4453912
294 | Total Time222458
295 | Track Number11
296 | Year1967
297 | Date Modified2010-01-26T04:34:42Z
298 | Date Added2010-02-06T03:05:30Z
299 | Bit Rate160
300 | Sample Rate44100
301 | CommentsEAC-Lame3.92-Extreme
302 | Play Count2
303 | Play Date3349908789
304 | Play Date UTC2010-02-25T09:13:09Z
305 | Persistent ID1EF98FE4F90860E3
306 | Track TypeFile
307 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/11%20One%20Rainy%20Wish.mp3
308 | File Folder Count5
309 | Library Folder Count1
310 |
311 | 118
312 |
313 | Track ID118
314 | NameLittle Miss Lover
315 | ArtistJimi Hendrix
316 | Album ArtistJimi Hendrix
317 | ComposerJimi Hendrix
318 | AlbumAxis: Bold As Love
319 | GenreRock
320 | KindMPEG audio file
321 | Size2883430
322 | Total Time143934
323 | Track Number12
324 | Year1967
325 | Date Modified2010-01-26T04:40:43Z
326 | Date Added2010-02-06T03:05:30Z
327 | Bit Rate160
328 | Sample Rate44100
329 | CommentsEAC-Lame3.92-Extreme
330 | Play Count1
331 | Play Date3349700454
332 | Play Date UTC2010-02-22T23:20:54Z
333 | Persistent ID979BB1910DF12FA4
334 | Track TypeFile
335 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/12%20Little%20Miss%20Lover.mp3
336 | File Folder Count5
337 | Library Folder Count1
338 |
339 | 120
340 |
341 | Track ID120
342 | NameBold As Love
343 | ArtistJimi Hendrix
344 | Album ArtistJimi Hendrix
345 | ComposerJimi Hendrix
346 | AlbumAxis: Bold As Love
347 | GenreRock
348 | KindMPEG audio file
349 | Size5048458
350 | Total Time252186
351 | Track Number13
352 | Year1967
353 | Date Modified2010-01-26T03:15:02Z
354 | Date Added2010-02-06T03:05:31Z
355 | Bit Rate160
356 | Sample Rate44100
357 | CommentsEAC-Lame3.92-Extreme
358 | Play Count1
359 | Play Date3349700706
360 | Play Date UTC2010-02-22T23:25:06Z
361 | Persistent IDABB6C4EB0AD99BE4
362 | Track TypeFile
363 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Axis_%20Bold%20As%20Love/13%20Bold%20As%20Love.mp3
364 | File Folder Count5
365 | Library Folder Count1
366 |
367 | 122
368 |
369 | Track ID122
370 | NameThe Wind Cries Mary
371 | ArtistJimi Hendrix
372 | Album ArtistJimi Hendrix
373 | AlbumSMASH HITS
374 | KindMPEG audio file
375 | Size4041927
376 | Total Time202083
377 | Track Number3
378 | Year1967
379 | Date Modified2010-01-27T02:55:57Z
380 | Date Added2010-02-06T03:10:33Z
381 | Bit Rate160
382 | Sample Rate44100
383 | Play Count1
384 | Play Date3348245637
385 | Play Date UTC2010-02-06T03:13:57Z
386 | Sort NameWind Cries Mary
387 | Persistent ID80197A45473F89EC
388 | Track TypeFile
389 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/03%20The%20Wind%20Cries%20Mary.mp3
390 | File Folder Count5
391 | Library Folder Count1
392 |
393 | 124
394 |
395 | Track ID124
396 | NamePurple Haze
397 | ArtistJimi Hendrix
398 | Album ArtistJimi Hendrix
399 | AlbumSMASH HITS
400 | GenrePop
401 | KindMPEG audio file
402 | Size3443729
403 | Total Time172173
404 | Track Number1
405 | Year1967
406 | Date Modified2010-01-27T02:56:23Z
407 | Date Added2010-02-06T03:14:01Z
408 | Bit Rate160
409 | Sample Rate44100
410 | Persistent ID06456C5D35DB482D
411 | Track TypeFile
412 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/01%20Purple%20Haze.mp3
413 | File Folder Count5
414 | Library Folder Count1
415 |
416 | 126
417 |
418 | Track ID126
419 | NameFire
420 | ArtistJimi Hendrix
421 | Album ArtistJimi Hendrix
422 | AlbumSMASH HITS
423 | KindMPEG audio file
424 | Size3311006
425 | Total Time165537
426 | Track Number2
427 | Year1967
428 | Date Modified2010-01-26T07:00:16Z
429 | Date Added2010-02-06T03:14:01Z
430 | Bit Rate160
431 | Sample Rate44100
432 | Persistent IDC16EBCC5CAEBE9D4
433 | Track TypeFile
434 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/02%20Fire.mp3
435 | File Folder Count5
436 | Library Folder Count1
437 |
438 | 128
439 |
440 | Track ID128
441 | NameCan You See Me
442 | ArtistJimi Hendrix
443 | Album ArtistJimi Hendrix
444 | AlbumSMASH HITS
445 | KindMPEG audio file
446 | Size3058151
447 | Total Time152894
448 | Track Number4
449 | Year1966
450 | Date Modified2010-01-25T19:29:01Z
451 | Date Added2010-02-06T03:14:01Z
452 | Bit Rate160
453 | Sample Rate44100
454 | Play Count1
455 | Play Date3348245962
456 | Play Date UTC2010-02-06T03:19:22Z
457 | Persistent IDCD3CFEF2544357DF
458 | Track TypeFile
459 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/04%20Can%20You%20See%20Me.mp3
460 | File Folder Count5
461 | Library Folder Count1
462 |
463 | 130
464 |
465 | Track ID130
466 | Name51st Anniversary
467 | ArtistJimi Hendrix
468 | Album ArtistJimi Hendrix
469 | AlbumSMASH HITS
470 | KindMPEG audio file
471 | Size3910267
472 | Total Time195500
473 | Track Number5
474 | Year1967
475 | Date Modified2010-01-27T02:57:16Z
476 | Date Added2010-02-06T03:14:01Z
477 | Bit Rate160
478 | Sample Rate44100
479 | Play Count1
480 | Play Date3348246157
481 | Play Date UTC2010-02-06T03:22:37Z
482 | Persistent IDB256307FB73DFD2B
483 | Track TypeFile
484 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/05%2051st%20Anniversary.mp3
485 | File Folder Count5
486 | Library Folder Count1
487 |
488 | 132
489 |
490 | Track ID132
491 | NameHey Joe
492 | ArtistJimi Hendrix
493 | Album ArtistJimi Hendrix
494 | AlbumSMASH HITS
495 | KindMPEG audio file
496 | Size4198128
497 | Total Time209893
498 | Track Number6
499 | Year1966
500 | Date Modified2010-01-27T02:58:39Z
501 | Date Added2010-02-06T03:14:01Z
502 | Bit Rate160
503 | Sample Rate44100
504 | Play Count1
505 | Play Date3348246367
506 | Play Date UTC2010-02-06T03:26:07Z
507 | Persistent IDEFE7766FA7E1B8F7
508 | Track TypeFile
509 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/06%20Hey%20Joe.mp3
510 | File Folder Count5
511 | Library Folder Count1
512 |
513 | 134
514 |
515 | Track ID134
516 | NameStone Free
517 | ArtistJimi Hendrix
518 | Album ArtistJimi Hendrix
519 | AlbumSMASH HITS
520 | KindMPEG audio file
521 | Size4325608
522 | Total Time216267
523 | Track Number7
524 | Year1966
525 | Date Modified2010-01-26T16:48:43Z
526 | Date Added2010-02-06T03:14:01Z
527 | Bit Rate160
528 | Sample Rate44100
529 | Play Count1
530 | Play Date3348246583
531 | Play Date UTC2010-02-06T03:29:43Z
532 | Persistent IDB0A50C38343929B5
533 | Track TypeFile
534 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/07%20Stone%20Free.mp3
535 | File Folder Count5
536 | Library Folder Count1
537 |
538 | 136
539 |
540 | Track ID136
541 | NameThe Stars That Play With Laugh
542 | ArtistJimi Hendrix
543 | Album ArtistJimi Hendrix
544 | AlbumSMASH HITS
545 | GenrePop
546 | KindMPEG audio file
547 | Size5151112
548 | Total Time257541
549 | Track Number8
550 | Year1967
551 | Date Modified2010-01-27T02:54:02Z
552 | Date Added2010-02-06T03:14:01Z
553 | Bit Rate160
554 | Sample Rate44100
555 | Sort NameStars That Play With Laugh
556 | Persistent ID891984D14152F8B4
557 | Track TypeFile
558 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/08%20The%20Stars%20That%20Play%20With%20Laugh.mp3
559 | File Folder Count5
560 | Library Folder Count1
561 |
562 | 138
563 |
564 | Track ID138
565 | NameManic Depression
566 | ArtistJimi Hendrix
567 | Album ArtistJimi Hendrix
568 | AlbumSMASH HITS
569 | KindMPEG audio file
570 | Size4457794
571 | Total Time222876
572 | Track Number9
573 | Year1967
574 | Date Modified2010-01-25T04:58:22Z
575 | Date Added2010-02-06T03:14:01Z
576 | Bit Rate160
577 | Sample Rate44100
578 | Persistent ID2C5DA25ED3188C12
579 | Track TypeFile
580 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/09%20Manic%20Depression.mp3
581 | File Folder Count5
582 | Library Folder Count1
583 |
584 | 140
585 |
586 | Track ID140
587 | NameHighway Chile
588 | ArtistJimi Hendrix
589 | Album ArtistJimi Hendrix
590 | AlbumSMASH HITS
591 | KindMPEG audio file
592 | Size4258216
593 | Total Time212897
594 | Track Number10
595 | Year1967
596 | Date Modified2010-01-27T02:58:37Z
597 | Date Added2010-02-06T03:14:01Z
598 | Bit Rate160
599 | Sample Rate44100
600 | Persistent ID23C0537D7A558987
601 | Track TypeFile
602 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/10%20Highway%20Chile.mp3
603 | File Folder Count5
604 | Library Folder Count1
605 |
606 | 142
607 |
608 | Track ID142
609 | NameBurning Of The Midnight Lamp
610 | ArtistJimi Hendrix
611 | Album ArtistJimi Hendrix
612 | AlbumSMASH HITS
613 | KindMPEG audio file
614 | Size4364811
615 | Total Time218226
616 | Track Number11
617 | Year1967
618 | Date Modified2010-01-26T16:36:15Z
619 | Date Added2010-02-06T03:14:02Z
620 | Bit Rate160
621 | Sample Rate44100
622 | Persistent ID655489D0C55F6B6F
623 | Track TypeFile
624 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/11%20Burning%20Of%20The%20Midnight%20Lamp.mp3
625 | File Folder Count5
626 | Library Folder Count1
627 |
628 | 144
629 |
630 | Track ID144
631 | NameFoxy Lady
632 | ArtistJimi Hendrix
633 | Album ArtistJimi Hendrix
634 | AlbumSMASH HITS
635 | KindMPEG audio file
636 | Size4032514
637 | Total Time201613
638 | Track Number12
639 | Year1966
640 | Date Modified2010-01-27T02:57:08Z
641 | Date Added2010-02-06T03:14:02Z
642 | Bit Rate160
643 | Sample Rate44100
644 | Persistent IDA5449F6016FF8603
645 | Track TypeFile
646 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/SMASH%20HITS/12%20Foxy%20Lady.mp3
647 | File Folder Count5
648 | Library Folder Count1
649 |
650 | 194
651 |
652 | Track ID194
653 | NameFoxy Lady
654 | ArtistJimi Hendrix
655 | Album ArtistJimi Hendrix
656 | AlbumAre You Experienced?
657 | GenreRock
658 | KindMPEG audio file
659 | Size3998135
660 | Total Time199888
661 | Track Number1
662 | Year1967
663 | Date Modified2010-01-26T09:24:49Z
664 | Date Added2010-02-08T21:41:23Z
665 | Bit Rate160
666 | Sample Rate44100
667 | Play Count2
668 | Play Date3348665607
669 | Play Date UTC2010-02-10T23:53:27Z
670 | Persistent ID7E8EE581B46E9C72
671 | Track TypeFile
672 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/01%20Foxy%20Lady.mp3
673 | File Folder Count5
674 | Library Folder Count1
675 |
676 | 196
677 |
678 | Track ID196
679 | NameManic Depresion
680 | ArtistJimi Hendrix
681 | Album ArtistJimi Hendrix
682 | AlbumAre You Experienced?
683 | GenreRock
684 | KindMPEG audio file
685 | Size4450581
686 | Total Time222511
687 | Track Number2
688 | Year1967
689 | Date Modified2010-01-26T10:19:06Z
690 | Date Added2010-02-08T21:41:23Z
691 | Bit Rate160
692 | Sample Rate44100
693 | Play Count3
694 | Play Date3348665830
695 | Play Date UTC2010-02-10T23:57:10Z
696 | Persistent IDB5761B106C80D283
697 | Track TypeFile
698 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/02%20Manic%20Depresion.mp3
699 | File Folder Count5
700 | Library Folder Count1
701 |
702 | 198
703 |
704 | Track ID198
705 | NameRed House
706 | ArtistJimi Hendrix
707 | Album ArtistJimi Hendrix
708 | ComposerJimi Hendrix
709 | AlbumAre You Experienced?
710 | GenreRock
711 | KindMPEG audio file
712 | Size4483691
713 | Total Time223947
714 | Track Number3
715 | Year1967
716 | Date Modified2010-01-26T10:12:52Z
717 | Date Added2010-02-08T21:41:23Z
718 | Bit Rate160
719 | Sample Rate44100
720 | CommentsEAC-Lame3.92-Extreme
721 | Play Count2
722 | Play Date3348488681
723 | Play Date UTC2010-02-08T22:44:41Z
724 | Persistent IDEC7FEFA14DBBB959
725 | Track TypeFile
726 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/03%20Red%20House.mp3
727 | File Folder Count5
728 | Library Folder Count1
729 |
730 | 200
731 |
732 | Track ID200
733 | NameCan You See Me
734 | ArtistJimi Hendrix
735 | Album ArtistJimi Hendrix
736 | AlbumAre You Experienced?
737 | GenreRock
738 | KindMPEG audio file
739 | Size3057209
740 | Total Time152842
741 | Track Number4
742 | Year1967
743 | Date Modified2010-01-25T07:23:09Z
744 | Date Added2010-02-08T21:41:23Z
745 | Bit Rate160
746 | Sample Rate44100
747 | Play Count2
748 | Play Date3348488833
749 | Play Date UTC2010-02-08T22:47:13Z
750 | Persistent ID410549558954A8A3
751 | Track TypeFile
752 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/04%20Can%20You%20See%20Me.mp3
753 | File Folder Count5
754 | Library Folder Count1
755 |
756 | 202
757 |
758 | Track ID202
759 | NameLove Or Confusion
760 | ArtistJimi Hendrix
761 | Album ArtistJimi Hendrix
762 | AlbumAre You Experienced?
763 | GenreRock
764 | KindMPEG audio file
765 | Size3867530
766 | Total Time193358
767 | Track Number5
768 | Year1967
769 | Date Modified2010-01-26T01:16:40Z
770 | Date Added2010-02-08T21:41:23Z
771 | Bit Rate160
772 | Sample Rate44100
773 | Play Count1
774 | Play Date3348486108
775 | Play Date UTC2010-02-08T22:01:48Z
776 | Persistent IDA98A811BB24C6DDB
777 | Track TypeFile
778 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/05%20Love%20Or%20Confusion.mp3
779 | File Folder Count5
780 | Library Folder Count1
781 |
782 | 204
783 |
784 | Track ID204
785 | NameI Don't Like Today
786 | ArtistJimi Hendrix
787 | Album ArtistJimi Hendrix
788 | AlbumAre You Experienced?
789 | GenreRock
790 | KindMPEG audio file
791 | Size4703972
792 | Total Time235180
793 | Track Number6
794 | Year1967
795 | Date Modified2010-01-26T10:12:25Z
796 | Date Added2010-02-08T21:41:23Z
797 | Bit Rate160
798 | Sample Rate44100
799 | Play Count1
800 | Play Date3348486344
801 | Play Date UTC2010-02-08T22:05:44Z
802 | Persistent IDBBFE0155E2F879AE
803 | Track TypeFile
804 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/06%20I%20Don't%20Like%20Today.mp3
805 | File Folder Count5
806 | Library Folder Count1
807 |
808 | 206
809 |
810 | Track ID206
811 | NameMay This Be Love
812 | ArtistJimi Hendrix
813 | Album ArtistJimi Hendrix
814 | AlbumAre You Experienced?
815 | GenreRock
816 | KindMPEG audio file
817 | Size3822599
818 | Total Time191111
819 | Track Number7
820 | Year1967
821 | Date Modified2010-01-26T01:15:51Z
822 | Date Added2010-02-08T21:41:23Z
823 | Bit Rate160
824 | Sample Rate44100
825 | Play Count3
826 | Play Date3348666177
827 | Play Date UTC2010-02-11T00:02:57Z
828 | Persistent ID78223889FB353BDC
829 | Track TypeFile
830 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/07%20May%20This%20Be%20Love.mp3
831 | File Folder Count5
832 | Library Folder Count1
833 |
834 | 208
835 |
836 | Track ID208
837 | NameFire
838 | ArtistJimi Hendrix
839 | Album ArtistJimi Hendrix
840 | AlbumAre You Experienced?
841 | GenreRock
842 | KindMPEG audio file
843 | Size3300127
844 | Total Time164989
845 | Track Number8
846 | Year1967
847 | Date Modified2010-01-26T10:19:03Z
848 | Date Added2010-02-08T21:41:23Z
849 | Bit Rate160
850 | Sample Rate44100
851 | Play Count1
852 | Play Date3348666342
853 | Play Date UTC2010-02-11T00:05:42Z
854 | Persistent ID5B469154D5C9EF15
855 | Track TypeFile
856 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/08%20Fire.mp3
857 | File Folder Count5
858 | Library Folder Count1
859 |
860 | 210
861 |
862 | Track ID210
863 | NameThird Stone From The Sun
864 | ArtistJimi Hendrix
865 | Album ArtistJimi Hendrix
866 | ComposerJimi Hendrix
867 | AlbumAre You Experienced?
868 | GenreRock
869 | KindMPEG audio file
870 | Size8086499
871 | Total Time404088
872 | Track Number9
873 | Year1967
874 | Date Modified2010-01-26T09:46:24Z
875 | Date Added2010-02-08T21:41:23Z
876 | Bit Rate160
877 | Sample Rate44100
878 | CommentsEAC-Lame3.92-Extreme
879 | Persistent IDA4BE1B2AF07ACFA7
880 | Track TypeFile
881 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/09%20Third%20Stone%20From%20The%20Sun.mp3
882 | File Folder Count5
883 | Library Folder Count1
884 |
885 | 212
886 |
887 | Track ID212
888 | NameRemember
889 | ArtistJimi Hendrix
890 | Album ArtistJimi Hendrix
891 | ComposerJimi Hendrix
892 | AlbumAre You Experienced?
893 | GenreRock
894 | KindMPEG audio file
895 | Size3372442
896 | Total Time168385
897 | Track Number10
898 | Year1967
899 | Date Modified2010-01-26T10:18:49Z
900 | Date Added2010-02-08T21:41:23Z
901 | Bit Rate160
902 | Sample Rate44100
903 | CommentsEAC-Lame3.92-Extreme
904 | Play Count2
905 | Play Date3348666822
906 | Play Date UTC2010-02-11T00:13:42Z
907 | Persistent ID0A0880195A74A800
908 | Track TypeFile
909 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/10%20Remember.mp3
910 | File Folder Count5
911 | Library Folder Count1
912 |
913 | 214
914 |
915 | Track ID214
916 | NameAre You Experienced
917 | ArtistJimi Hendrix
918 | Album ArtistJimi Hendrix
919 | AlbumAre You Experienced?
920 | GenreRock
921 | KindMPEG audio file
922 | Size5094188
923 | Total Time254693
924 | Year1967
925 | Date Modified2010-01-26T09:50:18Z
926 | Date Added2010-02-08T21:41:23Z
927 | Bit Rate160
928 | Sample Rate44100
929 | Play Count1
930 | Play Date3348668074
931 | Play Date UTC2010-02-11T00:34:34Z
932 | Persistent ID481A059078D4EFDF
933 | Track TypeFile
934 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/Are%20You%20Experienced.mp3
935 | File Folder Count5
936 | Library Folder Count1
937 |
938 | 216
939 |
940 | Track ID216
941 | NameHey Joe
942 | ArtistJimi Hendrix
943 | Album ArtistJimi Hendrix
944 | ComposerJimi Hendrix
945 | AlbumAre You Experienced?
946 | GenreRock
947 | KindMPEG audio file
948 | Size4207838
949 | Total Time210155
950 | Track Number1
951 | Year1967
952 | Date Modified2010-01-24T04:32:51Z
953 | Date Added2010-02-08T21:41:23Z
954 | Bit Rate160
955 | Sample Rate44100
956 | CommentsEAC-Lame3.92-Extreme
957 | Play Count2
958 | Play Date3348665407
959 | Play Date UTC2010-02-10T23:50:07Z
960 | Persistent IDD8CA36FCF4A8BBA3
961 | Track TypeFile
962 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/01%20Hey%20Joe.mp3
963 | File Folder Count5
964 | Library Folder Count1
965 |
966 | 218
967 |
968 | Track ID218
969 | NameStone Free
970 | ArtistJimi Hendrix
971 | Album ArtistJimi Hendrix
972 | AlbumAre You Experienced?
973 | GenreRock
974 | KindMPEG audio file
975 | Size4327746
976 | Total Time216372
977 | Year1967
978 | Date Modified2010-01-24T04:27:53Z
979 | Date Added2010-02-08T21:41:24Z
980 | Bit Rate160
981 | Sample Rate44100
982 | Play Count1
983 | Play Date3348667436
984 | Play Date UTC2010-02-11T00:23:56Z
985 | Persistent ID237FA7D9D9AD6E7F
986 | Track TypeFile
987 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/Stone%20Free.mp3
988 | File Folder Count5
989 | Library Folder Count1
990 |
991 | 220
992 |
993 | Track ID220
994 | NamePurple Haze
995 | ArtistJimi Hendrix
996 | Album ArtistJimi Hendrix
997 | AlbumAre You Experienced?
998 | GenreRock
999 | KindMPEG audio file
1000 | Size3431224
1001 | Total Time171546
1002 | Year1967
1003 | Date Modified2010-01-25T07:20:51Z
1004 | Date Added2010-02-08T21:41:24Z
1005 | Bit Rate160
1006 | Sample Rate44100
1007 | Play Count1
1008 | Play Date3348667607
1009 | Play Date UTC2010-02-11T00:26:47Z
1010 | Persistent IDD2960E190F8D85B1
1011 | Track TypeFile
1012 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/Purple%20Haze.mp3
1013 | File Folder Count5
1014 | Library Folder Count1
1015 |
1016 | 222
1017 |
1018 | Track ID222
1019 | Name51ST Anniversary
1020 | ArtistJimi Hendrix
1021 | Album ArtistJimi Hendrix
1022 | AlbumAre You Experienced?
1023 | GenreRock
1024 | KindMPEG audio file
1025 | Size3925989
1026 | Total Time196284
1027 | Year1967
1028 | Date Modified2010-01-25T23:59:37Z
1029 | Date Added2010-02-08T21:41:24Z
1030 | Bit Rate160
1031 | Sample Rate44100
1032 | Play Count4
1033 | Play Date3355116022
1034 | Play Date UTC2010-04-26T15:40:22Z
1035 | Persistent ID0ECCDE0449BB37BA
1036 | Track TypeFile
1037 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/51ST%20Anniversary.mp3
1038 | File Folder Count5
1039 | Library Folder Count1
1040 |
1041 | 224
1042 |
1043 | Track ID224
1044 | NameThe Wind Cries Mary
1045 | ArtistJimi Hendrix
1046 | Album ArtistJimi Hendrix
1047 | AlbumAre You Experienced?
1048 | GenreRock
1049 | KindMPEG audio file
1050 | Size4016375
1051 | Total Time200803
1052 | Year1967
1053 | Date Modified2010-01-26T09:20:34Z
1054 | Date Added2010-02-08T21:41:24Z
1055 | Bit Rate160
1056 | Sample Rate44100
1057 | Play Count5
1058 | Play Date3355115826
1059 | Play Date UTC2010-04-26T15:37:06Z
1060 | Sort NameWind Cries Mary
1061 | Persistent IDC843C532021E12D8
1062 | Track TypeFile
1063 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/The%20Wind%20Cries%20Mary.mp3
1064 | File Folder Count5
1065 | Library Folder Count1
1066 |
1067 | 226
1068 |
1069 | Track ID226
1070 | NameHightway Chile
1071 | ArtistJimi Hendrix
1072 | Album ArtistJimi Hendrix
1073 | AlbumAre You Experienced?
1074 | GenreRock
1075 | KindMPEG audio file
1076 | Size4250950
1077 | Total Time212532
1078 | Year1967
1079 | Date Modified2010-01-24T04:31:03Z
1080 | Date Added2010-02-08T21:41:24Z
1081 | Bit Rate160
1082 | Sample Rate44100
1083 | Play Count1
1084 | Play Date3348667820
1085 | Play Date UTC2010-02-11T00:30:20Z
1086 | Persistent ID0571292CC8452E1E
1087 | Track TypeFile
1088 | Locationfile://localhost/Users/nrajlich/Music/iTunes/iTunes%20Media/Music/Jimi%20Hendrix/Are%20You%20Experienced_/Hightway%20Chile.mp3
1089 | File Folder Count5
1090 | Library Folder Count1
1091 |
1092 |
1093 | Playlists
1094 |
1095 |
1096 | NameLibrary
1097 | Master
1098 | Playlist ID230
1099 | Playlist Persistent IDA69C1BD116F1FECB
1100 | Visible
1101 | All Items
1102 | Playlist Items
1103 |
1104 |
1105 | Track ID214
1106 |
1107 |
1108 | Track ID226
1109 |
1110 |
1111 | Track ID220
1112 |
1113 |
1114 | Track ID218
1115 |
1116 |
1117 | Track ID224
1118 |
1119 |
1120 | Track ID222
1121 |
1122 |
1123 | Track ID194
1124 |
1125 |
1126 | Track ID216
1127 |
1128 |
1129 | Track ID196
1130 |
1131 |
1132 | Track ID198
1133 |
1134 |
1135 | Track ID200
1136 |
1137 |
1138 | Track ID202
1139 |
1140 |
1141 | Track ID204
1142 |
1143 |
1144 | Track ID206
1145 |
1146 |
1147 | Track ID208
1148 |
1149 |
1150 | Track ID210
1151 |
1152 |
1153 | Track ID212
1154 |
1155 |
1156 | Track ID96
1157 |
1158 |
1159 | Track ID98
1160 |
1161 |
1162 | Track ID100
1163 |
1164 |
1165 | Track ID102
1166 |
1167 |
1168 | Track ID104
1169 |
1170 |
1171 | Track ID106
1172 |
1173 |
1174 | Track ID108
1175 |
1176 |
1177 | Track ID110
1178 |
1179 |
1180 | Track ID112
1181 |
1182 |
1183 | Track ID114
1184 |
1185 |
1186 | Track ID116
1187 |
1188 |
1189 | Track ID118
1190 |
1191 |
1192 | Track ID120
1193 |
1194 |
1195 | Track ID124
1196 |
1197 |
1198 | Track ID126
1199 |
1200 |
1201 | Track ID122
1202 |
1203 |
1204 | Track ID128
1205 |
1206 |
1207 | Track ID130
1208 |
1209 |
1210 | Track ID132
1211 |
1212 |
1213 | Track ID134
1214 |
1215 |
1216 | Track ID136
1217 |
1218 |
1219 | Track ID138
1220 |
1221 |
1222 | Track ID140
1223 |
1224 |
1225 | Track ID142
1226 |
1227 |
1228 | Track ID144
1229 |
1230 |
1231 |
1232 |
1233 | NameMusic
1234 | Playlist ID360
1235 | Playlist Persistent IDCBEA1F13379F04CD
1236 | Distinguished Kind4
1237 | Music
1238 | All Items
1239 | Smart Info
1240 |
1241 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1242 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1243 | AAAAAA==
1244 |
1245 | Smart Criteria
1246 |
1247 | U0xzdAABAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1248 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1249 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAQAAAAAAAAAAAAAAAAAAAAAAAAA
1250 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAQIbEAAAAAAAAAAAAAAAAAAAAB
1251 | AAAAAAAQIbEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AgAIAAAA
1252 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAACAE
1253 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
1254 | AAAAAAAAAAAAPAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1255 | AAAAAAAAAEQAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAEAAAAAACAAAAAAAAAAAAAAAAAAAAAA
1256 | AAEAAAAAAAAAAAAAAAAAAAAAAAAAAA==
1257 |
1258 | Playlist Items
1259 |
1260 |
1261 | Track ID214
1262 |
1263 |
1264 | Track ID226
1265 |
1266 |
1267 | Track ID220
1268 |
1269 |
1270 | Track ID218
1271 |
1272 |
1273 | Track ID224
1274 |
1275 |
1276 | Track ID222
1277 |
1278 |
1279 | Track ID194
1280 |
1281 |
1282 | Track ID216
1283 |
1284 |
1285 | Track ID196
1286 |
1287 |
1288 | Track ID198
1289 |
1290 |
1291 | Track ID200
1292 |
1293 |
1294 | Track ID202
1295 |
1296 |
1297 | Track ID204
1298 |
1299 |
1300 | Track ID206
1301 |
1302 |
1303 | Track ID208
1304 |
1305 |
1306 | Track ID210
1307 |
1308 |
1309 | Track ID212
1310 |
1311 |
1312 | Track ID96
1313 |
1314 |
1315 | Track ID98
1316 |
1317 |
1318 | Track ID100
1319 |
1320 |
1321 | Track ID102
1322 |
1323 |
1324 | Track ID104
1325 |
1326 |
1327 | Track ID106
1328 |
1329 |
1330 | Track ID108
1331 |
1332 |
1333 | Track ID110
1334 |
1335 |
1336 | Track ID112
1337 |
1338 |
1339 | Track ID114
1340 |
1341 |
1342 | Track ID116
1343 |
1344 |
1345 | Track ID118
1346 |
1347 |
1348 | Track ID120
1349 |
1350 |
1351 | Track ID124
1352 |
1353 |
1354 | Track ID126
1355 |
1356 |
1357 | Track ID122
1358 |
1359 |
1360 | Track ID128
1361 |
1362 |
1363 | Track ID130
1364 |
1365 |
1366 | Track ID132
1367 |
1368 |
1369 | Track ID134
1370 |
1371 |
1372 | Track ID136
1373 |
1374 |
1375 | Track ID138
1376 |
1377 |
1378 | Track ID140
1379 |
1380 |
1381 | Track ID142
1382 |
1383 |
1384 | Track ID144
1385 |
1386 |
1387 |
1388 |
1389 | NameMovies
1390 | Playlist ID430
1391 | Playlist Persistent ID619F42A5429501E0
1392 | Distinguished Kind2
1393 | Movies
1394 | All Items
1395 | Smart Info
1396 |
1397 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1399 | AAAAAA==
1400 |
1401 | Smart Criteria
1402 |
1403 | U0xzdAABAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1404 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAgAAAAAAAAAAAAAAAAAAAAAAAAA
1406 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAggAYAAAAAAAAAAAAAAAAAAAAB
1407 | AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA=
1408 |
1409 |
1410 |
1411 | NameTV Shows
1412 | Playlist ID433
1413 | Playlist Persistent ID2A3B4D9E7DF7E1DC
1414 | Distinguished Kind3
1415 | TV Shows
1416 | All Items
1417 | Smart Info
1418 |
1419 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1420 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1421 | AAAAAA==
1422 |
1423 | Smart Criteria
1424 |
1425 | U0xzdAABAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1426 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1427 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAgAAAAAAAAAAAAAAAAAAAAAAAAA
1428 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAggEQAAAAAAAAAAAAAAAAAAAAB
1429 | AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA=
1430 |
1431 |
1432 |
1433 | NamePodcasts
1434 | Playlist ID349
1435 | Playlist Persistent ID5893FA607639E850
1436 | Distinguished Kind10
1437 | Podcasts
1438 | All Items
1439 |
1440 |
1441 | NameiTunes DJ
1442 | Playlist ID346
1443 | Playlist Persistent ID60C45B0A657E0FC9
1444 | Distinguished Kind22
1445 | Party Shuffle
1446 | All Items
1447 |
1448 |
1449 | Name90’s Music
1450 | Playlist ID300
1451 | Playlist Persistent IDF6C03EFBF4BEB1F4
1452 | All Items
1453 | Smart Info
1454 |
1455 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1456 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1457 | AAAAAA==
1458 |
1459 | Smart Criteria
1460 |
1461 | U0xzdAABAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1462 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1463 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAAAAAAA
1464 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAB8YAAAAAAAAAAAAAAAAAAAAB
1465 | AAAAAAAAB88AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEA
1466 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgFNMc3QAAQAB
1467 | AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1468 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1469 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1470 | AAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
1471 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAABAAAAAAAAAAAAAAA
1472 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAIAAAAAAAAAAA
1473 | AAAAAAAAAAEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA==
1474 |
1475 |
1476 |
1477 | NameClassical Music
1478 | Playlist ID343
1479 | Playlist Persistent ID9501F232E8586901
1480 | All Items
1481 | Smart Info
1482 |
1483 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1484 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1485 | AAAAAA==
1486 |
1487 | Smart Criteria
1488 |
1489 | U0xzdAABAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1490 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1491 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAA
1492 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAU0xzdAABAAEAAAACAAAAAQAAAAAAAAAA
1493 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1494 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1495 | AAAAAAAAADwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1496 | AAAAAABEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB
1497 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1498 | AAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAg
1499 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAA
1500 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnpTTHN0AAEAAQAAAAcAAAAB
1501 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1502 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1503 | AAAAAAAAAAAAAAAAAAAACAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1504 | AAAAAAAAAAAAAAAAABIAQwBsAGEAcwBzAGkAYwBhAGwAAAAIAQAAAQAAAAAAAAAAAAAAAAAA
1505 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABLAGwAYQBzAHMAaQBlAGsAAAAI
1506 | AQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBD
1507 | AGwAYQBzAHMAaQBxAHUAZQAAAAgBAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1508 | AAAAAAAAAAAAAAAAAAAAAAAOAEsAbABhAHMAcwBpAGsAAAAIAQAAAQAAAAAAAAAAAAAAAAAA
1509 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABDAGwAYQBzAHMAaQBjAGEAAAAI
1510 | AQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjCv
1511 | MOkwtzDDMK8AAAAIAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1512 | AAAAAAAAAAAADgBDAGwA4QBzAGkAYwBh
1513 |
1514 |
1515 |
1516 | NameMusic Videos
1517 | Playlist ID340
1518 | Playlist Persistent ID8E2AFE4E1C2ABB13
1519 | All Items
1520 | Smart Info
1521 |
1522 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1523 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1524 | AAAAAA==
1525 |
1526 | Smart Criteria
1527 |
1528 | U0xzdAABAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1529 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1530 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAQAAAAAAAAAAAAAAAAAAAAAAAAA
1531 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAB
1532 | AAAAAAAAACAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA=
1533 |
1534 |
1535 |
1536 | NameMy Top Rated
1537 | Playlist ID303
1538 | Playlist Persistent IDCCC0C1B6CCEA8937
1539 | All Items
1540 | Smart Info
1541 |
1542 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1543 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1544 | AAAAAA==
1545 |
1546 | Smart Criteria
1547 |
1548 | U0xzdAABAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1549 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1550 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAQAAAAAAAAAAAAAAAAAAAAAAAA
1551 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAB
1552 | AAAAAAAAADwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA=
1553 |
1554 |
1555 |
1556 | NameRecently Added
1557 | Playlist ID337
1558 | Playlist Persistent ID3440763CBB97D6F6
1559 | All Items
1560 | Smart Info
1561 |
1562 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1563 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1564 | AAAAAA==
1565 |
1566 | Smart Criteria
1567 |
1568 | U0xzdAABAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1569 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1570 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIAAAAAAAAAAAAAAAAAAAAAAAAA
1571 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABELa4tri2uLa7//////////gAAAAAACTqA
1572 | La4tri2uLa4AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AgAAAQAA
1573 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAB
1574 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
1575 | AAAAAAAA
1576 |
1577 |
1578 |
1579 | NameRecently Played
1580 | Playlist ID334
1581 | Playlist Persistent ID9C418444F8C06D46
1582 | All Items
1583 | Smart Info
1584 |
1585 | AQEAAwAAAAIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1586 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1587 | AAAAAA==
1588 |
1589 | Smart Criteria
1590 |
1591 | U0xzdAABAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1592 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1593 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAIAAAAAAAAAAAAAAAAAAAAAAAAA
1594 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABELa4tri2uLa7//////////gAAAAAACTqA
1595 | La4tri2uLa4AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AgAAAQAA
1596 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAB
1597 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
1598 | AAAAAAAA
1599 |
1600 |
1601 |
1602 | NameTop 25 Most Played
1603 | Playlist ID306
1604 | Playlist Persistent IDB8A41A971A08EFE9
1605 | All Items
1606 | Smart Info
1607 |
1608 | AQEBAwAAABkAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1609 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1610 | AAAAAA==
1611 |
1612 | Smart Criteria
1613 |
1614 | U0xzdAABAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1615 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1616 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkCAAABAAAAAAAAAAAAAAAAAAAAAAAA
1617 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB
1618 | AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAEAAA
1619 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAA
1620 | AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
1621 | AAAAAAAA
1622 |
1623 | Playlist Items
1624 |
1625 |
1626 | Track ID224
1627 |
1628 |
1629 | Track ID222
1630 |
1631 |
1632 | Track ID196
1633 |
1634 |
1635 | Track ID206
1636 |
1637 |
1638 | Track ID98
1639 |
1640 |
1641 | Track ID194
1642 |
1643 |
1644 | Track ID216
1645 |
1646 |
1647 | Track ID198
1648 |
1649 |
1650 | Track ID200
1651 |
1652 |
1653 | Track ID212
1654 |
1655 |
1656 | Track ID100
1657 |
1658 |
1659 | Track ID102
1660 |
1661 |
1662 | Track ID104
1663 |
1664 |
1665 | Track ID106
1666 |
1667 |
1668 | Track ID116
1669 |
1670 |
1671 | Track ID214
1672 |
1673 |
1674 | Track ID226
1675 |
1676 |
1677 | Track ID220
1678 |
1679 |
1680 | Track ID218
1681 |
1682 |
1683 | Track ID202
1684 |
1685 |
1686 | Track ID204
1687 |
1688 |
1689 | Track ID208
1690 |
1691 |
1692 | Track ID112
1693 |
1694 |
1695 | Track ID118
1696 |
1697 |
1698 | Track ID120
1699 |
1700 |
1701 |
1702 |
1703 |
1704 |
1705 |
--------------------------------------------------------------------------------
/tests/sample1.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleIdentifier
8 | com.apple.dictionary.MySample
9 | CFBundleName
10 | MyDictionary
11 | CFBundleShortVersionString
12 | 1.0
13 | DCSDictionaryCopyright
14 | Copyright © 2007 Apple Inc.
15 | DCSDictionaryManufacturerName
16 | Apple Inc.
17 | DCSDictionaryFrontMatterReferenceID
18 | front_back_matter
19 | DCSDictionaryPrefsHTML
20 | MyDictionary_prefs.html
21 | DCSDictionaryXSL
22 | MyDictionary.xsl
23 | DCSDictionaryDefaultPrefs
24 |
25 | pronunciation
26 | 0
27 | display-column
28 | 1
29 | display-picture
30 | 1
31 | version
32 | 1
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/tests/sample2.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | OptionsLabel
6 | Product
7 | PopupMenu
8 |
9 |
10 | Key
11 | iPhone
12 | Title
13 | iPhone
14 |
15 |
16 | Key
17 | iPad
18 | Title
19 | iPad
20 |
21 |
22 | Key
23 |
24 |
34 |
35 |
36 |
37 | TemplateSelection
38 |
39 | iPhone
40 | Tab Bar iPhone Application
41 | iPad
42 | Tab Bar iPad Application
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/tests/test-base64.js:
--------------------------------------------------------------------------------
1 | /**
2 | * tests for base64 encoding and decoding, used in elements
3 | */
4 |
5 | var path = require('path')
6 | , plist = require('../');
7 |
8 | exports.testDecodeBase64 = function(test) {
9 | var file = path.join(__dirname, 'utf8data.xml');
10 | var p = plist.parseFileSync(file);
11 | test.equal(p['Smart Info'], '✓ à la mode');
12 | test.done();
13 | }
14 |
15 | exports.testDecodeBase64WithNewlines = function(test) {
16 | var file = path.join(__dirname, 'utf8data.xml');
17 | var p = plist.parseFileSync(file);
18 | test.equal(p['Newlines'], '✓ à la mode');
19 | test.done();
20 | }
21 |
22 | exports.testBase64Encode = function(test) {
23 | var to_write = { yay: '✓ à la mode' };
24 | var out = plist.build(to_write);
25 | var p = plist.parseStringSync(out);
26 | test.equal(p['yay'], '✓ à la mode');
27 | test.done();
28 | }
29 |
--------------------------------------------------------------------------------
/tests/test-big-xml.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | , plist = require('../')
3 | , file = path.join(__dirname, 'iTunes-BIG.xml')
4 | , startTime = new Date();
5 |
6 | exports.textBigXML = function(test) {
7 | plist.parseFile(file, function(err, dicts) {
8 | var dict = dicts[0];
9 |
10 | test.ifError(err);
11 |
12 | test.equal(dicts.length, 1);
13 | test.equal(dict['Application Version'], '9.2.1');
14 | test.deepEqual(Object.keys(dict), [
15 | 'Major Version'
16 | , 'Minor Version'
17 | , 'Application Version'
18 | , 'Features'
19 | , 'Show Content Ratings'
20 | , 'Music Folder'
21 | , 'Library Persistent ID'
22 | , 'Tracks'
23 | , 'Playlists'
24 | ]);
25 |
26 | test.done();
27 | });
28 | }
29 |
--------------------------------------------------------------------------------
/tests/test-build.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | , fs = require('fs')
3 | , plist = require('../');
4 |
5 | /*
6 | // TODO These assertions fail because CDATA entities get converted in the process
7 | exports.testBuildFromPlistFile = function(test) {
8 | var file = path.join(__dirname, 'sample2.plist');
9 |
10 | plist.parseFile(file, function(err, dicts) {
11 | var dict = dicts[0];
12 | test.ifError(err);
13 |
14 | // Try re-stringifying and re-parsing
15 | plist.parseString(plist.build(dict), function(err, dicts2) {
16 | test.ifError(err);
17 | test.deepEqual(dicts,dicts2);
18 | test.done();
19 | });
20 | });
21 | }
22 | */
23 |
24 |
25 | exports.testNonBase64StringsAsData = function(test) {
26 | var test_object = { 'a': 'test stringy thingy', 'b': 'this contains non base64 ✔ ' };
27 |
28 | var result = plist.build(test_object);
29 | var DOMParser = require('xmldom').DOMParser;
30 | var doc = new DOMParser().parseFromString(result);
31 |
32 | test.equal('a', doc.documentElement.childNodes[1].childNodes[1].childNodes[0].nodeValue);
33 | test.equal('string', doc.documentElement.childNodes[1].childNodes[3].nodeName);
34 | test.equal('test stringy thingy', doc.documentElement.childNodes[1].childNodes[3].childNodes[0].nodeValue);
35 |
36 | test.equal('b', doc.documentElement.childNodes[1].childNodes[5].childNodes[0].nodeValue);
37 | test.equal ('string', doc.documentElement.childNodes[1].childNodes[7].nodeName);
38 | test.equal ('this contains non base64 ✔ ', doc.documentElement.childNodes[1].childNodes[7].childNodes[0].nodeValue);
39 |
40 | test.done();
41 | }
42 |
43 |
44 |
45 | exports.testBuildFromObjectWithFunctions = function(test) {
46 | var test_object = { 'a': 'test stringy thingy', 'b': function(c, d){ return 'neat'; } };
47 |
48 | // Try stringifying
49 | plist.parseString(plist.build(test_object), function(err, dicts) {
50 | test.equal(dicts[0].b, undefined);
51 | test.equal(dicts[0].a, 'test stringy thingy');
52 | test.done();
53 | });
54 | }
55 |
56 |
57 | exports.testBuildFromSmallItunesXML = function(test) {
58 | var file = path.join(__dirname, 'iTunes-small.xml');
59 | plist.parseFile(file, function(err, dicts) {
60 | var dict = dicts[0];
61 |
62 | test.ifError(err);
63 |
64 | // Try re-stringifying and re-parsing
65 | plist.parseString(plist.build(dict), function(err, dicts2) {
66 | test.ifError(err);
67 | test.deepEqual(dicts,dicts2);
68 | test.done();
69 | });
70 | });
71 | }
72 |
73 | exports.testBuildAirplayXML = function(test) {
74 | var file = path.join(__dirname, 'airplay.xml');
75 |
76 | plist.parseFile(file, function(err, dicts) {
77 | var dict = dicts[0];
78 | test.ifError(err);
79 |
80 | // Try re-stringifying and re-parsing
81 | plist.parseString(plist.build(dict), function(err, dicts2) {
82 | test.ifError(err);
83 | test.deepEqual(dicts,dicts2);
84 | test.done();
85 | });
86 | });
87 | }
88 |
89 | exports.testCordovaPlist = function(test) {
90 | var file = path.join(__dirname, 'Cordova.plist');
91 |
92 | plist.parseFile(file, function(err, dicts) {
93 | var dict = dicts[0];
94 | test.ifError(err);
95 | test.equal(dict['TopActivityIndicator'], 'gray');
96 | test.equal(dict['Plugins']['Device'], 'CDVDevice');
97 |
98 | // Try re-stringifying and re-parsing
99 | plist.parseString(plist.build(dict), function(err, dicts2) {
100 | test.ifError(err);
101 | test.deepEqual(dicts,dicts2);
102 | test.done();
103 | });
104 | });
105 | }
106 |
107 | exports.testBuildPhoneGapPlist = function(test) {
108 | var file = path.join(__dirname, 'Xcode-PhoneGap.plist');
109 |
110 | plist.parseFile(file, function(err, dicts) {
111 | var dict = dicts[0];
112 | test.ifError(err);
113 |
114 | test.equal(dict['ExternalHosts'][0], "*");
115 | test.equal(dict['Plugins']['com.phonegap.accelerometer'], "PGAccelerometer");
116 |
117 | //console.log('like they were', dict);
118 | //console.log('hmm', plist.build(dict));
119 | // Try re-stringifying and re-parsing
120 | plist.parseString(plist.build(dict), function(err, dicts2) {
121 | test.ifError(err);
122 | test.deepEqual(dicts,dicts2);
123 | test.done();
124 | });
125 | });
126 | }
127 |
128 | exports.testBuildXcodeInfoPlist = function(test) {
129 | var file = path.join(__dirname, 'Xcode-Info.plist');
130 |
131 | plist.parseFile(file, function(err, dicts) {
132 | var dict = dicts[0];
133 | test.ifError(err);
134 |
135 | test.equal(dict['CFBundleAllowMixedLocalizations'], true);
136 | test.equal(dict['CFBundleExecutable'], "${EXECUTABLE_NAME}");
137 | test.equal(dict['UISupportedInterfaceOrientations~ipad'][0], "UIInterfaceOrientationPortrait");
138 |
139 | // Try re-stringifying and re-parsing
140 | plist.parseString(plist.build(dict), function(err, dicts2) {
141 | test.ifError(err);
142 | test.deepEqual(dicts,dicts2);
143 | test.done();
144 | });
145 | });
146 | }
147 |
148 |
149 | // this code does a string to string comparison. It's not very useful right
150 | // now because CDATA sections arent supported. save for later I guess
151 | /*
152 | function flattenXMLForAssert(instr) {
153 | return instr.replace(/\s/g,'');
154 | }
155 |
156 | // Builder test B - build plist from JS object, then compare flattened XML against original plist *file* content
157 | function testBuildAgainstFile(test, dict, infile) {
158 | var doc = plist.build(dict)
159 | , fileContent = fs.readFileSync(infile)
160 | , s1 = flattenXMLForAssert(doc.toString())
161 | , s2 = flattenXMLForAssert(fileContent.toString())
162 | , mismatch = '';
163 |
164 | for (var i=0;iHello World!', function(err, res) {
5 | test.ifError(err);
6 | test.equal(res, 'Hello World!');
7 | test.done();
8 | });
9 | }
10 |
11 | exports.testParseStringSync = function(test) {
12 | test.doesNotThrow(function(){
13 | var res = plist.parseStringSync('test101');
14 | test.equal(Object.keys(res)[0], 'test');
15 | test.equal(res.test, 101);
16 | test.done();
17 | });
18 | }
19 |
20 | exports.testParseStringSyncFailsOnInvalidXML = function(test) {
21 | test.throws(function(){
22 | var res = plist.parseStringSync('Hello World!');
23 | });
24 | test.done();
25 | }
26 |
27 | exports.testDict = function(test) {
28 | plist.parseString('test101', function(err, res) {
29 | test.ifError(err);
30 |
31 | test.ok(Array.isArray(res));
32 | test.equal(res.length, 1);
33 | test.equal(Object.keys(res[0])[0], 'test');
34 | test.equal(res[0].test, 101);
35 | test.done();
36 | });
37 | }
38 |
39 | exports.testCDATA = function(test) {
40 | plist.parseString('', function(err, res) {
41 | test.ifError(err);
42 | test.equal(res, 'Hello World!<M');
43 | test.done();
44 | });
45 | }
46 |
--------------------------------------------------------------------------------
/tests/utf8data.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Smart Info
6 | 4pyTIMOgIGxhIG1vZGU=
7 | Newlines
8 | 4pyTIMOgIGxhIG1vZGU=
9 |
10 |
11 |
--------------------------------------------------------------------------------