Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/logic.py
diff options
context:
space:
mode:
authorNick Doiron <ndoiron@mapmeld.com>2011-05-10 20:18:53 (GMT)
committer Nick Doiron <ndoiron@mapmeld.com>2011-05-10 20:18:53 (GMT)
commit8d981ffc647b76b2b8b6f4d24aba0728d15dfffb (patch)
treed1ff473ddaf0247da904145252d1154de27dc6f6 /logic.py
Uploading OfflineMap with XO-1.5 fix
Diffstat (limited to 'logic.py')
-rw-r--r--logic.py272
1 files changed, 272 insertions, 0 deletions
diff --git a/logic.py b/logic.py
new file mode 100644
index 0000000..6d135a5
--- /dev/null
+++ b/logic.py
@@ -0,0 +1,272 @@
+# Copyright (c) 2008, Media Modifications Ltd.
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+
+from result import ServerResult
+from constants import Constants
+from instance import Instance
+
+from threading import Thread
+import threading
+import os
+import gobject
+import time
+import gtk
+import urllib
+
+class ServerLogic:
+ def __init__(self, ca):
+ self.ca = ca
+ self.proceedTxt = ""
+ self.proceedHeaders = []
+ self.cond = ca.cond
+ self.addKMLSet=0
+
+ def doServerLogic(self, url, path, params):
+ self.ca.remoteServerActive( True )
+ r = ServerResult()
+ fileName = path[len(path)-1]
+
+ if (fileName == "comet.js"):
+
+ #clear...
+ self.proceedHeaders = []
+ self.proceedTxt = ""
+
+ #wait...
+ self.cond.acquire()
+ self.cond.wait()
+ self.cond.release()
+
+ #prep response...
+ for h in range( len(self.proceedHeaders) ):
+ r.headers.append( self.proceedHeaders[h] )
+ r.txt = ""+self.proceedTxt
+
+ else:
+ kickThroughComet = True
+
+ if (fileName =="mediaQuery.js"):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = self.ca.m.getMediaResponse( params[0][1], params[1][1], params[2][1], params[3][1] )
+
+ elif (fileName == "showMedia.js"):
+ id = params[0][1]
+ locX = params[1][1]
+ locY = params[2][1]
+ up = params[3][1]
+ rt = params[4][1]
+ gobject.idle_add(self.ca.showMedia, id, locX, locY, up=='true', rt=='true')
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+
+ elif (fileName == "placeAddMedia.js"):
+ lat = params[0][1]
+ lng = params[1][1]
+ gobject.idle_add(self.ca.placeAddMedia, lat, lng)
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ kickThroughComet = False
+
+ elif (fileName == "hideMedia.js"):
+ gobject.idle_add(self.ca.hideMedia)
+
+ elif (fileName == "getImage.js"):
+ localfile = open(os.path.join(Instance.instancePath, params[0][1]), 'r')
+ localdata = localfile.read()
+ localfile.close()
+
+ #one day we might need to kick you through comet as a base64'd image.
+ r.txt = localdata
+ r.headers.append( ("Content-type", "image/jpeg") )
+ kickThroughComet = False
+
+ elif (fileName == "updateLocation.js"):
+ lat = params[0][1]
+ lng = params[1][1]
+ zoom = params[2][1]
+ x = params[3][1]
+ y = params[4][1]
+ gobject.idle_add(self.ca.updateMapMetaData,lat,lng,zoom,x,y)
+
+ elif (fileName == "addSavedMap.js"):
+ # allow internet to send an array of SavedMaps back to map.py
+ latitudes = params[0][1]
+ longitudes = params[1][1]
+ zooms = params[2][1]
+ notes = params[3][1]
+ gobject.idle_add(self.ca.addSavedMap,latitudes,longitudes,zooms,urllib.unquote(notes),True)
+
+ elif (fileName == "addInfoMarker.js"):
+ lat = params[0][1]
+ lng = params[1][1]
+ info = params[2][1]
+ icon = params[3][1]
+ if(params[4][1] == "True"):
+ isNew = True
+ else:
+ isNew = False
+ gobject.idle_add(self.ca.addInfoMarker,lat,lng,info,icon,isNew)
+
+ elif (fileName == "addLine.js"):
+ id = params[0][1]
+ color = params[1][1]
+ thickness = params[2][1]
+ pts = params[3][1] # send pts separated with | instead of ,
+ gobject.idle_add(self.ca.addLine,id,color,thickness,pts)
+
+ elif (fileName == "joinGroup.js"):
+ groupName = params[0][1]
+ groupFile = urllib.urlopen("http://bluebird-science.appspot.com/group/data?name=" + groupName)
+ self.ca.preComet()
+ self.handleGroupData(groupFile.readline())
+ self.ca.postComet()
+
+ elif (fileName == "promptSearch.js"):
+ address = params[0][1]
+ time.sleep(0.5)
+ self.ca.preComet()
+ self.handleAddressUpdate(address+"+")
+ self.ca.postComet()
+
+ #elif (fileName == "gotoMapV3.js"):
+ # button on static maps links to mapv3
+ #self.ca.loadMapV3()
+
+ if (kickThroughComet):
+ #not sure how & why this goes out, but it does.
+ self.cond.acquire()
+ self.cond.notifyAll()
+ self.cond.release()
+ time.sleep(.1)
+
+ return r
+
+ def handleAddressUpdate( self, address ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "moveTo(" + address + ");"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleGroupData( self, groupData ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "joinThisGroup(" + groupData + ");"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleCompassUpdate( self, dir ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+
+ if (dir == "e"):
+ self.proceedTxt = "dirEast();"
+ elif (dir == "w"):
+ self.proceedTxt = "dirWest();"
+ elif (dir == "n"):
+ self.proceedTxt = "dirNorth();"
+ elif (dir == "s"):
+ self.proceedTxt = "dirSouth();"
+ else:
+ # use this as a print warning window
+ self.proceedTxt = 'showInfo("' + dir + '");'
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleZoomUpdate( self, dir ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ if (dir == "+"):
+ self.proceedTxt = "zoomIn();"
+ elif (dir == "-"):
+ self.proceedTxt = "zoomOut();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleClear( self ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "clear();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handlePreAdd( self ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "preAddMedia();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handlePreAddInfo( self ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "preAddInfo();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handlePostAdd( self, rec ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "postAddMedia(" + rec.latitude + ", " + rec.longitude + ", '" + rec.getThumbUrl() + "', '" + rec.getThumbBasename() + "', '" + rec.tags + "');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleDelete( self ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "deleteMedia();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ # handle a map that was sent to us
+ def handleReceivedMap( self, lat, lng, zoom):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "setMap(" + lat + "," + lng + "," + zoom + ");"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleSavedMap( self, lat, lng, zoom, info ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ if(info.find("Describe the map") != 0):
+ self.proceedTxt = "setMap2(" + lat + "," + lng + "," + zoom + ",'" + urllib.quote(info) + "');"
+ else:
+ self.proceedTxt = "setMap2(" + lat + "," + lng + "," + zoom + ",'');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ # handle a marker that was sent to us
+ def handleAddMarker( self, lat, lng, pixString, icon ):
+ if(self.addKMLSet == 0):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = ""
+ self.addKMLSet = 1
+ self.proceedTxt = self.proceedTxt + "addPt(" + lat + ", " + lng + ", '" + pixString + "', '" + icon + "',false);"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def mapPaste( self, type ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "mapPaste('" + type + "');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleEndKML( self ):
+ self.addKMLSet = 0
+
+ def lineMode(self, type):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "lineMode('" + type + "');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleLine(self,id,color,thickness,pts):
+ if(self.addKMLSet == 0):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = ""
+ self.addKMLSet = 1
+ self.proceedTxt = self.proceedTxt + "addLine('" + id + "','" + color + "','" + thickness + "','" + pts + "');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ # handle start of measure tool
+ def handleMeasure(self):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "measure();"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);")
+
+ def handleTagSearch( self, tags ):
+ self.proceedHeaders.append( ("Content-type", "text/javascript") )
+ self.proceedTxt = "filterTags('" + tags + "');"
+ self.ca.browser.load_uri("javascript:"+self.proceedTxt+"void(0);") \ No newline at end of file