All pastes #1917447 Raw Edit

nicontroller.js.diff

public diff v1 · immutable
#1917447 ·published 2010-08-15 15:30 UTC
rendered paste body
Index: nicontroller.js===================================================================--- nicontroller.js	(リビジョン 38275)+++ nicontroller.js	(作業コピー)@@ -274,24 +274,38 @@         return null;     }, +    get _flvplayerInfo() {+        var p = this._flvplayer();+        if (p._NicoPlayerControllerInfo === undefined) {+            p._NicoPlayerControllerInfo = {};+        }+        return p._NicoPlayerControllerInfo;+    },++    play: function(playStatus) {+        var p = this._flvplayer();+        p.ext_play(playStatus);+        this._flvplayerInfo.playStatus = playStatus;+    },+     togglePlay: function() {         var p = this._flvplayer();-        (p.ext_getStatus() !== this.constants.STATE_PLAYING)-            ? p.ext_play(this.constants.PLAY)-            : p.ext_play(this.constants.PAUSE);+        if (p.ext_getStatus() === 'end') {+            if (p.ext_getPlayheadTime() === p.ext_getTotalTime()) {+                p.ext_setPlayheadTime(0);+                this.play(this.constants.PLAY);+                return;+            }+            this.play(! this._flvplayerInfo.playStatus);+            return;+        } -        if(p.ext_getStatus() === 'end') {-            let base = p.ext_getPlayheadTime();-            let self = this;-            setTimeout(function () {-                if (base !== p.ext_getPlayheadTime()) {-                    p.ext_play(self.constants.PAUSE);-                } else {-                    p.ext_setPlayheadTime(0);-                    p.ext_play(self.constants.PLAY);-                }-            }, 100);+        if (this._flvplayerInfo.playStatus === undefined && p.ext_getPlayheadTime() === 0) {+            this.play(this.constants.PLAY);+            return;         }++        this.play(p.ext_getStatus() !== this.constants.STATE_PLAYING ? this.constants.PLAY : this.constants.PAUSE);     },      toggleMute: function() {@@ -369,6 +383,60 @@      seekBy: function(delta) {         if(delta) {+            if (delta.match(/^(-?\d+)k$/)) {+                delta = parseInt(RegExp.$1, this.constants.CARDINAL_NUMBER);+                var p = this._flvplayer();+                var position = p.ext_getPlayheadTime();+                if (delta < 0) {+                    if (position == 0) {+                        return;+                    }+                    var prePosition = position;+                    function waitProc(cond, proc, interval) {+                        function func() {+                            if (cond()) {+                                proc();+                            }+                            else {+                                setTimeout(func, interval);+                            }+                        }+                        func();+                    }+                    function seekAndWait(proc) {+                        waitProc(function() { return p.ext_getStatus() !== 'seeking'; }, proc, 0);+                    }+                    function seekWhile(cond, onNext, onFinish) {+                        function func(pos) {+                            var nextPos = onNext(pos);+                            if (nextPos < 0) {+                                nextPos = 0;+                            }+                            p.ext_setPlayheadTime(nextPos);+                            function proc() {+                                var tmpPosition = p.ext_getPlayheadTime();+                                if (cond(tmpPosition)) {+                                    func(tmpPosition);+                                }+                                else {+                                    onFinish(tmpPosition);+                                }+                            }+                            seekAndWait(proc);+                        }+                        func();+                    }+                    function onFinish(finishPos) {+                        //seekWhile(function(pos) { return pos < prePosition; }, function(pos) { return (position = (pos ? pos : finishPos)) + 1; }, function() { p.ext_setPlayheadTime(position); });+                    }+                    seekWhile(function(pos) { return pos >= prePosition; }, function() { return position -= 5; }, onFinish);+                }+                else {+                    position += 1;+                    p.ext_setPlayheadTime(position);+                }+                return;+            }             if(isNaN(delta)) throw new Error('assign signed number : seekBy()');         }         else delta = this.constants.SEEKBY_DEFAULT;@@ -377,6 +445,12 @@         var position = p.ext_getPlayheadTime();         position += parseInt(delta, this.constants.CARDINAL_NUMBER); +        if (position < 0) {+            position = 0;+        }+        else if (position > p.ext_getTotalTime()) {+            position = p.ext_getTotalTime();+        }         p.ext_setPlayheadTime(position);     },