dmap-ng 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.md +130 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/dmap-ng.gemspec +69 -0
- data/lib/debug_ext.rb +13 -0
- data/lib/dmap-ng.rb +1 -0
- data/lib/dmap.rb +26 -0
- data/lib/dmap/parser.rb +44 -0
- data/lib/dmap/tag.rb +93 -0
- data/lib/dmap/tag_builder.rb +24 -0
- data/lib/dmap/tag_definitions.rb +426 -0
- data/lib/true_false_ext.rb +11 -0
- data/spec/dmap_spec.rb +88 -0
- data/spec/dsl_spec.rb +137 -0
- data/spec/packet_dumps/connection_with_voting.dump +0 -0
- data/spec/parser_spec.rb +96 -0
- data/spec/selector_spec.rb +57 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +101 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
class DMAP
|
2
|
+
class TagBuilder
|
3
|
+
def initialize
|
4
|
+
@tags = []
|
5
|
+
end
|
6
|
+
|
7
|
+
def method_missing(meth, *args, &block)
|
8
|
+
return super unless meth.to_s.length == 4
|
9
|
+
if block_given?
|
10
|
+
nested = self.class.new
|
11
|
+
nested.instance_eval &block
|
12
|
+
value = nested.result
|
13
|
+
else
|
14
|
+
value = args.size > 1 ? args : args.first
|
15
|
+
end
|
16
|
+
@tags << Tag.new(meth, value)
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def result
|
21
|
+
@tags
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,426 @@
|
|
1
|
+
class DMAP
|
2
|
+
TAGS = {
|
3
|
+
:abal => ['daap.browsealbumlisting', :list],
|
4
|
+
:abar => ['daap.browseartistlisting', :list],
|
5
|
+
:abcp => ['daap.browsecomposerlisting', :list],
|
6
|
+
:abgn => ['daap.browsegenrelisting', :list],
|
7
|
+
:abpl => ['daap.baseplaylist', :byte],
|
8
|
+
:abro => ['daap.databasebrowse', :list],
|
9
|
+
:adbs => ['daap.databasesongs', :list],
|
10
|
+
:aeAI => ['com.apple.itunes.itms-artistid', :integer],
|
11
|
+
:aeCI => ['com.apple.itunes.itms-composerid', :integer],
|
12
|
+
:aeCR => ['com.apple.itunes.content-rating', :string],
|
13
|
+
:aeEN => ['com.apple.itunes.episode-num-str', :string],
|
14
|
+
:aeES => ['com.apple.itunes.episode-sort', :integer],
|
15
|
+
:aeFP => ['com.apple.itunes.req-fplay', :boolean],
|
16
|
+
:aeGU => ['com.apple.itunes.gapless-dur', :long],
|
17
|
+
:aeGD => ['com.apple.itunes.gapless-enc-dr', :integer],
|
18
|
+
:aeGE => ['com.apple.itunes.gapless-enc-del', :integer],
|
19
|
+
:aeGH => ['com.apple.itunes.gapless-heur', :integer],
|
20
|
+
:aeGI => ['com.apple.itunes.itms-genreid', :integer],
|
21
|
+
:aeGR => ['com.apple.itunes.gapless-resy', :long],
|
22
|
+
:aeHD => ['com.apple.itunes.is-hd-video', :boolean],
|
23
|
+
:aeHV => ['com.apple.itunes.has-video', :boolean],
|
24
|
+
:aeMK => ['com.apple.itunes.mediakind', :boolean],
|
25
|
+
:aeNN => ['com.apple.itunes.network-name', :string],
|
26
|
+
:aeNV => ['com.apple.itunes.norm-volume', :integer],
|
27
|
+
:aePC => ['com.apple.itunes.is-podcast', :boolean],
|
28
|
+
:aePI => ['com.apple.itunes.itms-playlistid', :integer],
|
29
|
+
:aePP => ['com.apple.itunes.is-podcast-playlist', :boolean],
|
30
|
+
:aePS => ['com.apple.itunes.special-playlist', :byte],
|
31
|
+
:aeSU => ['com.apple.itunes.season-num', :integer],
|
32
|
+
:aeSF => ['com.apple.itunes.itms-storefrontid', :integer],
|
33
|
+
:aeSG => ['com.apple.itunes.saved-genius', :boolean],
|
34
|
+
:aeSI => ['com.apple.itunes.itms-songid', :integer],
|
35
|
+
:aeSN => ['com.apple.itunes.series-name', :string],
|
36
|
+
:aeSP => ['com.apple.itunes.smart-playlist', :byte],
|
37
|
+
:aeSV => ['com.apple.itunes.music-sharing-version', :version],
|
38
|
+
:agrp => ['daap.songgrouping', :string],
|
39
|
+
:aply => ['daap.databaseplaylists', :list],
|
40
|
+
:aprm => ['daap.playlistrepeatmode', :byte],
|
41
|
+
:apro => ['daap.protocolversion', :version],
|
42
|
+
:apsm => ['daap.playlistshufflemode', :byte],
|
43
|
+
:apso => ['daap.playlistsongs', :list],
|
44
|
+
:arif => ['daap.resolveinfo', :list],
|
45
|
+
:arsv => ['daap.resolve', :list],
|
46
|
+
:asaa => ['daap.songalbumartist', :string],
|
47
|
+
:asai => ['daap.songalbumid', :long],
|
48
|
+
:asal => ['daap.songalbum', :string],
|
49
|
+
:asar => ['daap.songartist', :string],
|
50
|
+
:asbk => ['daap.bookmarkable', :byte],
|
51
|
+
:asbo => ['daap.songbookmark', :integer],
|
52
|
+
:asbr => ['daap.songbitrate', :short],
|
53
|
+
:asbt => ['daap.songbeatsperminute', :short],
|
54
|
+
:ascd => ['daap.songcodectype', :integer],
|
55
|
+
:ascm => ['daap.songcomment', :string],
|
56
|
+
:ascn => ['daap.songcontentdescription', :string],
|
57
|
+
:asco => ['daap.songcompilation', :byte],
|
58
|
+
:ascp => ['daap.songcomposer', :string],
|
59
|
+
:ascr => ['daap.songcontentrating', :byte],
|
60
|
+
:ascs => ['daap.songcodecsubtype', :integer],
|
61
|
+
:asct => ['daap.songcategory', :string],
|
62
|
+
:asda => ['daap.songdateadded', :time],
|
63
|
+
:asdb => ['daap.songdisabled', :byte],
|
64
|
+
:asdc => ['daap.songdisccount', :short],
|
65
|
+
:asdk => ['daap.songdatakind', :byte],
|
66
|
+
:asdm => ['daap.songdatemodified', :time],
|
67
|
+
:asdn => ['daap.songdiscnumber', :short],
|
68
|
+
:asdp => ['daap.songdatepurchased', :time],
|
69
|
+
:asdr => ['daap.songdatereleased', :time],
|
70
|
+
:asdt => ['daap.songdescription', :string],
|
71
|
+
:ased => ['daap.songextradata', :short],
|
72
|
+
:aseq => ['daap.songeqpreset', :string],
|
73
|
+
:asfm => ['daap.songformat', :string],
|
74
|
+
:asgn => ['daap.songgenre', :string],
|
75
|
+
:asgp => ['daap.songgapless', :byte],
|
76
|
+
:ashp => ['daap.songhasbeenplayed', :byte],
|
77
|
+
:asky => ['daap.songkeywords', :string],
|
78
|
+
:aslc => ['daap.songlongcontentdescription', :string],
|
79
|
+
:asls => ['daap.songlongsize', :long],
|
80
|
+
:aspu => ['daap.songpodcasturl', :string],
|
81
|
+
:asrv => ['daap.songrelativevolume', :signed_byte],
|
82
|
+
:assu => ['daap.sortalbum', :string],
|
83
|
+
:assa => ['daap.sortartist', :string],
|
84
|
+
:assc => ['daap.sortcomposer', :string],
|
85
|
+
:assl => ['daap.sortalbumartist', :string],
|
86
|
+
:assn => ['daap.sortname', :string],
|
87
|
+
:assp => ['daap.songstoptime', :integer],
|
88
|
+
:assr => ['daap.songsamplerate', :integer],
|
89
|
+
:asss => ['daap.sortseriesname', :string],
|
90
|
+
:asst => ['daap.songstarttime', :integer],
|
91
|
+
:assz => ['daap.songsize', :integer],
|
92
|
+
:astc => ['daap.songtrackcount', :short],
|
93
|
+
:astm => ['daap.songtime', :integer],
|
94
|
+
:astn => ['daap.songtracknumber', :short],
|
95
|
+
:asul => ['daap.songdataurl', :string],
|
96
|
+
:asur => ['daap.songuserrating', :byte],
|
97
|
+
:asyr => ['daap.songyear', :short],
|
98
|
+
:ated => ['daap.supportsextradata', :short],
|
99
|
+
:avdb => ['daap.serverdatabases', :list],
|
100
|
+
:ceJC => ['com.apple.itunes.jukebox-client-vote', :signed_byte],
|
101
|
+
:ceJI => ['com.apple.itunes.jukebox-current', :integer],
|
102
|
+
:ceJS => ['com.apple.itunes.jukebox-score', :signed_short],
|
103
|
+
:ceJV => ['com.apple.itunes.jukebox-vote', :short_integer], # Special case, 4 byte integer but data stored in first two bytes
|
104
|
+
:ceVO => ['com.apple.itunes.unknown-voting', :boolean],
|
105
|
+
:ceWM => ['com.apple.itunes.welcome-message', :string],
|
106
|
+
:"f\215ch" => ['dmap.haschildcontainers', :byte],
|
107
|
+
:mbcl => ['dmap.bag', :list],
|
108
|
+
:mccr => ['dmap.contentcodesresponse', :list],
|
109
|
+
:mcna => ['dmap.contentcodesname', :string],
|
110
|
+
:mcnm => ['dmap.contentcodesnumber', :integer],
|
111
|
+
:mcon => ['dmap.container', :list],
|
112
|
+
:mctc => ['dmap.containercount', :integer],
|
113
|
+
:mcti => ['dmap.containeritemid', :integer],
|
114
|
+
:mcty => ['dmap.contentcodestype', :short],
|
115
|
+
:mdcl => ['dmap.dictionary', :list],
|
116
|
+
:meds => ['dmap.editcommandssupported', :integer],
|
117
|
+
:miid => ['dmap.itemid', :integer],
|
118
|
+
:mikd => ['dmap.itemkind', :byte],
|
119
|
+
:mimc => ['dmap.itemcount', :integer],
|
120
|
+
:minm => ['dmap.itemname', :string],
|
121
|
+
:mlcl => ['dmap.listing', :list],
|
122
|
+
:mlid => ['dmap.sessionid', :integer],
|
123
|
+
:mlit => ['dmap.listingitem', :list],
|
124
|
+
:mlog => ['dmap.loginresponse', :list],
|
125
|
+
:mpco => ['dmap.parentcontainerid', :integer],
|
126
|
+
:mper => ['dmap.persistentid', :long],
|
127
|
+
:mpro => ['dmap.protocolversion', :version],
|
128
|
+
:mrco => ['dmap.returnedcount', :integer],
|
129
|
+
:msau => ['dmap.authenticationmethod', :byte],
|
130
|
+
:msal => ['dmap.supportsautologout', :byte],
|
131
|
+
:msas => ['dmap.authenticationschemes', :byte],
|
132
|
+
:msbr => ['dmap.supportsbrowse', :byte],
|
133
|
+
:msdc => ['dmap.databasescount', :integer],
|
134
|
+
:msed => ['unknown_msed', :byte], # TODO: Figure out what these are for
|
135
|
+
:msex => ['dmap.supportsextensions', :byte],
|
136
|
+
:msix => ['dmap.supportsindex', :byte],
|
137
|
+
:mslr => ['dmap.loginrequired', :byte],
|
138
|
+
:msma => ['unknown_msma', :long],
|
139
|
+
:msml => ['unknown_msml', :list],
|
140
|
+
:mspi => ['dmap.supportspersistentids', :byte],
|
141
|
+
:msqy => ['dmap.supportsquery', :byte],
|
142
|
+
:msrs => ['dmap.supportsresolve', :byte],
|
143
|
+
:msrv => ['dmap.serverinforesponse', :list],
|
144
|
+
:mstc => ['dmap.utctime', :time],
|
145
|
+
:mstm => ['dmap.timeoutinterval', :integer],
|
146
|
+
:msto => ['dmap.utcoffset', :signed_integer],
|
147
|
+
:msts => ['dmap.statusstring', :string],
|
148
|
+
:mstt => ['dmap.status', :integer],
|
149
|
+
:msup => ['dmap.supportsupdate', :byte],
|
150
|
+
:mtco => ['dmap.specifiedtotalcount', :integer],
|
151
|
+
:mudl => ['dmap.deletedidlisting', :list],
|
152
|
+
:mupd => ['dmap.updateresponse', :list],
|
153
|
+
:musr => ['dmap.serverrevision', :integer],
|
154
|
+
:muty => ['dmap.updatetype', :byte],
|
155
|
+
|
156
|
+
# dacp.availablerepeatstates
|
157
|
+
# dacp.availableshufflestates
|
158
|
+
# dacp.nowplaying
|
159
|
+
# dacp.playerstate
|
160
|
+
# dacp.shufflestate
|
161
|
+
# dacp.skipincrement
|
162
|
+
# dacp.userrating
|
163
|
+
# dacp.volumecontrollable
|
164
|
+
# dacp.nowplaying
|
165
|
+
|
166
|
+
# New tags
|
167
|
+
:cmgt => ['unknown.list', :list],
|
168
|
+
:cmvo => ['dmcp.volume', :integer], # 0 - 100
|
169
|
+
:caci => ['unknown.control_init', :list],
|
170
|
+
:cmik => ['unknown', :byte], #
|
171
|
+
:cmsp => ['unknown', :byte], #
|
172
|
+
|
173
|
+
# From /ctrl-int/1/getplayerstatus
|
174
|
+
:cmst => ['unknown.list', :list],
|
175
|
+
:cmsr => ['unknown.revision', :integer], # Looks like an integer
|
176
|
+
:caps => ['dacp.playerstate', :byte], # 3 -> paused, 4 -> playing
|
177
|
+
:cash => ['dacp.shufflestate', :boolean],
|
178
|
+
:carp => ['dacp.repeatstate', :byte], # 2 -> all, 1 -> single, 0 -> off
|
179
|
+
:cavc => ['dacp.volumecontrollable', :boolean], # could be byte
|
180
|
+
:caas => ['dacp.availableshufflestates', :integer], # eg 2
|
181
|
+
:caar => ['dacp.availablerepeatstates', :integer], # eg 6
|
182
|
+
|
183
|
+
:cann => ['dacp.track_name', :string], # name?
|
184
|
+
:cana => ['dacp.track_artist', :string], # name?
|
185
|
+
:canl => ['dacp.track_album', :string], # name?
|
186
|
+
:cang => ['dacp.track_genre', :string], # name?
|
187
|
+
|
188
|
+
:cant => ['dacp.playingtime', :integer], # in milliseconds
|
189
|
+
:cast => ['dacp.totaltime', :integer],
|
190
|
+
|
191
|
+
:canp => ['dacp.nowplaying', :string], # guessing the name
|
192
|
+
:cmmk => ['unknown', :integer],
|
193
|
+
:ceGS => ['unknown', :byte], # could be boolean same prefix as jukebox stuff further up
|
194
|
+
|
195
|
+
# Interesting strings from iTunes
|
196
|
+
# daap.baseplaylist
|
197
|
+
# daap.bookmarkable
|
198
|
+
# daap.browsealbumlisting
|
199
|
+
# daap.browseartistlisting
|
200
|
+
# daap.browsecomposerlisting
|
201
|
+
# daap.browsegenrelisting
|
202
|
+
# daap.databasebrowse
|
203
|
+
# daap.databaseplaylists
|
204
|
+
# daap.databasesongs
|
205
|
+
# daap.playlistrepeatmode
|
206
|
+
# daap.playlistshufflemode
|
207
|
+
# daap.playlistsongs
|
208
|
+
# daap.protocolversion
|
209
|
+
# daap.resolve
|
210
|
+
# daap.resolveinfo
|
211
|
+
# daap.serverdatabases
|
212
|
+
# daap.songalbum
|
213
|
+
# daap.songalbumartist
|
214
|
+
# daap.songalbumid
|
215
|
+
# daap.songartist
|
216
|
+
# daap.songbeatsperminute
|
217
|
+
# daap.songbitrate
|
218
|
+
# daap.songbookmark
|
219
|
+
# daap.songcategory
|
220
|
+
# daap.songcategory,daap.songextradata,daap.songcontentdescription,daap.songlongcontentdescription,daap.songkeywords,com.apple.itunes.is-podcast,com.apple.itunes.mediakind,com.apple.itunes.extended-media-kind,com.apple.itunes.series-name,com.apple.itunes.network-name,com.apple.itunes.episode-num-str,com.apple.itunes.episode-sort,com.apple.itunes.season-num,daap.songgapless,com.apple.itunes.gapless-enc-del,com.apple.itunes.gapless-heur,com.apple.itunes.gapless-enc-dr,com.apple.itunes.gapless-dur,com.apple.itunes.gapless-resy,com.apple.itunes.content-rating
|
221
|
+
# daap.songcodecsubtype
|
222
|
+
# daap.songcodectype
|
223
|
+
# daap.songcomment
|
224
|
+
# daap.songcompilation
|
225
|
+
# daap.songcomposer
|
226
|
+
# daap.songcontentdescription
|
227
|
+
# daap.songcontentrating
|
228
|
+
# daap.songdatakind
|
229
|
+
# daap.songdataurl
|
230
|
+
# daap.songdateadded
|
231
|
+
# daap.songdatemodified
|
232
|
+
# daap.songdatepurchased
|
233
|
+
# daap.songdatereleased
|
234
|
+
# daap.songdescription
|
235
|
+
# daap.songdisabled
|
236
|
+
# daap.songdisccount
|
237
|
+
# daap.songdiscnumber
|
238
|
+
# daap.songeqpreset
|
239
|
+
# daap.songextradata
|
240
|
+
# daap.songformat
|
241
|
+
# daap.songgapless
|
242
|
+
# daap.songgenre
|
243
|
+
# daap.songgrouping
|
244
|
+
# daap.songhasbeenplayed
|
245
|
+
# daap.songkeywords
|
246
|
+
# daap.songlongcontentdescription
|
247
|
+
# daap.songlongsize
|
248
|
+
# daap.songpodcasturl
|
249
|
+
# daap.songrelativevolume
|
250
|
+
# daap.songsamplerate
|
251
|
+
# daap.songsize
|
252
|
+
# daap.songstarttime
|
253
|
+
# daap.songstoptime
|
254
|
+
# daap.songtime
|
255
|
+
# daap.songtrackcount
|
256
|
+
# daap.songtracknumber
|
257
|
+
# daap.songuserrating
|
258
|
+
# daap.songyear
|
259
|
+
# daap.sortalbum
|
260
|
+
# daap.sortalbumartist
|
261
|
+
# daap.sortartist
|
262
|
+
# daap.sortcomposer
|
263
|
+
# daap.sortname
|
264
|
+
# daap.sortseriesname
|
265
|
+
# daap.supportsextradata
|
266
|
+
# dacp.availablerepeatstates
|
267
|
+
# dacp.availableshufflestates
|
268
|
+
# dacp.nowplaying
|
269
|
+
# dacp.playerstate
|
270
|
+
# dacp.playingtime
|
271
|
+
# dacp.repeatstate
|
272
|
+
# dacp.shufflestate
|
273
|
+
# dacp.skipincrement
|
274
|
+
# dacp.userrating
|
275
|
+
# dacp.volumecontrollable
|
276
|
+
# dmap.authenticationmethod
|
277
|
+
# dmap.authenticationschemes
|
278
|
+
# dmap.bag
|
279
|
+
# dmap.container
|
280
|
+
# dmap.containercount
|
281
|
+
# dmap.containeritemid
|
282
|
+
# dmap.contentcodesname
|
283
|
+
# dmap.contentcodesnumber
|
284
|
+
# dmap.contentcodesresponse
|
285
|
+
# dmap.contentcodestype
|
286
|
+
# dmap.databasescount
|
287
|
+
# dmap.deletedidlisting
|
288
|
+
# dmap.dictionary
|
289
|
+
# dmap.editcommandssupported
|
290
|
+
# dmap.haschildcontainers
|
291
|
+
# dmap.itemcount
|
292
|
+
# dmap.itemid
|
293
|
+
# dmap.itemid,dmap.itemname,dmap.itemkind,dmap.persistentid,daap.songalbum,daap.songgrouping,daap.songartist,daap.songalbumartist,daap.songbitrate,daap.songbeatsperminute,daap.songcomment,daap.songcodectype,daap.songcodecsubtype,daap.songcompilation,daap.songcomposer,daap.songdateadded,daap.songdatemodified,daap.songdisccount,daap.songdiscnumber,daap.songdisabled,daap.songeqpreset,daap.songformat,daap.songgenre,daap.songdescription,daap.songrelativevolume,daap.songsamplerate,daap.songsize,daap.songstarttime,daap.songstoptime,daap.songtime,daap.songtrackcount,daap.songtracknumber,daap.songuserrating,daap.songyear,daap.songdatakind,daap.songdataurl,daap.songcontentrating,com.apple.itunes.norm-volume,com.apple.itunes.itms-songid,com.apple.itunes.itms-artistid,com.apple.itunes.itms-playlistid,com.apple.itunes.itms-composerid,com.apple.itunes.itms-genreid,com.apple.itunes.itms-storefrontid,com.apple.itunes.has-video
|
294
|
+
# dmap.itemkind
|
295
|
+
# dmap.itemname
|
296
|
+
# dmap.listing
|
297
|
+
# dmap.listingitem
|
298
|
+
# dmap.loginrequired
|
299
|
+
# dmap.loginresponse
|
300
|
+
# dmap.parentcontainerid
|
301
|
+
# dmap.persistentid
|
302
|
+
# dmap.protocolversion
|
303
|
+
# dmap.returnedcount
|
304
|
+
# dmap.serverinforesponse
|
305
|
+
# dmap.serverrevision
|
306
|
+
# dmap.sessionid
|
307
|
+
# dmap.specifiedtotalcount
|
308
|
+
# dmap.status
|
309
|
+
# dmap.statusstring
|
310
|
+
# dmap.supportsautologout
|
311
|
+
# dmap.supportsbrowse
|
312
|
+
# dmap.supportsextensions
|
313
|
+
# dmap.supportsindex
|
314
|
+
# dmap.supportspersistentids
|
315
|
+
# dmap.supportsquery
|
316
|
+
# dmap.supportsresolve
|
317
|
+
# dmap.supportsupdate
|
318
|
+
# dmap.timeoutinterval
|
319
|
+
# dmap.updateresponse
|
320
|
+
# dmap.updatetype
|
321
|
+
# dmap.utcoffset
|
322
|
+
# dmap.utctime
|
323
|
+
# dmcp.volume
|
324
|
+
# com.apple.itunes.adam-ids-array
|
325
|
+
# com.apple.itunes.albumcoverdisplay
|
326
|
+
# com.apple.itunes.atvsettingsview
|
327
|
+
# com.apple.itunes.atvsetupview
|
328
|
+
# com.apple.itunes.atvstreamsettingsview
|
329
|
+
# com.apple.itunes.atvsyncsettingsview
|
330
|
+
# com.apple.itunes.audioEditor
|
331
|
+
# com.apple.itunes.browsebarview
|
332
|
+
# com.apple.itunes.checklistitem
|
333
|
+
# com.apple.itunes.columnsdisplay
|
334
|
+
# com.apple.itunes.content-rating
|
335
|
+
# com.apple.itunes.customwindowview
|
336
|
+
# com.apple.itunes.downloadsdisplay
|
337
|
+
# com.apple.itunes.drm-key1-id
|
338
|
+
# com.apple.itunes.drm-key2-id
|
339
|
+
# com.apple.itunes.drm-platform-id
|
340
|
+
# com.apple.itunes.drm-user-id
|
341
|
+
# com.apple.itunes.drm-versions
|
342
|
+
# com.apple.itunes.edittext
|
343
|
+
# com.apple.itunes.episode-num-str
|
344
|
+
# com.apple.itunes.episode-sort
|
345
|
+
# com.apple.itunes.extended-media-kind
|
346
|
+
# com.apple.itunes.flashipodsetuphandler
|
347
|
+
# com.apple.itunes.flat-chapter-data
|
348
|
+
# com.apple.itunes.gapless-dur
|
349
|
+
# com.apple.itunes.gapless-enc-del
|
350
|
+
# com.apple.itunes.gapless-enc-dr
|
351
|
+
# com.apple.itunes.gapless-heur
|
352
|
+
# com.apple.itunes.gapless-resy
|
353
|
+
# com.apple.itunes.geniusbarview
|
354
|
+
# com.apple.itunes.gradientframeview
|
355
|
+
# com.apple.itunes.has-chapter-data
|
356
|
+
# com.apple.itunes.has-video
|
357
|
+
# com.apple.itunes.iPodDiskUsageView
|
358
|
+
# com.apple.itunes.inlineedittextview
|
359
|
+
# com.apple.itunes.iphonesettingsview
|
360
|
+
# com.apple.itunes.iphonesetuphandler
|
361
|
+
# com.apple.itunes.ipodsettingsview
|
362
|
+
# com.apple.itunes.ipodsetuphandler
|
363
|
+
# com.apple.itunes.ipodshufflesettingsview
|
364
|
+
# com.apple.itunes.is-hd-video
|
365
|
+
# com.apple.itunes.is-podcast
|
366
|
+
# com.apple.itunes.is-podcast-playlist
|
367
|
+
# com.apple.itunes.itms-artistid
|
368
|
+
# com.apple.itunes.itms-composerid
|
369
|
+
# com.apple.itunes.itms-genreid
|
370
|
+
# com.apple.itunes.itms-playlistid
|
371
|
+
# com.apple.itunes.itms-songid
|
372
|
+
# com.apple.itunes.itms-storefrontid
|
373
|
+
# com.apple.itunes.jukebox-client-vote
|
374
|
+
# com.apple.itunes.jukebox-current
|
375
|
+
# com.apple.itunes.jukebox-score
|
376
|
+
# com.apple.itunes.jukebox-vote
|
377
|
+
# com.apple.itunes.lock_sync
|
378
|
+
# com.apple.itunes.mediakind
|
379
|
+
# com.apple.itunes.movielistitem
|
380
|
+
# com.apple.itunes.music-sharing-version
|
381
|
+
# com.apple.itunes.musicstoredisplay
|
382
|
+
# com.apple.itunes.network-name
|
383
|
+
# com.apple.itunes.non-drm-user-id
|
384
|
+
# com.apple.itunes.norm-volume
|
385
|
+
# com.apple.itunes.phonesettingsview
|
386
|
+
# com.apple.itunes.pictureanimationview
|
387
|
+
# com.apple.itunes.radiobutton
|
388
|
+
# com.apple.itunes.req-fplay
|
389
|
+
# com.apple.itunes.ringtoneeditorview
|
390
|
+
# com.apple.itunes.saved-genius
|
391
|
+
# com.apple.itunes.season-num
|
392
|
+
# com.apple.itunes.series-name
|
393
|
+
# com.apple.itunes.simplelistitem
|
394
|
+
# com.apple.itunes.smart-playlist
|
395
|
+
# com.apple.itunes.sourcedisplay
|
396
|
+
# com.apple.itunes.special-playlist
|
397
|
+
# com.apple.itunes.springboardworkaround
|
398
|
+
# com.apple.itunes.store-pers-id
|
399
|
+
# com.apple.itunes.storebrowsedisplay
|
400
|
+
# com.apple.itunes.storeprescienceview
|
401
|
+
# com.apple.itunes.storeview
|
402
|
+
# com.apple.itunes.summaryitemview
|
403
|
+
# com.apple.itunes.syncing
|
404
|
+
# com.apple.itunes.touchremotesetupview
|
405
|
+
# com.apple.itunes.trackdisplay
|
406
|
+
# com.apple.itunes.trackgroupdisplay
|
407
|
+
# com.apple.itunes.visualizerview
|
408
|
+
|
409
|
+
}
|
410
|
+
|
411
|
+
STATIC_LENGTH_TYPES = {
|
412
|
+
:boolean => [1, 'C'],
|
413
|
+
:byte => [1, 'C'],
|
414
|
+
:signed_byte => [1, 'c'],
|
415
|
+
:short => [2, 'n'],
|
416
|
+
:signed_short => [2, 's'],
|
417
|
+
:integer => [4, 'N'],
|
418
|
+
:signed_integer => [4, 'l'],
|
419
|
+
:long => [8, 'Q'],
|
420
|
+
:signed_long => [8, 'q'],
|
421
|
+
:version => [4, 'CCCC'],
|
422
|
+
:time => [4, 'N'],
|
423
|
+
|
424
|
+
:short_integer => [4, 'nxx'],
|
425
|
+
}
|
426
|
+
end
|