from gotovienna.utils import *
from gotovienna.realtime import *
+from gotovienna.gps import *
import urllib2
import os
def get_departures(self):
return self.current_departures
+ @Slot(float, float, result=str)
+ def get_nearby_stations(self, lat, lon):
+ try:
+ return ', '.join(get_nearby_stations(lat, lon))
+ except Exception as e:
+ print e.message
+ return ''
+
@Slot(str, str)
def search(self, line, station):
line = line.upper()
cache_lines = path.join(cache_folder, 'lines.json')
cache_stations = path.join(cache_folder, 'stations.json')
+# SQL & GPS
+sql_gps_query = 'SELECT name FROM stations WHERE lat > ? and lat < ? and lon > ? and lon < ?'
+sql_file = path.expanduser('~/.gotovienna/stations.db')
+
# iTip
line_overview = 'http://www.wienerlinien.at/itip/linienwahl/'
--- /dev/null
+#select name, lat, lon from stations where lat > 48.23739 and lat < 48.2424 and lon > 16.31106 and lon < 16.3203
+import defaults
+import sqlite3
+
+def get_nearby_stations(lat, lon):
+ conn = sqlite3.connect(defaults.sql_file)
+ c = conn.cursor()
+ c.execute(defaults.sql_gps_query, (lat - 0.004, lat + 0.004, lon - 0.005, lon + 0.005))
+ return map(lambda x: x[0], list(set(c.fetchall())))
--- /dev/null
+# pysqlite2/__init__.py: the pysqlite2 package.
+#
+# Copyright (C) 2005 Gerhard Haering <gh@ghaering.de>
+#
+# This file is part of pysqlite.
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+
+from dbapi2 import *
--- /dev/null
+# pysqlite2/dbapi2.py: the DB-API 2.0 interface
+#
+# Copyright (C) 2004-2005 Gerhard Haering <gh@ghaering.de>
+#
+# This file is part of pysqlite.
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+
+import datetime
+import time
+
+from _sqlite3 import *
+
+paramstyle = "qmark"
+
+threadsafety = 1
+
+apilevel = "2.0"
+
+Date = datetime.date
+
+Time = datetime.time
+
+Timestamp = datetime.datetime
+
+def DateFromTicks(ticks):
+ return Date(*time.localtime(ticks)[:3])
+
+def TimeFromTicks(ticks):
+ return Time(*time.localtime(ticks)[3:6])
+
+def TimestampFromTicks(ticks):
+ return Timestamp(*time.localtime(ticks)[:6])
+
+version_info = tuple([int(x) for x in version.split(".")])
+sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")])
+
+Binary = buffer
+
+def register_adapters_and_converters():
+ def adapt_date(val):
+ return val.isoformat()
+
+ def adapt_datetime(val):
+ return val.isoformat(" ")
+
+ def convert_date(val):
+ return datetime.date(*map(int, val.split("-")))
+
+ def convert_timestamp(val):
+ datepart, timepart = val.split(" ")
+ year, month, day = map(int, datepart.split("-"))
+ timepart_full = timepart.split(".")
+ hours, minutes, seconds = map(int, timepart_full[0].split(":"))
+ if len(timepart_full) == 2:
+ microseconds = int(timepart_full[1])
+ else:
+ microseconds = 0
+
+ val = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds)
+ return val
+
+
+ register_adapter(datetime.date, adapt_date)
+ register_adapter(datetime.datetime, adapt_datetime)
+ register_converter("date", convert_date)
+ register_converter("timestamp", convert_timestamp)
+
+register_adapters_and_converters()
+
+# Clean up namespace
+
+del(register_adapters_and_converters)
--- /dev/null
+# Mimic the sqlite3 console shell's .dump command
+# Author: Paul Kippes <kippesp@gmail.com>
+
+def _iterdump(connection):
+ """
+ Returns an iterator to the dump of the database in an SQL text format.
+
+ Used to produce an SQL dump of the database. Useful to save an in-memory
+ database for later restoration. This function should not be called
+ directly but instead called from the Connection method, iterdump().
+ """
+
+ cu = connection.cursor()
+ yield('BEGIN TRANSACTION;')
+
+ # sqlite_master table contains the SQL CREATE statements for the database.
+ q = """
+ SELECT name, type, sql
+ FROM sqlite_master
+ WHERE sql NOT NULL AND
+ type == 'table'
+ """
+ schema_res = cu.execute(q)
+ for table_name, type, sql in schema_res.fetchall():
+ if table_name == 'sqlite_sequence':
+ yield('DELETE FROM sqlite_sequence;')
+ elif table_name == 'sqlite_stat1':
+ yield('ANALYZE sqlite_master;')
+ elif table_name.startswith('sqlite_'):
+ continue
+ # NOTE: Virtual table support not implemented
+ #elif sql.startswith('CREATE VIRTUAL TABLE'):
+ # qtable = table_name.replace("'", "''")
+ # yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\
+ # "VALUES('table','%s','%s',0,'%s');" %
+ # qtable,
+ # qtable,
+ # sql.replace("''"))
+ else:
+ yield('%s;' % sql)
+
+ # Build the insert statement for each row of the current table
+ res = cu.execute("PRAGMA table_info('%s')" % table_name)
+ column_names = [str(table_info[1]) for table_info in res.fetchall()]
+ q = "SELECT 'INSERT INTO \"%(tbl_name)s\" VALUES("
+ q += ",".join(["'||quote(" + col + ")||'" for col in column_names])
+ q += ")' FROM '%(tbl_name)s'"
+ query_res = cu.execute(q % {'tbl_name': table_name})
+ for row in query_res:
+ yield("%s;" % row[0])
+
+ # Now when the type is 'index', 'trigger', or 'view'
+ q = """
+ SELECT name, type, sql
+ FROM sqlite_master
+ WHERE sql NOT NULL AND
+ type IN ('index', 'trigger', 'view')
+ """
+ schema_res = cu.execute(q)
+ for name, type, sql in schema_res.fetchall():
+ yield('%s;' % sql)
+
+ yield('COMMIT;')
import QtQuick 1.1
import com.nokia.meego 1.0
+
import "UIConstants.js" as UIConstants
import "ExtrasConstants.js" as ExtrasConstants
import QtQuick 1.1
import com.nokia.meego 1.0
+import QtMobility.location 1.1
PageStackWindow {
id: appWindow
id: mainPage
}
+ PositionSource {
+ id: positionSource
+ updateInterval: 15000
+
+ active: !(position.longitudeValid && position.latitudeValid)
+ }
+
ToolBarLayout {
id: commonTools
visible: true
left: parent.left
leftMargin: 10
}
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ console.debug(itip.get_nearby_stations(positionSource.position.coordinate.latitude, positionSource.position.coordinate.longitude))
+ debugText.text = itip.get_nearby_stations(positionSource.position.coordinate.latitude, positionSource.position.coordinate.longitude)
+ }
+ }
+ }
+
+ Text {
+ id: debugText
+ text: ''
+
+ anchors {
+ bottomMargin: 10
+ bottom: parent.bottom
+ left: logo.right
+ leftMargin: 10
+ top: logo.top
+ }
+ font.pixelSize: 16
}
}