source: trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/ZIPSkin.as @ 674

Revision 674, 2.4 KB checked in by zach, 4 years ago (diff)
  • Combining ZipAssetLoader and AssetLoader
Line 
1package com.longtailvideo.jwplayer.view.skins {
2        import com.longtailvideo.jwplayer.utils.AssetLoader;
3        import com.longtailvideo.jwplayer.utils.Strings;
4        import com.nochump.util.zip.ZipEntry;
5        import com.nochump.util.zip.ZipFile;
6       
7        import flash.display.Bitmap;
8        import flash.display.BitmapData;
9        import flash.events.ErrorEvent;
10        import flash.events.Event;
11        import flash.events.IOErrorEvent;
12        import flash.events.SecurityErrorEvent;
13        import flash.net.URLRequest;
14        import flash.net.URLStream;
15
16
17        public class ZIPSkin extends PNGSkin {
18                private var _zipFile:ZipFile;
19
20
21                public function ZIPSkin() {
22                        super();
23                }
24
25
26                public override function load(url:String=null):void {
27                        if (Strings.extension(url) == "zip") {
28                                _urlPrefix = url.substring(url.lastIndexOf('/') + 1, url.lastIndexOf('.'));
29
30                                var urlStream:URLStream = new URLStream();
31                                urlStream.addEventListener(Event.COMPLETE, loadComplete);
32                                urlStream.addEventListener(IOErrorEvent.IO_ERROR, loadError);
33                                urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadError);
34                                urlStream.load(new URLRequest(url));
35                        } else if (_skin.numChildren == 0) {
36                                sendError("ZIP skin descriptor file must have a .zip extension");
37                        }
38                }
39
40
41                protected override function loadComplete(evt:Event):void {
42                        var data:URLStream = URLStream(evt.target);
43                        _zipFile = new ZipFile(data);
44                        try {
45                                var zipEntry:ZipEntry = _zipFile.getEntry(_urlPrefix + '.xml');
46                                if (!zipEntry) {
47                                        zipEntry =  _zipFile.getEntry(_urlPrefix+'/'+_urlPrefix + '.xml');
48                                }
49                                _skinXML = XML(String(_zipFile.getInput(zipEntry)));
50                                parseSkin();
51                        } catch (e:Error) {
52                                sendError(e.message);
53                        }
54                }
55
56
57                protected override function loadElements(component:String, elements:XMLList):void {
58                        if (!component)
59                                return;
60
61                        for each (var element:XML in elements) {
62                                var file:String = component + '/' + element.@src.toString();
63                                var zipEntry:ZipEntry = _zipFile.getEntry(file);
64                               
65                                if (zipEntry) {
66                                        try {
67                                                var newLoader:AssetLoader = new AssetLoader();
68                                                _loaders[newLoader] = {componentName: component, elementName: element.@name.toString()};
69                                                newLoader.addEventListener(Event.COMPLETE, elementHandler);
70                                                newLoader.addEventListener(ErrorEvent.ERROR, elementError);
71                                                newLoader.loadBytes(_zipFile.getInput(zipEntry));
72                                        } catch (err:Error) {
73                                                sendError("Error loading ZIP skin "+component+"'s "+element.toString()+": "+err.message);
74                                        }
75                                }
76                        }
77                }
78        }
79}
Note: See TracBrowser for help on using the repository browser.