Develop and Download Open Source Software

Browse Subversion Repository

Contents of /NNDDv2/trunk/src/org/mineap/nndd/player/PlayerController.as

Parent Directory Parent Directory | Revision Log Revision Log


Revision 370 - (show annotations) (download)
Wed Oct 27 11:34:05 2010 UTC (13 years, 5 months ago) by mineap
File size: 143885 byte(s)
v1をv2にマージ
1 package org.mineap.nndd.player
2 {
3 import flash.display.Loader;
4 import flash.display.LoaderInfo;
5 import flash.display.MovieClip;
6 import flash.display.NativeWindowType;
7 import flash.display.StageDisplayState;
8 import flash.events.ErrorEvent;
9 import flash.events.Event;
10 import flash.events.EventDispatcher;
11 import flash.events.HTTPStatusEvent;
12 import flash.events.IOErrorEvent;
13 import flash.events.MouseEvent;
14 import flash.events.TimerEvent;
15 import flash.filesystem.File;
16 import flash.media.SoundMixer;
17 import flash.media.SoundTransform;
18 import flash.net.URLRequest;
19 import flash.utils.Timer;
20
21 import mx.collections.ArrayCollection;
22 import mx.controls.Alert;
23 import mx.controls.DataGrid;
24 import mx.controls.SWFLoader;
25 import mx.controls.Text;
26 import mx.controls.VideoDisplay;
27 import mx.controls.videoClasses.VideoError;
28 import mx.core.Application;
29 import mx.core.Window;
30 import mx.events.AIREvent;
31 import mx.events.FlexEvent;
32 import mx.events.MetadataEvent;
33 import mx.events.VideoEvent;
34 import mx.formatters.DateFormatter;
35 import mx.managers.PopUpManager;
36
37 import org.libspark.utils.ForcibleLoader;
38 import org.mineap.nicovideo4as.MyListLoader;
39 import org.mineap.nicovideo4as.WatchVideoPage;
40 import org.mineap.nicovideo4as.analyzer.GetRelationResultAnalyzer;
41 import org.mineap.nicovideo4as.loader.api.ApiGetRelation;
42 import org.mineap.nicovideo4as.model.RelationResultItem;
43 import org.mineap.nicovideo4as.util.HtmlUtil;
44 import org.mineap.nndd.Access2Nico;
45 import org.mineap.nndd.FileIO;
46 import org.mineap.nndd.LogManager;
47 import org.mineap.nndd.Message;
48 import org.mineap.nndd.NGListManager;
49 import org.mineap.nndd.NNDDDownloader;
50 import org.mineap.nndd.NNDDMyListAdder;
51 import org.mineap.nndd.NNDDVideoPageWatcher;
52 import org.mineap.nndd.RenewDownloadManager;
53 import org.mineap.nndd.comment.Command;
54 import org.mineap.nndd.comment.CommentManager;
55 import org.mineap.nndd.comment.Comments;
56 import org.mineap.nndd.event.LocalCommentSearchEvent;
57 import org.mineap.nndd.history.HistoryManager;
58 import org.mineap.nndd.library.ILibraryManager;
59 import org.mineap.nndd.library.LibraryManagerBuilder;
60 import org.mineap.nndd.library.LocalVideoInfoLoader;
61 import org.mineap.nndd.library.namedarray.LibraryManager;
62 import org.mineap.nndd.model.NNDDComment;
63 import org.mineap.nndd.model.NNDDVideo;
64 import org.mineap.nndd.model.PlayList;
65 import org.mineap.nndd.playList.PlayListManager;
66 import org.mineap.nndd.util.DateUtil;
67 import org.mineap.nndd.util.IchibaBuilder;
68 import org.mineap.nndd.util.LibraryUtil;
69 import org.mineap.nndd.util.NumberUtil;
70 import org.mineap.nndd.util.PathMaker;
71 import org.mineap.nndd.util.RelationTypeUtil;
72 import org.mineap.nndd.util.ThumbInfoAnalyzer;
73 import org.mineap.nndd.util.ThumbInfoUtil;
74 import org.mineap.nndd.util.WebServiceAccessUtil;
75 import org.mineap.nndd.view.SmoothVideoDisplay;
76 import org.mineap.util.config.ConfigIO;
77 import org.mineap.util.config.ConfigManager;
78
79 /**
80 * PlayerController.as
81 * ���������������������������������������������������������������������������GUI������������������������
82 *
83 * Copyright (c) 2008-2009 MAP - MineApplicationProject. All Rights Reserved.
84 *
85 * @author shiraminekeisuke
86 *
87 */
88 public class PlayerController extends EventDispatcher
89 {
90
91 public static const WINDOW_TYPE_SWF:int = 0;
92 public static const WINDOW_TYPE_FLV:int = 1;
93
94 public static const NG_LIST_RENEW:String = "NgListRenew";
95
96 private var commentManager:CommentManager;
97 private var comments:Comments;
98
99 public var windowType:int = -1;
100 public var videoPlayer:VideoPlayer;
101 public var videoInfoView:VideoInfoView;
102 public var ngListManager:NGListManager;
103 public var libraryManager:ILibraryManager;
104 public var playListManager:PlayListManager;
105
106 private var windowReady:Boolean = false;
107
108 private var swfLoader:SWFLoader = null;
109 private var loader:Loader = null;
110 private var isMovieClipPlaying:Boolean = false;
111
112 private var videoDisplay:SmoothVideoDisplay = null;
113
114 private var nicowariSwfLoader:SWFLoader = null;
115
116 private var isStreamingPlay:Boolean = false;
117
118 private var source:String = "";
119
120 private var commentTimer:Timer = new Timer(1000/15);
121 private var commentTimerVpos:int = 0;
122
123 private var lastSeekTime:Number = new Date().time;
124
125 private var time:Number = 0;
126
127 private var pausing:Boolean = false;
128
129 private var downLoadedURL:String = null;
130
131 private var isPlayListingPlay:Boolean = false;
132 private var playingIndex:int = 0;
133
134 private var logManager:LogManager;
135
136 private var mailAddress:String;
137 private var password:String;
138
139 private var mc:MovieClip;
140 private var nicowariMC:MovieClip;
141 public var swfFrameRate:Number = 0;
142
143 public var sliderChanging:Boolean = false;
144
145 private var nicowariTimer:Timer;
146
147 private var isCounted:Boolean = false;
148
149 private var isMovieClipStopping:Boolean = false;
150
151 public var isPlayerClosing:Boolean = false;
152
153 public var _isEconomyMode:Boolean = false;
154
155 private var renewDownloadManager:RenewDownloadManager;
156 private var nnddDownloaderForStreaming:NNDDDownloader;
157 private var playerHistoryManager:PlayerHistoryManager;
158 private var renewDownloadManagerForOldComment:RenewDownloadManager;
159
160 public static const NICO_WARI_HEIGHT:int = 56;
161 public static const NICO_WARI_WIDTH:int = 544;
162
163 public static const NICO_SWF_HEIGHT:int = 384;
164 public static const NICO_SWF_WIDTH:int = 512;
165
166 public static const NICO_VIDEO_WINDOW_HEIGHT:int = 384;
167 public static const NICO_VIDEO_WINDOW_WIDTH:int = 544;
168 public static const NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE:int = 683;
169
170 public static const WIDE_MODE_ASPECT_RATIO:Number = 1.7;
171
172 //������������������������������������������������������null���
173 private var playingJihou:String = null;
174
175 private var movieEndTimer:Timer = null;
176
177 private var isSwfConverting:Boolean = false;
178
179 private var streamingProgressCount:int = 0;
180
181 private var streamingProgressTimer:Timer = null;
182
183 private var _videoID:String = null;
184
185 private var _myListAdder:NNDDMyListAdder = null;
186
187 private var nnddDownloaderForWatch:NNDDDownloader = null;
188
189 private var lastFrame:int = 0;
190
191 private var lastNicowariFrame:int = 0;
192
193 private var myListLoader:MyListLoader = null;
194
195 private var nicowariCloseTimer:Timer = null;
196
197 private var configManager:ConfigManager;
198
199 private var configIO:ConfigIO;
200
201 private var streamingRetryCount:int = 0;
202
203 private var nicoVideoPageGetRetryTimer:Timer;
204
205 private var nicoVideoAccessRetryTimer:Timer;
206
207 private var nicoRelationInfoLoader:ApiGetRelation = null;
208
209 [Embed(source="player/NNDDicons_play_20x20.png")]
210 private var icon_Play:Class;
211
212 [Embed(source="player/NNDDicons_pause_20x20.png")]
213 private var icon_Pause:Class;
214
215 [Embed(source="player/NNDDicons_stop_20x20.png")]
216 private var icon_Stop:Class;
217
218
219 /**
220 * ������������������������Player���������������PlayerController���������<br>
221 * FLV���MP4������������������������Player���SWF������������������������Player���������������<br>
222 * ���������������������������������������<br>
223 *
224 * @param mailAddress
225 * @param password
226 * @param playListManager
227 * @param videoPath
228 * @param windowType
229 * @param comments
230 * @param autoPlay
231 *
232 */
233 public function PlayerController(mailAddress:String,
234 password:String,
235 playListManager:PlayListManager,
236 videoPath:String = null,
237 windowType:int = -1,
238 comments:Comments = null,
239 autoPlay:Boolean = false)
240 {
241 this.logManager = LogManager.instance;
242 this.mailAddress = mailAddress;
243 this.password = password;
244 this.libraryManager = LibraryManagerBuilder.instance.libraryManager;
245 this.playListManager = playListManager;
246 this.videoPlayer = new VideoPlayer();
247 this.videoInfoView = new VideoInfoView();
248 this.videoInfoView.type = NativeWindowType.UTILITY;
249 ConfigManager.getInstance().reload();
250 this.videoPlayer.init(this, videoInfoView, logManager);
251 this.videoInfoView.init(this, videoPlayer, logManager);
252 this.videoPlayer.addEventListener(AIREvent.WINDOW_COMPLETE, function():void{
253 // dispatchEvent(new Event(Event.ACTIVATE));
254 videoInfoView.activate();
255 videoPlayer.activate();
256 });
257 this.ngListManager = new NGListManager(this, videoPlayer, videoInfoView, logManager);
258 if(libraryManager != null){
259 if(!this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.systemFileDir)){
260 this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.libraryDir);
261 }
262 }
263 this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
264 this.commentManager = new CommentManager(videoPlayer, videoInfoView, this);
265 if(videoPath != null && windowType != -1 && comments != null){
266 this.init(videoPath, windowType, comments, PathMaker.createThmbInfoPathByVideoPath(videoPath), autoPlay);
267 this.windowReady = true;
268 }
269 this.playerHistoryManager = new PlayerHistoryManager();
270
271 }
272
273 /**
274 * ���������������������������
275 * Comments���NgList���null���������������GC������������������
276 *
277 */
278 public function destructor():void{
279
280 isMovieClipStopping = false;
281
282 if(this.movieEndTimer != null){
283 this.movieEndTimer.stop();
284 this.movieEndTimer = null;
285 }
286
287 if(this.commentTimer != null){
288 this.commentTimer.stop();
289 this.commentTimer.reset()
290 }else{
291 this.commentTimer = new Timer(1000/15);
292 this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
293 }
294
295 if(this.comments != null){
296 this.comments.destructor();
297 }
298 this.comments = null;
299 // this.ngList = null;
300
301 if(videoDisplay != null){
302 try{
303 videoDisplay.stop();
304 }catch(error:VideoError){
305 trace(error.getStackTrace());
306 }
307 removeVideoDisplayEventListeners(videoDisplay);
308 videoDisplay.source = null;
309 videoDisplay = null;
310 this.videoPlayer.canvas_video.removeAllChildren();
311 }
312
313 isMovieClipPlaying = false;
314 if(loader != null && !isSwfConverting){
315 SoundMixer.stopAll();
316 loader.unloadAndStop(true);
317 // removeMovieClipEventHandlers(loader);
318 loader = null;
319 this.videoPlayer.canvas_video.removeAllChildren();
320 isSwfConverting = false;
321 }
322 if(swfLoader != null && !isSwfConverting){
323 SoundMixer.stopAll();
324 swfLoader.unloadAndStop(true);
325 swfLoader = null;
326 this.videoPlayer.canvas_video.removeAllChildren();
327 isSwfConverting = false;
328 }
329
330 if(this.nicowariSwfLoader != null){
331 videoPlayer.canvas_nicowari.removeAllChildren();
332 if(nicowariMC != null){
333 this.pauseByNicowari(true);
334 }
335 }
336
337 if(videoPlayer != null && videoPlayer.canvas_nicowari != null){
338 videoPlayer.canvas_nicowari.removeAllChildren();
339 videoPlayer.canvas_nicowari.setConstraintValue("backgroundColor", new int("0x969696"));
340
341 }
342
343 if(streamingProgressTimer != null){
344 streamingProgressTimer.stop();
345 streamingProgressTimer = null;
346 }
347 streamingProgressCount = 0;
348
349 playingJihou = null;
350
351 if(nnddDownloaderForWatch != null){
352 nnddDownloaderForWatch.close(false, false);
353 nnddDownloaderForWatch = null;
354 }
355
356 if(myListLoader != null){
357 myListLoader.close();
358 myListLoader = null;
359 }
360
361 this.lastFrame = 0;
362 this.lastNicowariFrame = 0;
363
364 isCounted = false;
365
366 }
367
368 /**
369 * ������������������������Player���������������������������<br>
370 * autoPlay���true������������������������init()���������������������������������������������������������������<br>
371 * <b>playMovie()���������������������������</b>
372 *
373 * @param videoPath
374 * @param windowType
375 * @param comments
376 * @param thumbInfoPath
377 * @param ngList
378 * @param autoPlay
379 * @param isStreamingPlay
380 * @param downLoadedURL
381 * @param isPlayListingPlay
382 *
383 */
384 private function init(videoPath:String, windowType:int, comments:Comments, thumbInfoPath:String,
385 autoPlay:Boolean = false, isStreamingPlay:Boolean = false,
386 downLoadedURL:String = null, isPlayListingPlay:Boolean = false, videoId:String = ""):void
387 {
388 this.destructor();
389
390 if(videoPlayer != null){
391 videoPlayer.resetInfo();
392 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
393 videoPlayer.restore();
394 }
395 }
396
397 if(videoInfoView != null){
398 videoInfoView.resetInfo();
399 videoInfoView.restore();
400 }
401
402 videoPlayer.setControllerEnable(false);
403
404 this._videoID = null;
405 if(videoId != null && videoId != ""){
406 this._videoID = videoId;
407 }
408
409 this.windowReady = false;
410 this.source = videoPath;
411 this.comments = comments;
412 this.time = (new Date).time;
413 this.isStreamingPlay = isStreamingPlay;
414 this.downLoadedURL = downLoadedURL;
415 this.isPlayListingPlay = isPlayListingPlay;
416 this.windowType = windowType;
417
418 if(!isPlayListingPlay){
419 this.videoInfoView.resetPlayList();
420 }
421
422 this.videoPlayer.videoController.resetAlpha(true);
423
424 if(isStreamingPlay){
425 if(streamingProgressTimer != null){
426 streamingProgressTimer.stop();
427 streamingProgressTimer = null;
428 }
429 streamingProgressCount = 0;
430
431 this.videoPlayer.label_playSourceStatus.text = "Streaming:0% ";
432 streamingProgressTimer = new Timer(200);
433 streamingProgressTimer.addEventListener(TimerEvent.TIMER, streamingProgressHandler);
434 streamingProgressTimer.start();
435
436 if(this.videoPlayer.title == null){
437 this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
438 this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
439 });
440 }else{
441 this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
442 }
443 }else{
444 this.videoPlayer.label_playSourceStatus.text = "[Local]";
445 this.streamingRetryCount = 0;
446 if(this.videoPlayer.title == null){
447 this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
448 this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
449 });
450 }else{
451 this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
452 }
453 var file:File = new File(videoPath);
454 if(!file.exists){
455 Alert.show("������������������������������������\n������������������������������������������������������������������������������", "���������");
456 logManager.addLog("������������������������������������������������������������������������������������������������������������������:" + file.nativePath);
457 Application.application.activate();
458 return;
459 }
460
461 }
462
463 /* ������������������������������������������������������������������������ */
464 if(!isStreamingPlay && this.videoInfoView.isRenewCommentEachPlay){
465 //���������������������������������������������������������������
466
467 logManager.addLog(Message.START_PLAY_EACH_COMMENT_DOWNLOAD);
468 videoPlayer.label_downloadStatus.text = Message.START_PLAY_EACH_COMMENT_DOWNLOAD;
469
470 if(this._videoID == null){
471 this._videoID = PathMaker.getVideoID(videoPath);
472 }
473
474 if(this._videoID != null && PathMaker.getVideoID(videoPath) == LibraryUtil.getVideoKey(videoPath)){
475
476 if((mailAddress != null && password != null) && (mailAddress != "" && password != null && password != "")){
477
478 /* ������������������������������������������������ */
479
480 var videoUrl:String = "http://www.nicovideo.jp/watch/"+PathMaker.getVideoID(this._videoID);
481
482 renewCommentAtStart(PathMaker.getVideoID(this._videoID), videoPath, initStart);
483
484 }else{
485
486 /* ��������������������������������������������������� */
487 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������������������������������)");
488 initStart();
489
490 }
491
492 }else{
493
494 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)");
495 videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)";
496
497 var timer:Timer = new Timer(1000, 1);
498 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:TimerEvent):void{
499 initStart();
500
501 timer.stop();
502 timer = null;
503
504 });
505 timer.start();
506
507 }
508 }else{
509 //���������������������������������������������������(������������������������������������������������)
510
511 this._videoID = videoId;
512
513 if(this._videoID == null || this._videoID == ""){
514 this._videoID = PathMaker.getVideoID(videoPlayer.title);
515 }
516
517 logManager.addLog("���������������������������������������:" + this._videoID);
518
519 if(this._videoID != null && this._videoID != ""){
520
521 if(this.mailAddress != null && this.mailAddress != "" &&
522 this.password != null && this.password != ""){
523
524 myListGroupUpdate(PathMaker.getVideoID(this._videoID));
525
526 }else{
527 //���������������������������������
528 logManager.addLog("���������������������������������������(���������������������������)");
529 }
530
531 }else{
532 //
533 logManager.addLog("���������������������������������������(������ID���������������������)");
534 }
535
536 initStart();
537 }
538
539 /**
540 * ������������������������������������������������������������
541 */
542 function initStart():void{
543
544 try{
545 if(_isEconomyMode){
546 videoPlayer.label_economyStatus.text = "������������������������";
547 }else{
548 videoPlayer.label_economyStatus.text = "";
549 }
550
551 videoPlayer.canvas_video.toolTip = null;
552
553 if(isPlayerClosing){
554 stop();
555 destructor();
556 return;
557 }
558
559 commentTimerVpos = 0;
560
561 var text:Text = new Text();
562 text.text = "������������������������������������������������������������������������������������������������\n������������������������������������������������������������������";
563 text.setConstraintValue("left", 10);
564 text.setConstraintValue("top", 10);
565 videoPlayer.canvas_nicowari.addChild(text);
566
567 videoPlayer.label_downloadStatus.text = "";
568 videoInfoView.image_thumbImg.source = "";
569 videoPlayer.videoInfoView.text_info.htmlText ="(������������������������)<br />(������������������������)<br />������: ������������: ���������������:"
570
571 if(isStreamingPlay){
572 //������������������DL������������������������������
573 setInfo(downLoadedURL, thumbInfoPath, thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[IchibaInfo].html", true);
574
575 videoInfoView.image_thumbImg.source = thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[ThumbImg].jpeg";
576 }else{
577 setInfo(videoPath, thumbInfoPath, PathMaker.createNicoIchibaInfoPathByVideoPath(videoPath), false);
578
579 var nnddVideo:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
580
581 if(nnddVideo != null){
582 videoInfoView.image_thumbImg.source = nnddVideo.thumbUrl;
583 }
584 }
585
586 changeFps(videoInfoView.fps);
587
588 videoPlayer.videoController.label_time.text = "0:00/0:00";
589 videoPlayer.videoController_under.label_time.text = "0:00/0:00";
590
591 if(videoInfoView.isShowAlwaysNicowariArea){
592 //������������������������������������
593 videoPlayer.showNicowariArea();
594
595 }else{
596 //���������������������������������
597 videoPlayer.hideNicowariArea();
598
599 }
600
601
602 var video:NNDDVideo = libraryManager.isExist(LibraryUtil.getVideoKey(_videoID));
603 if(video != null){
604 HistoryManager.instance.addVideoByNNDDVideo(video);
605 }else{
606 video = new NNDDVideo("http://www.nicovideo.jp/watch/" + PathMaker.getVideoID(_videoID), videoPlayer.title, false, null, null, null, PathMaker.getThumbImgUrl(PathMaker.getVideoID(_videoID)));
607
608 HistoryManager.instance.addVideoByNNDDVideo(video, null, false);
609 }
610
611 if(windowType == PlayerController.WINDOW_TYPE_FLV){
612 //WINDOW_TYPE_FLV���������������������������������
613
614 isMovieClipPlaying = false;
615
616 videoDisplay = new SmoothVideoDisplay();
617
618 videoPlayer.label_downloadStatus.text = "";
619
620 if(isStreamingPlay){
621 videoPlayer.label_downloadStatus.text = "���������������...";
622 videoDisplay.addEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
623 }
624
625 videoPlayer.canvas_video.removeAllChildren();
626 videoPlayer.canvas_video.addChild(videoDisplay);
627
628 videoDisplay.smoothing = true;
629
630 videoDisplay.setConstraintValue("bottom", 0);
631 videoDisplay.setConstraintValue("left", 0);
632 videoDisplay.setConstraintValue("right", 0);
633 videoDisplay.setConstraintValue("top", 0);
634 videoDisplay.bufferTime = 3;
635
636 videoDisplay.autoPlay = autoPlay;
637 videoDisplay.source = videoPath;
638 videoDisplay.autoRewind = false;
639 videoDisplay.volume = videoPlayer.videoController.slider_volume.value;
640 videoPlayer.videoController_under.slider_volume.value = videoPlayer.videoController.slider_volume.value;
641
642 addVideoDisplayEventListeners(videoDisplay);
643
644 commentManager.initComment(comments, videoPlayer.canvas_video);
645 commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
646
647 windowReady = true;
648
649 if(autoPlay && !isStreamingPlay){
650 time = (new Date).time;
651 commentTimer.start();
652 }
653
654 videoDisplay.addEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
655 videoDisplay.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
656 event.currentTarget.setFocus();
657 });
658
659 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
660 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
661 setVolume(videoPlayer.videoController.slider_volume.value);
662
663 if(videoInfoView.visible){
664 videoInfoView.restore();
665 }
666 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
667 videoPlayer.restore();
668 }
669
670 if(videoInfoView.visible){
671 videoInfoView.activate();
672 }
673 videoPlayer.activate();
674
675 windowResized(false);
676
677 videoPlayer.setControllerEnable(true);
678
679 }else if(windowType == PlayerController.WINDOW_TYPE_SWF){
680 //WINODW_TYPE_SWF���������������������������������
681
682 isMovieClipPlaying = true;
683 isSwfConverting = true;
684
685 videoPlayer.label_downloadStatus.text = "SWF������������������������...";
686
687 loader = new Loader();
688 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, convertCompleteHandler);
689 var fLoader:ForcibleLoader = new ForcibleLoader(loader);
690 swfLoader = new SWFLoader();
691 swfLoader.addChild(loader);
692
693 videoPlayer.canvas_video.removeAllChildren();
694 videoPlayer.canvas_video.addChild(swfLoader);
695
696 swfLoader.setConstraintValue("bottom", 0);
697 swfLoader.setConstraintValue("left", 0);
698 swfLoader.setConstraintValue("right", 0);
699 swfLoader.setConstraintValue("top", 0);
700
701 swfLoader.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
702 event.currentTarget.setFocus();
703 });
704
705 commentManager.initComment(comments, videoPlayer.canvas_video);
706 commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
707
708 windowReady = true;
709
710 if(autoPlay){
711 fLoader.load(new URLRequest(videoPath));
712 }
713
714 var timer:Timer = new Timer(500, 4);
715 timer.addEventListener(TimerEvent.TIMER, function():void{
716 windowResized(false);
717 });
718 timer.start();
719
720 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
721 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
722
723 if(videoInfoView.visible){
724 videoInfoView.restore();
725 }
726
727 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
728 videoPlayer.restore();
729 }
730
731 if(videoInfoView.visible){
732 videoInfoView.activate();
733 }
734 videoPlayer.activate();
735
736 videoPlayer.setControllerEnable(true);
737
738 }
739
740 if(videoInfoView != null && videoInfoView.tabNavigator_comment != null){
741 if(videoInfoView.tabNavigator_comment.selectedIndex == 1){
742 // ���������������������������������������������������������������������������������
743 videoInfoView.reloadOldComment();
744 }else{
745 // ������������������������������������������������������
746 videoInfoView.resetOldCommentDate();
747 }
748 }
749
750 return;
751 }catch(error:Error){
752 trace(error.getStackTrace());
753 logManager.addLog(error + ":" + error.getStackTrace());
754 // destructor();
755 }
756
757 }
758
759 }
760
761 /**
762 *
763 * @param videoId
764 * @param videoPath
765 * @param initStart
766 *
767 */
768 private function renewCommentAtStart(videoId:String, videoPath:String, initStart:Function):void{
769
770 var videoName:String = PathMaker.getVideoName(videoPath);
771
772 if(renewDownloadManager != null){
773 renewDownloadManager.close();
774 renewDownloadManager = null;
775 }
776
777 renewDownloadManager = new RenewDownloadManager(null, logManager);
778 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
779 var video:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
780 if(video == null){
781 try{
782 video = new LocalVideoInfoLoader().loadInfo(videoPath);
783 video.creationDate = new File(videoPath).creationDate;
784 video.modificationDate = new File(videoPath).modificationDate;
785 }catch(error:Error){
786 video = new NNDDVideo(videoPath);
787 }
788 libraryManager.add(video, false);
789 video = libraryManager.isExist(video.key);
790 }
791 var thumbUrl:String = (event.currentTarget as RenewDownloadManager).localThumbUri;
792 var isLocal:Boolean = false;
793 try{
794 //������������������������������������������������������������������������������������
795 var file:File = new File(video.thumbUrl);
796 if(file.exists){
797 isLocal = true;
798 }
799 }catch(e:Error){
800 trace(e);
801 }
802
803 //thumbUrl���URL���������������������������������������������������
804 if(!isLocal){
805 if(thumbUrl != null){
806 //���������������������thumbUrl���������
807 video.thumbUrl = thumbUrl;
808 }else if (video.thumbUrl == null || video.thumbUrl == ""){
809 //thumbUrl���������������==������������������
810 var videoId:String = PathMaker.getVideoID(_videoID);
811 if(videoId != null){
812 video.thumbUrl = PathMaker.getThumbImgUrl(videoId);
813 }else{
814 video.thumbUrl = "";
815 }
816 }
817 }
818
819 libraryManager.update(video, false);
820
821 var commentPath:String = PathMaker.createNomalCommentPathByVideoPath(video.getDecodeUrl());
822 var ownerCommentPath:String = PathMaker.createOwnerCommentPathByVideoPath(video.getDecodeUrl());
823 comments = new Comments(commentPath, ownerCommentPath, getCommentListProvider(), getOwnerCommentListProvider(),
824 ngListManager, videoInfoView.isShowOnlyPermissionComment, videoInfoView.isHideSekaShinComment,
825 videoInfoView.showCommentCount, videoInfoView.isNgUpEnable);
826
827 renewDownloadManager = null;
828
829 myListGroupUpdate(PathMaker.getVideoID(_videoID));
830
831 initStart();
832 });
833 renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_SUCCESS, getProgressListener);
834 renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_SUCCESS, getProgressListener);
835 renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_SUCCESS, getProgressListener);
836 renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_SUCCESS, getProgressListener);
837 renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_SUCCESS, getProgressListener);
838 renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_SUCCESS, getProgressListener);
839 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_SUCCESS, getProgressListener);
840 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_SUCCESS, getProgressListener);
841 renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_SUCCESS, getProgressListener);
842 renewDownloadManager.addEventListener(NNDDDownloader.WATCH_SUCCESS, getProgressListener);
843 renewDownloadManager.addEventListener(NNDDDownloader.DOWNLOAD_PROCESS_COMPLETE, getProgressListener);
844
845 renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_FAIL, getFailListener);
846 renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_FAIL, getFailListener);
847 renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_FAIL, getFailListener);
848 renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_FAIL, getFailListener);
849 renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_FAIL, getFailListener);
850 renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_FAIL, getFailListener);
851 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_FAIL, getFailListener);
852 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_FAIL, getFailListener);
853 renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_FAIL, getFailListener);
854 renewDownloadManager.addEventListener(NNDDDownloader.WATCH_FAIL, getFailListener);
855
856 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
857 renewDownloadManager = null;
858 videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD;
859 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD);
860
861 var timer:Timer = new Timer(1000, 1);
862 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
863 myListGroupUpdate(PathMaker.getVideoID(_videoID));
864 initStart();
865 });
866 timer.start();
867 });
868 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
869 renewDownloadManager = null;
870 videoPlayer.label_downloadStatus.text = Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL;
871 logManager.addLog(Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL);
872
873 var timer:Timer = new Timer(1000, 1);
874 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function():void{
875 myListGroupUpdate(PathMaker.getVideoID(_videoID));
876 initStart();
877 });
878 timer.start();
879 });
880
881 if(this.videoInfoView.isRenewOtherCommentWithCommentEachPlay){
882 renewDownloadManager.renewForOtherVideo(this.mailAddress,
883 this.password, PathMaker.getVideoID(videoId), videoName,
884 new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
885 videoInfoView.isAppendComment, null, Application.application.getSaveCommentMaxCount());
886 }else{
887 renewDownloadManager.renewForCommentOnly(this.mailAddress,
888 this.password, PathMaker.getVideoID(videoId), videoName,
889 new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
890 videoInfoView.isAppendComment, null, Application.application.getSaveCommentMaxCount());
891 }
892 }
893
894 /**
895 * ���������������������������������
896 * @param date
897 *
898 */
899 public function getOldCommentFromNico(date:Date):void{
900
901 if(renewDownloadManagerForOldComment != null){
902 // ���������������������������
903 renewDownloadManagerForOldComment.close();
904 renewDownloadManagerForOldComment = null;
905 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
906 logManager.addLog("���������������������������������");
907
908 }else{
909 // ������������
910
911 videoInfoView.button_oldComment_reloadFromNico.label = "���������������";
912 logManager.addLog("������������������������������:" + DateUtil.getDateString(date));
913
914 renewDownloadManagerForOldComment = new RenewDownloadManager(null, LogManager.instance);
915 renewDownloadManagerForOldComment.addEventListener(NNDDDownloader.GETWAYBACKKEY_API_ACCESS_FAIL, function(event:Event):void{
916 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
917 logManager.addLog("������������������������������:" + event);
918
919 Application.application.activate();
920 Alert.show("���������������������������������������������\n���������������������������������������������������������������������������������������������\n(���������������������������������������������������������������������������)", Message.M_ERROR);
921 });
922 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
923 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
924 logManager.addLog("���������������������������������������:" + event);
925
926 renewDownloadManagerForOldComment = null;
927 });
928 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
929 logManager.addLog("������������������������������:" + event);
930 //������������������������������
931 reloadLocalComment(date);
932
933 renewDownloadManagerForOldComment.close();
934 renewDownloadManagerForOldComment = null;
935
936 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
937
938 });
939 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
940 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
941 logManager.addLog("������������������������������:" + event);
942
943 renewDownloadManagerForOldComment = null;
944
945 Application.application.activate();
946 Alert.show("���������������������������������������������", Message.M_ERROR);
947 });
948
949 var videoId:String = PathMaker.getVideoID(this._videoID);
950 var videoName:String = null;
951 var videoPath:File = null;
952 if(isStreamingPlay){
953 videoName = "nndd.flv";
954 videoPath = LibraryManagerBuilder.instance.libraryManager.tempDir;
955 }else{
956 videoName = PathMaker.getVideoName(this.source);
957 videoPath = new File(this.source.substring(0, this.source.lastIndexOf("/")+1))
958 }
959
960 // maxCount���������������������������������������������������������������������������������������������
961 var maxCount:Number = Application.application.getSaveCommentMaxCount();
962 if(maxCount < 10000){
963 maxCount = 10000;
964 }
965
966 // ���������������������������������������������������������������������
967 renewDownloadManagerForOldComment.renewForCommentOnly(this.mailAddress,
968 this.password, videoId, videoName, videoPath, true,
969 date, maxCount);
970
971 }
972
973 }
974
975 /**
976 *
977 * @param event
978 *
979 */
980 protected function metadetaRecevedEventHandler(event:Event):void{
981 trace(event.type);
982 if(videoInfoView.isResizePlayerEachPlay){
983 resizePlayerJustVideoSize(videoPlayer.nowRatio);
984 }else{
985 resizePlayerJustVideoSize();
986 }
987 }
988
989 /**
990 *
991 * @param videoId
992 * @return
993 *
994 */
995 public function myListGroupUpdate(videoId:String):void{
996
997 myListLoader = new MyListLoader();
998 myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_SUCCESS, function(event:Event):void{
999 var myLists:Array = myListLoader.getMyLists();
1000
1001 if(myLists.length > 0){
1002 var myListNames:Array = new Array();
1003 var myListIds:Array = new Array();
1004
1005 for each(var array:Array in myLists){
1006 myListNames.push(array[0]);
1007 myListIds.push(array[1]);
1008 }
1009
1010 videoInfoView.setMyLists(myListNames, myListIds);
1011 }
1012 myListLoader.close();
1013 });
1014 myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_FAILURE, function(event:ErrorEvent):void{
1015 myListLoader.close();
1016 logManager.addLog("���������������������������������������:" + event + ":" + event.text);
1017 });
1018 myListLoader.getMyListGroup(videoId);
1019
1020 }
1021
1022
1023 /**
1024 *
1025 * @param event
1026 *
1027 */
1028 private function bufferingHandler(event:VideoEvent):void{
1029 if(videoDisplay != null && !isPlayerClosing){
1030 if(event.state != VideoEvent.BUFFERING){
1031 videoPlayer.label_downloadStatus.text = "";
1032 videoDisplay.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
1033 if(commentTimer != null && !commentTimer.running){
1034 time = (new Date).time;
1035 commentTimer.start();
1036 }
1037 }
1038 }else{
1039 (event.currentTarget as VideoDisplay).stop();
1040 (event.currentTarget as VideoDisplay).removeEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
1041 destructor();
1042 }
1043 }
1044
1045 /**
1046 *
1047 * @param event
1048 *
1049 */
1050 private function convertCompleteHandler(event:Event):void{
1051
1052 isSwfConverting = false;
1053
1054 if(loader != null && !isPlayerClosing){
1055
1056 mc = LoaderInfo(event.currentTarget).loader.content as MovieClip;
1057 swfFrameRate = LoaderInfo(event.currentTarget).loader.contentLoaderInfo.frameRate;
1058 setVolume(videoPlayer.videoController.slider_volume.value);
1059
1060 if(videoInfoView.isResizePlayerEachPlay){
1061 resizePlayerJustVideoSize(videoPlayer.nowRatio);
1062 }else{
1063 resizePlayerJustVideoSize();
1064 }
1065
1066 videoPlayer.label_downloadStatus.text = "";
1067
1068 commentTimer.start();
1069 time = (new Date).time;
1070
1071 }else{
1072
1073 if(mc != null){
1074 mc.stop();
1075 }
1076 destructor();
1077 if(event.currentTarget as LoaderInfo){
1078 LoaderInfo(event.currentTarget).loader.unloadAndStop(true);
1079 }
1080
1081 }
1082
1083 LoaderInfo(event.currentTarget).loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1084
1085 }
1086
1087 /**
1088 * ���������������������������������������������������������������������
1089 *
1090 * @param videoPath
1091 * @param windowType
1092 * @param comments
1093 * @param ngList
1094 * @param playList ���������������������m3u���������
1095 * @param videoNameList ���������������������������������URL���������������������������������������������������������������������������������
1096 * @param playingIndex ������������������������������
1097 * @param autoPlay ������������
1098 * @param isStreamingPlay ���������������������������������������
1099 * @param downLoadedURL ���������������������URL
1100 * @return
1101 *
1102 */
1103 private function initWithPlayList(videoPath:String, windowType:int, comments:Comments, playList:Array, videoNameList:Array, playListName:String, playingIndex:int,
1104 autoPlay:Boolean = false, isStreamingPlay:Boolean = false, downLoadedURL:String = null, videoTitle:String = null):void{
1105
1106 // this.streamingRetryCount = 0;
1107
1108 this.playingIndex = playingIndex;
1109 this.isPlayListingPlay = true;
1110 var videoNameArray:Array = videoNameList;
1111 if(videoNameArray == null){
1112 videoNameArray = new Array();
1113 for(var i:int; i<playList.length; i++){
1114 var url:String = playList[i];
1115 videoNameArray.push(url.substring(url.lastIndexOf("/") + 1));
1116 }
1117 }
1118
1119 if(downLoadedURL == null){
1120 downLoadedURL = videoPath;
1121 }
1122
1123 this.videoInfoView.resetPlayList();
1124 this.videoInfoView.setPlayList(playList, videoNameArray, playListName);
1125
1126 trace("\t"+playList);
1127
1128 this.init(videoPath, windowType, comments, PathMaker.createThmbInfoPathByVideoPath(downLoadedURL), autoPlay, isStreamingPlay, videoTitle, true, LibraryUtil.getVideoKey(videoTitle));
1129 }
1130
1131 /**
1132 * VideoPlayer������������������������������������������������������������������������������
1133 *
1134 * @param url
1135 * @param index
1136 * @return
1137 *
1138 */
1139 public function initForVideoPlayer(url:String, index:int):void{
1140 playMovie(url, this.videoInfoView.playList, index, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(index)));
1141 }
1142
1143 /**
1144 * videoDisplay���������������������������������������������������������������������������������������������
1145 * ���������������������������������������������������������������
1146 */
1147 public function resizePlayerJustVideoSize(windowSizeRatio:Number = -1):void{
1148
1149 try{
1150 var ratio:Number = 1;
1151 if(windowSizeRatio != -1){
1152 ratio = windowSizeRatio;
1153 }
1154
1155 //������������������������������
1156 var videoWindowHeight:int = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1157 var videoWindowWidth:int = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1158
1159 //���������������������������������
1160 var nicowariWindowHeight:int = PlayerController.NICO_WARI_HEIGHT * ratio;
1161 var nicowariWindowWidth:int = PlayerController.NICO_WARI_WIDTH * ratio;
1162
1163 //InfoView���������������������������������������
1164 if(isPlayListingPlay){
1165 if(this.videoInfoView != null){
1166 videoInfoView.showPlayingTitle(playingIndex);
1167 }
1168 }
1169
1170 //���������������������������������������
1171 if(this.videoPlayer.stage != null && this.videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
1172 //������������������������������������������ ������������������������������������������������������������
1173 if(this.videoInfoView.isResizePlayerEachPlay || windowSizeRatio != -1){
1174
1175 if(this.windowType == PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
1176 //FLV������������
1177
1178 if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_NICO && this.videoDisplay.videoHeight > 0){
1179
1180 //��������������������������������������������������������������� && ��������������������������������������������������� (���������������������������������������������������������������������������������)
1181 var isWideVideo:Boolean = false;
1182 if(WIDE_MODE_ASPECT_RATIO < Number(this.videoDisplay.videoWidth)/Number(this.videoDisplay.videoHeight)){
1183 // ���������������16:9���
1184 isWideVideo = true;
1185 trace("enable 16:9 mode");
1186 }
1187
1188 videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1189 if(this.videoInfoView.isEnableWideMode && isWideVideo){
1190 // logManager.addLog("���������(16:9)���������");
1191 videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE * ratio;
1192 //������������������������������������������
1193 this.videoDisplay.setConstraintValue("left", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1194 this.videoDisplay.setConstraintValue("right", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1195
1196 }else{
1197 // logManager.addLog("������������(4:3)���������");
1198 videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1199 //������������������������������������������
1200 this.videoDisplay.setConstraintValue("left", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1201 this.videoDisplay.setConstraintValue("right", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1202
1203 }
1204
1205 if(videoDisplay.hasEventListener(MetadataEvent.METADATA_RECEIVED)){
1206 //init������������������������������������������������������������������������������������������������������������������
1207 videoDisplay.removeEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
1208 // resizePlayerJustVideoSize(windowSizeRatio);
1209 }
1210
1211 }else if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_VIDEO && this.videoDisplay.videoHeight > 0){
1212
1213 //���������������������������������������������������������������������(videoHeight���0���������������������������������������������������������������������)
1214
1215 videoWindowHeight = this.videoDisplay.videoHeight * ratio;
1216 videoWindowWidth = this.videoDisplay.videoWidth * ratio;
1217
1218 this.videoDisplay.setConstraintValue("bottom", 0);
1219 this.videoDisplay.setConstraintValue("left", 0);
1220 this.videoDisplay.setConstraintValue("right", 0);
1221 this.videoDisplay.setConstraintValue("top", 0);
1222
1223 if(videoDisplay.hasEventListener(MetadataEvent.METADATA_RECEIVED)){
1224 //init������������������������������������������������������������������������������������������������������������������
1225 videoDisplay.removeEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
1226 // resizePlayerJustVideoSize(windowSizeRatio);
1227 }
1228 }else{
1229 //������������������������������������������������
1230 return;
1231 }
1232
1233 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1234 //SWF������������
1235
1236 //SWF���������������������������������������
1237 videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1238 videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1239
1240 }
1241
1242 //TODO ���������������VideoDisplay���������������������������������������������������������������
1243
1244 var rate:Number = PlayerController.NICO_WARI_WIDTH / PlayerController.NICO_WARI_HEIGHT;
1245 if(videoPlayer.canvas_nicowari.height < 1 ){
1246 //������������������������������������������������������������������������������������
1247 videoWindowHeight += int(videoWindowWidth / rate);
1248 }
1249
1250 this.videoPlayer.nativeWindow.height += int(videoWindowHeight - this.videoPlayer.canvas_video_back.height);
1251 this.videoPlayer.nativeWindow.width += int(videoWindowWidth - this.videoPlayer.canvas_video_back.width);
1252
1253 (this.videoPlayer as Window).validateDisplayList();
1254 (this.videoPlayer as Window).validateNow();
1255
1256 //������������������������������������������������������������������������������������������������������������������
1257 // var diffH:int = this.videoPlayer.nativeWindow.height - this.videoPlayer.stage.stageHeight;
1258 // var diffW:int = this.videoPlayer.nativeWindow.width - this.videoPlayer.stage.stageWidth;
1259
1260 }
1261
1262 }
1263
1264 }catch(error:Error){ //������������������������������������������������������������������������������������������
1265 trace(error.getStackTrace());
1266 logManager.addLog("������������������������������������������:" + error + ", " + error.getStackTrace());
1267 stop();
1268 destructor();
1269 }
1270 }
1271
1272
1273 /**
1274 * ������������������������������������������������������������������
1275 * ���������������������������������������������������������������������������������������������
1276 * @return
1277 *
1278 */
1279 public function play():void
1280 {
1281 try{
1282 videoPlayer.canvas_video_back.setFocus();
1283
1284 var newComments:Comments = null;
1285 videoPlayer.canvas_video.toolTip = null;
1286 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
1287 if(videoDisplay != null && videoDisplay.playing){
1288 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1289 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1290 this.commentTimer.stop();
1291 this.commentTimer.reset();
1292 videoDisplay.pause();
1293 pausing = true;
1294 }else{
1295 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1296 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1297 if(pausing){
1298 this.videoPlayer.videoController.slider_timeline.enabled = true;
1299 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1300 this.videoDisplay.play();
1301 this.time = (new Date).time;
1302 this.commentTimer.start();
1303 }else{
1304 this.videoPlayer.videoController.slider_timeline.enabled = true;
1305 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1306 if(!isStreamingPlay){
1307 newComments = new Comments(PathMaker.createNomalCommentPathByVideoPath(source),
1308 PathMaker.createOwnerCommentPathByVideoPath(source), this.videoPlayer.getCommentListProvider(),
1309 this.videoPlayer.videoInfoView.ownerCommentProvider, this.ngListManager,
1310 this.videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
1311 this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable);
1312 init(source, PlayerController.WINDOW_TYPE_FLV, newComments, PathMaker.createThmbInfoPathByVideoPath(source), true, isStreamingPlay, null, this.isPlayListingPlay, this._videoID);
1313 }else{
1314 this.playMovie(source, null, -1, this.downLoadedURL);
1315 }
1316 }
1317 pausing = false;
1318 }
1319 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1320 if(isMovieClipPlaying){
1321 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1322 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1323 this.commentTimer.stop();
1324 this.commentTimer.reset();
1325 mc.stop();
1326 isMovieClipPlaying = false;
1327 pausing = true;
1328 }else{
1329 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1330 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1331 if(pausing){
1332 this.videoPlayer.videoController.slider_timeline.enabled = true;
1333 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1334 mc.play();
1335 isMovieClipPlaying = true;
1336 this.time = (new Date).time;
1337 this.commentTimer.start();
1338 }else{
1339 this.videoPlayer.canvas_video.removeAllChildren();
1340 this.videoPlayer.videoController.slider_timeline.enabled = true;
1341 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1342 if(!isStreamingPlay){
1343 newComments = new Comments(PathMaker.createNomalCommentPathByVideoPath(source),
1344 PathMaker.createOwnerCommentPathByVideoPath(source), this.videoPlayer.getCommentListProvider(),
1345 this.videoPlayer.videoInfoView.ownerCommentProvider, this.ngListManager,
1346 this.videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
1347 this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable);
1348 init(source, PlayerController.WINDOW_TYPE_SWF, newComments, PathMaker.createThmbInfoPathByVideoPath(source), true, isStreamingPlay, null, this.isPlayListingPlay, this._videoID);
1349 }else{
1350 this.playMovie(source, null, -1, this.downLoadedURL);
1351 }
1352 }
1353 pausing = false;
1354 }
1355 }else{
1356 if(this.videoPlayer != null && this.videoPlayer.title != null){
1357 this.playMovie(this.videoPlayer.title);
1358 }
1359 }
1360
1361 }catch(error:Error){
1362 trace(error.getStackTrace());
1363 logManager.addLog("���������������������������:" + error + ":" + error.getStackTrace());
1364 }
1365
1366 }
1367
1368
1369 /**
1370 * ������������������������������������������������
1371 * @return
1372 *
1373 */
1374 public function stop():void
1375 {
1376 try{
1377
1378 pausing = false;
1379
1380 if(videoInfoView.isShowAlwaysNicowariArea){
1381 videoPlayer.showNicowariArea();
1382 }else{
1383 videoPlayer.hideNicowariArea();
1384 }
1385
1386 if(videoPlayer != null && videoPlayer.label_downloadStatus != null){
1387 videoPlayer.canvas_video_back.setFocus();
1388 videoPlayer.label_downloadStatus.text = "";
1389 videoPlayer.canvas_video.toolTip = "���������������������������������������������������������������������������������";
1390 }
1391
1392 if(this.movieEndTimer != null){
1393 this.movieEndTimer.stop();
1394 this.movieEndTimer = null;
1395 }
1396
1397 if(renewDownloadManager != null){
1398 try{
1399 renewDownloadManager.close();
1400 renewDownloadManager = null;
1401 logManager.addLog("���������������������������������������������������������");
1402 }catch(error:Error){
1403 trace(error);
1404 }
1405 }else{
1406
1407 this.videoPlayer.videoController.button_play.enabled = true;
1408 this.videoPlayer.videoController_under.button_play.enabled = true;
1409 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1410 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1411
1412 this.videoPlayer.videoController_under.slider_timeline.value = 0;
1413 this.videoPlayer.videoController.slider_timeline.value = 0;
1414
1415 this.commentTimerVpos = 0;
1416 this.commentTimer.stop();
1417 this.commentTimer.reset();
1418 this.commentManager.removeAll();
1419
1420 //���������������������������������������������
1421 this.destructor();
1422
1423 //������������������������������������������������������
1424 videoPlayer.canvas_nicowari.removeAllChildren();
1425 if(nicowariMC != null){
1426 this.pauseByNicowari(true);
1427 }
1428
1429 }
1430
1431 }catch(error:Error){
1432 trace(error.getStackTrace());
1433 logManager.addLog("������������������������������������������:" + error + ":" + error.getStackTrace());
1434 }
1435
1436 }
1437
1438
1439 /**
1440 * VideoDisplay���������������������������������������������������������
1441 * @param videoDisplay
1442 *
1443 */
1444 private function addVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1445 videoDisplay.addEventListener(VideoEvent.PLAYHEAD_UPDATE, videoProgressHandler);
1446 videoDisplay.addEventListener(VideoEvent.COMPLETE, videoCompleteHandler);
1447 }
1448
1449 /**
1450 * VideoDisplay���������������������������������������������������������
1451 * @param videoDisplay
1452 *
1453 */
1454 private function removeVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1455 if(videoDisplay.hasEventListener(VideoEvent.PLAYHEAD_UPDATE)){
1456 videoDisplay.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, videoProgressHandler);
1457 }
1458 if(videoDisplay.hasEventListener(VideoEvent.STATE_CHANGE)){
1459 videoDisplay.removeEventListener(VideoEvent.STATE_CHANGE, resizePlayerJustVideoSize);
1460 }
1461 if(videoDisplay.hasEventListener(VideoEvent.COMPLETE)){
1462 videoDisplay.removeEventListener(VideoEvent.COMPLETE, videoCompleteHandler);
1463 }
1464 }
1465
1466 /**
1467 *
1468 * @param loader
1469 *
1470 */
1471 // private function removeMovieClipEventHandlers(loader:Loader):void{
1472 // if(loader.hasEventListener(Event.COMPLETE)){
1473 // loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1474 // }
1475 // }
1476
1477 /**
1478 * ������������������������������������������������������������������������������
1479 * @return
1480 *
1481 */
1482 public function getStreamingProgress():int{
1483 var value:int = 0;
1484 if(isStreamingPlay){
1485 if(videoDisplay != null){
1486 value = (videoDisplay.bytesLoaded*100 / videoDisplay.bytesTotal);
1487 }else if(loader != null && loader.contentLoaderInfo != null){
1488 value = (loader.contentLoaderInfo.bytesLoaded*100 / loader.contentLoaderInfo.bytesTotal);
1489 }else{
1490 value = 100;
1491 }
1492 }else{
1493 value = 100;
1494 }
1495 return value;
1496 }
1497
1498 /**
1499 *
1500 * @return
1501 *
1502 */
1503 public function get bytesLoaded():Number{
1504
1505 var value:Number = 0.0;
1506
1507 if(videoDisplay != null){
1508 value = videoDisplay.bytesLoaded;
1509 }else if(loader != null && loader.contentLoaderInfo != null){
1510 value = loader.contentLoaderInfo.bytesLoaded;
1511 }
1512
1513 return value;
1514 }
1515
1516 /**
1517 *
1518 * @param event
1519 *
1520 */
1521 private function streamingProgressHandler(event:TimerEvent):void{
1522 if(isStreamingPlay){
1523 var value:int = getStreamingProgress();
1524 if(value >= 100){
1525 this.videoPlayer.label_playSourceStatus.text = "Streaming:100%";
1526 streamingProgressCount = 0;
1527 videoPlayer.videoController.resetStatusAlpha();
1528 if(streamingProgressTimer != null){
1529 streamingProgressTimer.stop();
1530 }
1531
1532 // 100%���������������������������������������������������������������������������������������
1533 if(this.bytesLoaded <= 64){
1534 if(this.streamingRetryCount <= 3 ){
1535 // ���������������
1536 this.streamingRetryCount++;
1537 stop();
1538 logManager.addLog("���������������������������������������(���������������������������:������������������������������:" + this.bytesLoaded + ")");
1539 videoPlayer.label_downloadStatus.text = "������������������������������������������������������������������(" + this.streamingRetryCount +"������ )";
1540
1541 if(nicoVideoAccessRetryTimer != null){
1542 nicoVideoAccessRetryTimer.stop();
1543 nicoVideoAccessRetryTimer = null;
1544 }
1545 nicoVideoAccessRetryTimer = new Timer(1000*this.streamingRetryCount, 1);
1546 nicoVideoAccessRetryTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
1547 (event.currentTarget as Timer).stop();
1548 play();
1549 });
1550 nicoVideoAccessRetryTimer.start();
1551
1552 }else{
1553 stop();
1554 logManager.addLog("���������������������������:������������������������������:" + this.bytesLoaded);
1555 videoPlayer.label_downloadStatus.text = "���������������������������������������������(���������������������������������������������������)";
1556 }
1557 }else{
1558 // ������������������
1559 this.streamingRetryCount = 0;
1560 }
1561
1562 }else{
1563
1564 var str:String = " ";
1565 if(streamingProgressCount <= 10){
1566 str = ". ";
1567 }else if(streamingProgressCount > 10 && streamingProgressCount <= 20){
1568 str = ".. ";
1569 }else if(streamingProgressCount > 20 && streamingProgressCount <= 30){
1570 str = "...";
1571 }
1572
1573 this.videoPlayer.label_playSourceStatus.text = "Streaming:" + value + "%" + str;
1574 if(streamingProgressCount >= 30){
1575 streamingProgressCount = 0;
1576 }else{
1577 streamingProgressCount = streamingProgressCount + 2;
1578 }
1579 }
1580 }else{
1581 if(streamingProgressTimer != null){
1582 streamingProgressTimer.stop();
1583 }
1584 }
1585 }
1586
1587 /**
1588 * ������������������������������������������������������
1589 * @param evt
1590 *
1591 */
1592 private function videoProgressHandler(evt:VideoEvent = null):void{
1593 try{
1594 var allSec:String="00",allMin:String="0";
1595 var nowSec:String="00",nowMin:String="0";
1596
1597 this.commentTimerVpos = evt.playheadTime*1000;
1598
1599 nowSec = String(int(this.videoDisplay.playheadTime%60));
1600 nowMin = String(int(this.videoDisplay.playheadTime/60));
1601
1602 allSec = String(int(this.videoDisplay.totalTime%60));
1603 allMin = String(int(this.videoDisplay.totalTime/60));
1604
1605 if(nowSec.length == 1){
1606 nowSec = "0" + nowSec;
1607 }
1608 if(allSec.length == 1){
1609 allSec = "0" + allSec;
1610 }
1611
1612 videoPlayer.videoController_under.slider_timeline.enabled = true;
1613 videoPlayer.videoController_under.slider_timeline.minimum = 0;
1614 videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.totalTime;
1615 if(!this.sliderChanging){
1616
1617 this.videoPlayer.videoController.slider_timeline.maximum = videoDisplay.totalTime;
1618 this.videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.totalTime;
1619 videoPlayer.videoController_under.slider_timeline.value = videoDisplay.playheadTime;
1620
1621 }
1622 videoPlayer.videoController_under.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1623 videoPlayer.videoController_under.slider_timeline.enabled = true;
1624
1625 videoPlayer.videoController.slider_timeline.enabled = true;
1626 videoPlayer.videoController.slider_timeline.minimum = 0;
1627 videoPlayer.videoController.slider_timeline.maximum = videoDisplay.totalTime;
1628 if(!this.sliderChanging){
1629 videoPlayer.videoController.slider_timeline.value = videoDisplay.playheadTime;
1630 }
1631 videoPlayer.videoController.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1632 videoPlayer.videoController.slider_timeline.enabled = true;
1633 }catch(error:Error){
1634 VideoDisplay(evt.currentTarget).stop();
1635 trace(error.getStackTrace());
1636 }
1637 }
1638
1639 /**
1640 * ������������������������������������������������������������������������
1641 * @param evt
1642 *
1643 */
1644 private function videoCompleteHandler(evt:VideoEvent = null):void{
1645
1646 if(movieEndTimer != null){
1647 movieEndTimer.stop();
1648 movieEndTimer = null;
1649 }
1650 //���������������������������������������������������������
1651 movieEndTimer = new Timer(2000, 1);
1652 movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, videoPlayCompleteWaitHandler);
1653 movieEndTimer.start();
1654
1655 }
1656
1657 /**
1658 *
1659 *
1660 */
1661 private function videoPlayCompleteWaitHandler(event:TimerEvent):void{
1662 if(!isCounted){
1663 //���������������������
1664 var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
1665 if(videoId != null){
1666 addVideoPlayCount(videoId, true);
1667 }
1668 isCounted = true;
1669 }
1670
1671 logManager.addLog("***���������������***");
1672
1673 if(videoPlayer.isRepeat){
1674 if(isPlayListingPlay){
1675 if(isStreamingPlay){
1676 logManager.addLog("***���������������������(���������������������)***");
1677 this.seek(0);
1678 if(this.videoDisplay != null){
1679 this.videoDisplay.play();
1680 }
1681 }else{
1682 logManager.addLog("***���������������������(������������)***");
1683 this.stop();
1684 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList, playingIndex, this.videoPlayer.title);
1685
1686 }
1687 }else if(isStreamingPlay){
1688 logManager.addLog("***���������������������(���������������������)***");
1689 this.seek(0);
1690 if(this.videoDisplay != null){
1691 this.videoDisplay.play();
1692 }
1693 }else{
1694 logManager.addLog("***���������������������(������������)***");
1695 this.stop();
1696 this.play();
1697 }
1698 }else{
1699 this.stop();
1700 if(isPlayListingPlay){
1701 logManager.addLog("***���������������(������������)***");
1702 var windowType:int = PlayerController.WINDOW_TYPE_FLV;
1703 if(playingIndex >= this.videoInfoView.getPlayList().length-1){
1704 playingIndex = 0;
1705 if(this.videoPlayer.videoInfoView.isRepeatAll()){
1706 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1707 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1708 }
1709 }else{
1710 playingIndex++;
1711 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1712 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1713 }
1714 }
1715 }
1716 }
1717
1718
1719 /**
1720 * SWF������������������������������������������������������������������
1721 *
1722 */
1723 private function movieClipCompleteHandler():void{
1724
1725 this.lastFrame = 0;
1726 this.lastNicowariFrame = 0;
1727
1728 if(movieEndTimer != null){
1729 movieEndTimer.stop();
1730 movieEndTimer = null;
1731 }
1732 //���������������������������������������������������������
1733 movieEndTimer = new Timer(2000, 1);
1734 movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, movieClipPlayCompleteWaitHandler);
1735 movieEndTimer.start();
1736
1737
1738 }
1739
1740 /**
1741 *
1742 *
1743 */
1744 private function movieClipPlayCompleteWaitHandler(event:TimerEvent):void{
1745 if(!isCounted){
1746 //���������������������
1747 var videoId:String = LibraryUtil.getVideoKey(this.source);
1748 if(videoId == null){
1749 //���������������������������������������������������������
1750 videoId = LibraryUtil.getVideoKey(this.videoPlayer.title);
1751 }
1752 if(videoId != null){
1753 addVideoPlayCount(videoId, true);
1754 }
1755 isCounted = true;
1756 }
1757
1758 logManager.addLog("***���������������***");
1759 this.lastFrame = 0;
1760 this.lastNicowariFrame = 0;
1761
1762 if(videoPlayer.isRepeat){
1763 if(isPlayListingPlay){
1764 if(isStreamingPlay){
1765 logManager.addLog("***���������������������(���������������������)***");
1766 this.seek(0);
1767 }else{
1768 logManager.addLog("***���������������������(������������)***");
1769 this.stop();
1770 mc.gotoAndStop(0);
1771 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1772 playingIndex, this.videoPlayer.title);
1773 }
1774 }else if(isStreamingPlay){
1775 logManager.addLog("***���������������������(���������������������)***");
1776 this.seek(0);
1777 }else{
1778 logManager.addLog("***���������������������(������������)***");
1779 this.stop();
1780 mc.gotoAndStop(0);
1781 this.play();
1782 }
1783 }else{
1784 this.stop();
1785 mc.gotoAndStop(0);
1786 if(isPlayListingPlay){
1787 logManager.addLog("***���������������(������������)***");
1788 var windowType:int = PlayerController.WINDOW_TYPE_FLV;
1789 if(playingIndex >= this.videoInfoView.getPlayList().length-1){
1790 playingIndex = 0;
1791 if(this.videoPlayer.videoInfoView.isRepeatAll()){
1792 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1793 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1794 }
1795 }else{
1796 playingIndex++;
1797 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1798 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1799 }
1800 }
1801 }
1802
1803 isMovieClipStopping = false;
1804 }
1805
1806
1807 /**
1808 * ���������������������ID������������������������������������������������������������1���������������
1809 * @param videoId ���������������������������������������������������ID
1810 * @param isSave ���������������������������������������������������
1811 */
1812 private function addVideoPlayCount(videoId:String, isSave:Boolean):void{
1813 var nnddVideo:NNDDVideo = libraryManager.isExist(videoId);
1814 if(nnddVideo != null){
1815 nnddVideo.playCount = nnddVideo.playCount + 1;
1816 libraryManager.update(nnddVideo, isSave);
1817 trace("���������������������:" + nnddVideo.videoName + "," + nnddVideo.playCount);
1818 }else{
1819 //���������������
1820 trace("������������������������������������:" + videoId);
1821 }
1822 }
1823
1824 /**
1825 * ���������������������������������������������
1826 * swf���������������SWF���������������������������������������������������
1827 *
1828 * @param event
1829 *
1830 */
1831 private function commentTimerHandler(event:TimerEvent):void{
1832
1833 if(isPlayerClosing){
1834 if(commentTimer != null){
1835 commentTimer.stop();
1836 commentTimer.reset();
1837 }
1838 return;
1839 }
1840
1841 // ���������������
1842 this.setVolume(this.videoPlayer.videoController.slider_volume.value);
1843
1844 var nowSec:String="00",nowMin:String="0";
1845 nowSec = String(int(commentTimerVpos/1000%60));
1846 nowMin = String(int(commentTimerVpos/1000/60));
1847 if(nowSec.length == 1){
1848 nowSec = "0" + nowSec;
1849 }
1850 var nowTime:String = nowMin + ":" + nowSec;
1851
1852 var allSec:String="00",allMin:String="0"
1853 if(this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
1854 allSec = String(int(mc.totalFrames/swfFrameRate%60));
1855 allMin = String(int(mc.totalFrames/swfFrameRate/60));
1856 }else if(this.windowType==PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
1857 allSec = String(int(videoDisplay.totalTime%60));
1858 allMin = String(int(videoDisplay.totalTime/60));
1859 }
1860 if(allSec.length == 1){
1861 allSec = "0" + allSec;
1862 }
1863 var allTime:String = allMin +":" + allSec;
1864
1865 if(!isCounted && commentTimerVpos > 10000){
1866 //���������������������
1867 var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
1868 if(videoId != null){
1869 addVideoPlayCount(videoId, false);
1870 }
1871 isCounted = true;
1872 }
1873
1874 //SWF���������������������������������������������������������������������
1875 if(isMovieClipPlaying && this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
1876
1877 videoPlayer.videoController_under.slider_timeline.enabled = true;
1878 videoPlayer.videoController_under.slider_timeline.minimum = 0;
1879 videoPlayer.videoController_under.slider_timeline.maximum = mc.totalFrames;
1880
1881 videoPlayer.videoController.slider_timeline.enabled = true;
1882 videoPlayer.videoController.slider_timeline.minimum = 0;
1883 videoPlayer.videoController.slider_timeline.maximum = mc.totalFrames;
1884
1885 if(!this.sliderChanging){
1886 videoPlayer.videoController_under.slider_timeline.value = mc.currentFrame;
1887 videoPlayer.videoController.slider_timeline.value = mc.currentFrame;
1888 }
1889
1890 // trace(nowMin + "/" + nowSec);
1891
1892 videoPlayer.videoController_under.label_time.text = nowTime + "/"+ allTime;
1893 videoPlayer.videoController.label_time.text = nowTime + "/"+ allTime;
1894
1895 if(mc.currentFrame >= mc.totalFrames-1 || mc.currentFrame == this.lastFrame ){
1896 this.lastFrame = mc.currentFrame;
1897 //���������movieClip������������������������������������������������������
1898 if(!isMovieClipStopping){
1899 isMovieClipStopping = true;
1900 movieClipCompleteHandler();
1901 }
1902 return;
1903 }else{
1904 if(!isMovieClipStopping){
1905 this.lastFrame = mc.currentFrame;
1906 }
1907 }
1908 }
1909
1910 var tempTime:Number = (new Date).time;
1911
1912 //SWF������������������������������������������������������������������
1913 if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1914 this.commentTimerVpos += (tempTime - this.time);
1915 }
1916
1917 //���������������������
1918 var commentArray:Vector.<NNDDComment> = this.commentManager.setComment(commentTimerVpos, (tempTime - this.time)*3, this.videoPlayer.isShowComment);
1919 this.commentManager.moveComment(tempTime/1000 - this.time/1000, videoInfoView.showCommentSec);
1920 this.commentManager.removeComment(commentTimerVpos, videoInfoView.showCommentSec * 1000);
1921 this.time = tempTime;
1922
1923 //������������������������������������������������������
1924 if(videoPlayer.videoInfoView.checkbox_SyncComment.selected && videoPlayer.videoInfoView.visible
1925 // && (videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE
1926 // && videoInfoView.isActive)
1927 ){
1928
1929 var lastMin:String = commentManager.getComments().lastMin;
1930
1931 var tempNowTime:String = nowTime;
1932 if(lastMin.length == 3){
1933 //���������������3���������������:���������������������
1934 if(tempNowTime.length == 4){
1935 //���������������:������������4���
1936 tempNowTime = "00" + tempNowTime;
1937 }else if(tempNowTime.length == 5){
1938 //���������������:������������5���
1939 tempNowTime = "0" + tempNowTime;
1940 }
1941 }else if(lastMin.length == 2){
1942 //���������������2���������������:������������5������
1943 if(tempNowTime.length == 4){
1944 //���������������:������������4���
1945 tempNowTime = "0" + tempNowTime;
1946 }
1947
1948 }else if(lastMin.length == 1){
1949 //���������������1���������������:������������4������
1950
1951 }
1952
1953 if(tempNowTime.length > lastMin.length+3){
1954 tempNowTime = tempNowTime.substring(1);
1955 }
1956
1957
1958 var index:int = 0;
1959 if(commentArray.length > 0 && comments != null){
1960 var myComment:NNDDComment = commentArray[0];
1961 for each(var comment:NNDDComment in commentArray){
1962 if(comment.vpos > myComment.vpos){
1963 myComment = comment;
1964 }
1965 }
1966 index = comments.getCommentIndex(tempNowTime, myComment.text);
1967
1968 if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 0){
1969
1970 if(this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition < index){
1971 index = index - (this.videoPlayer.videoInfoView.dataGrid_comment.rowCount) + 2;
1972 if(index > 0){
1973 if(index < this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition){
1974 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = index;
1975 }else{
1976 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition;
1977 }
1978 }
1979 }
1980
1981 }else if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 1){
1982
1983 if(this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition < index){
1984 index = index - (this.videoPlayer.videoInfoView.dataGrid_oldComment.rowCount) + 2;
1985 if(index > 0){
1986 if(index < this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition){
1987 this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = index;
1988 }else{
1989 this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition;
1990 }
1991 }
1992 }
1993
1994 }
1995
1996 }
1997 }
1998
1999
2000 //������������������������
2001 var date:Date = new Date();
2002 var hh:String = new String(int(date.getHours()));
2003 var mm:String = new String(int(date.getMinutes()));
2004 if(hh.length == 1){
2005 hh = "0" + hh;
2006 }
2007 if(mm.length == 1){
2008 mm = "0" + mm;
2009 }
2010 var jihouResult:Array = commentManager.isJihouSettingTime(hh + mm);
2011 if(jihouResult != null && playingJihou == null){
2012 //������������
2013 playingJihou = hh+mm;
2014 playNicowari(jihouResult[0], jihouResult[1]);
2015 }
2016 if(playingJihou != null && playingJihou != (hh+mm)){
2017 playingJihou = null;
2018 }
2019
2020 if(!this.videoPlayer.isShowComment){
2021 this.commentManager.removeAll();
2022 }
2023
2024 }
2025
2026 /**
2027 * ������������������������������������������������������������������������
2028 * @param volume 0������1���������������������������������������������
2029 * @return ������������������������������������
2030 *
2031 */
2032 public function setVolume(volume:Number):Number{
2033 if(this.windowReady){
2034 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2035 if(videoDisplay != null){
2036 videoDisplay.volume = volume;
2037 this.videoPlayer.videoController.slider_volume.value = volume;
2038 this.videoPlayer.videoController_under.slider_volume.value = volume;
2039 return videoDisplay.volume;
2040 }
2041 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2042 if(mc != null){
2043 var transForm:SoundTransform = new SoundTransform(volume, 0);
2044 mc.soundTransform = transForm;
2045 this.videoPlayer.videoController.slider_volume.value = volume;
2046 this.videoPlayer.videoController_under.slider_volume.value = volume;
2047 return mc.soundTransform.volume;
2048 }
2049 }
2050 }
2051 return 0;
2052 }
2053
2054 /**
2055 * PlayerController���������������CommentManager������������������
2056 * @return
2057 *
2058 */
2059 public function getCommentManager():CommentManager{
2060 return commentManager;
2061 }
2062
2063 /**
2064 * ���������������������������������������������������������������������������������������������������
2065 * ���������SWF������������������������������������������������������������������������Loader������������������������������������������������������
2066 */
2067 public function windowResized(isCommentRemove:Boolean = true):void{
2068
2069 if(this.windowReady){
2070
2071 //SWFLoader���������������������������������������
2072 if(swfLoader != null && this.windowType == PlayerController.WINDOW_TYPE_SWF){
2073 //������������������
2074
2075 (swfLoader.getChildAt(0) as Loader).x = 0;
2076 (swfLoader.getChildAt(0) as Loader).y = 0;
2077 var flashDistX:int = (swfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_SWF_WIDTH;
2078 var flashDistY:int = (swfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_SWF_HEIGHT;
2079 var scaleX:Number = swfLoader.width / ((swfLoader.getChildAt(0) as Loader).width - flashDistX);
2080 var scaleY:Number = swfLoader.height / ((swfLoader.getChildAt(0) as Loader).height - flashDistY);
2081 if(scaleX < scaleY){
2082 (swfLoader.getChildAt(0) as Loader).scaleX = scaleX;
2083 (swfLoader.getChildAt(0) as Loader).scaleY = scaleX;
2084 var centorY:int = swfLoader.height / 2;
2085 var newY:int = centorY - (PlayerController.NICO_SWF_HEIGHT*scaleX)/2;
2086 // trace("newY:"+newY);
2087 if(newY > 0){
2088 (swfLoader.getChildAt(0) as Loader).y = newY;
2089 }
2090 }else{
2091 (swfLoader.getChildAt(0) as Loader).scaleX = scaleY;
2092 (swfLoader.getChildAt(0) as Loader).scaleY = scaleY;
2093 var centorX:int = swfLoader.width / 2;
2094 var newX:int = centorX - (PlayerController.NICO_SWF_WIDTH*scaleY)/2;
2095 // trace("newX:"+newX);
2096 if(newX > 0){
2097 (swfLoader.getChildAt(0) as Loader).x = newX;
2098 }
2099 }
2100
2101 }
2102
2103 //���������SWF������������������������������������������
2104 if(nicowariSwfLoader != null){
2105
2106 (nicowariSwfLoader.getChildAt(0) as Loader).x = 0;
2107 (nicowariSwfLoader.getChildAt(0) as Loader).y = 0;
2108
2109 var nicowariDistX:Number = (nicowariSwfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_WARI_WIDTH;
2110 var nicowariDistY:Number = (nicowariSwfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_WARI_HEIGHT;
2111
2112 var nicowariScaleX:Number = nicowariSwfLoader.width / ((nicowariSwfLoader.getChildAt(0) as Loader).width - nicowariDistX);
2113 var nicowariScaleY:Number = nicowariSwfLoader.height / ((nicowariSwfLoader.getChildAt(0) as Loader).height - nicowariDistY);
2114 if(nicowariScaleX < nicowariScaleY){
2115 (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleX;
2116 (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleX;
2117 centorY = nicowariSwfLoader.height / 2;
2118 newY = centorY - (PlayerController.NICO_WARI_HEIGHT*nicowariScaleX)/2;
2119 // trace("newY:"+newY);
2120 if(newY > 0){
2121 (nicowariSwfLoader.getChildAt(0) as Loader).y = newY;
2122 }
2123 }else{
2124 (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleY;
2125 (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleY;
2126 centorX = nicowariSwfLoader.width / 2;
2127 newX = centorX - (PlayerController.NICO_WARI_WIDTH*nicowariScaleY)/2;
2128 // trace("newX:"+newX);
2129 if(newX > 0){
2130 (nicowariSwfLoader.getChildAt(0) as Loader).x = newX;
2131 }
2132 }
2133 }
2134
2135 //���������������������������������
2136 if(isCommentRemove){
2137 commentManager.removeAll();
2138 }
2139 }
2140 }
2141
2142 /**
2143 * ���������������seekTime������������������������������������������������
2144 * @param seekTime ������������������������������������������������������������������������������������������������������
2145 *
2146 */
2147 public function seek(seekTime:Number):void{
2148 trace(seekTime);
2149 if(this.windowReady){
2150 if((new Date().time)-lastSeekTime > 1000){
2151 if((videoDisplay != null && videoDisplay.initialized && videoDisplay.totalTime > 0) || (swfLoader != null && swfLoader.initialized)){
2152
2153
2154 trace("seekStart:" + seekTime);
2155 this.commentTimer.stop();
2156 this.commentTimer.reset();
2157
2158 //������������������������������������������������������
2159 commentManager.getComments().resetEnableShowFlag();
2160
2161 //���������������������������������������������
2162 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = 0;
2163
2164 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2165 videoDisplay.playheadTime = seekTime;
2166 commentTimerVpos = seekTime*1000;
2167 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2168 mc.gotoAndPlay(int(seekTime));
2169 commentTimerVpos = (seekTime/swfFrameRate)*1000;
2170 }
2171
2172 commentManager.removeAll();
2173
2174 if(!this.pausing || this.windowType == PlayerController.WINDOW_TYPE_SWF){
2175 commentTimer.start();
2176 }
2177 lastSeekTime = new Date().time;
2178
2179
2180
2181 }
2182 }
2183 }
2184 }
2185
2186
2187 /**
2188 * ������Player������������������������������������������������
2189 * @return Player���������������������������true������������������������������false���
2190 *
2191 */
2192 public function isOpen():Boolean{
2193 if(this.videoPlayer.nativeWindow != null){
2194 return !this.videoPlayer.closed;
2195 }
2196 return false;
2197 }
2198
2199 /**
2200 * Player������������������Open������������
2201 *
2202 */
2203 public function open():Boolean{
2204 if(this.videoPlayer != null){
2205 this.videoPlayer.open();
2206 }else{
2207 return false;
2208 }
2209 if(this.videoInfoView != null){
2210 this.videoInfoView.open();
2211 }else{
2212 return false;
2213 }
2214 return true;
2215 }
2216
2217 /**
2218 * ���������������������Player������������������������������
2219 *
2220 */
2221 public function playerExit():void{
2222
2223 this.stop();
2224 if(this.videoPlayer != null && this.videoPlayer.nativeWindow != null && !this.videoPlayer.closed){
2225 this.videoPlayer.restore();
2226 // this.videoPlayer.saveStore();
2227 this.videoPlayer.close();
2228 }
2229 if(this.videoPlayer != null && this.videoInfoView.nativeWindow != null && !this.videoInfoView.closed){
2230 this.saveNgList();
2231 this.videoInfoView.restore();
2232 // this.videoInfoView.saveStore();
2233 this.videoInfoView.close();
2234 }
2235 }
2236
2237 /**
2238 * ���������NG���������������������������������
2239 *
2240 */
2241 public function saveNgList():void{
2242 this.ngListManager.saveNgList(LibraryManagerBuilder.instance.libraryManager.systemFileDir);
2243 }
2244
2245 public function getCommentListProvider():ArrayCollection{
2246 return this.videoPlayer.getCommentListProvider();
2247 }
2248
2249 public function getOwnerCommentListProvider():ArrayCollection{
2250 return this.videoPlayer.videoInfoView.ownerCommentProvider;
2251 }
2252
2253
2254 /**
2255 * ������������������NG���������������������������������������������������
2256 * @param date ������������������������������������
2257 */
2258 public function reloadLocalComment(date:Date = null):void{
2259
2260 if(date != null){
2261 trace(date.time);
2262 }
2263
2264 if(this.videoInfoView.ngListProvider != null){
2265 if(!this.isStreamingPlay && this.source != null && this.source != "" ){
2266 comments = new Comments(PathMaker.createNomalCommentPathByVideoPath(source),
2267 PathMaker.createOwnerCommentPathByVideoPath(source), videoPlayer.getCommentListProvider(),
2268 this.videoPlayer.videoInfoView.ownerCommentProvider, this.ngListManager,
2269 this.videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
2270 this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable, date);
2271 }else if(this.isStreamingPlay){
2272 comments = new Comments(PathMaker.createNomalCommentPathByVideoPath(LibraryManagerBuilder.instance.libraryManager.tempDir.url + "/nndd.flv"),
2273 PathMaker.createOwnerCommentPathByVideoPath(LibraryManagerBuilder.instance.libraryManager.tempDir.url + "/nndd.flv"),
2274 this.videoPlayer.getCommentListProvider(), this.videoPlayer.videoInfoView.ownerCommentProvider,
2275 this.ngListManager, videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
2276 this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable, date);
2277 }
2278 commentManager.setComments(comments);
2279 }
2280 this.windowResized();
2281
2282 }
2283
2284 /**
2285 * ���������������������������������������������������������������
2286 * @param videoPath
2287 *
2288 */
2289 private function setInfo(videoPath:String, thumbInfoPath:String, ichibaInfoPath:String, isStreaming:Boolean):void{
2290
2291 var videoID:String = PathMaker.getVideoID(videoPath);
2292
2293 if(!isStreaming){ //������������������������������������������������������������������������������������������������������������������������������
2294
2295 if(videoID != null && (mailAddress != null && password != null) && (mailAddress != "" && password != "") ){
2296
2297 //���������
2298 videoInfoView.ichibaNicoProvider.addItem({
2299 col_image:"",
2300 col_info:"������������������������������",
2301 col_link:""
2302 });
2303 videoPlayer.videoInfoView.owner_text_nico = "";
2304
2305 }else{
2306 videoInfoView.ichibaNicoProvider.addItem({
2307 col_image:"",
2308 col_info:"������������������������������������������������",
2309 col_link:""
2310 });
2311
2312 var thumbInfoAnalyzer:ThumbInfoAnalyzer = null;
2313
2314 if(videoPath != null){
2315
2316 var thumbInfoPath:String = PathMaker.createThmbInfoPathByVideoPath(videoPath);
2317
2318 var fileIO:FileIO = new FileIO(logManager);
2319 var xml:XML = fileIO.loadXMLSync(thumbInfoPath, false);
2320
2321 if(xml != null){
2322 thumbInfoAnalyzer = new ThumbInfoAnalyzer(xml);
2323 }
2324 }
2325
2326 if(thumbInfoAnalyzer != null){
2327
2328 var dateString:String = "(������������������������������)";
2329 var ownerText:String = "(������������������������������������)";
2330 var htmlInfo:String = "";
2331
2332 if(thumbInfoAnalyzer != null){
2333 var dateFormatter:DateFormatter = new DateFormatter();
2334 dateFormatter.formatString = "YYYY/MM/DD JJ:NN:SS";
2335 var date:Date = thumbInfoAnalyzer.getDateByFirst_retrieve();
2336 dateString = "���������:(������������������������)";
2337 if(date != null){
2338 dateString = "���������:" + dateFormatter.format(date);
2339 }
2340 htmlInfo = thumbInfoAnalyzer.htmlTitle + "<br />" + dateString + "<br />" + thumbInfoAnalyzer.playCountAndCommentCountAndMyListCount;
2341
2342 ownerText = thumbInfoAnalyzer.thumbInfoHtml + "\n(���������������������������������)";
2343 }else{
2344
2345 if(videoPlayer.videoInfoView.owner_text_local.length > 1){
2346 ownerText = videoPlayer.videoInfoView.owner_text_local + "\n(���������������������������������)";
2347 }
2348
2349 htmlInfo = "(������������������������������)<br />" + dateString + "<br />(���������������������������������)";
2350 }
2351
2352 videoPlayer.videoInfoView.text_info.htmlText = htmlInfo;
2353
2354 if(videoPlayer.videoInfoView.checkbox_showHtml.selected){
2355 videoPlayer.videoInfoView.owner_text_temp = videoPlayer.videoInfoView.owner_text_nico;
2356 videoPlayer.videoInfoView.owner_text_nico = ownerText;
2357 }else{
2358 videoPlayer.videoInfoView.owner_text_temp = ownerText;
2359 }
2360
2361 videoPlayer.videoInfoView.nicoTagProvider = thumbInfoAnalyzer.tagArray;
2362 videoPlayer.videoInfoView.nicoTagProvider.push("(���������������������������������������������������������������)");
2363 videoPlayer.setTagArray(videoPlayer.videoInfoView.nicoTagProvider);
2364
2365 }else{
2366
2367 videoPlayer.videoInfoView.text_info.htmlText = "(������������������������������)<br />(������������������������������)<br />(���������������������������������)";
2368 videoPlayer.videoInfoView.owner_text_nico = "(������������������������������)";
2369
2370 videoPlayer.videoInfoView.nicoTagProvider = videoPlayer.videoInfoView.localTagProvider;
2371 videoPlayer.videoInfoView.nicoTagProvider.push("(���������������������������������������������������������������)");
2372 videoPlayer.setTagArray(videoPlayer.videoInfoView.nicoTagProvider);
2373
2374 }
2375 }
2376 }
2377
2378 if(videoID != null && (mailAddress != null && password != null) && (mailAddress != "" && password != "") ){
2379 retryCount = 0;
2380 setNicoVideoPageInfo(PathMaker.getVideoID(videoID), 0, isStreaming); //���������������������������������������������������
2381 }
2382
2383 setNicoRelationInfo(videoID); //������������������������������������������������������������������������������
2384
2385 setLocalIchibaInfo(ichibaInfoPath, isStreaming);
2386 setLocalThumbInfo(videoID, thumbInfoPath, isStreaming);
2387
2388 }
2389
2390
2391
2392 //-------------------------------------------------------
2393
2394 /**
2395 * ������������������������������������
2396 *
2397 */
2398 public function setNicoRelationInfoForRelationSortTypeChange():void{
2399 var videoId:String = PathMaker.getVideoID(videoPlayer.title);
2400 if(videoId != null){
2401 setNicoRelationInfo(videoId);
2402 }
2403 }
2404
2405 /**
2406 * ������������������������������������������������������������������������
2407 * @param videoID
2408 *
2409 */
2410 private function setNicoRelationInfo(videoID:String):void{
2411
2412 (videoInfoView.relationDataProvider as ArrayCollection).removeAll();
2413
2414 if(videoInfoView == null){
2415 return;
2416 }
2417
2418 if(nicoRelationInfoLoader != null){
2419 try{
2420 nicoRelationInfoLoader.close();
2421 }catch(error:Error){
2422 }
2423 }
2424
2425 videoInfoView.setRelationComboboxEnable(false);
2426
2427 var sort:String = RelationTypeUtil.convertRelationSortType(videoInfoView.relationSortIndex);
2428 var order:String = RelationTypeUtil.convertRelationOrderType(videoInfoView.relationOrderIndex);
2429
2430 logManager.addLog("���������������������������������(videoId:" + videoID + ", sort:" + sort + ", order:" + order + ")");
2431
2432 nicoRelationInfoLoader = new ApiGetRelation();
2433 nicoRelationInfoLoader.addEventListener(Event.COMPLETE, function(event:Event):void{
2434 (videoInfoView.relationDataProvider as ArrayCollection).removeAll();
2435 var analyzer:GetRelationResultAnalyzer = new GetRelationResultAnalyzer();
2436 analyzer.analyze(event.currentTarget.data);
2437 try{
2438 event.currentTarget.close();
2439 }catch(error:Error){
2440 }
2441
2442 if("ok" == analyzer.status){
2443 for each(var item:RelationResultItem in analyzer.videos){
2444 var info:String = HtmlUtil.convertSpecialCharacterNotIncludedString(item.title) + "\n" +
2445 "\t������������:" + NumberUtil.addComma(String(item.view)) + "\n" +
2446 "\t���������������:" + NumberUtil.addComma(String(item.mylist)) + ", ���������������:" + NumberUtil.addComma(String(item.comment)) + "\n" +
2447 "\t���������:" + DateUtil.getDateString(new Date(item.time * 1000));
2448 (videoInfoView.relationDataProvider as ArrayCollection).addItem({
2449 col_image:item.thumbnail,
2450 col_info:info,
2451 col_link:item.url
2452 });
2453 }
2454 if(videoInfoView.datagrid_relation != null){
2455 (videoInfoView.datagrid_relation as DataGrid).validateDisplayList();
2456 (videoInfoView.datagrid_relation as DataGrid).validateNow();
2457 }
2458 logManager.addLog("���������������������������������:" + event);
2459 videoInfoView.setRelationComboboxEnable(true);
2460
2461 }else{
2462 logManager.addLog("���������������������������������:status=" + analyzer.status + "," + event);
2463 (videoInfoView.relationDataProvider as ArrayCollection).addItem({
2464 col_image:"",
2465 col_info:"������������������������������������(status=" + analyzer.status + ")",
2466 col_link:null
2467 });
2468 if(videoInfoView.datagrid_relation != null){
2469 (videoInfoView.datagrid_relation as DataGrid).validateDisplayList();
2470 (videoInfoView.datagrid_relation as DataGrid).validateNow();
2471 }
2472 videoInfoView.setRelationComboboxEnable(true);
2473 }
2474
2475 });
2476 nicoRelationInfoLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, function(event:HTTPStatusEvent):void{
2477 logManager.addLog("\t" + event.toString());
2478 });
2479 nicoRelationInfoLoader.addEventListener(IOErrorEvent.IO_ERROR, function(event:IOErrorEvent):void{
2480 (videoInfoView.relationDataProvider as ArrayCollection).removeAll();
2481 (videoInfoView.relationDataProvider as ArrayCollection).addItem({
2482 col_image:"",
2483 col_info:"������������������������������������(���������������)",
2484 col_link:null
2485 });
2486 logManager.addLog("������������������������������������:" + event);
2487 try{
2488 event.currentTarget.close();
2489 }catch(error:Error){
2490 trace(error.getStackTrace());
2491 }
2492 if(videoInfoView.datagrid_relation != null){
2493 (videoInfoView.datagrid_relation as DataGrid).validateDisplayList();
2494 (videoInfoView.datagrid_relation as DataGrid).validateNow();
2495 }
2496 videoInfoView.setRelationComboboxEnable(true);
2497 });
2498 nicoRelationInfoLoader.getRelation(videoID, 1, sort, order);
2499
2500 (videoInfoView.relationDataProvider as ArrayCollection).addItem({
2501 col_image:"",
2502 col_info:"������������������������������������������...",
2503 col_link:null
2504 });
2505 if(videoInfoView.datagrid_relation != null){
2506 (videoInfoView.datagrid_relation as DataGrid).validateDisplayList();
2507 (videoInfoView.datagrid_relation as DataGrid).validateNow();
2508 }
2509
2510 }
2511
2512 /**
2513 * ������������������������������������������
2514 */
2515 private var retryCount:int = 0;
2516
2517 /**
2518 * ���������������������������������������������������������������������������������������������������������<br />
2519 * ���������������������
2520 * ������������������������������������������
2521 * ������������������������
2522 * ���������������
2523 * ������������������
2524 *
2525 * @param videoId
2526 * @param delay
2527 *
2528 */
2529 private function setNicoVideoPageInfo(videoId:String, delay:int, onlyOwnerText:Boolean = false):void{
2530
2531 if(retryCount > 5){
2532 trace("setNicoVideoPageInfo���������������������������");
2533 logManager.addLog("���������������������������������������������(������������������������):" + _videoID);
2534 return;
2535 }else{
2536 logManager.addLog("������������������������������������������(������������:" + retryCount + "):" + _videoID);
2537 }
2538 retryCount++;
2539
2540 if(delay == 0){
2541 getInfo(onlyOwnerText);
2542 }else{
2543 if(nicoVideoPageGetRetryTimer != null){
2544 nicoVideoPageGetRetryTimer.stop();
2545 nicoVideoPageGetRetryTimer = null;
2546 }
2547
2548 nicoVideoPageGetRetryTimer = new Timer(delay, 1);
2549 nicoVideoPageGetRetryTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
2550 trace("getInfo���������������:" + retryCount + "���");
2551 (event.currentTarget as Timer).stop();
2552 getInfo(onlyOwnerText);
2553 });
2554 nicoVideoPageGetRetryTimer.start();
2555 }
2556
2557 function getInfo(onlyOwnerText:Boolean):void{
2558 var watchVideoPage:NNDDVideoPageWatcher = new NNDDVideoPageWatcher();
2559 watchVideoPage.addEventListener(NNDDVideoPageWatcher.SUCCESS, function(event:Event):void{
2560
2561 try{
2562 var fail:Boolean = false;
2563
2564 var description:String = watchVideoPage.watcher.getDescription();
2565 if(description != null && description.length > 0 ){
2566
2567 // videoPlayer.videoInfoView.owner_text_nico = ThumbInfoUtil.encodeThumbInfo(description);
2568
2569 if(videoPlayer.videoInfoView.checkbox_showHtml.selected){
2570 videoPlayer.videoInfoView.owner_text_temp = videoPlayer.videoInfoView.owner_text_nico;
2571 videoPlayer.videoInfoView.owner_text_nico = ThumbInfoUtil.encodeThumbInfo(description);
2572 }else{
2573 videoPlayer.videoInfoView.owner_text_temp = ThumbInfoUtil.encodeThumbInfo(description);
2574 }
2575
2576 }else{
2577 fail = true;
2578 }
2579
2580 if(!watchVideoPage.onlyOwnerText){
2581 var thumbInfo:String = watchVideoPage.thumbInfoLoader.thumbInfo;
2582 if(thumbInfo != null){
2583 var analyzer:ThumbInfoAnalyzer = new ThumbInfoAnalyzer(new XML(thumbInfo));
2584 if(analyzer.errorCode != null && analyzer.errorCode.length > 0 && !isStreamingPlay){
2585 // ���������������������������������������������������������������������������������������
2586 var video:NNDDVideo = libraryManager.isExist(videoId);
2587 var thumbInfoPath:String = PathMaker.createThmbInfoPathByVideoPath(video.getDecodeUrl());
2588 var fileIO:FileIO = new FileIO();
2589 var xml:XML = fileIO.loadXMLSync(thumbInfoPath, false);
2590 analyzer = new ThumbInfoAnalyzer(xml);
2591 setNicoThumbInfo(analyzer);
2592 }
2593 setNicoThumbInfo(analyzer);
2594
2595 }else{
2596 fail = true;
2597 }
2598
2599 var ichibaInfo:Object = watchVideoPage.ichibaInfoLoader.data;
2600 if(ichibaInfo != null && ichibaInfo is String){
2601 var ichibaBuilder:IchibaBuilder = new IchibaBuilder(logManager);
2602 videoInfoView.ichibaNicoProvider = ichibaBuilder.makeIchibaInfo(ichibaInfo as String);
2603 videoInfoView.ichibaNicoProvider.refresh();
2604 }else{
2605 videoInfoView.ichibaNicoProvider.addItem({
2606 col_image:"",
2607 col_info:"���������������������������������������������(���������������������)",
2608 col_link:""
2609 });
2610 fail = true;
2611 }
2612 }
2613
2614 }catch(error:Error){
2615 fail = true;
2616 trace(error.getStackTrace());
2617 }
2618
2619 if(fail){
2620 setNicoVideoPageInfo(PathMaker.getVideoID(videoId), 1000*retryCount);
2621 logManager.addLog("���������������������������������������������(���������������������)" + _videoID);
2622 }else{
2623 logManager.addLog("���������������������������������������������:" + _videoID);
2624 }
2625
2626 });
2627 watchVideoPage.addEventListener(NNDDVideoPageWatcher.FAIL, function(event:ErrorEvent):void{
2628 logManager.addLog("���������������������������������������������:" + _videoID + ":" + event.text);
2629 trace("���������������������������������������������:" + _videoID + ":" + event.text);
2630 });
2631 watchVideoPage.watch(mailAddress, password, PathMaker.getVideoID(videoId), onlyOwnerText);
2632 }
2633 }
2634
2635 /**
2636 * ������������������������������������������������Player���������������������������������������������
2637 * @param analyzer
2638 *
2639 */
2640 private function setNicoThumbInfo(analyzer:ThumbInfoAnalyzer):void{
2641
2642 videoPlayer.videoInfoView.nicoTagProvider = analyzer.tagArray;
2643 videoPlayer.setTagArray(analyzer.tagArray);
2644
2645 if(analyzer.tagArray.length == 0 && videoPlayer.videoInfoView.localTagProvider.length > 0){
2646 videoPlayer.videoInfoView.nicoTagProvider = videoPlayer.videoInfoView.localTagProvider;
2647 videoPlayer.videoInfoView.nicoTagProvider.push("(���������������������������������������������������������������)");
2648 videoPlayer.setTagArray(videoPlayer.videoInfoView.nicoTagProvider);
2649 }
2650
2651 var dateString:String = "(������������������������������)";
2652 var ownerText:String = "(������������������������������������)";
2653 var htmlInfo:String = "";
2654
2655 var dateFormatter:DateFormatter = new DateFormatter();
2656 dateFormatter.formatString = "YYYY/MM/DD JJ:NN:SS";
2657 var date:Date = analyzer.getDateByFirst_retrieve();
2658 dateString = "���������:(������������������������)";
2659 if(date != null){
2660 dateString = "���������:" + dateFormatter.format(date);
2661 }
2662 htmlInfo = analyzer.htmlTitle + "<br />" + dateString + "<br />" + analyzer.playCountAndCommentCountAndMyListCount;
2663
2664 ownerText = analyzer.thumbInfoHtml;
2665
2666 videoPlayer.videoInfoView.text_info.htmlText = htmlInfo;
2667
2668 if(videoPlayer.videoInfoView.owner_text_nico.length == 0){
2669 videoPlayer.videoInfoView.owner_text_nico = ownerText;
2670 }
2671 }
2672
2673
2674 /**
2675 * ������������������������������������
2676 * @param ichibaInfoPath
2677 * @param isStreaming true������������������������������������������������������������������������������������������
2678 *
2679 */
2680 private function setLocalIchibaInfo(ichibaInfoPath:String, isStreaming:Boolean):void{
2681
2682 var ichibaBuilder:IchibaBuilder = new IchibaBuilder(logManager);
2683
2684 var fileIO:FileIO = new FileIO(logManager);
2685 var fail:Boolean = false;
2686 try{
2687
2688 var html:String = fileIO.loadTextSync(ichibaInfoPath);
2689
2690 if(html == null){
2691 fail = true;
2692 }else{
2693
2694 if(!isStreaming){
2695 videoInfoView.ichibaLocalProvider = ichibaBuilder.makeIchibaInfo(html);
2696 }else{
2697 videoInfoView.ichibaNicoProvider = ichibaBuilder.makeIchibaInfo(html);
2698 }
2699
2700 }
2701 }catch(error:Error){
2702 trace(error.getStackTrace());
2703 fail = true;
2704 }
2705
2706 if(fail){
2707 if(isStreaming){
2708 videoInfoView.ichibaNicoProvider.removeAll();
2709 videoInfoView.ichibaNicoProvider.addItem({
2710 col_image:"",
2711 col_info:"(������������������������������)",
2712 col_link:""
2713 });
2714 }else{
2715 videoInfoView.ichibaLocalProvider.removeAll();
2716 videoInfoView.ichibaLocalProvider.addItem({
2717 col_info:"(������������������������������������������������)"
2718 });
2719 }
2720 }
2721
2722 }
2723
2724 /**
2725 * ���������������������������������������������