Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
support for opening "geo:" links
It requires installation of separate package
harbour-osmscout-open-url from OpenRepos.net,
because D-Bus service files and second *.desktop
files are not allowed in Harbour (yet)
  • Loading branch information
Karry committed Jan 5, 2022
1 parent 2764554 commit c49d126
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 34 deletions.
6 changes: 6 additions & 0 deletions CMakeLists.txt
Expand Up @@ -511,6 +511,12 @@ DESTINATION share/${HARBOUR_APP_NAME}/translations)
install(FILES harbour-osmscout.desktop
DESTINATION share/applications)

install(FILES harbour-osmscout-open-url.desktop
DESTINATION share/applications)

install(FILES cz.karry.osmscout.OSMScout.service
DESTINATION share/dbus-1/services)

install(FILES icons/86x86/harbour-osmscout.png
DESTINATION share/icons/hicolor/86x86/apps)

Expand Down
4 changes: 4 additions & 0 deletions cz.karry.osmscout.OSMScout.service
@@ -0,0 +1,4 @@
[D-BUS Service]
Name=cz.karry.osmscout.OSMScout
Exec=/usr/bin/sailjail -- /usr/bin/harbour-osmscout
Path=/cz/karry/osmscout/OSMScout
12 changes: 12 additions & 0 deletions harbour-osmscout-open-url.desktop
@@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
Icon=harbour-osmscout
Name=OSM Scout

MimeType=x-scheme-handler/geo;
X-Maemo-Service=cz.karry.osmscout.OSMScout
X-Maemo-Object-Path=/cz/karry/osmscout/OSMScout
X-Maemo-Method=cz.karry.osmscout.OSMScout.openUrl

NotShowIn=X-MeeGo;
Hidden=true
104 changes: 70 additions & 34 deletions qml/pages/MapPage.qml
Expand Up @@ -174,6 +174,76 @@ Page {
id: settings
}

DBusAdaptor {
// test:
// dbus-send --session --type=method_call --print-reply --dest=cz.karry.osmscout.OSMScout /cz/karry/osmscout/OSMScout cz.karry.osmscout.OSMScout.openUrl string:test
// dbus-send --session --type=method_call --print-reply --dest=cz.karry.osmscout.OSMScout /cz/karry/osmscout/OSMScout cz.karry.osmscout.OSMScout.openPage string:Downloads string:nothing

service: "cz.karry.osmscout.OSMScout"
iface: "cz.karry.osmscout.OSMScout"
path: "/cz/karry/osmscout/OSMScout"
xml: '\
<interface name="cz.karry.osmscout.OSMScout">
<method name="openPage">
<arg name="page" type="s" direction="in">
<doc:doc>
<doc:summary>
Name of the page to open
(https://github.com/mentaljam/harbour-osmscout/tree/master/qml/pages)
</doc:summary>
</doc:doc>
</arg>
<arg name="arguments" type="a{sv}" direction="in">
<doc:doc>
<doc:summary>
Arguments to pass to the page
</doc:summary>
</doc:doc>
</arg>
</method>
<method name="openUrl">
<arg name="url" type="s" direction="in">
<doc:doc>
<doc:summary>
url of map service
</doc:summary>
</doc:doc>
</arg>
</method>
</interface>'

function openUrl(url) {
var urlStr = url + "";
console.log("open url: " + url);
if (Utils.startsWith(urlStr, "geo:")) {
var coords = urlStr.substring(4).split(',');
if (coords.length >= 2) {
var lat = coords[0];
var lon = coords[1];
// go to location and even open its details...
map.showCoordinates(lat, lon);
pageStack.push(Qt.resolvedUrl("PlaceDetail.qml"),
{
placeLat: lat,
placeLon: lon
})
} else {
console.log("cannot parse url: " + url);
}
} else {
console.log("unsupported url: " + url);
}
}

function openPage(page, arguments) {
__silica_applicationwindow_instance.activate()
console.log("D-Bus: activate page " + page + " (current: " + pageStack.currentPage.objectName + ")");
if ((page === "Tracker" || page === "Downloads") && page !== pageStack.currentPage.objectName) {
pageStack.push(Qt.resolvedUrl("%1.qml".arg(page)), arguments)
}
}
}

// resume tracking when some track is still open
Dialog {
id: trackerResumeDialog
Expand All @@ -184,40 +254,6 @@ Page {
}
}

DBusAdaptor {
service: "cz.karry.osmscout.OSMScout"
iface: "cz.karry.osmscout.OSMScout"
path: "/cz/karry/osmscout/OSMScout"
xml: '\
<interface name="cz.karry.osmscout.OSMScout">
<method name="openPage">
<arg name="page" type="s" direction="in">
<doc:doc>
<doc:summary>
Name of the page to open
(https://github.com/mentaljam/harbour-osmscout/tree/master/qml/pages)
</doc:summary>
</doc:doc>
</arg>
<arg name="arguments" type="a{sv}" direction="in">
<doc:doc>
<doc:summary>
Arguments to pass to the page
</doc:summary>
</doc:doc>
</arg>
</method>
</interface>'

function openPage(page, arguments) {
__silica_applicationwindow_instance.activate()
console.log("D-Bus: activate page " + page + " (current: " + pageStack.currentPage.objectName + ")");
if ((page === "Tracker" || page === "Downloads") && page !== pageStack.currentPage.objectName) {
pageStack.push(Qt.resolvedUrl("%1.qml".arg(page)), arguments)
}
}
}

Notification {
// device.error generates sound notification, but overrides expiration timeout
// for that reason this instance is used just for sound
Expand Down
1 change: 1 addition & 0 deletions rpm/harbour-osmscout.changes.in
Expand Up @@ -531,3 +531,4 @@
- update translations (Czech, German, Polish, Swedish)
- automatic night mode during navigation (before sunrise, after sunset and in tunnel)
- fast toggle for day / night mode
- support for opening "geo:" links. It requires installation of separate package harbour-osmscout-open-url from OpenRepos.net
13 changes: 13 additions & 0 deletions rpm/harbour-osmscout.spec
Expand Up @@ -120,3 +120,16 @@ sha1sum %{buildroot}%{_bindir}/%{name}
%{_datadir}/icons/hicolor/256x256/apps/%{name}.png
# >> files
# << files

# D-Bus service files and second *.desktop files are not allowed in Harbour (yet),
# we have to create separate package and distribute it via OpenRepos
%package open-url
Summary: Open url support for %{name}
BuildArch: noarch

%description open-url
Open url support for %{name}

%files open-url
%{_datadir}/applications/%{name}-open-url.desktop
%{_datadir}/dbus-1/services/cz.karry.osmscout.OSMScout.service

0 comments on commit c49d126

Please sign in to comment.