チェンジセット 1562

差分発生行の前後
無視リスト:
コミット日時:
2008/10/10 12:51:07 (5 年前)
コミッタ:
tasuku
ログメッセージ:

imploved post error handling...

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint.as

    r1555 r1562  
    4848    parameters['baseImgInfoUrl'] = 'http://dic.dev.nicovideo.jp/oekaki_info/31'; 
    4949    */ 
     50    parameters['postUrl'] = 'http://dic.dev.nicovideo.jp/' 
     51    parameters['cookie'] = 'cookie' 
     52    parameters['magic'] = 'magic' 
     53    parameters['redirectUrl'] = 'http://dic.dev.nicovideo.jp/' 
     54    parameters['undoBufferSize'] = 16; 
     55    parameters['canvasWidth'] = 317; 
     56    parameters['canvasHeight'] = 317; 
     57    // debug buttons 
     58    logPlayButton.addEventListener(FlexEvent.BUTTON_DOWN, playLogHandler); 
     59    logPlayButton.visible = true; 
     60    checkPngButton.visible = true; 
    5061  } 
    5162 
     
    103114    } 
    104115  } else { 
    105     if (DEBUG) { 
    106       undoBufferSize = 16; 
    107     } else { 
    108       return; 
    109     } 
     116    return; 
    110117  } 
    111118  if (parameters['oekakiId'] && parameters['baseImgUrl']) { 
     
    125132      } 
    126133    } else { 
    127       if (DEBUG) { 
    128         width = 100; height = 100; 
    129         postOekakiButton.enabled = true; 
    130       } else { 
    131         return; 
    132       } 
     134      return; 
    133135    } 
    134136    _logger = GPLogger.createForDraw(width, height, undoBufferSize, null, null); 
    135137    initGunyaraPaintCanvas(); 
    136138  } 
    137  
    138   if (DEBUG) { 
    139     logPlayButton.addEventListener(FlexEvent.BUTTON_DOWN, playLogHandler); 
    140 //    checkPngButton.addEventListener(FlexEvent.BUTTON_DOWN, checkPngHandler); 
    141     logPlayButton.visible = true; 
    142     checkPngButton.visible = true; 
    143   }   
    144139} 
    145140 
     
    179174  } 
    180175} 
     176private function set allEnabled(value:Boolean):void { 
     177  this.enabled = value; 
     178  gpCanvasWindow.enabled = value; 
     179  penDetailWindow.enabled = value; 
     180  gpLayerWindow.enabled = value; 
     181} 
    181182private function initGunyaraPaintCanvas():void { 
    182183  toolCanvas.x = (this.width - toolCanvas.width) / 2; 
    183  
    184   this.enabled = true; 
    185   gpCanvasWindow.enabled = true; 
    186   penDetailWindow.enabled = true; 
    187   gpLayerWindow.enabled = true; 
     184  allEnabled = true; 
    188185} 
    189186 
     
    219216} 
    220217 
    221 private function commCompleteHandler(com:Com):void { 
    222   if (com.errStr) { 
    223     // error 
    224     Alert.show(com.errStr, ALERT_TITLE); 
    225     this.enabled = true; 
    226   } else if (com.data.toString() != '') { 
    227     Alert.show(com.data.toString(), ALERT_TITLE); 
    228     this.enabled = true; 
    229   } else { 
    230     // redirect 
    231     Com.redirect(redirectUrl); 
    232   } 
    233 } 
    234  
    235218private function canvasZoomHandler(evt:SliderEvent):void { 
    236219  gpCanvasWindow.zoomCanvas(evt.value); 
     
    273256} 
    274257 
     258private function commCompleteHandler(com:Com):void { 
     259  try { 
     260    if (com.errStr) { 
     261      // error 
     262      Alert.show(com.errStr, ALERT_TITLE); 
     263    } else if (com.data.toString() != '') { 
     264      Alert.show(com.data.toString(), ALERT_TITLE); 
     265    } else { 
     266      // redirect 
     267      Com.redirect(redirectUrl); 
     268    } 
     269  } catch (e:Error) { 
     270    Alert.show('何かしらのエラーが起きました…再投稿お願いいたします。', ALERT_TITLE); 
     271  } 
     272  allEnabled = true; 
     273} 
     274 
    275275private function postOekakiButtonHandler(evt:Event):void { 
    276276  if (messageTextArea.text == '') { 
     
    282282    return; 
    283283  } 
    284   this.enabled = false; 
     284  allEnabled = false; 
    285285  var com:Com = new Com(); 
    286   com.postOekaki(parameters['postUrl'], 
     286  com.postOekaki(this, 
     287                 parameters['postUrl'], 
    287288                 parameters['magic'], 
    288289                 parameters['cookie'], 
  • as3/gunyarapaint/trunk/nicopedia/org/libspark/nicopedia/Com.as

    r1500 r1562  
    77   
    88  import mx.core.UIComponent; 
     9  import mx.events.FlexEvent; 
    910   
    1011  public class Com extends UIComponent 
     
    3334    private var errorStr:String; 
    3435     
    35     private var comDialog:ComDialog; 
     36    private var _comDialog:ComDialog; 
    3637 
    3738    public function Com() { 
     
    8788    } 
    8889     
    89     public function postOekaki(url:String, magic:String, cookie:String, name:String, msg:String, ref_oekaki_id:uint, data:Object, callback:Function):void { 
    90  
    91       PopUpManager.createPopUp(this, ComDialog, true); 
    92  
    93       var r:URLRequest = new URLRequest(); 
    94       var v:URLVariables = new URLVariables(); 
    95       var b:ByteArray = new ByteArray(); 
    96       var info:ByteArray = new ByteArray(); 
    97       info.writeUTFBytes(JSON.encode(data['info'])); 
    98       v.cookie = cookie; 
    99       v.magic = magic; 
    100       v.FROM = name; 
    101       v.MESSAGE = msg; 
    102       v.ref_oekaki_id = ref_oekaki_id; 
    103       v.log_count = data['info']['log_count']; // TODO: サーバ側で取り出してあげる 
    104       var form:String = v.toString(); 
    105       b.writeUTFBytes(':' + form.length + '=' + form); 
    106       b.writeUTFBytes('&IMAGE:' + data['image'].length + '='); 
    107       b.writeBytes(data['image']); 
    108       b.writeUTFBytes('&IMAGE_LOG:' + data['compressed_log'].length + '='); 
    109       b.writeBytes(data['compressed_log']); 
    110       b.writeUTFBytes('&IMAGE_LAYERS:' + data['layers_image'].length + '='); 
    111       b.writeBytes(data['layers_image']); 
    112       b.writeUTFBytes('&IMAGE_INFO:' + info.length + '='); 
    113       b.writeBytes(info); 
    114       r.url = url; 
    115       r.method = URLRequestMethod.POST; 
    116       r.contentType = 'application/x-nicopedia-oekaki'; 
    117       r.data = b; 
    118        
    119       this.callback = callback;       
    120       post(r); 
     90    public function postOekaki(parent:DisplayObject, url:String, magic:String, cookie:String, name:String, msg:String, ref_oekaki_id:uint, data:Object, callback:Function):void { 
     91      try { 
     92        _comDialog = new ComDialog(); 
     93        PopUpManager.addPopUp(_comDialog, parent, true); 
     94        _comDialog.cancelButton.addEventListener(FlexEvent.BUTTON_DOWN, cancelHandler); 
     95   
     96        var r:URLRequest = new URLRequest(); 
     97        var v:URLVariables = new URLVariables(); 
     98        var b:ByteArray = new ByteArray(); 
     99        var info:ByteArray = new ByteArray(); 
     100        info.writeUTFBytes(JSON.encode(data['info'])); 
     101        v.cookie = cookie; 
     102        v.magic = magic; 
     103        v.FROM = name; 
     104        v.MESSAGE = msg; 
     105        v.ref_oekaki_id = ref_oekaki_id; 
     106        v.log_count = data['info']['log_count']; // TODO: サーバ側で取り出してあげる 
     107        var form:String = v.toString(); 
     108        b.writeUTFBytes(':' + form.length + '=' + form); 
     109        b.writeUTFBytes('&IMAGE:' + data['image'].length + '='); 
     110        b.writeBytes(data['image']); 
     111        b.writeUTFBytes('&IMAGE_LOG:' + data['compressed_log'].length + '='); 
     112        b.writeBytes(data['compressed_log']); 
     113        b.writeUTFBytes('&IMAGE_LAYERS:' + data['layers_image'].length + '='); 
     114        b.writeBytes(data['layers_image']); 
     115        b.writeUTFBytes('&IMAGE_INFO:' + info.length + '='); 
     116        b.writeBytes(info); 
     117        r.url = url; 
     118        r.method = URLRequestMethod.POST; 
     119        r.contentType = 'application/x-nicopedia-oekaki'; 
     120        r.data = b; 
     121         
     122        this.callback = callback; 
     123        post(r); 
     124      } catch (e:Error) { 
     125        errorStr = '投稿準備時にエラーが起こりました。ほかのアプリケーションを終了して空きメモリ容量を増やした上で、再度投稿してください。'; 
     126        callback(this); 
     127      } 
    121128    } 
    122129     
     
    165172     
    166173    private function postSecurityErrorHandler(evt:SecurityErrorEvent):void { 
    167       errorStr = 'セキュリティエラーが発生しました。\n詳細:' + evt.text; 
    168       dispatchEvent(new Event('completeGetData')); 
     174      errorStr = 'セキュリティエラーが発生しました。通信が許可されていません。通常このエラーは起きません。\n詳細:' + evt.text; 
     175      postCompleteHandler(evt); 
    169176    } 
    170177    private function postIOErrorHandler(evt:IOErrorEvent):void { 
    171178      // TODO: not event based, see URLLoader help 
    172       errorStr = 'ネットワークエラーが発生しました。\n詳細:' + evt.text; 
    173       dispatchEvent(new Event('completeGetData')); 
     179      errorStr = 'ネットワークエラーが発生しました。混雑や一時的なメンテナンスの可能性がございます。お手数ですが、再度投稿お願いいたします。\n詳細:' + evt.text; 
     180      postCompleteHandler(evt); 
    174181    } 
    175182    private function postOpenHandler(evt:Event):void { 
    176183    } 
    177184    private function postProgressHandler(evt:ProgressEvent):void { 
    178       evt.bytesLoaded + evt.bytesTotal; 
     185      _comDialog.comProgressBar.setProgress(evt.bytesLoaded, evt.bytesTotal); 
     186    } 
     187     
     188    private function cancelHandler(evt:Event):void { 
     189      try { 
     190        urlLoader.close(); 
     191      } catch (e:Error) {} 
     192      errorStr = '投稿をキャンセルしました。すでに投稿がなされている場合もあります。'; 
     193      postCompleteHandler(evt); 
    179194    } 
    180195    private function postCompleteHandler(evt:Event):void { 
    181       if (comDialog) { 
    182         PopUpManager.removePopUp(comDialog); 
    183         comDialog = null; 
     196      if (_comDialog) { 
     197        PopUpManager.removePopUp(_comDialog); 
     198        _comDialog = null; 
    184199      } 
    185200      callback(this); 
  • as3/gunyarapaint/trunk/nicopedia/org/libspark/nicopedia/ComDialog.mxml

    r1180 r1562  
    33<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
    44 title="ニコニコ大百科通信班" x="168" y="86" 
    5  showCloseButton="false" 
    6  close="removeMe();" width="288" height="184" backgroundColor="#FFFFFF" layout="absolute" horizontalAlign="center"> 
    7   <mx:ProgressBar x="10" y="12" label="カキコ中…" labelPlacement="center" width="248"/> 
     5 showCloseButton="false" width="288" height="104" backgroundColor="#FFFFFF" layout="absolute" horizontalAlign="center"> 
     6  <mx:ProgressBar id="comProgressBar" x="10" y="12" label="カキコ中…" labelPlacement="center" width="248"/> 
    87  <mx:Script> 
    9     import org.libspark.nicopedia.Com; 
    10     import mx.managers.PopUpManager; 
    11  
    12     private function removeMe():void { 
    13       PopUpManager.removePopUp(this); 
    14     } 
     8    <![CDATA[ 
     9    ]]> 
    1510  </mx:Script> 
    16   <mx:TextArea id="ret" x="54" y="47" height="87"/> 
     11  <mx:Button id="cancelButton" x="95.5" y="36" label="キャンセル"/> 
    1712</mx:TitleWindow>