root/trunk/as2/com/jeroenwijering/players/AbstractController.as @ 1

Revision 1, 4.5 kB (checked in by jeroen, 18 months ago)

initial commit of old repository into public one

  • Property svn:executable set to *
Line 
1/**
2* Abstract controller class of the MCV pattern, extended by all controlllers.
3*
4* @author       Jeroen Wijering
5* @version      1.8
6**/
7
8
9import com.jeroenwijering.players.*;
10import com.jeroenwijering.utils.*;
11
12
13class com.jeroenwijering.players.AbstractController
14        implements com.jeroenwijering.feeds.FeedListener {
15
16
17        /** Randomizer instance **/
18        private var randomizer:Randomizer;
19        /** array with all registered models **/
20        private var registeredModels:Array;
21        /** reference to the config array **/
22        private var config:Object;
23        /** reference to the feed array **/
24        private var feeder:Object;
25        /** Current item **/
26        private var currentItem:Number;
27        /** Current item **/
28        private var currentURL:String;
29        /** Current item **/
30        private var isPlaying:Boolean;
31        /** Number of items played: used for repeat=list **/
32        private var itemsPlayed:Number;
33        /** Array that saves the original video dimensions. **/
34        private var sizes:Array;
35
36
37        /** Constructor. **/
38        function AbstractController(cfg:Object,fed:Object) {
39                config = cfg;
40                feeder = fed;
41                feeder.addListener(this);
42        };
43
44
45        /** Complete the build of the MCV cycle and start flow of events. **/
46        public function startMCV(mar:Array) {};
47
48
49        /** Receive events from the views. **/
50        public function getEvent(typ:String,prm:Number,pr2:Number) {
51                //trace("controller: "+typ+": "+prm);
52                switch(typ) {
53                        case "playpause":
54                                setPlaypause();
55                                break;
56                        case "prev":
57                                if(noCommercial()) { setPrev(); }
58                                break;
59                        case "next":
60                                if(noCommercial()) { setNext(); }
61                                break;
62                        case "stop":
63                                if(noCommercial()) { setStop(); }
64                                break;
65                        case "scrub":
66                                if(noCommercial()) { setScrub(prm); }
67                                break;
68                        case "volume":
69                                setVolume(prm);
70                                break;
71                        case "playitem":
72                                if(noCommercial()) { setPlayitem(prm); }
73                                break;
74                        case "getlink":
75                                setGetlink(prm);
76                                break;
77                        case "fullscreen":
78                                setFullscreen();
79                                break;
80                        case "complete":
81                                setComplete();
82                                break;
83                        case "captions":
84                                setCaptions();
85                                break;
86                        case "audio":
87                                setAudio();
88                                break;
89                        case "size":
90                                saveSizes(prm,pr2);
91                                break;
92                        default:
93                                trace("controller: incompatible event received");
94                                break;
95                }
96        };
97
98
99        /** Check for commercial **/
100        private function noCommercial():Boolean {
101                if(feeder.feed[currentItem]['category'] == 'commercial' ||
102                        feeder.feed[currentItem]['category'] == 'preroll' ||
103                        feeder.feed[currentItem]['category'] == 'postroll') {
104                        return false;
105                } else {
106                        return true;
107                }
108        };
109
110
111        /** PlayPause switch **/
112        private  function setPlaypause() {};
113
114
115        /** Play previous item. **/
116        private  function setPrev() {};
117
118
119        /** Play next item. **/
120        private function setNext() {};
121
122
123        /** Stop and clear item. **/
124        private function setStop() {};
125
126
127        /** Forward scrub number to model. **/
128        private function setScrub(prm:Number) {};
129
130
131        /** Play a new item. **/
132        private function setPlayitem(itm:Number) {
133                currentURL = feeder.feed[itm]['file'];
134        };
135
136
137        /** Get url from an item if link exists, else playpause. **/
138        private function setGetlink(idx:Number) {};
139
140
141        /** Determine what to do if an item is completed. **/
142        private function setComplete() {};
143
144
145        /** Volume event handler **/
146        private function setVolume(prm:Number) {};
147
148
149        /** Switch fullscreen mode **/
150        private function setFullscreen() {};
151
152
153        /** Switch captions on and off **/
154        private function setCaptions() {};
155
156
157        /** Switch captions on and off **/
158        private function saveSizes(pr1:Number,pr2:Number) {
159                sizes = new Array(pr1,pr2);
160        };
161
162
163        /** Switch audiotrack on and off **/
164        private function setAudio() {};
165
166
167        /** Sending changes to all registered models. **/
168        private function sendChange(typ:String,prm:Number):Void {
169                for(var i=0; i<registeredModels.length; i++) {
170                        registeredModels[i].getChange(typ,prm);
171                }
172        };
173
174
175        /** check with feedupdates if current item is also changed **/
176        public function onFeedUpdate(typ:String) {
177                if(typ == 'new') {
178                        setStop();
179                        startMCV();
180                } else  if (typ == 'add') {
181                        if (feeder.feed[currentItem+1]['file'] == currentURL) {
182                                currentItem++;
183                                sendChange("item",currentItem);
184                        }
185                        if(randomizer != undefined) {
186                                randomizer = new Randomizer(feeder.feed);
187                        }
188                } else if(typ == 'remove') {
189                        if (feeder.feed[currentItem-1]['file'] == currentURL) {
190                                currentItem--;
191                                sendChange("item",currentItem);
192                                if(randomizer != undefined) {
193                                        randomizer = new Randomizer(feeder.feed);
194                                }
195                        } else if(feeder.feed[currentItem]['file'] != currentURL) {
196                                setStop();
197                                startMCV();
198                        } else {
199                                if(randomizer != undefined) {
200                                        randomizer = new Randomizer(feeder.feed);
201                                }
202                        }
203                }
204        };
205
206
207}
Note: See TracBrowser for help on using the browser.