source: subversion/applications/editors/potlatch/offline.as @ 15136

Last change on this file since 15136 was 15136, checked in by richard, 11 years ago

Potlatch 1.0

  • Property svn:executable set to *
File size: 6.8 KB
Line 
1
2        // =====================================================================================
3        // Offline upload
4
5        // uploadtasks is an array of: [function,hash of IDs]
6        // (each function returns a text comment)
7
8        // -------------------------------------------------------------------------------------
9        // prepareUpload
10        // creates upload task list
11
12        function prepareUpload() {
13                var todo;
14                if (!_root.sandbox) { return; }
15                if (_root.uploading) { return; }
16
17                _root.uploadtasks=new Array();
18
19                // Assemble POIs
20                var poi=new Object(); todo=false;
21                for (var id in _root.map.pois) {
22                        if (!_root.map.pois[id].clean && !_root.map.pois[id].locked) { poi[id]=true; todo=true; }
23                }
24                if (todo) { uploadtasks.push([uploadPOIs,poi]); }
25               
26                // Assemble ways
27                var way=new Object(); todo=false;
28                for (var id in _root.map.ways) {
29                        if (!_root.map.ways[id].clean && !_root.map.ways[id].locked) { way[id]=true; todo=true; }
30                }
31                if (todo) { uploadtasks.push([uploadWays,way]); }
32               
33                // Assemble relations
34                var rel=new Object(); todo=false;
35                for (var id in _root.map.relations) {
36                        if (!_root.map.relations[id].clean && !_root.map.relations[id].locked) { rel[id]=true; todo=true; }
37                }
38                if (todo) { uploadtasks.push([uploadRelations,rel]); }
39
40                // Assemble ways to delete
41                todo=false; var z=_root.waystodelete;
42                for (var id in z) { todo=true; }
43                if (todo) { uploadtasks.push([uploadDeletedWays,deepCopy(_root.waystodelete)]); }
44
45                // Assemble POIs to delete
46                todo=false; var z=_root.poistodelete;
47                for (var id in z) { todo=true; }
48                if (todo) { uploadtasks.push([uploadDeletedPOIs,deepCopy(_root.poistodelete)]); }
49
50                // Check there's something to do
51                if (uploadtasks.length==0) { 
52                    setAdvice(true,iText("Nothing to upload",'advice_uploadempty'));
53                        return;
54                }
55               
56                // Ask for changeset comment if not already created
57                if (_root.changeset) { startUpload(); } 
58                                else { changesetRequest(iText("Save changes",'prompt_savechanges'),completeClose,''); }
59        }
60
61        // -------------------------------------------------------------------------------------
62        // startUpload
63        // 'Save' button pressed, so set up screen progress display and begin upload
64
65        function startUpload() {
66            _root.uploading=true;
67
68                _root.windows.attachMovie("modal","upload",++windowdepth);
69                _root.windows.upload.init(200,250,[iText('Cancel','cancel')],abortUpload);
70
71        box=_root.windows.upload.box;
72                box.createTextField("title",10,7,7,280,20);
73                box.title.text = iText("Uploading...","uploading");
74                with (box.title) { setTextFormat(boldText); selectable=false; type='dynamic'; }
75
76        box.createTextField("progress",11,10,40,180,170);
77        with (box.progress) {
78            background=true; backgroundColor=0xF3F3F3;
79            border=true; borderColor=0xFFFFFF;
80            type='dynamic'; wordWrap=true; multiline=true;
81            setNewTextFormat(plainSmall); text='';
82        }
83        box.progress.onChanged=function() { _root.windows.upload.box.progress.scroll=_root.windows.upload.box.progress.maxscroll; };
84
85            operationDone('first');
86    }
87
88        // -------------------------------------------------------------------------------------
89        // abortUpload
90        // Stop upload in case of failure
91
92        function abortUpload() {
93                if (!_root.uploading) { return; }
94                _root.uploading=false;
95                setAdvice(false,iText("Upload stopped",'advice_uploadfail'));
96                _root.windows.upload.remove();
97        }
98
99        // ----------------------------------------------------------------------------------------
100        // operationDone( id | all | first )
101        // removes element from current task from list, and does next if task complete
102        // ('all' takes the entire first task; 'first' doesn't take anything, just fires the first)
103
104        function operationDone(id) {
105                if (!_root.uploading) { return; }
106
107                var doNext=false;
108                if (id=='all') {
109                        // Entire first event done (e.g. startChangeset)
110                        _root.uploadtasks.shift(); doNext=true;
111                } else if (id=='first') {
112                        // First task, so we want to fire it
113                        doNext=true;
114                } else {
115                        // Remove task from list, do next if none left
116                        var a=_root.uploadtasks[1]; delete a[id];
117                        var c=0; for (i in _root.uploadtasks[1]) { c++; }
118                        doNext=(c==0); if (doNext) { 
119                                _root.uploadtasks.shift();
120                        }
121                }
122
123                if (!doNext) { return; }
124                if (_root.uploadtasks.length>0) { 
125                        _root.uploadtasks[0][0].call(null,_root.uploadtasks[0][1]); 
126                return;
127        }
128               
129                // Hooray, we're complete
130                _root.uploading=false;
131                _root.waystodelete=new Object();
132                _root.poistodelete=new Object();
133//        _root.windows.upload.box.progress.text+="Upload complete";
134//              var box=_root.windows.upload.box;
135//              box.createEmptyMovieClip(1,1);
136//              drawButton(box[1],140,220,iText("Ok","ok"),"");
137//              box[1].onPress=function() { _root.windows.upload.remove(); };
138        _root.windows.upload.remove(); 
139                setAdvice(false,iText("All data successfully uploaded",'advice_uploadsuccess'));
140        markClean(true,true);
141        }
142
143        // -------------------------------------------------------------------------------------
144        // individual upload tasks
145
146        function uploadPOIs(list) {
147        _root.windows.upload.box.progress.text+="Uploading POIs";
148                for (var id in list) {
149            _root.windows.upload.box.progress.text+=".";
150                        _root.map.pois[id].upload();
151                }
152        _root.windows.upload.box.progress.text+="\n";
153        }
154
155        function uploadWays(list) {
156        _root.windows.upload.box.progress.text+="Uploading ways";
157                for (var id in list) {
158            _root.windows.upload.box.progress.text+=".";
159                        _root.map.ways[id].upload();
160                }
161        _root.windows.upload.box.progress.text+="\n";
162        }
163       
164        function uploadRelations(list) {
165        _root.windows.upload.box.progress.text+="Uploading relations";
166                for (var id in list) {
167            _root.windows.upload.box.progress.text+=".";
168                        _root.map.relations[id].upload();
169                }
170        _root.windows.upload.box.progress.text+="\n";
171        }
172       
173        function uploadDeletedWays(list) {
174        _root.windows.upload.box.progress.text+="Deleting ways";
175                for (var id in list) {
176            _root.windows.upload.box.progress.text+=".";
177                        deleteresponder = function() { };
178                        deleteresponder.onResult = function(result) { deletewayRespond(result); };
179                        _root.writesrequested++;
180                        remote_write.call('deleteway',deleteresponder,_root.usertoken,_root.changeset,Number(id),waystodelete[id][0],waystodelete[id][1]);
181                }
182        _root.windows.upload.box.progress.text+="\n";
183        }
184
185        function uploadDeletedPOIs(list) {
186        _root.windows.upload.box.progress.text+="Deleting POIs";
187                for (var id in list) {
188            _root.windows.upload.box.progress.text+=".";
189                        poidelresponder = function() { };
190                        poidelresponder.onResult = function(result) { deletepoiRespond(result); };
191                        _root.writesrequested++;
192                        remote_write.call('putpoi',poidelresponder,_root.usertoken,_root.changeset,Number(poistodelete[id][0]),Number(id),poistodelete[id][1],poistodelete[id][2],poistodelete[id][3],0);
193                }
194        _root.windows.upload.box.progress.text+="\n";
195        }
196
197
Note: See TracBrowser for help on using the repository browser.