root/as3/gunyarapaint/trunk/nicopedia/org/libspark/nicopedia/Com.as

リビジョン 2348, 8.2 kB (コミッタ: tasuku, コミット時期: 4 年 前)

* gunyarapaint: タイトル付与
* gunyarapaint: リサイズ用の関数をaddCallbackを使って公開。
* gunyarapaint: バージョン上げ
* com: タイトル送信
* pikokakiko: バージョン上げ

Line 
1 package org.libspark.nicopedia
2 {
3   import com.adobe.serialization.json.JSON;
4   import com.adobe.serialization.json.JSONParseError;
5  
6   import flash.display.DisplayObject;
7  
8   import mx.core.UIComponent;
9   import mx.events.FlexEvent;
10  
11   public class Com extends UIComponent
12   {
13     import flash.events.Event;
14     import flash.events.IOErrorEvent;
15     import flash.events.ProgressEvent;
16     import flash.events.SecurityErrorEvent;
17     import flash.utils.ByteArray;
18     import flash.events.HTTPStatusEvent;
19     import flash.events.IEventDispatcher;
20     import flash.display.Loader;
21     import flash.net.*;
22    
23     import mx.controls.Alert;
24    
25     import mx.managers.PopUpManager;
26    
27     private const ALERT_TITLE:String = 'ニコニコ大百科伝言班';
28    
29     private var callback:Function;
30  
31     private var urlLoader:URLLoader;
32     private var loader:Loader;
33    
34     private var errorStr:String;
35    
36     private var _comDialog:ComDialog;
37
38     public function Com() {
39     }
40
41     // jasrac_idsはスペース区切りで
42     public function postPico(url:String, magic:String, cookie:String,
43                              name:String, title:String, msg:String, addWatchlist:Boolean,
44                              mml:String, ref_mml_id:uint, jasrac_ids:String, callback:Function):void {
45       var r:URLRequest = new URLRequest();
46       var v:URLVariables = new URLVariables();
47       r.url = url;
48       r.method = URLRequestMethod.POST;
49       r.data = v;
50       v.magic = magic;
51       v.FROM = name;
52       v.title = title;
53       v.MESSAGE = msg;
54       v.watchlist = addWatchlist ? 't' : '';
55       v.MML = mml;
56       v.ref_mml_id = ref_mml_id;
57       v.jasrac_ids = jasrac_ids;
58       v.cookie = cookie;
59      
60       this.callback = callback;     
61       post(r);
62     }
63    
64     public static function redirect(url:String):void {
65       var r:URLRequest = new URLRequest();
66       r.url = url;
67       r.method = URLRequestMethod.GET;
68       navigateToURL(r, '_top');
69     }
70    
71     public static function redirectPicoForm(url:String, mml_id:uint):void {
72       var r:URLRequest = new URLRequest();
73       var v:URLVariables = new URLVariables();
74       r.url = url;
75       r.data = v;
76       r.method = URLRequestMethod.POST;
77       v.mml_id = mml_id;
78      
79       navigateToURL(r, '_top');
80     }
81    
82     public static function redirectOekakiForm(url:String, oekaki_id:uint):void {
83       var r:URLRequest = new URLRequest();
84       var v:URLVariables = new URLVariables();
85       r.url = url;
86       r.data = v;
87       r.method = URLRequestMethod.POST;
88       v.oekaki_id = oekaki_id;
89      
90       navigateToURL(r, '_top');
91     }
92    
93     public function postOekaki(parent:DisplayObject, url:String, magic:String, cookie:String,
94                                name:String, title:String, msg:String, addWatchlist:Boolean,
95                                ref_oekaki_id:uint, data:Object, callback:Function):void {
96       try {
97         _comDialog = new ComDialog();
98         PopUpManager.addPopUp(_comDialog, parent, true);
99         _comDialog.cancelButton.addEventListener(FlexEvent.BUTTON_DOWN, cancelHandler);
100  
101         var r:URLRequest = new URLRequest();
102         var v:URLVariables = new URLVariables();
103         var b:ByteArray = new ByteArray();
104         var info:ByteArray = new ByteArray();
105         info.writeUTFBytes(JSON.encode(data['info']));
106         v.cookie = cookie;
107         v.magic = magic;
108         v.FROM = name;
109         v.title = title;
110         v.MESSAGE = msg;
111         v.watchlist = addWatchlist ? 't' : '';
112         v.ref_oekaki_id = ref_oekaki_id;
113         v.log_count = data['info']['log_count']; // TODO: サーバ側で取り出してあげる
114         var form:String = v.toString();
115         b.writeUTFBytes(':' + form.length + '=' + form);
116         b.writeUTFBytes('&IMAGE:' + data['image'].length + '=');
117         b.writeBytes(data['image']);
118         b.writeUTFBytes('&IMAGE_LOG:' + data['compressed_log'].length + '=');
119         b.writeBytes(data['compressed_log']);
120         b.writeUTFBytes('&IMAGE_LAYERS:' + data['layers_image'].length + '=');
121         b.writeBytes(data['layers_image']);
122         b.writeUTFBytes('&IMAGE_INFO:' + info.length + '=');
123         b.writeBytes(info);
124         r.url = url;
125         r.method = URLRequestMethod.POST;
126         r.contentType = 'application/x-nicopedia-oekaki';
127         r.data = b;
128        
129         this.callback = callback;
130         post(r);
131       } catch (e:Error) {
132         errorStr = '投稿準備時にエラーが起こりました。ほかのアプリケーションを終了して空きメモリ容量を増やした上で、再度投稿してください。';
133         callback(this);
134       }
135     }
136    
137     public static function navigate(url:String, target:String):void {
138       var r:URLRequest = new URLRequest();
139       r.url = url;
140       r.method = URLRequestMethod.POST;
141       navigateToURL(r, target);
142     }
143    
144     public function sendGetUrlRequest(url:String, callback:Function):void {
145       var r:URLRequest = new URLRequest();
146       r.url = url;
147       r.method = URLRequestMethod.GET;
148       this.callback = callback;
149       post(r);
150     }
151    
152     private function post(request:URLRequest):void {
153       errorStr = null;
154       urlLoader = new URLLoader();
155       urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
156       configureListeners(urlLoader);
157       urlLoader.load(request);
158     }
159
160     // 画像の読み込み専用!
161     public function loadURL(url:String, callback:Function):void {
162       var r:URLRequest = new URLRequest;
163       r.url = url;
164       r.method = URLRequestMethod.GET;
165       loader = new Loader();
166       configureListeners(loader.contentLoaderInfo);
167       this.callback = callback;
168       loader.load(r);
169     }
170    
171     private function configureListeners(dispatcher:IEventDispatcher):void {
172       // dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, postHttpStatusHandler);
173       dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, postSecurityErrorHandler);
174       dispatcher.addEventListener(IOErrorEvent.IO_ERROR, postIOErrorHandler);
175       dispatcher.addEventListener(Event.OPEN, postOpenHandler);
176       dispatcher.addEventListener(ProgressEvent.PROGRESS, postProgressHandler);
177       dispatcher.addEventListener(Event.COMPLETE, postCompleteHandler);           
178     }
179    
180     private function postSecurityErrorHandler(evt:SecurityErrorEvent):void {
181       errorStr = 'セキュリティエラーが発生しました。通信が許可されていません。通常このエラーは起きません。\n詳細:' + evt.text;
182       postCompleteHandler(evt);
183     }
184     private function postIOErrorHandler(evt:IOErrorEvent):void {
185       // TODO: not event based, see URLLoader help
186       errorStr = 'ネットワークエラーが発生しました。混雑や一時的なメンテナンスの可能性がございます。お手数ですが、再度投稿お願いいたします。\n詳細:' + evt.text;
187       postCompleteHandler(evt);
188     }
189     private function postOpenHandler(evt:Event):void {
190     }
191     private function postProgressHandler(evt:ProgressEvent):void {
192       if (_comDialog) {
193         _comDialog.comProgressBar.setProgress(evt.bytesLoaded, evt.bytesTotal);
194       }
195     }
196    
197     private function cancelHandler(evt:Event):void {
198       try {
199         urlLoader.close();
200       } catch (e:Error) {}
201       errorStr = '投稿をキャンセルしました。すでに投稿がなされている場合もあります。';
202       postCompleteHandler(evt);
203     }
204     private function postCompleteHandler(evt:Event):void {
205       if (_comDialog) {
206         PopUpManager.removePopUp(_comDialog);
207         _comDialog = null;
208       }
209       callback(this);
210     }
211     public function get data():ByteArray {
212       return urlLoader.data;
213     }
214     public function get content():DisplayObject {
215       // for png to bitmap
216       return loader.content;
217     }
218     public function get jsonObject():Object {
219       if (urlLoader.data.toString != '') {
220         try {
221           return JSON.decode(urlLoader.data);         
222         } catch (e:JSONParseError) {
223         }
224       }
225       return null;
226     }
227     public function get errStr():String {
228       return errorStr;
229     }
230   }
231 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。