Merge lp:~pete-woods/unity-scope-soundcloud/native-rewrite into lp:unity-scope-soundcloud/legacy

Proposed by Pete Woods
Status: Needs review
Proposed branch: lp:~pete-woods/unity-scope-soundcloud/native-rewrite
Merge into: lp:unity-scope-soundcloud/legacy
Diff against target: 4128 lines (+3511/-375)
40 files modified
CMakeLists.txt (+78/-0)
MANIFEST.in (+0/-4)
build.sh (+70/-0)
cmake/COPYING-CMAKE-SCRIPTS (+22/-0)
cmake/Coverage.cmake (+37/-0)
cmake/FindGMock.cmake (+11/-0)
cmake/FindValgrind.cmake (+28/-0)
data/CMakeLists.txt (+38/-0)
data/soundcloud.scope.in (+6/-6)
data/unity-scope-soundcloud.service (+0/-3)
data/unity-scope-soundcloud.service.in (+3/-0)
debian/changelog (+6/-0)
debian/control (+9/-16)
debian/rules (+8/-13)
po/POTFILES.in (+5/-0)
setup.cfg (+0/-6)
setup.py (+0/-17)
src/CMakeLists.txt (+53/-0)
src/Curl.cpp (+45/-0)
src/Curl.h (+34/-0)
src/Localisation.h (+28/-0)
src/SoundCloud.cpp (+255/-0)
src/SoundCloud.h (+47/-0)
src/SoundCloudParser.cpp (+212/-0)
src/SoundCloudParser.h (+62/-0)
src/SoundCloudResult.cpp (+115/-0)
src/SoundCloudResult.h (+98/-0)
src/config.h.in (+31/-0)
src/main.cpp (+41/-0)
src/unity_soundcloud_daemon.py (+0/-245)
tests/CMakeLists.txt (+43/-0)
tests/TestCurl.cpp (+50/-0)
tests/TestSoundCloudParser.cpp (+158/-0)
tests/data/curl_data_hello (+1/-0)
tests/data/mock_soundcloud_fail (+2/-1)
tests/data/mock_soundcloud_malformed (+177/-0)
tests/data/mock_soundcloud_pass (+1639/-1)
tests/data/valgrind.suppression (+61/-0)
tests/main.cpp (+38/-0)
tests/test_soundcloud.py (+0/-63)
To merge this branch: bzr merge lp:~pete-woods/unity-scope-soundcloud/native-rewrite
Reviewer Review Type Date Requested Status
Michal Hruby (community) Needs Fixing
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+174535@code.launchpad.net

Commit message

Native re-write in C++

Description of the change

Native re-write in C++

Note: This branch is not finished yet, I just want to get Jenkins working with it.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
46. By Pete Woods

Set album metadata

47. By Pete Woods

Add more metadata to the preview

48. By Pete Woods

Add track artwork

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
49. By Pete Woods

Remove traces of libcurl

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
50. By Pete Woods

Add missing libunity-dev dependency

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
51. By Pete Woods

New tests cases

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Michal Hruby (mhr3) wrote :

Could we make this a proper module instead of yet another daemon? I know the tutorial now shows how to do a daemon, but modules are the way forward.

review: Needs Fixing
Revision history for this message
Pete Woods (pete-woods) wrote :

> Could we make this a proper module instead of yet another daemon? I know the
> tutorial now shows how to do a daemon, but modules are the way forward.

I only had a single day available to work on this, so I don't know if I'm supposed to make any more changes, but never mind that.

Have you got a good example of a module I could refer to?

Also, I couldn't get the track preview working with this. It just appears as a generic preview, with just a button (action?) that loads the SoundCloud website, there's no "play" button or anything like that.

Do you have any suggestions about what I've done wrong with the preview?

Revision history for this message
Michal Hruby (mhr3) wrote :

923 + artist ? g_variant_get_string(artist, NULL) : "",
924 + album ? g_variant_get_string(artist, NULL) : "",

I suppose the latter should be g_variant_get_string(album, NULL) :)

Revision history for this message
Michal Hruby (mhr3) wrote :

Tested the previews in real dash, and they work fine, it's just:

897 + addPreviewData(previewer, preview, "artist", _("Artist"));
898 + addPreviewData(previewer, preview, "album", _("Album"));
899 + addPreviewData(previewer, preview, "genre", _("Genre"));
900 + addPreviewData(previewer, preview, "label", _("Label"));
901 + addPreviewData(previewer, preview, "license", _("License"));
902 + addPreviewData(previewer, preview, "creation_date", _("Creation Date"));

The music preview renderer doesn't handle this correctly, pls remove.

921 + g_variant_get_string(stream, NULL), 1,

The stream URI isn't correct, it's missing the API key, and therefore it can't be played.

Perhaps the best solution would be to use GenericPreview if the stream URI isn't defined (plus keep all the metadata) and if it is present, use MusicPreview.

I also noticed a few:
QSocketNotifier: Can only be used with threads started with QThread

Is that something to be worried about? FWIW if you provide preview_async_func, you can spawn a QThread there and invoke the callback once the thread finishes.

review: Needs Fixing

Unmerged revisions

51. By Pete Woods

New tests cases

50. By Pete Woods

Add missing libunity-dev dependency

49. By Pete Woods

Remove traces of libcurl

48. By Pete Woods

Add track artwork

47. By Pete Woods

Add more metadata to the preview

46. By Pete Woods

Set album metadata

45. By Pete Woods

Put the scope into the music category

44. By Pete Woods

Sort out the preview

43. By Pete Woods

Some more translated strings

42. By Pete Woods

Update translations index

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'CMakeLists.txt'
--- CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ CMakeLists.txt 2013-07-14 08:39:27 +0000
@@ -0,0 +1,78 @@
1project(unity-scope-soundcloud CXX)
2cmake_minimum_required(VERSION 2.8.9)
3
4set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
5
6find_package(PkgConfig REQUIRED)
7
8pkg_check_modules(UNITY REQUIRED unity REQUIRED)
9include_directories(${UNITY_INCLUDE_DIRS})
10
11find_package(Qt5Core REQUIRED)
12include_directories(${Qt5Core_INCLUDE_DIRS})
13
14find_package(Qt5Network REQUIRED)
15include_directories(${Qt5Network_INCLUDE_DIRS})
16
17set(DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/data")
18
19set(CMAKE_AUTOMOC ON)
20set(CMAKE_INCLUDE_CURRENT_DIR ON)
21
22set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
23set(SOURCE_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/src")
24include_directories(${SOURCE_DIR})
25include_directories(${SOURCE_BINARY_DIR})
26
27include(GNUInstallDirs)
28include(Coverage)
29
30# Workaround for libexecdir on debian
31if (EXISTS "/etc/debian_version")
32 set(CMAKE_INSTALL_LIBEXECDIR ${CMAKE_INSTALL_LIBDIR})
33 set(CMAKE_INSTALL_FULL_LIBEXECDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}")
34endif()
35
36set(LOCALE_DIR "${CMAKE_INSTALL_FULL_DATADIR}/locale")
37
38add_definitions(
39 -std=c++11
40 -pedantic
41 -Wall
42 -Wextra
43)
44
45################
46# Definitions
47################
48
49set(GETTEXT_PACKAGE unity-scope-soundcloud)
50
51set(GROUP_NAME "com.canonical.Unity.Scope.Music.Soundcloud")
52set(UNIQUE_NAME "/com/canonical/unity/scope/music/soundcloud")
53
54set(ICON_DIR "${CMAKE_INSTALL_FULL_DATADIR}/icons/unity-icon-theme/places/svg")
55set(ICON_PATH "${ICON_DIR}/service-soundcloud.svg")
56set(CATEGORY_ICON_PATH "${ICON_DIR}/service-soundcloud.svg")
57set(DEFAULT_ICON_PATH "${ICON_DIR}/result-music.svg")
58
59##################
60# End defnitions
61##################
62
63configure_file(
64 "${SOURCE_DIR}/config.h.in"
65 "${SOURCE_BINARY_DIR}/config.h"
66)
67
68add_subdirectory("data")
69#add_subdirectory("po")
70add_subdirectory("src")
71
72enable_testing()
73add_subdirectory(tests)
74
75ADD_CUSTOM_TARGET(
76 check
77 ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure
78)
079
=== removed file 'MANIFEST.in'
--- MANIFEST.in 2013-02-13 14:31:48 +0000
+++ MANIFEST.in 1970-01-01 00:00:00 +0000
@@ -1,4 +0,0 @@
1include MANIFEST.in
2include src/*
3include data/*
4include po/*
50
=== added file 'build.sh'
--- build.sh 1970-01-01 00:00:00 +0000
+++ build.sh 2013-07-14 08:39:27 +0000
@@ -0,0 +1,70 @@
1#! /bin/bash
2set -e
3
4ECLIPSE=false
5CLEAN=false
6SOURCEDIR="$PWD"
7BRANCHNAME=`basename $SOURCEDIR`
8BUILDDIR="$SOURCEDIR/../$BRANCHNAME-build"
9
10usage() {
11 echo "usage: $0 [OPTIONS] [BUILD_TYPE]\n" >&2
12 echo "Script to build unity-scope-soundcloud. If BUILD_TYPE is not specified, it defaults to \"Debug\".\n" >&2
13 echo "OPTIONS:" >&2
14 echo " -e, --eclipse Generate Eclipse projects" >&2
15 echo " -c, --clean Clean the build tree before building" >&2
16 echo >&2
17 exit 1
18}
19
20ARGS=`getopt -n$0 -u -a --longoptions="eclipse,clean,help" -o "sch" -- "$@"`
21[ $? -ne 0 ] && usage
22eval set -- "$ARGS"
23
24while [ $# -gt 0 ]
25do
26 case "$1" in
27 -e|--eclipse) ECLIPSE=true;;
28 -c|--clean) CLEAN=true;;
29 -h|--help) usage;;
30 --) shift;break;;
31 esac
32 shift
33done
34
35[ $# -gt 1 ] && usage
36
37BUILD_TYPE="Debug"
38[ $# -eq 1 ] && BUILD_TYPE="$1"
39
40if [ -f "/usr/bin/ninja" ] ; then
41 if $ECLIPSE; then
42 GENERATOR="Eclipse CDT4 - Ninja"
43 else
44 GENERATOR="Ninja"
45 fi
46 BUILD_COMMAND="ninja"
47else
48 if $ECLIPSE; then
49 GENERATOR="Eclipse CDT4 - Unix Makefiles"
50 else
51 GENERATOR="Unix Makefiles"
52 fi
53 BUILD_COMMAND="make"
54fi
55
56echo "Using $BUILD_COMMAND to build"
57
58if $CLEAN; then
59 rm -rf $BUILDDIR
60fi
61
62mkdir -p $BUILDDIR
63(
64 cd $BUILDDIR
65 cmake "$SOURCEDIR" -G "$GENERATOR" \
66 -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
67 -DENABLE_MEMCHECK_OPTION=YES \
68 -DCMAKE_INSTALL_PREFIX="$SOURCEDIR/../$BRANCHNAME-install"
69 $BUILD_COMMAND
70)
071
=== added directory 'cmake'
=== added file 'cmake/COPYING-CMAKE-SCRIPTS'
--- cmake/COPYING-CMAKE-SCRIPTS 1970-01-01 00:00:00 +0000
+++ cmake/COPYING-CMAKE-SCRIPTS 2013-07-14 08:39:27 +0000
@@ -0,0 +1,22 @@
1Redistribution and use in source and binary forms, with or without
2modification, are permitted provided that the following conditions
3are met:
4
51. Redistributions of source code must retain the copyright
6 notice, this list of conditions and the following disclaimer.
72. Redistributions in binary form must reproduce the copyright
8 notice, this list of conditions and the following disclaimer in the
9 documentation and/or other materials provided with the distribution.
103. The name of the author may not be used to endorse or promote products
11 derived from this software without specific prior written permission.
12
13THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023
=== added file 'cmake/Coverage.cmake'
--- cmake/Coverage.cmake 1970-01-01 00:00:00 +0000
+++ cmake/Coverage.cmake 2013-07-14 08:39:27 +0000
@@ -0,0 +1,37 @@
1if (CMAKE_BUILD_TYPE MATCHES coverage)
2 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
3 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
4 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage")
5 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage")
6
7 find_program(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin")
8 if (NOT GCOVR_EXECUTABLE)
9 message(STATUS "Gcovr binary was not found, can not generate XML coverage info.")
10 else ()
11 message(STATUS "Gcovr found, can generate XML coverage info.")
12 add_custom_target (coverage-xml
13 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
14 COMMAND "${GCOVR_EXECUTABLE}" --exclude="test.*" --exclude="obj.*" -x -r "${CMAKE_SOURCE_DIR}"
15 --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml)
16 endif()
17
18 find_program(LCOV_EXECUTABLE lcov HINTS ${LCOV_ROOT} "${GCOVR_ROOT}/bin")
19 find_program(GENHTML_EXECUTABLE genhtml HINTS ${GENHTML_ROOT})
20 if (NOT LCOV_EXECUTABLE)
21 message(STATUS "Lcov binary was not found, can not generate HTML coverage info.")
22 else ()
23 if(NOT GENHTML_EXECUTABLE)
24 message(STATUS "Genthml binary not found, can not generate HTML coverage info.")
25 else()
26 message(STATUS "Lcov and genhtml found, can generate HTML coverage info.")
27 add_custom_target (coverage-html
28 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
29 COMMAND "${LCOV_EXECUTABLE}" --capture --output-file "${CMAKE_BINARY_DIR}/coverage.info" --no-checksum --directory "${CMAKE_BINARY_DIR}"
30 COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '/usr/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
31 COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_BINARY_DIR}/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
32 COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_SOURCE_DIR}/tests/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info"
33 COMMAND "${GENHTML_EXECUTABLE}" --prefix "${CMAKE_BINARY_DIR}" --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info
34 )
35 endif()
36 endif()
37endif()
038
=== added file 'cmake/FindGMock.cmake'
--- cmake/FindGMock.cmake 1970-01-01 00:00:00 +0000
+++ cmake/FindGMock.cmake 2013-07-14 08:39:27 +0000
@@ -0,0 +1,11 @@
1# Build with system gmock and embedded gtest
2set (GMOCK_INCLUDE_DIRS "/usr/include/gmock/include" CACHE PATH "gmock source include directory")
3set (GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory")
4set (GTEST_INCLUDE_DIRS "${GMOCK_SOURCE_DIR}/gtest/include" CACHE PATH "gtest source include directory")
5
6add_subdirectory(${GMOCK_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gmock")
7
8set(GTEST_LIBRARIES gtest)
9set(GTEST_MAIN_LIBRARIES gtest_main)
10set(GMOCK_LIBRARIES gmock)
11set(GMOCK_BOTH_LIBRARIES gmock gmock_main)
012
=== added file 'cmake/FindValgrind.cmake'
--- cmake/FindValgrind.cmake 1970-01-01 00:00:00 +0000
+++ cmake/FindValgrind.cmake 2013-07-14 08:39:27 +0000
@@ -0,0 +1,28 @@
1
2option(
3 ENABLE_MEMCHECK_OPTION
4 "If set to ON, enables automatic creation of memcheck targets"
5 OFF
6)
7
8find_program(
9 VALGRIND_PROGRAM
10 NAMES valgrind
11)
12
13if(VALGRIND_PROGRAM)
14 set(VALGRIND_PROGRAM_OPTIONS "--suppressions=${CMAKE_SOURCE_DIR}/tests/data/valgrind.suppression" "--gen-suppressions=all" "--error-exitcode=1" "--leak-check=full" "--quiet")
15endif()
16
17find_package_handle_standard_args(
18 VALGRIND DEFAULT_MSG
19 VALGRIND_PROGRAM
20)
21
22function(add_valgrind_test NAME EXECUTABLE)
23 if(ENABLE_MEMCHECK_OPTION)
24 add_test(${NAME} ${VALGRIND_PROGRAM} ${VALGRIND_PROGRAM_OPTIONS} "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE}")
25 else()
26 add_test(${NAME} ${EXECUTABLE})
27 endif()
28endfunction()
029
=== added file 'data/CMakeLists.txt'
--- data/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ data/CMakeLists.txt 2013-07-14 08:39:27 +0000
@@ -0,0 +1,38 @@
1
2############################
3# DBus service definition
4############################
5
6configure_file(
7 unity-scope-soundcloud.service.in
8 unity-scope-soundcloud.service
9)
10
11install(
12 FILES "${CMAKE_CURRENT_BINARY_DIR}/unity-scope-soundcloud.service"
13 DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/services/"
14)
15
16############################
17# Scope definition
18############################
19
20configure_file(
21 soundcloud.scope.in
22 soundcloud.scope
23)
24
25install(
26 FILES "${CMAKE_CURRENT_BINARY_DIR}/soundcloud.scope"
27 DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes/music/"
28)
29
30############################
31# Icons
32############################
33
34# TODO: Why is this file already provided?
35#install(
36# FILES "icons/service-soundcloud.svg"
37# DESTINATION "${ICON_DIR}"
38#)
039
=== modified file 'data/soundcloud.scope.in'
--- data/soundcloud.scope.in 2013-07-08 07:47:59 +0000
+++ data/soundcloud.scope.in 2013-07-14 08:39:27 +0000
@@ -1,18 +1,18 @@
1[Scope]1[Scope]
2DBusName=com.canonical.Unity.Scope.Music.Soundcloud2DBusName=@GROUP_NAME@
3DBusPath=/com/canonical/unity/scope/music/soundcloud3DBusPath=@UNIQUE_NAME@
4Icon=/usr/share/icons/unity-icon-theme/places/svg/service-soundcloud.svg4Icon=@ICON_PATH@
5QueryBinary=
5_Keywords=soundcloud;music;track;sound;listen;6_Keywords=soundcloud;music;track;sound;listen;
6RequiredMetadata=album[s];artist[s];7RequiredMetadata=album[s];artist[s];
7OptionalMetadata=genre[s];label[s];license[s];stream[s];8OptionalMetadata=genre[s];label[s];license[s];stream[s];
8Loader=/usr/share/unity-scopes/soundcloud/unity_soundcloud_daemon.py9Loader=
9Module=soundcloud.unity_soundcloud_daemon
10ModuleType=python3
11RemoteContent=true10RemoteContent=true
12Type=music11Type=music
13_Name=SoundCloud12_Name=SoundCloud
14_Description=This is an Ubuntu search plugin that enables information from SoundCloud to be searched and displayed in the Dash underneath the Music header. If you do not wish to search this content source, you can disable this search plugin.13_Description=This is an Ubuntu search plugin that enables information from SoundCloud to be searched and displayed in the Dash underneath the Music header. If you do not wish to search this content source, you can disable this search plugin.
15_SearchHint=Search SoundCloud14_SearchHint=Search SoundCloud
15CategoryIcon=@CATEGORY_ICON_PATH@
1616
17[Desktop Entry]17[Desktop Entry]
18X-Ubuntu-Gettext-Domain=unity-scope-soundcloud18X-Ubuntu-Gettext-Domain=unity-scope-soundcloud
1919
=== removed file 'data/unity-scope-soundcloud.service'
--- data/unity-scope-soundcloud.service 2013-07-08 07:47:59 +0000
+++ data/unity-scope-soundcloud.service 1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
1[D-BUS Service]
2Name=com.canonical.Unity.Scope.Music.Soundcloud
3Exec=/usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s music/soundcloud.scope
40
=== added file 'data/unity-scope-soundcloud.service.in'
--- data/unity-scope-soundcloud.service.in 1970-01-01 00:00:00 +0000
+++ data/unity-scope-soundcloud.service.in 2013-07-14 08:39:27 +0000
@@ -0,0 +1,3 @@
1[D-BUS Service]
2Name=@GROUP_NAME@
3Exec=@CMAKE_INSTALL_FULL_LIBEXECDIR@/unity-scope-soundcloud/unity-scope-soundcloud
04
=== modified file 'debian/changelog'
--- debian/changelog 2013-06-05 06:18:56 +0000
+++ debian/changelog 2013-07-14 08:39:27 +0000
@@ -1,3 +1,9 @@
1unity-scope-soundcloud (0.2-0ubuntu1) UNRELEASED; urgency=low
2
3 * Re-write in C++.
4
5 -- Pete Woods <pete.woods@canonical.com> Fri, 12 Jul 2013 16:43:17 +0100
6
1unity-scope-soundcloud (0.1daily13.06.05-0ubuntu1) saucy; urgency=low7unity-scope-soundcloud (0.1daily13.06.05-0ubuntu1) saucy; urgency=low
28
3 [ Michael Terry ]9 [ Michael Terry ]
410
=== modified file 'debian/control'
--- debian/control 2013-05-17 13:04:12 +0000
+++ debian/control 2013-07-14 08:39:27 +0000
@@ -3,14 +3,13 @@
3Priority: optional3Priority: optional
4Maintainer: David Callé <davidc@framli.eu>4Maintainer: David Callé <davidc@framli.eu>
5Build-Depends: debhelper (>= 9),5Build-Depends: debhelper (>= 9),
6 python3,6 cmake,
7 python3-distutils-extra,
8 python3-gi,
9 pkg-config,7 pkg-config,
10 python3-nose,8 google-mock (>= 1.6.0+svn437),
11 gir1.2-unity-5.0 (>= 7),9 qtbase5-dev,
12 gir1.2-dee-1.0 (>= 1.2.5),10 libunity-dev (>= 7.0.6),
13 gir1.2-glib-2.0,11 valgrind,
12 gettext,
14Standards-Version: 3.9.413Standards-Version: 3.9.4
15Homepage: https://launchpad.net/unity-scope-soundcloud14Homepage: https://launchpad.net/unity-scope-soundcloud
16# If you aren't a member of ~submarine but need to upload packaging changes,15# If you aren't a member of ~submarine but need to upload packaging changes,
@@ -18,15 +17,9 @@
18Vcs-Bzr: https://code.launchpad.net/~submarine/unity-scope-soundcloud/trunk17Vcs-Bzr: https://code.launchpad.net/~submarine/unity-scope-soundcloud/trunk
19 18
20Package: unity-scope-soundcloud19Package: unity-scope-soundcloud
21Architecture: all20Architecture: any
22Depends: ${misc:Depends},21Depends: ${misc:Depends},
23 ${python3:Depends},22 ${shlibs:Depends}
24 python3,
25 python3-gi,
26 gir1.2-unity-5.0 (>= 7),
27 gir1.2-dee-1.0 (>= 1.2.5),
28 unity-scopes-runner,
29 gir1.2-glib-2.0
30Description: SoundCloud scope for Unity23Description: SoundCloud scope for Unity
31 This package contains the "soundcloud" scope which allows Unity24 This package contains the "soundcloud" scope which allows Unity
32 to search for SoundCloud content.25 to search for SoundCloud content.
3326
=== modified file 'debian/rules'
--- debian/rules 2013-03-21 19:23:19 +0000
+++ debian/rules 2013-07-14 08:39:27 +0000
@@ -1,18 +1,13 @@
1#!/usr/bin/make -f1#!/usr/bin/make -f
2# -*- makefile -*-2# -*- makefile -*-
33
4export DPKG_GENSYMBOLS_CHECK_LEVEL=4
45
5%:6%:
6 dh $@ --with python37 dh $@ --parallel --fail-missing
78
8override_dh_auto_clean:9override_dh_auto_configure:
9 python3 setup.py clean -a10 dh_auto_configure -- -DENABLE_MEMCHECK_OPTION=YES
1011
11override_dh_auto_build:12override_dh_makeshlibs:
12 python3 setup.py build13 dh_makeshlibs -V
13
14override_dh_auto_test:
15 nosetests3
16
17override_dh_auto_install:
18 python3 setup.py install --root=$(CURDIR)/debian/unity-scope-soundcloud --install-layout=deb
1914
=== added directory 'include'
=== modified file 'po/POTFILES.in'
--- po/POTFILES.in 2013-01-20 02:51:48 +0000
+++ po/POTFILES.in 2013-07-14 08:39:27 +0000
@@ -1,3 +1,8 @@
1[encoding: UTF-8]1[encoding: UTF-8]
2src/Curl.cpp
3src/SoundCloud.cpp
4src/SoundCloudParser.cpp
5src/SoundCloudResult.cpp
6src/unity_soundcloud_daemon.py
2src/unity_soundcloud_daemon.py7src/unity_soundcloud_daemon.py
3[type: gettext/ini]data/soundcloud.scope.in8[type: gettext/ini]data/soundcloud.scope.in
49
=== removed file 'setup.cfg'
--- setup.cfg 2013-03-13 19:44:26 +0000
+++ setup.cfg 1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
1[build]
2i18n=True
3
4[build_i18n]
5domain=unity-scope-soundcloud
6desktop_files=[('share/unity/scopes/music', ('data/soundcloud.scope.in',))]
70
=== removed file 'setup.py'
--- setup.py 2013-03-20 20:25:24 +0000
+++ setup.py 1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3from distutils.core import setup
4from DistUtilsExtra.command import *
5
6setup(name='unity-scope-soundcloud',
7 version='0.1',
8 author='David Callé',
9 author_email='davidc@framli.eu',
10 url='http://launchpad.net/ubuntu-scopes',
11 license='GNU General Public License (GPL)',
12 data_files=[
13 ('share/dbus-1/services', ['data/unity-scope-soundcloud.service']),
14 ('share/unity-scopes/soundcloud', ['src/unity_soundcloud_daemon.py']),
15 ('share/unity-scopes/soundcloud', ['src/__init__.py']),
16 ], cmdclass={'build': build_extra.build_extra,
17 'build_i18n': build_i18n.build_i18n,})
180
=== added file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ src/CMakeLists.txt 2013-07-14 08:39:27 +0000
@@ -0,0 +1,53 @@
1
2########################################
3# SoundCloud static library for testing
4########################################
5
6set(
7 SOUNDCLOUD_SOURCES
8 Curl.cpp
9 SoundCloud.cpp
10 SoundCloudParser.cpp
11 SoundCloudResult.cpp
12)
13
14add_library(
15 soundcloud
16 STATIC
17 ${SOUNDCLOUD_SOURCES}
18)
19
20target_link_libraries(
21 soundcloud
22 ${UNITY_LIBRARIES}
23)
24
25qt5_use_modules(
26 soundcloud
27 Core
28 Network
29)
30
31#########################################
32# SoundCloud executable for installation
33#########################################
34
35add_executable(
36 unity-scope-soundcloud
37 main.cpp
38)
39
40target_link_libraries(
41 unity-scope-soundcloud
42 soundcloud
43)
44
45qt5_use_modules(
46 unity-scope-soundcloud
47 Core
48)
49
50install(
51 TARGETS unity-scope-soundcloud
52 RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}/unity-scope-soundcloud/"
53)
054
=== added file 'src/Curl.cpp'
--- src/Curl.cpp 1970-01-01 00:00:00 +0000
+++ src/Curl.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,45 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <Curl.h>
20#include <QtCore/QObject>
21#include <QtCore/QUrl>
22#include <QtCore/QEventLoop>
23#include <QtNetwork/QNetworkAccessManager>
24#include <QtNetwork/QNetworkRequest>
25#include <QtNetwork/QNetworkReply>
26
27using namespace std;
28
29Curl::Curl() {
30}
31
32Curl::~Curl() {
33}
34
35QByteArray Curl::read(const string& url) const {
36 QNetworkAccessManager manager;
37 QNetworkReply *reply = manager.get(
38 QNetworkRequest(QUrl(QString::fromStdString(url))));
39
40 QEventLoop loop;
41 QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
42 loop.exec();
43
44 return reply->readAll();
45}
046
=== added file 'src/Curl.h'
--- src/Curl.h 1970-01-01 00:00:00 +0000
+++ src/Curl.h 2013-07-14 08:39:27 +0000
@@ -0,0 +1,34 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef SOUNDCLOUD_CURL_H_
20#define SOUNDCLOUD_CURL_H_
21
22#include <QtCore/QByteArray>
23#include <string>
24
25class Curl {
26public:
27 explicit Curl();
28
29 virtual ~Curl();
30
31 virtual QByteArray read(const std::string& url) const;
32};
33
34#endif // SOUNDCLOUD_CURL_H_
035
=== added file 'src/Localisation.h'
--- src/Localisation.h 1970-01-01 00:00:00 +0000
+++ src/Localisation.h 2013-07-14 08:39:27 +0000
@@ -0,0 +1,28 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef SOUNDCLOUD_LOCALISATION_H_
20#define SOUNDCLOUD_LOCALISATION_H_
21
22#include <libintl.h>
23
24inline char* _(const char *__msgid) {
25 return gettext(__msgid);
26}
27
28#endif // SOUNDCLOUD_LOCALISATION_H_
029
=== added file 'src/SoundCloud.cpp'
--- src/SoundCloud.cpp 1970-01-01 00:00:00 +0000
+++ src/SoundCloud.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,255 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <config.h>
20#include <SoundCloud.h>
21#include <SoundCloudParser.h>
22#include <Localisation.h>
23
24#include <string>
25#include <iostream>
26
27using namespace std;
28
29/**
30 * This is the main function: the scope is defined and exported, a DBUS
31 * connector is created and the main loop is run
32 */
33SoundCloud::SoundCloud(shared_ptr<Curl> curl) :
34 m_curl(curl) {
35 UnitySimpleScope *scope = NULL;
36 UnityScopeDBusConnector *connector = NULL;
37 UnityCategorySet *cats = NULL;
38 UnityCategory *cat = NULL;
39 GIcon *icon = NULL;
40
41 /* Create and set a category for the scope, including an icon */
42 icon = g_themed_icon_new(CATEGORY_ICON_PATH);
43
44 cat = unity_category_new("songs", _("Songs"), icon,
45 UNITY_CATEGORY_RENDERER_VERTICAL_TILE);
46 cats = unity_category_set_new();
47 unity_category_set_add(cats, cat);
48
49 // Create and set up the scope
50 scope = unity_simple_scope_new();
51 unity_simple_scope_set_group_name(scope, GROUP_NAME);
52 unity_simple_scope_set_unique_name(scope, UNIQUE_NAME);
53 unity_simple_scope_set_search_func(scope, search_func,
54 reinterpret_cast<void *>(this), NULL);
55 unity_simple_scope_set_preview_func(scope, preview_func,
56 reinterpret_cast<void *>(this), NULL);
57 unity_simple_scope_set_category_set(scope, cats);
58
59 // Set up schema
60 UnitySchema* schema = unity_schema_new();
61 for (const string &field : vector<string>( { "artist", "album" })) {
62 unity_schema_add_field(schema, field.data(), "s",
63 UNITY_SCHEMA_FIELD_TYPE_REQUIRED);
64 }
65 for (const string &field : vector<string>( { "genre", "label", "license",
66 "stream", "duration", "provider_credits" })) {
67 unity_schema_add_field(schema, field.data(), "s",
68 UNITY_SCHEMA_FIELD_TYPE_OPTIONAL);
69 }
70 unity_simple_scope_set_schema(scope, schema);
71 unity_object_unref(schema);
72
73 g_object_unref(icon);
74 unity_object_unref(cat);
75 unity_object_unref(cats);
76
77 /*
78 * Setting up the connector is an action that will not be required
79 * in future revisions of the API. In particular, we only need it here
80 * since the scope is running locally on the device as opposed to
81 * running on the Smart Scopes server
82 */
83 connector = unity_scope_dbus_connector_new(UNITY_ABSTRACT_SCOPE(scope) );
84 unity_scope_dbus_connector_export(connector, NULL);
85 unity_scope_dbus_connector_run();
86}
87
88SoundCloud::~SoundCloud() {
89}
90
91static inline void addMetadata(UnityScopeResult &scope_result, const gchar *id,
92 const string &value) {
93 if (!value.empty()) {
94 g_hash_table_insert(scope_result.metadata, (gpointer) id,
95 g_variant_new_string(value.data()));
96 }
97}
98
99/**
100 * In this function the results from the backend are obtained and
101 * added to the search results in the Dash
102 *
103 * @brief Search function
104 * @param search Search term
105 * @param user_data Additional user data
106 */
107void SoundCloud::searchFunc(UnityScopeSearchBase* search) {
108 UnityScopeResult scope_result = { 0, 0, 0, UNITY_RESULT_TYPE_DEFAULT,
109 (gchar *) "text/html", 0, 0, 0, 0 };
110
111 SoundCloudParser parser(m_curl);
112
113 /* Fetch the results from the backend */
114 deque<SoundCloudResult> results(
115 parser.getResults(search->search_context->search_query));
116
117 /* Iterate through the returned results and add them to the
118 * Unity's result set
119 */
120 for (const SoundCloudResult &result : results) {
121 /* Build and populate a scope result from the source data */
122 scope_result.uri = const_cast<char *>(result.uri().data());
123 scope_result.title = const_cast<char *>(result.title().data());
124 scope_result.icon_hint = const_cast<char *>(result.icon().data());
125 scope_result.comment = const_cast<char *>(result.comment().data());
126 scope_result.dnd_uri = const_cast<char *>(result.uri().data());
127
128 /* Insert the metadata, if available */
129 scope_result.metadata = g_hash_table_new(g_str_hash, g_str_equal);
130 g_hash_table_insert(scope_result.metadata, (gpointer) "artist",
131 g_variant_new_string(result.artist().data()));
132 g_hash_table_insert(scope_result.metadata, (gpointer) "album",
133 g_variant_new_string("album"));
134
135 addMetadata(scope_result, "genre", result.genre());
136 addMetadata(scope_result, "label", result.label());
137 addMetadata(scope_result, "license", result.license());
138 addMetadata(scope_result, "stream", result.stream());
139 addMetadata(scope_result, "duration", result.duration());
140 addMetadata(scope_result, "creation_date", result.creationDate());
141
142 /*
143 * Add the returned result to the search results list, taking a
144 * copy of the data passed in via scope_result
145 */
146 unity_result_set_add_result(search->search_context->result_set,
147 &scope_result);
148
149 g_hash_table_unref(scope_result.metadata);
150 }
151
152}
153
154static void addPreviewData(UnityResultPreviewer *previewer,
155 UnityPreview *preview, const char *id, const char *display_name) {
156 GVariant *variant = (GVariant *) g_hash_table_lookup(
157 previewer->result.metadata, id);
158
159 /* There are 2 ways to do this, the first method just directly
160 * uses the GVariant from the hash. The second extracts the string
161 * first, which might be useful for debugging. */
162 if (variant) {
163 UnityInfoHint *hint = unity_info_hint_new_with_variant(id, display_name,
164 NULL, variant);
165 /* The ref call here and unref below are to work-around a bug in
166 * libunity, see:
167 * http://code.launchpad.net/~mhr3/libunity/floating-fixes */
168 g_object_ref(hint);
169 unity_preview_add_info(preview, hint);
170 g_object_unref(hint);
171 }
172}
173
174/**
175 * This function will be invoked when the user clicks on the result and
176 * its preview is shown in the Dash.
177 * There are a set of predefined preview types: simply pick one, instantiate
178 * it, add metadata to it if available, and return it.
179 *
180 * @brief Dash preview function
181 * @param previewer Result previewer
182 * @param user_data Additional user data
183 * @return Preview populated with the result's data
184 */
185UnityAbstractPreview * SoundCloud::previewFunc(
186 UnityResultPreviewer *previewer) {
187 UnityPreview *preview = NULL;
188 UnityPreviewAction *action = NULL;
189
190 /* Create a music preview */
191 preview =
192 UNITY_PREVIEW(unity_music_preview_new(previewer->result.title,
193 previewer->result.comment, g_icon_new_for_string(previewer->result.icon_hint, NULL)));
194
195 /* Set up the preview's action */
196 action = unity_preview_action_new_with_uri(previewer->result.uri,
197 _("SoundCloud"), g_icon_new_for_string(CATEGORY_ICON_PATH, NULL));
198 unity_preview_add_action(preview, action);
199 unity_object_unref(action);
200
201 /* If the result contains metadata, add it to the preview */
202 if (previewer->result.metadata) {
203 addPreviewData(previewer, preview, "artist", _("Artist"));
204 addPreviewData(previewer, preview, "album", _("Album"));
205 addPreviewData(previewer, preview, "genre", _("Genre"));
206 addPreviewData(previewer, preview, "label", _("Label"));
207 addPreviewData(previewer, preview, "license", _("License"));
208 addPreviewData(previewer, preview, "creation_date", _("Creation Date"));
209
210 {
211 GVariant *stream = (GVariant *) g_hash_table_lookup(
212 previewer->result.metadata, "stream");
213
214 if (stream) {
215 GVariant *artist = (GVariant *) g_hash_table_lookup(
216 previewer->result.metadata, "artist");
217 GVariant *album = (GVariant *) g_hash_table_lookup(
218 previewer->result.metadata, "album");
219 GVariant *duration = (GVariant *) g_hash_table_lookup(
220 previewer->result.metadata, "duration");
221 guint length = 0;
222 if (duration) {
223 length = stoi(string(g_variant_get_string(duration, NULL)))
224 / 1000;
225 }
226 UnityTrackMetadata *track = unity_track_metadata_new_full(
227 g_variant_get_string(stream, NULL), 1,
228 previewer->result.title,
229 artist ? g_variant_get_string(artist, NULL) : "",
230 album ? g_variant_get_string(artist, NULL) : "",
231 length);
232
233 unity_music_preview_add_track(UNITY_MUSIC_PREVIEW(preview),
234 track);
235 unity_track_metadata_set_art_icon(track,
236 g_icon_new_for_string(previewer->result.icon_hint,
237 NULL));
238 unity_object_unref(track);
239 }
240 }
241 }
242
243 return UNITY_ABSTRACT_PREVIEW(preview) ;
244}
245
246void SoundCloud::search_func(UnityScopeSearchBase* search, void* user_data) {
247 SoundCloud *soundCloud(reinterpret_cast<SoundCloud *>(user_data));
248 soundCloud->searchFunc(search);
249}
250
251UnityAbstractPreview *
252SoundCloud::preview_func(UnityResultPreviewer *previewer, void *user_data) {
253 SoundCloud *soundCloud(reinterpret_cast<SoundCloud *>(user_data));
254 return soundCloud->previewFunc(previewer);
255}
0256
=== added file 'src/SoundCloud.h'
--- src/SoundCloud.h 1970-01-01 00:00:00 +0000
+++ src/SoundCloud.h 2013-07-14 08:39:27 +0000
@@ -0,0 +1,47 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef SOUNDCLOUD_H_
20#define SOUNDCLOUD_H_
21
22#include <Curl.h>
23
24#include <memory>
25#include <unity.h>
26
27class SoundCloud {
28public:
29 explicit SoundCloud(std::shared_ptr<Curl> curl);
30
31 virtual ~SoundCloud();
32
33protected:
34 static UnityAbstractPreview * preview_func(UnityResultPreviewer *previewer,
35 void *user_data);
36
37 static void search_func(UnityScopeSearchBase* search, void* user_data);
38
39 UnityAbstractPreview * previewFunc(UnityResultPreviewer *previewer);
40
41 void searchFunc(UnityScopeSearchBase* search);
42
43 std::shared_ptr<Curl> m_curl;
44
45};
46
47#endif // SOUNDCLOUD_H_
048
=== added file 'src/SoundCloudParser.cpp'
--- src/SoundCloudParser.cpp 1970-01-01 00:00:00 +0000
+++ src/SoundCloudParser.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,212 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <SoundCloudParser.h>
20#include <Localisation.h>
21#include <Curl.h>
22
23#include <iostream>
24#include <sstream>
25#include <stdexcept>
26
27#include <QtCore/QXmlStreamReader>
28
29using namespace std;
30
31const string SoundCloudParser::SEARCH_URI = "https://api.soundcloud.com/";
32
33const string SoundCloudParser::API_KEY = "398e83f17ec3c5cf945f04772de9f400";
34
35SoundCloudParser::SoundCloudParser(std::shared_ptr<Curl> curl) :
36 m_curl(curl) {
37}
38
39SoundCloudParser::~SoundCloudParser() {
40}
41
42deque<SoundCloudResult> SoundCloudParser::getResults(const string &searchTerm) {
43 deque<SoundCloudResult> results;
44
45 /* Check if an actual search term was submitted, return otherwise */
46 if (searchTerm.empty()) {
47 cerr << _("SearchTerm cannot be empty");
48 return results;
49 }
50
51 /* Construct the full search query */
52 ostringstream urlStream;
53 urlStream << SEARCH_URI << "tracks?consumer_key=" << API_KEY << "&q="
54 << searchTerm << "&order=hotness&limit=30";
55
56 /*
57 * Submit the query to the source, parse the results and populate
58 * the results list here.
59 */
60 QXmlStreamReader xml(m_curl->read(urlStream.str()));
61
62 try {
63 while (!xml.atEnd()) {
64 QXmlStreamReader::TokenType token = xml.readNext();
65 if (xml.error() != QXmlStreamReader::NoError) {
66 throw logic_error(_("XML not well formed"));
67 }
68
69 /* If token is just StartDocument, we'll go to next.*/
70 if (token == QXmlStreamReader::StartDocument) {
71 continue;
72 }
73
74 /* If token is StartElement, we'll see if we can read it.*/
75 if (token == QXmlStreamReader::StartElement) {
76 /* If it's named tracks, we'll go to the next.*/
77 if (xml.name() == "tracks") {
78 continue;
79 }
80 /* If it's named track, we'll dig the information from there.*/
81 if (xml.name() == "track") {
82 parseTrack(xml, results);
83 }
84 }
85 }
86 } catch (logic_error &e) {
87 cerr << e.what() << endl;
88 results.pop_back();
89 }
90
91 return results;
92}
93
94void SoundCloudParser::parseTrack(QXmlStreamReader& xml,
95 deque<SoundCloudResult> &results) {
96 /* Let's check that we're really getting a track. */
97 if (xml.tokenType() != QXmlStreamReader::StartElement
98 && xml.name() == "track") {
99 cerr << _("Not a track") << endl;
100 return;
101 }
102
103 results.push_back(SoundCloudResult());
104 SoundCloudResult &track(results.back());
105
106 /* Next element... */
107 xml.readNext();
108 if (xml.error() != QXmlStreamReader::NoError) {
109 throw logic_error(_("XML not well formed"));
110 }
111
112 /*
113 * We're going to loop over the things because the order might change.
114 * We'll continue the loop until we hit an EndElement named track.
115 */
116 while (!(xml.tokenType() == QXmlStreamReader::EndElement
117 && xml.name() == "track")) {
118 if (xml.tokenType() == QXmlStreamReader::StartElement) {
119 if (xml.name() == "permalink-url") {
120 track.setUri(readCharacterData(xml));
121 } else if (xml.name() == "artwork-url") {
122 track.setIcon(readCharacterData(xml));
123 } else if (xml.name() == "title") {
124 track.setTitle(readCharacterData(xml));
125 } else if (xml.name() == "description") {
126 track.setComment(readCharacterData(xml));
127 } else if (xml.name() == "genre") {
128 track.setGenre(readCharacterData(xml));
129 } else if (xml.name() == "label-name") {
130 track.setLabel(readCharacterData(xml));
131 } else if (xml.name() == "license") {
132 track.setLicense(readCharacterData(xml));
133 } else if (xml.name() == "stream-url") {
134 track.setStream(readCharacterData(xml));
135 } else if (xml.name() == "created-at") {
136 track.setCreationDate(readCharacterData(xml));
137 } else if (xml.name() == "duration") {
138 track.setDuration(readCharacterData(xml));
139 } else if (xml.name() == "user") {
140 track.setArtist(readUserName(xml));
141 } else if (xml.name() == "created-with") {
142 xml.skipCurrentElement();
143 }
144 }
145
146 /* ...and next... */
147 xml.readNext();
148 if (xml.error() != QXmlStreamReader::NoError) {
149 throw logic_error(_("XML not well formed"));
150 }
151 }
152}
153
154string SoundCloudParser::readUserName(QXmlStreamReader& xml) const {
155 /* Let's check that we're really getting a user. */
156 if (xml.tokenType() != QXmlStreamReader::StartElement
157 && xml.name() == "user") {
158 cerr << _("Not a user") << endl;
159 return "";
160 }
161
162 /* Next element... */
163 xml.readNext();
164 if (xml.error() != QXmlStreamReader::NoError) {
165 throw logic_error(_("XML not well formed"));
166 }
167
168 string result("");
169
170 /*
171 * We're going to loop over the things because the order might change.
172 * We'll continue the loop until we hit an EndElement named user.
173 */
174 while (!(xml.tokenType() == QXmlStreamReader::EndElement
175 && xml.name() == "user")) {
176 if (xml.tokenType() == QXmlStreamReader::StartElement) {
177 if (xml.name() == "username") {
178 result = readCharacterData(xml);
179 }
180 }
181
182 /* ...and next... */
183 xml.readNext();
184 if (xml.error() != QXmlStreamReader::NoError) {
185 throw logic_error(_("XML not well formed"));
186 }
187 }
188
189 return result;
190}
191
192string SoundCloudParser::readCharacterData(QXmlStreamReader& xml) const {
193 /* We need a start element, like <foo> */
194 if (xml.tokenType() != QXmlStreamReader::StartElement) {
195 return "";
196 }
197
198 xml.readNext();
199 if (xml.error() != QXmlStreamReader::NoError) {
200 throw logic_error(_("XML not well formed"));
201 }
202 /*
203 * This elements needs to contain Characters so we know it's
204 * actually data, if it's not we'll leave.
205 */
206 if (xml.tokenType() != QXmlStreamReader::Characters) {
207 return "";
208 }
209
210 /* Now we can get the data*/
211 return xml.text().toString().toStdString();
212}
0213
=== added file 'src/SoundCloudParser.h'
--- src/SoundCloudParser.h 1970-01-01 00:00:00 +0000
+++ src/SoundCloudParser.h 2013-07-14 08:39:27 +0000
@@ -0,0 +1,62 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef SOUNDCLOUD_PARSER_H_
20#define SOUNDCLOUD_PARSER_H_
21
22#include <SoundCloudResult.h>
23#include <Curl.h>
24
25#include <string>
26#include <deque>
27#include <memory>
28
29QT_BEGIN_NAMESPACE
30class QXmlStreamReader;
31QT_END_NAMESPACE
32
33class SoundCloudParser {
34public:
35 static const std::string SEARCH_URI;
36
37 static const std::string API_KEY;
38
39 explicit SoundCloudParser(std::shared_ptr<Curl> curl);
40
41 virtual ~SoundCloudParser();
42
43 /**
44 * @brief Get and parse the results from a search query
45 * @param searchTerm String submitted as the search term
46 *
47 * @return Search results
48 */
49 std::deque<SoundCloudResult> getResults(const std::string &searchTerm);
50
51protected:
52 void parseTrack(QXmlStreamReader& xml,
53 std::deque<SoundCloudResult> &results);
54
55 std::string readCharacterData(QXmlStreamReader& xml) const;
56
57 std::string readUserName(QXmlStreamReader& xml) const;
58
59 std::shared_ptr<Curl> m_curl;
60};
61
62#endif // SOUNDCLOUD_PARSER_H_
063
=== added file 'src/SoundCloudResult.cpp'
--- src/SoundCloudResult.cpp 1970-01-01 00:00:00 +0000
+++ src/SoundCloudResult.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,115 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY{} without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <SoundCloudResult.h>
20#include <config.h>
21
22SoundCloudResult::SoundCloudResult() :
23 m_icon(DEFAULT_ICON_PATH) {
24}
25
26SoundCloudResult::~SoundCloudResult() {
27}
28
29void SoundCloudResult::setUri(const std::string &uri) {
30 m_uri = uri;
31}
32
33const std::string & SoundCloudResult::uri() const {
34 return m_uri;
35}
36
37void SoundCloudResult::setIcon(const std::string &icon) {
38 m_icon = icon;
39}
40
41const std::string & SoundCloudResult::icon() const {
42 return m_icon;
43}
44
45void SoundCloudResult::setTitle(const std::string &title) {
46 m_title = title;
47}
48
49const std::string & SoundCloudResult::title() const {
50 return m_title;
51}
52
53void SoundCloudResult::setComment(const std::string &comment) {
54 m_comment = comment;
55}
56
57const std::string & SoundCloudResult::comment() const {
58 return m_comment;
59}
60
61void SoundCloudResult::setGenre(const std::string &genre) {
62 m_genre = genre;
63}
64
65const std::string & SoundCloudResult::genre() const {
66 return m_genre;
67}
68
69void SoundCloudResult::setLabel(const std::string &label) {
70 m_label = label;
71}
72
73const std::string & SoundCloudResult::label() const {
74 return m_label;
75}
76
77void SoundCloudResult::setLicense(const std::string &license) {
78 m_license = license;
79}
80
81const std::string & SoundCloudResult::license() const {
82 return m_license;
83}
84
85void SoundCloudResult::setStream(const std::string &stream) {
86 m_stream = stream;
87}
88
89const std::string & SoundCloudResult::stream() const {
90 return m_stream;
91}
92
93void SoundCloudResult::setDuration(const std::string &duration) {
94 m_duration = duration;
95}
96
97const std::string & SoundCloudResult::duration() const {
98 return m_duration;
99}
100
101void SoundCloudResult::setArtist(const std::string &artist) {
102 m_artist = artist;
103}
104
105const std::string & SoundCloudResult::artist() const {
106 return m_artist;
107}
108
109void SoundCloudResult::setCreationDate(const std::string &creationDate) {
110 m_creationDate = creationDate;
111}
112
113const std::string & SoundCloudResult::creationDate() const {
114 return m_creationDate;
115}
0116
=== added file 'src/SoundCloudResult.h'
--- src/SoundCloudResult.h 1970-01-01 00:00:00 +0000
+++ src/SoundCloudResult.h 2013-07-14 08:39:27 +0000
@@ -0,0 +1,98 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef SOUNDCLOUDRESULT_H_
20#define SOUNDCLOUDRESULT_H_
21
22#include <string>
23
24class SoundCloudResult {
25public:
26 explicit SoundCloudResult();
27
28 virtual ~SoundCloudResult();
29
30 void setUri(const std::string &uri);
31
32 const std::string & uri() const;
33
34 void setIcon(const std::string &icon);
35
36 const std::string & icon() const;
37
38 void setTitle(const std::string &title);
39
40 const std::string & title() const;
41
42 void setComment(const std::string &comment);
43
44 const std::string & comment() const;
45
46 void setGenre(const std::string &genre);
47
48 const std::string & genre() const;
49
50 void setLabel(const std::string &label);
51
52 const std::string & label() const;
53
54 void setLicense(const std::string &license);
55
56 const std::string & license() const;
57
58 void setStream(const std::string &stream);
59
60 const std::string & stream() const;
61
62 void setDuration(const std::string &duration);
63
64 const std::string & duration() const;
65
66 void setArtist(const std::string &artist);
67
68 const std::string & artist() const;
69
70 void setCreationDate(const std::string &creationDate);
71
72 const std::string & creationDate() const;
73
74protected:
75 std::string m_uri;
76
77 std::string m_icon;
78
79 std::string m_title;
80
81 std::string m_comment;
82
83 std::string m_genre;
84
85 std::string m_label;
86
87 std::string m_license;
88
89 std::string m_stream;
90
91 std::string m_duration;
92
93 std::string m_artist;
94
95 std::string m_creationDate;
96};
97
98#endif // SOUNDCLOUDRESULT_H_
099
=== removed file 'src/__init__.py'
=== added file 'src/config.h.in'
--- src/config.h.in 1970-01-01 00:00:00 +0000
+++ src/config.h.in 2013-07-14 08:39:27 +0000
@@ -0,0 +1,31 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#ifndef __CONFIG_H__
20#define __CONFIG_H__
21
22#define GROUP_NAME "@GROUP_NAME@"
23#define UNIQUE_NAME "@UNIQUE_NAME@"
24
25#define CATEGORY_ICON_PATH "@CATEGORY_ICON_PATH@"
26#define DEFAULT_ICON_PATH "@DEFAULT_ICON_PATH@"
27
28#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
29#define LOCALE_DIR "@LOCALE_DIR@"
30
31#endif /* __CONFIG_H__ */
032
=== added file 'src/main.cpp'
--- src/main.cpp 1970-01-01 00:00:00 +0000
+++ src/main.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,41 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <SoundCloud.h>
20#include <config.h>
21
22#include <libintl.h>
23#include <locale.h>
24#include <memory>
25
26#include <QtCore/QCoreApplication>
27
28using namespace std;
29
30int main(int argc, char **argv) {
31 QCoreApplication application(argc, argv);
32
33 setlocale(LC_ALL, "");
34 bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
35 textdomain(GETTEXT_PACKAGE);
36
37 shared_ptr<Curl> curl(new Curl());
38 SoundCloud soundCloud(curl);
39
40 return 0;
41}
042
=== removed file 'src/unity_soundcloud_daemon.py'
--- src/unity_soundcloud_daemon.py 2013-04-26 12:48:36 +0000
+++ src/unity_soundcloud_daemon.py 1970-01-01 00:00:00 +0000
@@ -1,245 +0,0 @@
1#! /usr/bin/python3
2# -*- coding: utf-8 -*-
3
4# Copyright (C) 2013 David Callé <davidc@framli.eu>
5# This program is free software: you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 3, as published
7# by the Free Software Foundation.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranties of
11# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
12# PURPOSE. See the GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License along
15# with this program. If not, see <http://www.gnu.org/licenses/>.
16
17from gi.repository import Unity, UnityExtras
18from gi.repository import Gio, GLib
19import urllib.parse
20import urllib.request
21import json
22import gettext
23
24APP_NAME = 'unity-scope-soundcloud'
25LOCAL_PATH = '/usr/share/locale/'
26gettext.bindtextdomain(APP_NAME, LOCAL_PATH)
27gettext.textdomain(APP_NAME)
28_ = gettext.gettext
29
30GROUP_NAME = 'com.canonical.Unity.Scope.Music.Soundcloud'
31UNIQUE_PATH = '/com/canonical/unity/scope/music/soundcloud'
32SEARCH_URI = 'https://api.soundcloud.com/'
33SEARCH_HINT = _('Search SoundCloud')
34API_KEY = '398e83f17ec3c5cf945f04772de9f400'
35NO_RESULTS_HINT = _('Sorry, there are no SoundCloud tracks that match your search.')
36PROVIDER_CREDITS = _('Powered by SoundCloud')
37SVG_DIR = '/usr/share/icons/unity-icon-theme/places/svg/'
38PROVIDER_ICON = SVG_DIR+'service-soundcloud.svg'
39DEFAULT_RESULT_ICON = SVG_DIR+'result-music.svg'
40DEFAULT_RESULT_MIMETYPE = 'text/html'
41DEFAULT_RESULT_TYPE = Unity.ResultType.DEFAULT
42
43c1 = {'id' :'songs',
44 'name' :_('Songs'),
45 'icon' :SVG_DIR+'group-songs.svg',
46 'renderer':Unity.CategoryRenderer.VERTICAL_TILE}
47CATEGORIES = [c1]
48
49FILTERS = []
50
51m1 = {'id' :'album',
52 'type' :'s',
53 'field':Unity.SchemaFieldType.REQUIRED}
54m2 = {'id' :'artist',
55 'type' :'s',
56 'field':Unity.SchemaFieldType.REQUIRED}
57m3 = {'id' :'genre',
58 'type' :'s',
59 'field':Unity.SchemaFieldType.OPTIONAL}
60m4 = {'id' :'label',
61 'type' :'s',
62 'field':Unity.SchemaFieldType.OPTIONAL}
63m5 = {'id' :'license',
64 'type' :'s',
65 'field':Unity.SchemaFieldType.OPTIONAL}
66m6 = {'id' :'stream',
67 'type' :'s',
68 'field':Unity.SchemaFieldType.OPTIONAL}
69m7 = {'id' :'duration',
70 'type' :'s',
71 'field':Unity.SchemaFieldType.OPTIONAL}
72EXTRA_METADATA = [m1, m2, m3, m4, m5, m6, m7]
73
74def search(search, filters):
75 '''
76 Any search method returning results as a list of tuples.
77 Available tuple fields:
78 uri (string)
79 icon (string)
80 title (string)
81 comment (string)
82 dnd_uri (string)
83 mimetype (string)
84 category (int)
85 result_type (Unity ResultType)
86 extras metadata fields (variant)
87 '''
88 results = []
89 if not search:
90 return results
91 search = urllib.parse.quote(search)
92 uri = "%stracks.json?consumer_key=%s&q=%s&order=hotness&limit=30" % (SEARCH_URI, API_KEY, search)
93 print(uri)
94 data = []
95 try:
96 response = urllib.request.urlopen(uri).read()
97 data = json.loads(response.decode('utf8'))
98 except Exception as error:
99 print(error)
100 checks = ['permalink_url', 'artwork_url',
101 'title', 'description', 'stream_url',
102 'genre', 'label_name', 'license',
103 'user', 'duration']
104 for r in data:
105 for c in checks:
106 if not c in r or not r[c]:
107 if c == 'artwork_url':
108 r[c] = r['user']['avatar_url']
109 elif c == 'user':
110 if not r[c]['username']:
111 r[c]['username'] = ''
112 else:
113 r[c] = ''
114 if 'stream_url' in r and r['stream_url'] != '':
115 r['stream_url'] = r['stream_url'] + '?consumer_key=%s' % API_KEY
116 results.append({'uri':r['permalink_url'],
117 'icon':r['artwork_url'],
118 'title':r['title'],
119 'comment':r['description'],
120 'album':GLib.Variant('s',''),
121 'artist':GLib.Variant('s',r['user']['username']),
122 'genre':GLib.Variant('s',r['genre']),
123 'label':GLib.Variant('s',r['label_name']),
124 'license':GLib.Variant('s',r['license']),
125 'stream':GLib.Variant('s',r['stream_url']),
126 'duration':GLib.Variant('s',str(r['duration']))})
127 return results
128
129
130# Classes below this point establish communication
131# with Unity, you probably shouldn't modify them.
132
133
134class MySearch (Unity.ScopeSearchBase):
135 def __init__(self, search_context):
136 super (MySearch, self).__init__()
137 self.set_search_context (search_context)
138
139 def do_run (self):
140 '''
141 Adds results to the model
142 '''
143 try:
144 result_set = self.search_context.result_set
145 for i in search(self.search_context.search_query,
146 self.search_context.filter_state):
147 if not 'uri' in i or not i['uri'] or i['uri'] == '':
148 continue
149 if not 'icon' in i or not i['icon'] or i['icon'] == '':
150 i['icon'] = DEFAULT_RESULT_ICON
151 if not 'mimetype' in i or not i['mimetype'] or i['mimetype'] == '':
152 i['mimetype'] = DEFAULT_RESULT_MIMETYPE
153 if not 'result_type' in i or not i['result_type'] or i['result_type'] == '':
154 i['result_type'] = DEFAULT_RESULT_TYPE
155 if not 'category' in i or not i['category'] or i['category'] == '':
156 i['category'] = 0
157 if not 'title' in i or not i['title']:
158 i['title'] = ''
159 if not 'comment' in i or not i['comment']:
160 i['comment'] = ''
161 if not 'dnd_uri' in i or not i['dnd_uri'] or i['dnd_uri'] == '':
162 i['dnd_uri'] = i['uri']
163 result_set.add_result(**i)
164 except Exception as error:
165 print (error)
166
167class Preview (Unity.ResultPreviewer):
168
169 def do_run(self):
170 title = self.result.title.strip()
171 stream = self.result.metadata['stream'].get_string()
172 duration = int(self.result.metadata['duration'].get_string())
173 author = self.result.metadata['artist'].get_string()
174 description = self.result.comment.strip()
175 image = self.result.icon_hint.replace('large.jpg', 'original.jpg')
176 preview = Unity.MusicPreview.new(title, description, None)
177 if stream != '':
178 t = Unity.TrackMetadata.full(stream, 1, title, author, '', duration / 1000)
179 preview.add_track(t)
180 preview.props.subtitle = author
181 preview.props.image_source_uri = image
182 icon = Gio.FileIcon.new (Gio.file_new_for_path(PROVIDER_ICON))
183 view_action = Unity.PreviewAction.new("view", _("SoundCloud"), icon)
184 preview.add_action(view_action)
185 return preview
186
187class Scope (Unity.AbstractScope):
188 def __init__(self):
189 Unity.AbstractScope.__init__(self)
190
191 def do_get_search_hint (self):
192 return SEARCH_HINT
193
194 def do_get_schema (self):
195 '''
196 Adds specific metadata fields
197 '''
198 schema = Unity.Schema.new ()
199 if EXTRA_METADATA:
200 for m in EXTRA_METADATA:
201 schema.add_field(m['id'], m['type'], m['field'])
202 #FIXME should be REQUIRED for credits
203 schema.add_field('provider_credits', 's', Unity.SchemaFieldType.OPTIONAL)
204 return schema
205
206 def do_get_categories (self):
207 '''
208 Adds categories
209 '''
210 cs = Unity.CategorySet.new ()
211 if CATEGORIES:
212 for c in CATEGORIES:
213 cat = Unity.Category.new (c['id'], c['name'],
214 Gio.ThemedIcon.new(c['icon']),
215 c['renderer'])
216 cs.add (cat)
217 return cs
218
219 def do_get_filters (self):
220 '''
221 Adds filters
222 '''
223 fs = Unity.FilterSet.new ()
224# if FILTERS:
225#
226 return fs
227
228 def do_get_group_name (self):
229 return GROUP_NAME
230
231 def do_get_unique_name (self):
232 return UNIQUE_PATH
233
234 def do_create_search_for_query (self, search_context):
235 se = MySearch (search_context)
236 return se
237
238 def do_create_previewer(self, result, metadata):
239 rp = Preview()
240 rp.set_scope_result(result)
241 rp.set_search_metadata(metadata)
242 return rp
243
244def load_scope():
245 return Scope()
2460
=== added file 'tests/CMakeLists.txt'
--- tests/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ tests/CMakeLists.txt 2013-07-14 08:39:27 +0000
@@ -0,0 +1,43 @@
1
2include(FindGMock)
3include_directories(${GMOCK_INCLUDE_DIRS})
4include_directories(${GTEST_INCLUDE_DIRS})
5
6find_package("Valgrind" REQUIRED)
7
8add_definitions(
9 -DCURL_DATA_HELLO="${CMAKE_CURRENT_SOURCE_DIR}/data/curl_data_hello"
10 -DMOCK_SOUNDCLOUD_FAIL="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_fail"
11 -DMOCK_SOUNDCLOUD_MALFORMED="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_malformed"
12 -DMOCK_SOUNDCLOUD_PASS="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_pass"
13)
14
15set(
16 TEST_SOUNDCLOUD_SOURCES
17 main.cpp
18 TestCurl.cpp
19 TestSoundCloudParser.cpp
20)
21
22add_executable(
23 test-soundcloud
24 ${TEST_SOUNDCLOUD_SOURCES}
25)
26
27target_link_libraries(
28 test-soundcloud
29 soundcloud
30 ${UNITY_LIBRARIES}
31 ${GTEST_LIBRARIES}
32 ${GMOCK_LIBRARIES}
33)
34
35qt5_use_modules(
36 test-soundcloud
37 Core
38)
39
40add_valgrind_test(
41 test-soundcloud
42 test-soundcloud
43)
0\ No newline at end of file44\ No newline at end of file
145
=== added file 'tests/TestCurl.cpp'
--- tests/TestCurl.cpp 1970-01-01 00:00:00 +0000
+++ tests/TestCurl.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,50 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <SoundCloudParser.h>
20
21#include <QtCore/QFile>
22
23#include <gmock/gmock.h>
24#include <gtest/gtest.h>
25
26using namespace std;
27using namespace testing;
28
29namespace {
30
31class TestCurl: public Test {
32protected:
33 TestCurl() {
34 }
35
36 virtual ~TestCurl() {
37 }
38};
39
40TEST_F(TestCurl, DownloadsFile) {
41 ostringstream urlStream;
42 urlStream << "file://" << CURL_DATA_HELLO;
43
44 Curl curl;
45 QByteArray ba(curl.read(urlStream.str()));
46
47 EXPECT_EQ("Hello!", QString(ba).toStdString());
48}
49
50} // namespace
051
=== added file 'tests/TestSoundCloudParser.cpp'
--- tests/TestSoundCloudParser.cpp 1970-01-01 00:00:00 +0000
+++ tests/TestSoundCloudParser.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,158 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <SoundCloudParser.h>
20#include <config.h>
21
22#include <QtCore/QFile>
23
24#include <gmock/gmock.h>
25#include <gtest/gtest.h>
26
27using namespace std;
28using namespace testing;
29
30namespace {
31
32class MockCurl: public Curl {
33public:
34 MOCK_CONST_METHOD1(read, QByteArray(const string &url));
35};
36
37class TestSoundCloudParser: public Test {
38protected:
39 TestSoundCloudParser() {
40 }
41
42 virtual ~TestSoundCloudParser() {
43 }
44};
45
46TEST_F(TestSoundCloudParser, CanReadEmptyXml) {
47 QFile file(MOCK_SOUNDCLOUD_FAIL);
48 ASSERT_TRUE(file.open(QIODevice::ReadOnly));
49 QByteArray soundCloudFail(file.readAll());
50
51 shared_ptr<MockCurl> curl(new NiceMock<MockCurl>());
52 string expectedUrl(
53 "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=non-existing-thing&order=hotness&limit=30");
54 EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce(
55 Return(soundCloudFail));
56
57 SoundCloudParser parser(curl);
58 deque<SoundCloudResult> results(parser.getResults("non-existing-thing"));
59
60 ASSERT_EQ(0, results.size());
61}
62
63TEST_F(TestSoundCloudParser, CanReadWellFormattedXml) {
64 QFile file(MOCK_SOUNDCLOUD_PASS);
65 ASSERT_TRUE(file.open(QIODevice::ReadOnly));
66 QByteArray soundCloudPass(file.readAll());
67
68 shared_ptr<MockCurl> curl(new NiceMock<MockCurl>());
69 string expectedUrl(
70 "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=submarine&order=hotness&limit=30");
71 EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce(
72 Return(soundCloudPass));
73
74 SoundCloudParser parser(curl);
75 deque<SoundCloudResult> results(parser.getResults("submarine"));
76
77 ASSERT_EQ(30, results.size());
78
79 // check a basic node
80 {
81 SoundCloudResult &result(results[0]);
82 EXPECT_EQ("johnmayer", result.artist());
83 EXPECT_EQ("", result.comment());
84 EXPECT_EQ("2012-05-15T20:39:54Z", result.creationDate());
85 EXPECT_EQ("308230", result.duration());
86 EXPECT_EQ("", result.genre());
87 EXPECT_EQ("", result.icon());
88 EXPECT_EQ("", result.label());
89 EXPECT_EQ("all-rights-reserved", result.license());
90 EXPECT_EQ("https://api.soundcloud.com/tracks/46495820/stream",
91 result.stream());
92 EXPECT_EQ("Walt Grace's Submarine Test, January 1967", result.title());
93 EXPECT_EQ("http://soundcloud.com/johnmayer/walt-graces-submarine-test",
94 result.uri());
95 }
96
97 // this one has a created-with subnode - check we skip it
98 {
99 SoundCloudResult &result(results[3]);
100 EXPECT_EQ("joesallesdrums", result.artist());
101 EXPECT_EQ("", result.comment());
102 EXPECT_EQ("2013-07-11T19:18:55Z", result.creationDate());
103 EXPECT_EQ("248263", result.duration());
104 EXPECT_EQ("", result.genre());
105 EXPECT_EQ("", result.icon());
106 EXPECT_EQ("", result.label());
107 EXPECT_EQ("all-rights-reserved", result.license());
108 EXPECT_EQ("https://api.soundcloud.com/tracks/100646268/stream",
109 result.stream());
110 EXPECT_EQ("Submarine IDGAF version", result.title());
111 EXPECT_EQ(
112 "http://soundcloud.com/joesallesdrums/submarine-idgaf-version",
113 result.uri());
114 }
115
116 // this one has a created-with subnode - check we skip it
117 {
118 SoundCloudResult &result(results[28]);
119 EXPECT_EQ("submarine", result.artist());
120 EXPECT_EQ(
121 "Den hemliga trädgården in Stockholm with Wikicong/Tikicong and Dj Rupture on squeky island",
122 result.comment());
123 EXPECT_EQ("2010-08-15T18:47:22Z", result.creationDate());
124 EXPECT_EQ("1148179", result.duration());
125 EXPECT_EQ("tropical", result.genre());
126 EXPECT_EQ(
127 "https://i1.sndcdn.com/artworks-000002102568-87lu6v-large.jpg?cc07a88",
128 result.icon());
129 EXPECT_EQ("KIM", result.label());
130 EXPECT_EQ("no-rights-reserved", result.license());
131 EXPECT_EQ("https://api.soundcloud.com/tracks/4627335/stream",
132 result.stream());
133 EXPECT_EQ("KAPITAL.IDENTITĂ„T.MACKT.VIER", result.title());
134 EXPECT_EQ(
135 "http://soundcloud.com/submarine/kapital-identitat-mackt-vier",
136 result.uri());
137 }
138}
139
140TEST_F(TestSoundCloudParser, HandlesMalformedXml) {
141 QFile file(MOCK_SOUNDCLOUD_MALFORMED);
142 ASSERT_TRUE(file.open(QIODevice::ReadOnly));
143 QByteArray soundCloudMalformed(file.readAll());
144
145 shared_ptr<MockCurl> curl(new NiceMock<MockCurl>());
146 string expectedUrl(
147 "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=malformed&order=hotness&limit=30");
148 EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce(
149 Return(soundCloudMalformed));
150
151 SoundCloudParser parser(curl);
152 deque<SoundCloudResult> results(parser.getResults("malformed"));
153
154 // The parser should have dropped the 4th result
155 ASSERT_EQ(3, results.size());
156}
157
158} // namespace
0159
=== added file 'tests/data/curl_data_hello'
--- tests/data/curl_data_hello 1970-01-01 00:00:00 +0000
+++ tests/data/curl_data_hello 2013-07-14 08:39:27 +0000
@@ -0,0 +1,1 @@
1Hello!
0\ No newline at end of file2\ No newline at end of file
13
=== modified file 'tests/data/mock_soundcloud_fail'
--- tests/data/mock_soundcloud_fail 2013-01-16 18:29:15 +0000
+++ tests/data/mock_soundcloud_fail 2013-07-14 08:39:27 +0000
@@ -1,1 +1,2 @@
1<o_o>1<?xml version="1.0" encoding="UTF-8"?>
2<tracks type="array"/>
23
=== added file 'tests/data/mock_soundcloud_malformed'
--- tests/data/mock_soundcloud_malformed 1970-01-01 00:00:00 +0000
+++ tests/data/mock_soundcloud_malformed 2013-07-14 08:39:27 +0000
@@ -0,0 +1,177 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<tracks next-href="https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&amp;limit=30&amp;offset=30&amp;order=hotness&amp;q=submarine" type="array">
3 <track>
4 <kind>track</kind>
5 <id type="integer">46495820</id>
6 <created-at type="datetime">2012-05-15T20:39:54Z</created-at>
7 <user-id type="integer">2303663</user-id>
8 <duration type="integer">308230</duration>
9 <commentable type="boolean">false</commentable>
10 <state>finished</state>
11 <original-content-size type="integer">12322884</original-content-size>
12 <sharing>public</sharing>
13 <tag-list></tag-list>
14 <permalink>walt-graces-submarine-test</permalink>
15 <streamable type="boolean">true</streamable>
16 <embeddable-by>all</embeddable-by>
17 <downloadable type="boolean">false</downloadable>
18 <purchase-url nil="true"></purchase-url>
19 <label-id nil="true"></label-id>
20 <purchase-title nil="true"></purchase-title>
21 <genre></genre>
22 <title>Walt Grace's Submarine Test, January 1967</title>
23 <description></description>
24 <label-name></label-name>
25 <release></release>
26 <track-type></track-type>
27 <key-signature></key-signature>
28 <isrc></isrc>
29 <video-url nil="true"></video-url>
30 <bpm nil="true"></bpm>
31 <release-year nil="true"></release-year>
32 <release-month nil="true"></release-month>
33 <release-day nil="true"></release-day>
34 <original-format>mp3</original-format>
35 <license>all-rights-reserved</license>
36 <uri>https://api.soundcloud.com/tracks/46495820</uri>
37 <user>
38 <id type="integer">2303663</id>
39 <kind>user</kind>
40 <permalink>johnmayer</permalink>
41 <username>johnmayer</username>
42 <uri>https://api.soundcloud.com/users/2303663</uri>
43 <permalink-url>http://soundcloud.com/johnmayer</permalink-url>
44 <avatar-url>https://i1.sndcdn.com/avatars-000015302931-dlue9y-large.jpg?cc07a88</avatar-url>
45 </user>
46 <permalink-url>http://soundcloud.com/johnmayer/walt-graces-submarine-test</permalink-url>
47 <artwork-url nil="true"></artwork-url>
48 <waveform-url>https://w1.sndcdn.com/P5WJmgx408ju_m.png</waveform-url>
49 <stream-url>https://api.soundcloud.com/tracks/46495820/stream</stream-url>
50 <attachments-uri>https://api.soundcloud.com/tracks/46495820/attachments</attachments-uri>
51 </track>
52 <track>
53 <kind>track</kind>
54 <id type="integer">99743581</id>
55 <created-at type="datetime">2013-07-05T03:24:05Z</created-at>
56 <user-id type="integer">50203203</user-id>
57 <duration type="integer">223550</duration>
58 <commentable type="boolean">true</commentable>
59 <state>finished</state>
60 <original-content-size type="integer">8950433</original-content-size>
61 <sharing>public</sharing>
62 <tag-list></tag-list>
63 <permalink>submarine</permalink>
64 <streamable type="boolean">true</streamable>
65 <embeddable-by>all</embeddable-by>
66 <downloadable type="boolean">false</downloadable>
67 <purchase-url nil="true"></purchase-url>
68 <label-id nil="true"></label-id>
69 <purchase-title nil="true"></purchase-title>
70 <genre>Underwater</genre>
71 <title>Submarine - Submarines</title>
72 <description>DEMO recording from our fourth rehersal. Recorded at Irene studios June 2013.
73http://www.facebook.com/pages/Submarines/613462528665489</description>
74 <label-name></label-name>
75 <release></release>
76 <track-type>demo</track-type>
77 <key-signature></key-signature>
78 <isrc></isrc>
79 <video-url nil="true"></video-url>
80 <bpm nil="true"></bpm>
81 <release-year nil="true"></release-year>
82 <release-month nil="true"></release-month>
83 <release-day nil="true"></release-day>
84 <original-format>mp3</original-format>
85 <license>all-rights-reserved</license>
86 <uri>https://api.soundcloud.com/tracks/99743581</uri>
87 <user>
88 <id type="integer">50203203</id>
89 <kind>user</kind>
90 <permalink>submarinesband</permalink>
91 <username>SubmarinesBand</username>
92 <uri>https://api.soundcloud.com/users/50203203</uri>
93 <permalink-url>http://soundcloud.com/submarinesband</permalink-url>
94 <avatar-url>https://i1.sndcdn.com/avatars-000046620261-yfvce6-large.jpg?cc07a88</avatar-url>
95 </user>
96 <permalink-url>http://soundcloud.com/submarinesband/submarine</permalink-url>
97 <artwork-url>https://i1.sndcdn.com/artworks-000052204608-okdvk3-large.jpg?cc07a88</artwork-url>
98 <waveform-url>https://w1.sndcdn.com/p0vnPSt9Kcbe_m.png</waveform-url>
99 <stream-url>https://api.soundcloud.com/tracks/99743581/stream</stream-url>
100 <playback-count type="integer">110</playback-count>
101 <download-count type="integer">0</download-count>
102 <favoritings-count type="integer">3</favoritings-count>
103 <comment-count type="integer">1</comment-count>
104 <attachments-uri>https://api.soundcloud.com/tracks/99743581/attachments</attachments-uri>
105 </track>
106 <track>
107 <kind>track</kind>
108 <id type="integer">98612674</id>
109 <created-at type="datetime">2013-06-27T00:31:34Z</created-at>
110 <user-id type="integer">4311696</user-id>
111 <duration type="integer">302081</duration>
112 <commentable type="boolean">true</commentable>
113 <state>finished</state>
114 <original-content-size type="integer">53277180</original-content-size>
115 <sharing>public</sharing>
116 <tag-list>"bad taste records" "the nameless city" "dusted wax kingdom"</tag-list>
117 <permalink>submarine-city</permalink>
118 <streamable type="boolean">true</streamable>
119 <embeddable-by>all</embeddable-by>
120 <downloadable type="boolean">false</downloadable>
121 <purchase-url nil="true"></purchase-url>
122 <label-id nil="true"></label-id>
123 <purchase-title nil="true"></purchase-title>
124 <genre>Instrumental Hiphop</genre>
125 <title>Submarine City</title>
126 <description>http://thirdpersonlurkin.bandcamp.com/</description>
127 <label-name></label-name>
128 <release></release>
129 <track-type></track-type>
130 <key-signature></key-signature>
131 <isrc></isrc>
132 <video-url nil="true"></video-url>
133 <bpm nil="true"></bpm>
134 <release-year nil="true"></release-year>
135 <release-month nil="true"></release-month>
136 <release-day nil="true"></release-day>
137 <original-format>wav</original-format>
138 <license>all-rights-reserved</license>
139 <uri>https://api.soundcloud.com/tracks/98612674</uri>
140 <user>
141 <id type="integer">4311696</id>
142 <kind>user</kind>
143 <permalink>thirdpersonlurkin</permalink>
144 <username>Third Person Lurkin</username>
145 <uri>https://api.soundcloud.com/users/4311696</uri>
146 <permalink-url>http://soundcloud.com/thirdpersonlurkin</permalink-url>
147 <avatar-url>https://i1.sndcdn.com/avatars-000046311415-gugiy8-large.jpg?cc07a88</avatar-url>
148 </user>
149 <permalink-url>http://soundcloud.com/thirdpersonlurkin/submarine-city</permalink-url>
150 <artwork-url>https://i1.sndcdn.com/artworks-000051575400-x2qtba-large.jpg?cc07a88</artwork-url>
151 <waveform-url>https://w1.sndcdn.com/Go6PTpPCGu1x_m.png</waveform-url>
152 <stream-url>https://api.soundcloud.com/tracks/98612674/stream</stream-url>
153 <playback-count type="integer">217</playback-count>
154 <download-count type="integer">0</download-count>
155 <favoritings-count type="integer">18</favoritings-count>
156 <comment-count type="integer">4</comment-count>
157 <attachments-uri>https://api.soundcloud.com/tracks/98612674/attachments</attachments-uri>
158 </track>
159 <track>
160 <kind>track</kind>
161 <id type="integer">100646268</id>
162 <created-at type="datetime">2013-07-11T19:18:55Z</created-at>
163 <user-id type="integer">26044098</user-id>
164 <duration type="integer">248263</duration>
165 <commentable type="boolean">true</commentable>
166 <state>finished</state>
167 <original-content-size type="integer">43778092</original-content-size>
168 <sharing>public</sharing>
169 <tag-list>soundcloud:source=android-3rdparty-upload</tag-list>
170 <permalink>submarine-idgaf-version</permalink>
171 <streamable type="boolean">true</streamable>
172 <embeddable-by>all</embeddable-by>
173 <downloadable type="boolean">false</downloadable>
174 <purchase-url nil="true"></purchase-url>
175 <label-id nil="true"></label-id>
176 <purchase-title nil="true"></purchase-title>
177 <genre nil="true"></genre>
0\ No newline at end of file178\ No newline at end of file
1179
=== modified file 'tests/data/mock_soundcloud_pass'
--- tests/data/mock_soundcloud_pass 2013-01-16 18:29:15 +0000
+++ tests/data/mock_soundcloud_pass 2013-07-14 08:39:27 +0000
@@ -1,1 +1,1639 @@
1[{"kind":"track","id":74814003,"created_at":"2013/01/13 21:25:23 +0000","user_id":1197717,"duration":211846,"commentable":true,"state":"finished","original_content_size":37355340,"sharing":"public","tag_list":"","permalink":"echos","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Echos","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/74814003","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/echos","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/GuF1Nt5BZaJn_m.png","stream_url":"https://api.soundcloud.com/tracks/74814003/stream","playback_count":42,"download_count":0,"favoritings_count":4,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/74814003/attachments"},{"kind":"track","id":57857175,"created_at":"2012/08/28 12:51:07 +0000","user_id":1197717,"duration":260748,"commentable":true,"state":"finished","original_content_size":45964844,"sharing":"public","tag_list":"","permalink":"ganymede","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep","title":"Ganymede","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/57857175","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/ganymede","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/iGmBZLPye5Ww_m.png","stream_url":"https://api.soundcloud.com/tracks/57857175/stream","playback_count":125,"download_count":0,"favoritings_count":8,"comment_count":8,"attachments_uri":"https://api.soundcloud.com/tracks/57857175/attachments"},{"kind":"track","id":34649100,"created_at":"2012/01/26 23:46:38 +0000","user_id":1197717,"duration":284763,"commentable":true,"state":"finished","original_content_size":50198444,"sharing":"public","tag_list":"","permalink":"europa","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"spacy/dubstep","title":"Europa","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/34649100","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/europa","artwork_url":"https://i1.sndcdn.com/artworks-000017390975-hr2uvg-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/yADh0ritdoKv_m.png","stream_url":"https://api.soundcloud.com/tracks/34649100/stream","download_url":"https://api.soundcloud.com/tracks/34649100/download","playback_count":336,"download_count":9,"favoritings_count":5,"comment_count":15,"attachments_uri":"https://api.soundcloud.com/tracks/34649100/attachments"},{"kind":"track","id":19273510,"created_at":"2011/07/18 14:03:53 +0000","user_id":1197717,"duration":68675,"commentable":true,"state":"finished","original_content_size":18144044,"sharing":"public","tag_list":"","permalink":"love-preview","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Love (preview)","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/19273510","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/love-preview","artwork_url":"https://i1.sndcdn.com/artworks-000017277283-w1npy2-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/cQaVh8HRfUyl_m.png","stream_url":"https://api.soundcloud.com/tracks/19273510/stream","playback_count":129,"download_count":0,"favoritings_count":0,"comment_count":1,"attachments_uri":"https://api.soundcloud.com/tracks/19273510/attachments"},{"kind":"track","id":46609027,"created_at":"2012/05/16 20:45:01 +0000","user_id":1197717,"duration":66559,"commentable":true,"state":"finished","original_content_size":11723860,"sharing":"public","tag_list":"","permalink":"nostalgia-preview","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Nostalgia preview","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/46609027","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/nostalgia-preview","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/SaG4ip9IxDCF_m.png","stream_url":"https://api.soundcloud.com/tracks/46609027/stream","playback_count":113,"download_count":0,"favoritings_count":2,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/46609027/attachments"},{"kind":"track","id":37394615,"created_at":"2012/02/21 21:59:47 +0000","user_id":1197717,"duration":164711,"commentable":true,"state":"finished","original_content_size":29030444,"sharing":"public","tag_list":"","permalink":"creation-preview","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep/electronic ","title":"Creation preview","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/37394615","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/creation-preview","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/dUeQXtJwGInY_m.png","stream_url":"https://api.soundcloud.com/tracks/37394615/stream","playback_count":178,"download_count":0,"favoritings_count":5,"comment_count":10,"attachments_uri":"https://api.soundcloud.com/tracks/37394615/attachments"},{"kind":"track","id":27745819,"created_at":"2011/11/11 14:00:12 +0000","user_id":1197717,"duration":72099,"commentable":true,"state":"finished","original_content_size":12700844,"sharing":"public","tag_list":"","permalink":"click-clip","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dubstep","title":"click (clip)","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/27745819","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/click-clip","artwork_url":"https://i1.sndcdn.com/artworks-000017277180-0i48xv-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/ie3yyCdzg1e0_m.png","stream_url":"https://api.soundcloud.com/tracks/27745819/stream","playback_count":195,"download_count":0,"favoritings_count":4,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/27745819/attachments"},{"kind":"track","id":11148780,"created_at":"2011/02/26 16:56:23 +0000","user_id":1197717,"duration":271253,"commentable":true,"state":"finished","original_content_size":71722616,"sharing":"public","tag_list":"","permalink":"deep-sleep","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Ambient/garage","title":"DEEP SLEEP","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":134.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/11148780","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/deep-sleep","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/XmYxE13Bba37_m.png","stream_url":"https://api.soundcloud.com/tracks/11148780/stream","playback_count":740,"download_count":0,"favoritings_count":6,"comment_count":13,"attachments_uri":"https://api.soundcloud.com/tracks/11148780/attachments"},{"kind":"track","id":6689725,"created_at":"2010/11/04 13:34:55 +0000","user_id":1197717,"duration":256175,"commentable":true,"state":"finished","original_content_size":67737644,"sharing":"public","tag_list":"garage","permalink":"future-dreams","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Garage","title":"Future dreams","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":135.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/6689725","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/future-dreams","artwork_url":"https://i1.sndcdn.com/artworks-000003021489-r99g97-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/uxFURVwPXyG4_m.png","stream_url":"https://api.soundcloud.com/tracks/6689725/stream","download_url":"https://api.soundcloud.com/tracks/6689725/download","playback_count":437,"download_count":24,"favoritings_count":9,"comment_count":13,"attachments_uri":"https://api.soundcloud.com/tracks/6689725/attachments"},{"kind":"track","id":28347812,"created_at":"2011/11/18 16:19:51 +0000","user_id":1197717,"duration":238405,"commentable":true,"state":"finished","original_content_size":42027024,"sharing":"public","tag_list":"dreamsound sub pads deep new dubstep dubby bright tribal winter","permalink":"blue-moon","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep/tribal/space","title":"Blue moon","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/28347812","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/blue-moon","artwork_url":"https://i1.sndcdn.com/artworks-000017277156-d680ii-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/jLHOHyWmFSwv_m.png","stream_url":"https://api.soundcloud.com/tracks/28347812/stream","download_url":"https://api.soundcloud.com/tracks/28347812/download","playback_count":429,"download_count":22,"favoritings_count":10,"comment_count":24,"attachments_uri":"https://api.soundcloud.com/tracks/28347812/attachments"},{"kind":"track","id":24857671,"created_at":"2011/10/06 00:23:07 +0000","user_id":1197717,"duration":150991,"commentable":true,"state":"finished","original_content_size":26611248,"sharing":"public","tag_list":"","permalink":"long-winter-1","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"LONG winter","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/24857671","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/long-winter-1","artwork_url":"https://i1.sndcdn.com/artworks-000017277235-fqm6cu-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/WzBgLB4Ma2cD_m.png","stream_url":"https://api.soundcloud.com/tracks/24857671/stream","playback_count":144,"download_count":0,"favoritings_count":4,"comment_count":3,"attachments_uri":"https://api.soundcloud.com/tracks/24857671/attachments"},{"kind":"track","id":6486500,"created_at":"2010/10/28 12:06:14 +0000","user_id":1197717,"duration":233100,"commentable":true,"state":"finished","original_content_size":61636280,"sharing":"public","tag_list":"","permalink":"the-pattern","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"ambient/garage","title":"The DREAM pattern","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":136.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/6486500","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/the-pattern","artwork_url":"https://i1.sndcdn.com/artworks-000003021497-vfp002-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/NOMmwfTvJ2Eb_m.png","stream_url":"https://api.soundcloud.com/tracks/6486500/stream","download_url":"https://api.soundcloud.com/tracks/6486500/download","playback_count":400,"download_count":15,"favoritings_count":4,"comment_count":3,"attachments_uri":"https://api.soundcloud.com/tracks/6486500/attachments"},{"kind":"track","id":61638090,"created_at":"2012/09/29 22:06:42 +0000","user_id":25157649,"duration":281782,"commentable":true,"state":"finished","original_content_size":11423654,"sharing":"public","tag_list":"Submarine Mombahouse Origional Remix Alkatraz","permalink":"tormenta-las-trompa-llegadas","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Mombahouse","title":"Tormenta - Las Trompa Llegadas (Submarine Remix)","description":"This is a remix of another one of my projects - Tormenta. A project I share with Calgary's Kousk, in the search to make world music to stimulate the mind. \r\n\r\nThis is my remix of our original. \r\n\r\nI hope you enjoy.\r\n\r\nSubmarine.\r\n\r\nDownload will be made available when this track reaches 100 listens. ","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/61638090","user":{"id":25157649,"kind":"user","permalink":"submarine-5","username":"SUBmarine","uri":"https://api.soundcloud.com/users/25157649","permalink_url":"http://soundcloud.com/submarine-5","avatar_url":"https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-5/tormenta-las-trompa-llegadas","artwork_url":"https://i1.sndcdn.com/artworks-000031256378-n3d3fg-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/C0prIOi6Pq6p_m.png","stream_url":"https://api.soundcloud.com/tracks/61638090/stream","playback_count":68,"download_count":0,"favoritings_count":0,"comment_count":1,"attachments_uri":"https://api.soundcloud.com/tracks/61638090/attachments"},{"kind":"track","id":7976882,"created_at":"2010/12/12 18:33:07 +0000","user_id":2393625,"duration":50749,"commentable":true,"state":"finished","original_content_size":1218386,"sharing":"public","tag_list":"","permalink":"the-edittttt","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"THE EDITTTTT","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/7976882","user":{"id":2393625,"kind":"user","permalink":"submarine-1","username":"Submarine","uri":"https://api.soundcloud.com/users/2393625","permalink_url":"http://soundcloud.com/submarine-1","avatar_url":"https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-1/the-edittttt","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/fKZgRN1JNlEw_m.png","stream_url":"https://api.soundcloud.com/tracks/7976882/stream","playback_count":42,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/7976882/attachments"},{"kind":"track","id":19272956,"created_at":"2011/07/18 13:50:57 +0000","user_id":1197717,"duration":288188,"commentable":true,"state":"finished","original_content_size":50803244,"sharing":"public","tag_list":"","permalink":"stelliferous-era-preview","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Stelliferous Era (preview/unmixed)","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/19272956","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/stelliferous-era-preview","artwork_url":"https://i1.sndcdn.com/artworks-000009425676-5nj0vx-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/Ux3ASQ4wKaD0_m.png","stream_url":"https://api.soundcloud.com/tracks/19272956/stream","download_url":"https://api.soundcloud.com/tracks/19272956/download","playback_count":133,"download_count":7,"favoritings_count":3,"comment_count":7,"attachments_uri":"https://api.soundcloud.com/tracks/19272956/attachments"},{"kind":"track","id":7323275,"created_at":"2010/11/23 20:29:21 +0000","user_id":1197717,"duration":259441,"commentable":true,"state":"finished","original_content_size":68602916,"sharing":"public","tag_list":"","permalink":"into-the-future","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Garage","title":"INTO THE FUTURE","description":"","label_name":"none : (","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/7323275","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/into-the-future","artwork_url":"https://i1.sndcdn.com/artworks-000003216522-dv0ekw-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/68in91FGBiec_m.png","stream_url":"https://api.soundcloud.com/tracks/7323275/stream","download_url":"https://api.soundcloud.com/tracks/7323275/download","playback_count":484,"download_count":16,"favoritings_count":5,"comment_count":8,"attachments_uri":"https://api.soundcloud.com/tracks/7323275/attachments"},{"kind":"track","id":34419620,"created_at":"2012/01/24 20:37:11 +0000","user_id":1197717,"duration":48109,"commentable":true,"state":"finished","original_content_size":8467244,"sharing":"public","tag_list":"","permalink":"pre-e-p-preview","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"PRE E.P Preview","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/34419620","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/pre-e-p-preview","artwork_url":"https://i1.sndcdn.com/artworks-000017277699-dp23ij-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/Hsguzq7DU1Ow_m.png","stream_url":"https://api.soundcloud.com/tracks/34419620/stream","download_url":"https://api.soundcloud.com/tracks/34419620/download","playback_count":108,"download_count":6,"favoritings_count":3,"comment_count":7,"attachments_uri":"https://api.soundcloud.com/tracks/34419620/attachments"},{"kind":"track","id":3591672,"created_at":"2010/06/22 20:48:10 +0000","user_id":1197717,"duration":370242,"commentable":true,"state":"finished","original_content_size":12492933,"sharing":"public","tag_list":"","permalink":"rollin-down-paradise-drive","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"unfinished","title":"rollin down paradise drive","description":"http://www.youtube.com/watch?v=RdD6L4cKKU8","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":150.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/3591672","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/rollin-down-paradise-drive","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/VciyI1oB6Uey_m.png","stream_url":"https://api.soundcloud.com/tracks/3591672/stream","playback_count":322,"download_count":0,"favoritings_count":3,"comment_count":5,"attachments_uri":"https://api.soundcloud.com/tracks/3591672/attachments"},{"kind":"track","id":4627335,"created_at":"2010/08/15 18:47:22 +0000","user_id":1397546,"duration":1148179,"commentable":true,"state":"finished","original_content_size":14217533,"sharing":"public","tag_list":"","permalink":"kapital-identitat-mackt-vier","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"tropical","title":"KAPITAL.IDENTIT\u00c4T.MACKT.VIER","description":"Den hemliga tr\u00e4dg\u00e5rden in Stockholm with Wikicong/Tikicong and Dj Rupture on squeky island","label_name":"KIM","release":"4","track_type":"remix","key_signature":"D","isrc":"12-345-67-89900","video_url":null,"bpm":85.0,"release_year":2010,"release_month":8,"release_day":15,"original_format":"mp3","license":"no-rights-reserved","uri":"https://api.soundcloud.com/tracks/4627335","user":{"id":1397546,"kind":"user","permalink":"submarine","username":"submarine","uri":"https://api.soundcloud.com/users/1397546","permalink_url":"http://soundcloud.com/submarine","avatar_url":"https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine/kapital-identitat-mackt-vier","artwork_url":"https://i1.sndcdn.com/artworks-000002102568-87lu6v-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/vzioG2Vsf9hN_m.png","stream_url":"https://api.soundcloud.com/tracks/4627335/stream","download_url":"https://api.soundcloud.com/tracks/4627335/download","playback_count":401,"download_count":41,"favoritings_count":0,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/4627335/attachments"},{"kind":"track","id":4822078,"created_at":"2010/08/24 16:42:57 +0000","user_id":1397546,"duration":5157046,"commentable":true,"state":"finished","original_content_size":67789022,"sharing":"public","tag_list":"wikicong delanda oo xo redundancy wikileaks","permalink":"kapital-identitat-mackt-fem","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"zef","title":"KAPITAL.IDENTIT\u00c4T.MACKT.FEM","description":"Chris, Karl and Magnus meet in a bar to talk about the Wikicong, redudancy in societies, Flows, OO (object Oriented Philosphy) and XO (X oriented Philosophy) , Wikileaks and distributed action and entities. ","label_name":"KIM","release":"","track_type":"podcast","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":2010,"release_month":8,"release_day":23,"original_format":"mp3","license":"no-rights-reserved","uri":"https://api.soundcloud.com/tracks/4822078","user":{"id":1397546,"kind":"user","permalink":"submarine","username":"submarine","uri":"https://api.soundcloud.com/users/1397546","permalink_url":"http://soundcloud.com/submarine","avatar_url":"https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine/kapital-identitat-mackt-fem","artwork_url":"https://i1.sndcdn.com/artworks-000002170048-ahtea3-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/pMuTPNymGQ2c_m.png","stream_url":"https://api.soundcloud.com/tracks/4822078/stream","download_url":"https://api.soundcloud.com/tracks/4822078/download","playback_count":81,"download_count":3,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/4822078/attachments"},{"kind":"track","id":8241719,"created_at":"2010/12/20 11:35:25 +0000","user_id":2393625,"duration":270782,"commentable":true,"state":"finished","original_content_size":6497220,"sharing":"public","tag_list":"","permalink":"la-move-for-repulica","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"LA - Move for Repulica","description":"Cheesey but musically it works...","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/8241719","user":{"id":2393625,"kind":"user","permalink":"submarine-1","username":"Submarine","uri":"https://api.soundcloud.com/users/2393625","permalink_url":"http://soundcloud.com/submarine-1","avatar_url":"https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-1/la-move-for-repulica","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/bdEHCyvZZpJ6_m.png","stream_url":"https://api.soundcloud.com/tracks/8241719/stream","download_url":"https://api.soundcloud.com/tracks/8241719/download","playback_count":22,"download_count":3,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/8241719/attachments"},{"kind":"track","id":8241760,"created_at":"2010/12/20 11:37:56 +0000","user_id":2393625,"duration":407481,"commentable":true,"state":"finished","original_content_size":9777360,"sharing":"public","tag_list":"","permalink":"la-prayin-gospel","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"LA - Prayin Gospel","description":"Again bootlegs are meant to be cheesy...","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/8241760","user":{"id":2393625,"kind":"user","permalink":"submarine-1","username":"Submarine","uri":"https://api.soundcloud.com/users/2393625","permalink_url":"http://soundcloud.com/submarine-1","avatar_url":"https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-1/la-prayin-gospel","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/vsPZW6qU7p8V_m.png","stream_url":"https://api.soundcloud.com/tracks/8241760/stream","download_url":"https://api.soundcloud.com/tracks/8241760/download","playback_count":16,"download_count":4,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/8241760/attachments"},{"kind":"track","id":8681118,"created_at":"2011/01/03 15:19:36 +0000","user_id":1197717,"duration":247029,"commentable":true,"state":"finished","original_content_size":65318444,"sharing":"public","tag_list":"","permalink":"slow-motion-in-the-morphine-ocean","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep/ambient","title":"Slow motion in the morphine ocean","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":140.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/8681118","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/slow-motion-in-the-morphine-ocean","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/JSrnocmPsjOi_m.png","stream_url":"https://api.soundcloud.com/tracks/8681118/stream","playback_count":451,"download_count":0,"favoritings_count":6,"comment_count":12,"attachments_uri":"https://api.soundcloud.com/tracks/8681118/attachments"},{"kind":"track","id":3703311,"created_at":"2010/06/29 14:24:27 +0000","user_id":1197717,"duration":240181,"commentable":true,"state":"finished","original_content_size":42336044,"sharing":"public","tag_list":"","permalink":"oh-you-just-wouldnt-let-it-lie","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"unfineshed","title":"Oh you just wouldnt let it lie","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":136.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/3703311","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/oh-you-just-wouldnt-let-it-lie","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/bOpMn5TCVSwk_m.png","stream_url":"https://api.soundcloud.com/tracks/3703311/stream","download_url":"https://api.soundcloud.com/tracks/3703311/download","playback_count":258,"download_count":6,"favoritings_count":4,"comment_count":3,"attachments_uri":"https://api.soundcloud.com/tracks/3703311/attachments"},{"kind":"track","id":5614024,"created_at":"2010/09/27 14:49:35 +0000","user_id":1197717,"duration":210418,"commentable":true,"state":"finished","original_content_size":6754931,"sharing":"public","tag_list":"","permalink":"silent-h-bleep-bleep-jungle-boogie-remix","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dubstep","title":"silent H Bleep Bleep (jungle boogie remix)","description":"","label_name":"","release":"","track_type":"remix","key_signature":"","isrc":"","video_url":null,"bpm":137.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/5614024","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/silent-h-bleep-bleep-jungle-boogie-remix","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/CDaZ3aqNQrAL_m.png","stream_url":"https://api.soundcloud.com/tracks/5614024/stream","playback_count":355,"download_count":4,"favoritings_count":3,"comment_count":11,"attachments_uri":"https://api.soundcloud.com/tracks/5614024/attachments"},{"kind":"track","id":61643102,"created_at":"2012/09/29 23:09:05 +0000","user_id":25157649,"duration":1691325,"commentable":true,"state":"finished","original_content_size":67763578,"sharing":"public","tag_list":"Submarine Deep House Tech Mix Alkatraz","permalink":"0-below-1","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Deep","title":"!0 Below #1","description":"This is the first in my !0 Below series. Nothing but deep, dark, sub bass that can only be reached by traveling with Submarine into the depths. \r\n\r\nThis series will consist of my favourite 10 Tech House and Deep House tracks I find as I travel this world.\r\n\r\nEnjoy!\r\n\r\n!0 Below #1\r\n\r\nTormenta - Las Trompa Llegadas (Submarine Remix)\r\nKolombo - Stop ou encore\r\nJustin Martin, Christian Martin - Riding Spaceships (Justin Martin Vs. Leroy Peppers - DJ Version)\r\nSepehr - Apple Bottoms (Original Mix)\r\nClaude VonStroke - Chimps - Re-Edit\r\nMojo Filter ft Mighty Boosh - Oaky Timbre (Loose Cannons Re-Flik)\r\nTyrek - Charlie's Soap Box (Original Mix)\r\nJustin Martin, Ardalan - Lezgo VIP (Justin Martin Vs. Ardalan - DJ Version)\r\nKill Frenzy - Titsss\r\nKolombo - Busta Ass (Original Mix)\r\n\r\n","label_name":"","release":"","track_type":"live","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/61643102","user":{"id":25157649,"kind":"user","permalink":"submarine-5","username":"SUBmarine","uri":"https://api.soundcloud.com/users/25157649","permalink_url":"http://soundcloud.com/submarine-5","avatar_url":"https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-5/0-below-1","artwork_url":"https://i1.sndcdn.com/artworks-000031257163-w2f5u5-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/iWUZQHgatzSu_m.png","stream_url":"https://api.soundcloud.com/tracks/61643102/stream","download_url":"https://api.soundcloud.com/tracks/61643102/download","playback_count":80,"download_count":6,"favoritings_count":3,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/61643102/attachments"},{"kind":"track","id":38896423,"created_at":"2012/03/06 16:34:19 +0000","user_id":1197717,"duration":151019,"commentable":true,"state":"finished","original_content_size":4974103,"sharing":"public","tag_list":"","permalink":"work-in-progress-dunno-what-to","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep/Egyptian ","title":"work in progress dunno what to call it really?","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/38896423","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/work-in-progress-dunno-what-to","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/ZigYRiuqWMZL_m.png","stream_url":"https://api.soundcloud.com/tracks/38896423/stream","playback_count":201,"download_count":0,"favoritings_count":5,"comment_count":12,"attachments_uri":"https://api.soundcloud.com/tracks/38896423/attachments"},{"kind":"track","id":8241747,"created_at":"2010/12/20 11:37:03 +0000","user_id":2393625,"duration":400242,"commentable":true,"state":"finished","original_content_size":9603713,"sharing":"public","tag_list":"","permalink":"la-i-found-air-through-polotics","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"LA - I Found Air through polotics","description":"Quality instrumental and bit of a get out of jail bootleg... one when you don't know what else will get F**king people to interact","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/8241747","user":{"id":2393625,"kind":"user","permalink":"submarine-1","username":"Submarine","uri":"https://api.soundcloud.com/users/2393625","permalink_url":"http://soundcloud.com/submarine-1","avatar_url":"https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/submarine-1/la-i-found-air-through-polotics","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/KIpkSVViTYms_m.png","stream_url":"https://api.soundcloud.com/tracks/8241747/stream","download_url":"https://api.soundcloud.com/tracks/8241747/download","playback_count":16,"download_count":3,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/8241747/attachments"},{"kind":"track","id":5613923,"created_at":"2010/09/27 14:44:45 +0000","user_id":1197717,"duration":318030,"commentable":true,"state":"finished","original_content_size":10069025,"sharing":"public","tag_list":"","permalink":"if-you-loved-me-you-would-ft-lucien-the-beat","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dubstep","title":"If you loved me,you would. ft Lucien \u0026 the Beat","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":145.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/5613923","user":{"id":1197717,"kind":"user","permalink":"vibecatt","username":"SUBMARINE","uri":"https://api.soundcloud.com/users/1197717","permalink_url":"http://soundcloud.com/vibecatt","avatar_url":"https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/vibecatt/if-you-loved-me-you-would-ft-lucien-the-beat","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/kQmXBCvVRp49_m.png","stream_url":"https://api.soundcloud.com/tracks/5613923/stream","playback_count":268,"download_count":0,"favoritings_count":2,"comment_count":2,"attachments_uri":"https://api.soundcloud.com/tracks/5613923/attachments"},{"kind":"track","id":37219984,"created_at":"2012/02/20 11:01:57 +0000","user_id":12013031,"duration":232472,"commentable":true,"state":"finished","original_content_size":9293392,"sharing":"public","tag_list":"dubstep","permalink":"seniter-my-mind","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"dubstep","title":"Seniter - My Mind","description":"dubstep","label_name":"","release":"","track_type":"demo","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/37219984","user":{"id":12013031,"kind":"user","permalink":"submarine-3","username":"SubMarine","uri":"https://api.soundcloud.com/users/12013031","permalink_url":"http://soundcloud.com/submarine-3","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/submarine-3/seniter-my-mind","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/FGhiJn68bxbs_m.png","stream_url":"https://api.soundcloud.com/tracks/37219984/stream","download_url":"https://api.soundcloud.com/tracks/37219984/download","playback_count":5,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/37219984/attachments"},{"kind":"track","id":37252163,"created_at":"2012/02/20 18:02:27 +0000","user_id":12013031,"duration":232472,"commentable":true,"state":"finished","original_content_size":9293392,"sharing":"public","tag_list":"dubstep","permalink":"seniter-my-mind-2","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dubstep","title":"Seniter - My Mind","description":"dubstep","label_name":"","release":"","track_type":"demo","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/37252163","user":{"id":12013031,"kind":"user","permalink":"submarine-3","username":"SubMarine","uri":"https://api.soundcloud.com/users/12013031","permalink_url":"http://soundcloud.com/submarine-3","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/submarine-3/seniter-my-mind-2","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/FKIkC9Ix4RVc_m.png","stream_url":"https://api.soundcloud.com/tracks/37252163/stream","download_url":"https://api.soundcloud.com/tracks/37252163/download","playback_count":8,"download_count":0,"favoritings_count":0,"comment_count":1,"attachments_uri":"https://api.soundcloud.com/tracks/37252163/attachments"},{"kind":"track","id":39749779,"created_at":"2012/03/14 16:41:27 +0000","user_id":13617184,"duration":211985,"commentable":true,"state":"finished","original_content_size":4237131,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":102.2,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/39749779","user":{"id":13617184,"kind":"user","permalink":"kaosuhm","username":"kaosuhm","uri":"https://api.soundcloud.com/users/13617184","permalink_url":"http://soundcloud.com/kaosuhm","avatar_url":"https://i1.sndcdn.com/avatars-000011829266-wb0him-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/kaosuhm/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/tu07uop0v64d_m.png","stream_url":"https://api.soundcloud.com/tracks/39749779/stream","download_url":"https://api.soundcloud.com/tracks/39749779/download","playback_count":8,"download_count":1,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/39749779/attachments"},{"kind":"track","id":17190701,"created_at":"2011/06/15 13:46:31 +0000","user_id":2711254,"duration":296550,"commentable":true,"state":"finished","original_content_size":11855481,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dubstep","title":"Submarine","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":0.0,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/17190701","user":{"id":2711254,"kind":"user","permalink":"dendrido","username":"dendrido","uri":"https://api.soundcloud.com/users/2711254","permalink_url":"http://soundcloud.com/dendrido","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/dendrido/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/hkQN0LhPNjqz_m.png","stream_url":"https://api.soundcloud.com/tracks/17190701/stream","download_url":"https://api.soundcloud.com/tracks/17190701/download","playback_count":72,"download_count":4,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/17190701/attachments"},{"kind":"track","id":40419474,"created_at":"2012/03/20 22:27:01 +0000","user_id":4659673,"duration":199650,"commentable":true,"state":"finished","original_content_size":7978296,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/40419474","user":{"id":4659673,"kind":"user","permalink":"tscap","username":"tscap","uri":"https://api.soundcloud.com/users/4659673","permalink_url":"http://soundcloud.com/tscap","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/tscap/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000020274637-ck6oy9-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/3X3508xFUIZR_m.png","stream_url":"https://api.soundcloud.com/tracks/40419474/stream","playback_count":164,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/40419474/attachments"},{"kind":"track","id":51292639,"created_at":"2012/06/29 21:09:31 +0000","user_id":19499856,"duration":259207,"commentable":true,"state":"finished","original_content_size":6208042,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"German Pop","title":"Submarine","description":"","label_name":"","release":"","track_type":"remix","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/51292639","user":{"id":19499856,"kind":"user","permalink":"diesonauten","username":"Diesonauten","uri":"https://api.soundcloud.com/users/19499856","permalink_url":"http://soundcloud.com/diesonauten","avatar_url":"https://i1.sndcdn.com/avatars-000017797144-zuhuyl-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/diesonauten/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/S5IIOhTVBk7Z_m.png","stream_url":"https://api.soundcloud.com/tracks/51292639/stream","playback_count":7,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/51292639/attachments"},{"kind":"track","id":53118076,"created_at":"2012/07/17 06:09:31 +0000","user_id":20415464,"duration":160242,"commentable":true,"state":"finished","original_content_size":6405292,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Ambient Electronic","title":"Submarine","description":"","label_name":"","release":"","track_type":"demo","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/53118076","user":{"id":20415464,"kind":"user","permalink":"madfortune","username":"madfortune","uri":"https://api.soundcloud.com/users/20415464","permalink_url":"http://soundcloud.com/madfortune","avatar_url":"https://i1.sndcdn.com/avatars-000022913180-m3smv4-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/madfortune/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/1fvPc3TAuocs_m.png","stream_url":"https://api.soundcloud.com/tracks/53118076/stream","playback_count":32,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/53118076/attachments"},{"kind":"track","id":71549416,"created_at":"2012/12/17 09:42:02 +0000","user_id":30649068,"duration":12775,"commentable":true,"state":"finished","original_content_size":265286,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":" COMPUTER ","title":"Submarine","description":"","label_name":"","release":"","track_type":null,"key_signature":null,"isrc":null,"video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/71549416","user":{"id":30649068,"kind":"user","permalink":"ogn-2","username":"OGn","uri":"https://api.soundcloud.com/users/30649068","permalink_url":"http://soundcloud.com/ogn-2","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/ogn-2/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/yys5pyVqN3N4_m.png","stream_url":"https://api.soundcloud.com/tracks/71549416/stream","playback_count":0,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/71549416/attachments"},{"kind":"track","id":28558390,"created_at":"2011/11/21 03:46:15 +0000","user_id":9115258,"duration":279250,"commentable":true,"state":"finished","original_content_size":9362480,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Rock","title":"Submarine","description":"","label_name":"","release":"","track_type":"recording","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/28558390","user":{"id":9115258,"kind":"user","permalink":"gymnasium-1","username":"GYMNASIUM","uri":"https://api.soundcloud.com/users/9115258","permalink_url":"http://soundcloud.com/gymnasium-1","avatar_url":"https://i1.sndcdn.com/avatars-000007549143-zvzvxp-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/gymnasium-1/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000014289839-wiykjz-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/s5KnrKvOymiS_m.png","stream_url":"https://api.soundcloud.com/tracks/28558390/stream","playback_count":40,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/28558390/attachments"},{"kind":"track","id":28867279,"created_at":"2011/11/24 15:46:53 +0000","user_id":2629105,"duration":1236585,"commentable":true,"state":"finished","original_content_size":24723440,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"submarine","description":"Submarine-Track for the Game Sea Level","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/28867279","user":{"id":2629105,"kind":"user","permalink":"yosev","username":"yosev","uri":"https://api.soundcloud.com/users/2629105","permalink_url":"http://soundcloud.com/yosev","avatar_url":"https://a1.sndcdn.com/images/default_avatar_large.png?923db0b"},"permalink_url":"http://soundcloud.com/yosev/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/14gsGyQlFfTS_m.png","stream_url":"https://api.soundcloud.com/tracks/28867279/stream","playback_count":11,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/28867279/attachments"},{"kind":"track","id":1820751,"created_at":"2010/02/28 14:53:47 +0000","user_id":360053,"duration":420260,"commentable":true,"state":"finished","original_content_size":74089920,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"jon hurst \"98\"","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"aiff","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/1820751","user":{"id":360053,"kind":"user","permalink":"blacktruck","username":"Blacktruck","uri":"https://api.soundcloud.com/users/360053","permalink_url":"http://soundcloud.com/blacktruck","avatar_url":"https://i1.sndcdn.com/avatars-000001709104-msbwu1-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/blacktruck/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/8UppVwvKXySo_m.png","stream_url":"https://api.soundcloud.com/tracks/1820751/stream","playback_count":82,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/1820751/attachments"},{"kind":"track","id":62370919,"created_at":"2012/10/05 23:48:57 +0000","user_id":5677944,"duration":137102,"commentable":true,"state":"finished","original_content_size":5482648,"sharing":"public","tag_list":"yonz yonzworth","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"Yonz","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/62370919","user":{"id":5677944,"kind":"user","permalink":"yonzworth","username":"YONZ.","uri":"https://api.soundcloud.com/users/5677944","permalink_url":"http://soundcloud.com/yonzworth","avatar_url":"https://i1.sndcdn.com/avatars-000023633772-akic5i-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/yonzworth/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000031637328-php1z4-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/yCSC15xa89sQ_m.png","stream_url":"https://api.soundcloud.com/tracks/62370919/stream","download_url":"https://api.soundcloud.com/tracks/62370919/download","playback_count":23,"download_count":1,"favoritings_count":0,"comment_count":1,"attachments_uri":"https://api.soundcloud.com/tracks/62370919/attachments"},{"kind":"track","id":33069285,"created_at":"2012/01/11 14:55:25 +0000","user_id":2392717,"duration":362639,"commentable":true,"state":"finished","original_content_size":12699248,"sharing":"public","tag_list":"Kenworthy Jack EP Doors Leicester","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":"https://itunes.apple.com/gb/album/doors-ep/id510972490","label_id":7338466,"purchase_title":null,"genre":"","title":"Submarine","description":"","label_name":"Flat Five Records","release":"","track_type":"recording","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/33069285","user":{"id":2392717,"kind":"user","permalink":"kenworthymusic","username":"KENWORTHY","uri":"https://api.soundcloud.com/users/2392717","permalink_url":"http://soundcloud.com/kenworthymusic","avatar_url":"https://i1.sndcdn.com/avatars-000008980061-b44qs6-large.jpg?923db0b"},"label":{"id":7338466,"kind":"user","permalink":"flatfiverecords","username":"Flat Five Records","uri":"https://api.soundcloud.com/users/7338466","permalink_url":"http://soundcloud.com/flatfiverecords","avatar_url":"https://i1.sndcdn.com/avatars-000030448905-fwbm4z-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/kenworthymusic/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000016606280-14kjii-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/wLD3ZEwWRfw5_m.png","stream_url":"https://api.soundcloud.com/tracks/33069285/stream","playback_count":305,"download_count":0,"favoritings_count":2,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/33069285/attachments"},{"kind":"track","id":16486990,"created_at":"2011/06/04 00:24:58 +0000","user_id":4747253,"duration":320069,"commentable":true,"state":"finished","original_content_size":28212068,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"submarine written on SuperCollider and edited on Audacity. ","label_name":"","release":"","track_type":"","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/16486990","user":{"id":4747253,"kind":"user","permalink":"raulislas","username":"raulislas","uri":"https://api.soundcloud.com/users/4747253","permalink_url":"http://soundcloud.com/raulislas","avatar_url":"https://i1.sndcdn.com/avatars-000003926030-xmig3q-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/raulislas/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/NTTYjaUa7vPg_m.png","stream_url":"https://api.soundcloud.com/tracks/16486990/stream","playback_count":26,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/16486990/attachments"},{"kind":"track","id":73551373,"created_at":"2013/01/04 01:26:00 +0000","user_id":31879579,"duration":295080,"commentable":true,"state":"finished","original_content_size":9711446,"sharing":"public","tag_list":"critical bass submarine geneva youth dub chmouel robard","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Dub","title":"Submarine","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/73551373","user":{"id":31879579,"kind":"user","permalink":"chmouel-1","username":"Chmouel","uri":"https://api.soundcloud.com/users/31879579","permalink_url":"http://soundcloud.com/chmouel-1","avatar_url":"https://i1.sndcdn.com/avatars-000030145044-3w8j8t-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/chmouel-1/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/nqOvtX1UTmqJ_m.png","stream_url":"https://api.soundcloud.com/tracks/73551373/stream","playback_count":52,"download_count":0,"favoritings_count":0,"comment_count":1,"attachments_uri":"https://api.soundcloud.com/tracks/73551373/attachments"},{"kind":"track","id":6342020,"created_at":"2010/10/23 20:44:41 +0000","user_id":1977285,"duration":295190,"commentable":true,"state":"finished","original_content_size":11851426,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Alternative","title":"Submarine","description":"Song about exploring...inner space.\r\n\r\nGuest Drummer:Jonathon Chaffee of the Weeds","label_name":"","release":"","track_type":"demo","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/6342020","user":{"id":1977285,"kind":"user","permalink":"niht","username":"NIHT","uri":"https://api.soundcloud.com/users/1977285","permalink_url":"http://soundcloud.com/niht","avatar_url":"https://i1.sndcdn.com/avatars-000001926282-51o35t-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/niht/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000002724657-cwias9-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/IomxkgsLmr4Q_m.png","stream_url":"https://api.soundcloud.com/tracks/6342020/stream","playback_count":106,"download_count":0,"favoritings_count":1,"comment_count":8,"attachments_uri":"https://api.soundcloud.com/tracks/6342020/attachments"},{"kind":"track","id":41730121,"created_at":"2012/04/02 03:21:19 +0000","user_id":14554162,"duration":178719,"commentable":true,"state":"finished","original_content_size":5821467,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":true,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Piano/alternative","title":"Submarine","description":"Track 3 off Snacktime's 'A Snack To Remember' EP ","label_name":"","release":"","track_type":"demo","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/41730121","user":{"id":14554162,"kind":"user","permalink":"snacktimelive","username":"Snacktimelive","uri":"https://api.soundcloud.com/users/14554162","permalink_url":"http://soundcloud.com/snacktimelive","avatar_url":"https://i1.sndcdn.com/avatars-000012769026-1uwvhh-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/snacktimelive/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000020930107-68z9nf-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/gHXwJG5NZXpu_m.png","stream_url":"https://api.soundcloud.com/tracks/41730121/stream","download_url":"https://api.soundcloud.com/tracks/41730121/download","playback_count":40,"download_count":8,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/41730121/attachments"},{"kind":"track","id":57026982,"created_at":"2012/08/21 06:15:25 +0000","user_id":20863050,"duration":79546,"commentable":true,"state":"finished","original_content_size":3179859,"sharing":"public","tag_list":"triptronic","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Electronic","title":"Submarine","description":"Work en progress. Whistles are fun","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/57026982","user":{"id":20863050,"kind":"user","permalink":"1mouth","username":"_Mouth","uri":"https://api.soundcloud.com/users/20863050","permalink_url":"http://soundcloud.com/1mouth","avatar_url":"https://i1.sndcdn.com/avatars-000021518451-kxshue-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/1mouth/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/kGOGc5wE62s6_m.png","stream_url":"https://api.soundcloud.com/tracks/57026982/stream","playback_count":24,"download_count":0,"favoritings_count":2,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/57026982/attachments"},{"kind":"track","id":71471429,"created_at":"2012/12/16 18:28:09 +0000","user_id":18318316,"duration":305163,"commentable":true,"state":"finished","original_content_size":5082557,"sharing":"public","tag_list":"acoustic melodic unsigned thebedroomhour dynamic","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Alternative","title":"Submarine","description":"","label_name":"","release":"","track_type":"recording","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"m4a","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/71471429","user":{"id":18318316,"kind":"user","permalink":"thebedroomhour","username":"thebedroomhour","uri":"https://api.soundcloud.com/users/18318316","permalink_url":"http://soundcloud.com/thebedroomhour","avatar_url":"https://i1.sndcdn.com/avatars-000016630904-haxh0v-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/thebedroomhour/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/XmAVEiklNT3L_m.png","stream_url":"https://api.soundcloud.com/tracks/71471429/stream","playback_count":221,"download_count":0,"favoritings_count":12,"comment_count":4,"attachments_uri":"https://api.soundcloud.com/tracks/71471429/attachments"},{"kind":"track","id":9437798,"created_at":"2011/01/21 17:49:37 +0000","user_id":620091,"duration":156950,"commentable":true,"state":"finished","original_content_size":2509426,"sharing":"public","tag_list":"","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"","title":"Submarine","description":"Songs about poetry, childhood, dreams, pain, lonelyness, memories, religion and cruelty.\r\nRecorded in Lastadia Studio, Gdansk, Poland, 2011","label_name":"","release":"","track_type":null,"key_signature":null,"isrc":null,"video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"mp3","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/9437798","user":{"id":620091,"kind":"user","permalink":"komarski","username":"Komarski","uri":"https://api.soundcloud.com/users/620091","permalink_url":"http://soundcloud.com/komarski","avatar_url":"https://i1.sndcdn.com/avatars-000000932536-kfqtaw-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/komarski/submarine","artwork_url":"https://i1.sndcdn.com/artworks-000004289455-lzyqc7-large.jpg?923db0b","waveform_url":"https://w1.sndcdn.com/AJiASXLZ2rcO_m.png","stream_url":"https://api.soundcloud.com/tracks/9437798/stream","playback_count":35,"download_count":0,"favoritings_count":0,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/9437798/attachments"},{"kind":"track","id":53265032,"created_at":"2012/07/18 13:28:10 +0000","user_id":19916258,"duration":294799,"commentable":true,"state":"finished","original_content_size":51967484,"sharing":"public","tag_list":"mpc mpc2500 hiphop inst sp-303 sampling DRS ballhead breakbeat","permalink":"submarine","streamable":true,"embeddable_by":"all","downloadable":false,"purchase_url":null,"label_id":null,"purchase_title":null,"genre":"Hiphopinstrumentals","title":"Submarine","description":"","label_name":"","release":"","track_type":"original","key_signature":"","isrc":"","video_url":null,"bpm":null,"release_year":null,"release_month":null,"release_day":null,"original_format":"wav","license":"all-rights-reserved","uri":"https://api.soundcloud.com/tracks/53265032","user":{"id":19916258,"kind":"user","permalink":"ballhead1216-1","username":"Ballhead","uri":"https://api.soundcloud.com/users/19916258","permalink_url":"http://soundcloud.com/ballhead1216-1","avatar_url":"https://i1.sndcdn.com/avatars-000018297535-kz8v8d-large.jpg?923db0b"},"permalink_url":"http://soundcloud.com/ballhead1216-1/submarine","artwork_url":null,"waveform_url":"https://w1.sndcdn.com/03W5PjTE04hR_m.png","stream_url":"https://api.soundcloud.com/tracks/53265032/stream","playback_count":77,"download_count":0,"favoritings_count":6,"comment_count":0,"attachments_uri":"https://api.soundcloud.com/tracks/53265032/attachments"}]1<?xml version="1.0" encoding="UTF-8"?>
2<tracks next-href="https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&amp;limit=30&amp;offset=30&amp;order=hotness&amp;q=submarine" type="array">
3 <track>
4 <kind>track</kind>
5 <id type="integer">46495820</id>
6 <created-at type="datetime">2012-05-15T20:39:54Z</created-at>
7 <user-id type="integer">2303663</user-id>
8 <duration type="integer">308230</duration>
9 <commentable type="boolean">false</commentable>
10 <state>finished</state>
11 <original-content-size type="integer">12322884</original-content-size>
12 <sharing>public</sharing>
13 <tag-list></tag-list>
14 <permalink>walt-graces-submarine-test</permalink>
15 <streamable type="boolean">true</streamable>
16 <embeddable-by>all</embeddable-by>
17 <downloadable type="boolean">false</downloadable>
18 <purchase-url nil="true"></purchase-url>
19 <label-id nil="true"></label-id>
20 <purchase-title nil="true"></purchase-title>
21 <genre></genre>
22 <title>Walt Grace's Submarine Test, January 1967</title>
23 <description></description>
24 <label-name></label-name>
25 <release></release>
26 <track-type></track-type>
27 <key-signature></key-signature>
28 <isrc></isrc>
29 <video-url nil="true"></video-url>
30 <bpm nil="true"></bpm>
31 <release-year nil="true"></release-year>
32 <release-month nil="true"></release-month>
33 <release-day nil="true"></release-day>
34 <original-format>mp3</original-format>
35 <license>all-rights-reserved</license>
36 <uri>https://api.soundcloud.com/tracks/46495820</uri>
37 <user>
38 <id type="integer">2303663</id>
39 <kind>user</kind>
40 <permalink>johnmayer</permalink>
41 <username>johnmayer</username>
42 <uri>https://api.soundcloud.com/users/2303663</uri>
43 <permalink-url>http://soundcloud.com/johnmayer</permalink-url>
44 <avatar-url>https://i1.sndcdn.com/avatars-000015302931-dlue9y-large.jpg?cc07a88</avatar-url>
45 </user>
46 <permalink-url>http://soundcloud.com/johnmayer/walt-graces-submarine-test</permalink-url>
47 <artwork-url nil="true"></artwork-url>
48 <waveform-url>https://w1.sndcdn.com/P5WJmgx408ju_m.png</waveform-url>
49 <stream-url>https://api.soundcloud.com/tracks/46495820/stream</stream-url>
50 <attachments-uri>https://api.soundcloud.com/tracks/46495820/attachments</attachments-uri>
51 </track>
52 <track>
53 <kind>track</kind>
54 <id type="integer">99743581</id>
55 <created-at type="datetime">2013-07-05T03:24:05Z</created-at>
56 <user-id type="integer">50203203</user-id>
57 <duration type="integer">223550</duration>
58 <commentable type="boolean">true</commentable>
59 <state>finished</state>
60 <original-content-size type="integer">8950433</original-content-size>
61 <sharing>public</sharing>
62 <tag-list></tag-list>
63 <permalink>submarine</permalink>
64 <streamable type="boolean">true</streamable>
65 <embeddable-by>all</embeddable-by>
66 <downloadable type="boolean">false</downloadable>
67 <purchase-url nil="true"></purchase-url>
68 <label-id nil="true"></label-id>
69 <purchase-title nil="true"></purchase-title>
70 <genre>Underwater</genre>
71 <title>Submarine - Submarines</title>
72 <description>DEMO recording from our fourth rehersal. Recorded at Irene studios June 2013.
73http://www.facebook.com/pages/Submarines/613462528665489</description>
74 <label-name></label-name>
75 <release></release>
76 <track-type>demo</track-type>
77 <key-signature></key-signature>
78 <isrc></isrc>
79 <video-url nil="true"></video-url>
80 <bpm nil="true"></bpm>
81 <release-year nil="true"></release-year>
82 <release-month nil="true"></release-month>
83 <release-day nil="true"></release-day>
84 <original-format>mp3</original-format>
85 <license>all-rights-reserved</license>
86 <uri>https://api.soundcloud.com/tracks/99743581</uri>
87 <user>
88 <id type="integer">50203203</id>
89 <kind>user</kind>
90 <permalink>submarinesband</permalink>
91 <username>SubmarinesBand</username>
92 <uri>https://api.soundcloud.com/users/50203203</uri>
93 <permalink-url>http://soundcloud.com/submarinesband</permalink-url>
94 <avatar-url>https://i1.sndcdn.com/avatars-000046620261-yfvce6-large.jpg?cc07a88</avatar-url>
95 </user>
96 <permalink-url>http://soundcloud.com/submarinesband/submarine</permalink-url>
97 <artwork-url>https://i1.sndcdn.com/artworks-000052204608-okdvk3-large.jpg?cc07a88</artwork-url>
98 <waveform-url>https://w1.sndcdn.com/p0vnPSt9Kcbe_m.png</waveform-url>
99 <stream-url>https://api.soundcloud.com/tracks/99743581/stream</stream-url>
100 <playback-count type="integer">110</playback-count>
101 <download-count type="integer">0</download-count>
102 <favoritings-count type="integer">3</favoritings-count>
103 <comment-count type="integer">1</comment-count>
104 <attachments-uri>https://api.soundcloud.com/tracks/99743581/attachments</attachments-uri>
105 </track>
106 <track>
107 <kind>track</kind>
108 <id type="integer">98612674</id>
109 <created-at type="datetime">2013-06-27T00:31:34Z</created-at>
110 <user-id type="integer">4311696</user-id>
111 <duration type="integer">302081</duration>
112 <commentable type="boolean">true</commentable>
113 <state>finished</state>
114 <original-content-size type="integer">53277180</original-content-size>
115 <sharing>public</sharing>
116 <tag-list>"bad taste records" "the nameless city" "dusted wax kingdom"</tag-list>
117 <permalink>submarine-city</permalink>
118 <streamable type="boolean">true</streamable>
119 <embeddable-by>all</embeddable-by>
120 <downloadable type="boolean">false</downloadable>
121 <purchase-url nil="true"></purchase-url>
122 <label-id nil="true"></label-id>
123 <purchase-title nil="true"></purchase-title>
124 <genre>Instrumental Hiphop</genre>
125 <title>Submarine City</title>
126 <description>http://thirdpersonlurkin.bandcamp.com/</description>
127 <label-name></label-name>
128 <release></release>
129 <track-type></track-type>
130 <key-signature></key-signature>
131 <isrc></isrc>
132 <video-url nil="true"></video-url>
133 <bpm nil="true"></bpm>
134 <release-year nil="true"></release-year>
135 <release-month nil="true"></release-month>
136 <release-day nil="true"></release-day>
137 <original-format>wav</original-format>
138 <license>all-rights-reserved</license>
139 <uri>https://api.soundcloud.com/tracks/98612674</uri>
140 <user>
141 <id type="integer">4311696</id>
142 <kind>user</kind>
143 <permalink>thirdpersonlurkin</permalink>
144 <username>Third Person Lurkin</username>
145 <uri>https://api.soundcloud.com/users/4311696</uri>
146 <permalink-url>http://soundcloud.com/thirdpersonlurkin</permalink-url>
147 <avatar-url>https://i1.sndcdn.com/avatars-000046311415-gugiy8-large.jpg?cc07a88</avatar-url>
148 </user>
149 <permalink-url>http://soundcloud.com/thirdpersonlurkin/submarine-city</permalink-url>
150 <artwork-url>https://i1.sndcdn.com/artworks-000051575400-x2qtba-large.jpg?cc07a88</artwork-url>
151 <waveform-url>https://w1.sndcdn.com/Go6PTpPCGu1x_m.png</waveform-url>
152 <stream-url>https://api.soundcloud.com/tracks/98612674/stream</stream-url>
153 <playback-count type="integer">217</playback-count>
154 <download-count type="integer">0</download-count>
155 <favoritings-count type="integer">18</favoritings-count>
156 <comment-count type="integer">4</comment-count>
157 <attachments-uri>https://api.soundcloud.com/tracks/98612674/attachments</attachments-uri>
158 </track>
159 <track>
160 <kind>track</kind>
161 <id type="integer">100646268</id>
162 <created-at type="datetime">2013-07-11T19:18:55Z</created-at>
163 <user-id type="integer">26044098</user-id>
164 <duration type="integer">248263</duration>
165 <commentable type="boolean">true</commentable>
166 <state>finished</state>
167 <original-content-size type="integer">43778092</original-content-size>
168 <sharing>public</sharing>
169 <tag-list>soundcloud:source=android-3rdparty-upload</tag-list>
170 <permalink>submarine-idgaf-version</permalink>
171 <streamable type="boolean">true</streamable>
172 <embeddable-by>all</embeddable-by>
173 <downloadable type="boolean">false</downloadable>
174 <purchase-url nil="true"></purchase-url>
175 <label-id nil="true"></label-id>
176 <purchase-title nil="true"></purchase-title>
177 <genre nil="true"></genre>
178 <title>Submarine IDGAF version</title>
179 <description nil="true"></description>
180 <label-name nil="true"></label-name>
181 <release nil="true"></release>
182 <track-type>recording</track-type>
183 <key-signature nil="true"></key-signature>
184 <isrc nil="true"></isrc>
185 <video-url nil="true"></video-url>
186 <bpm nil="true"></bpm>
187 <release-year nil="true"></release-year>
188 <release-month nil="true"></release-month>
189 <release-day nil="true"></release-day>
190 <original-format>wav</original-format>
191 <license>all-rights-reserved</license>
192 <uri>https://api.soundcloud.com/tracks/100646268</uri>
193 <user>
194 <id type="integer">26044098</id>
195 <kind>user</kind>
196 <permalink>joesallesdrums</permalink>
197 <username>joesallesdrums</username>
198 <uri>https://api.soundcloud.com/users/26044098</uri>
199 <permalink-url>http://soundcloud.com/joesallesdrums</permalink-url>
200 <avatar-url>https://i1.sndcdn.com/avatars-000038450579-izkkv4-large.jpg?cc07a88</avatar-url>
201 </user>
202 <created-with>
203 <id type="integer">3152</id>
204 <kind>app</kind>
205 <name>SoundCloud Android</name>
206 <uri>https://api.soundcloud.com/apps/3152</uri>
207 <permalink-url>http://soundcloud.com/apps/android</permalink-url>
208 <external-url>https://market.android.com/details?id=com.soundcloud.android</external-url>
209 </created-with>
210 <permalink-url>http://soundcloud.com/joesallesdrums/submarine-idgaf-version</permalink-url>
211 <artwork-url nil="true"></artwork-url>
212 <waveform-url>https://w1.sndcdn.com/1o8Qqh6PbBmW_m.png</waveform-url>
213 <stream-url>https://api.soundcloud.com/tracks/100646268/stream</stream-url>
214 <playback-count type="integer">8</playback-count>
215 <download-count type="integer">0</download-count>
216 <favoritings-count type="integer">1</favoritings-count>
217 <comment-count type="integer">0</comment-count>
218 <attachments-uri>https://api.soundcloud.com/tracks/100646268/attachments</attachments-uri>
219 </track>
220 <track>
221 <kind>track</kind>
222 <id type="integer">8241719</id>
223 <created-at type="datetime">2010-12-20T11:35:25Z</created-at>
224 <user-id type="integer">2393625</user-id>
225 <duration type="integer">270782</duration>
226 <commentable type="boolean">true</commentable>
227 <state>finished</state>
228 <original-content-size type="integer">6497220</original-content-size>
229 <sharing>public</sharing>
230 <tag-list></tag-list>
231 <permalink>la-move-for-repulica</permalink>
232 <streamable type="boolean">true</streamable>
233 <embeddable-by>all</embeddable-by>
234 <downloadable type="boolean">true</downloadable>
235 <purchase-url nil="true"></purchase-url>
236 <label-id nil="true"></label-id>
237 <purchase-title nil="true"></purchase-title>
238 <genre></genre>
239 <title>LA - Move for Repulica</title>
240 <description>Cheesey but musically it works...</description>
241 <label-name></label-name>
242 <release></release>
243 <track-type></track-type>
244 <key-signature></key-signature>
245 <isrc></isrc>
246 <video-url nil="true"></video-url>
247 <bpm nil="true"></bpm>
248 <release-year nil="true"></release-year>
249 <release-month nil="true"></release-month>
250 <release-day nil="true"></release-day>
251 <original-format>mp3</original-format>
252 <license>all-rights-reserved</license>
253 <uri>https://api.soundcloud.com/tracks/8241719</uri>
254 <user>
255 <id type="integer">2393625</id>
256 <kind>user</kind>
257 <permalink>submarine-1</permalink>
258 <username>Submarine</username>
259 <uri>https://api.soundcloud.com/users/2393625</uri>
260 <permalink-url>http://soundcloud.com/submarine-1</permalink-url>
261 <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url>
262 </user>
263 <permalink-url>http://soundcloud.com/submarine-1/la-move-for-repulica</permalink-url>
264 <artwork-url nil="true"></artwork-url>
265 <waveform-url>https://w1.sndcdn.com/bdEHCyvZZpJ6_m.png</waveform-url>
266 <stream-url>https://api.soundcloud.com/tracks/8241719/stream</stream-url>
267 <download-url>https://api.soundcloud.com/tracks/8241719/download</download-url>
268 <playback-count type="integer">23</playback-count>
269 <download-count type="integer">3</download-count>
270 <favoritings-count type="integer">0</favoritings-count>
271 <comment-count type="integer">0</comment-count>
272 <attachments-uri>https://api.soundcloud.com/tracks/8241719/attachments</attachments-uri>
273 </track>
274 <track>
275 <kind>track</kind>
276 <id type="integer">97175058</id>
277 <created-at type="datetime">2013-06-16T21:50:00Z</created-at>
278 <user-id type="integer">1397546</user-id>
279 <duration type="integer">54339</duration>
280 <commentable type="boolean">true</commentable>
281 <state>finished</state>
282 <original-content-size type="integer">19143776</original-content-size>
283 <sharing>public</sharing>
284 <tag-list></tag-list>
285 <permalink>fc2</permalink>
286 <streamable type="boolean">true</streamable>
287 <embeddable-by>all</embeddable-by>
288 <downloadable type="boolean">false</downloadable>
289 <purchase-url nil="true"></purchase-url>
290 <label-id nil="true"></label-id>
291 <purchase-title nil="true"></purchase-title>
292 <genre></genre>
293 <title>Fc2</title>
294 <description></description>
295 <label-name></label-name>
296 <release></release>
297 <track-type></track-type>
298 <key-signature></key-signature>
299 <isrc></isrc>
300 <video-url nil="true"></video-url>
301 <bpm nil="true"></bpm>
302 <release-year nil="true"></release-year>
303 <release-month nil="true"></release-month>
304 <release-day nil="true"></release-day>
305 <original-format>wav</original-format>
306 <license>cc-by</license>
307 <uri>https://api.soundcloud.com/tracks/97175058</uri>
308 <user>
309 <id type="integer">1397546</id>
310 <kind>user</kind>
311 <permalink>submarine</permalink>
312 <username>submarine</username>
313 <uri>https://api.soundcloud.com/users/1397546</uri>
314 <permalink-url>http://soundcloud.com/submarine</permalink-url>
315 <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url>
316 </user>
317 <permalink-url>http://soundcloud.com/submarine/fc2</permalink-url>
318 <artwork-url nil="true"></artwork-url>
319 <waveform-url>https://w1.sndcdn.com/p2dDB46hkNGP_m.png</waveform-url>
320 <stream-url>https://api.soundcloud.com/tracks/97175058/stream</stream-url>
321 <playback-count type="integer">6</playback-count>
322 <download-count type="integer">0</download-count>
323 <favoritings-count type="integer">0</favoritings-count>
324 <comment-count type="integer">0</comment-count>
325 <attachments-uri>https://api.soundcloud.com/tracks/97175058/attachments</attachments-uri>
326 </track>
327 <track>
328 <kind>track</kind>
329 <id type="integer">37219984</id>
330 <created-at type="datetime">2012-02-20T11:01:57Z</created-at>
331 <user-id type="integer">12013031</user-id>
332 <duration type="integer">232472</duration>
333 <commentable type="boolean">true</commentable>
334 <state>finished</state>
335 <original-content-size type="integer">9293392</original-content-size>
336 <sharing>public</sharing>
337 <tag-list>dubstep</tag-list>
338 <permalink>seniter-my-mind</permalink>
339 <streamable type="boolean">true</streamable>
340 <embeddable-by>all</embeddable-by>
341 <downloadable type="boolean">true</downloadable>
342 <purchase-url nil="true"></purchase-url>
343 <label-id nil="true"></label-id>
344 <purchase-title nil="true"></purchase-title>
345 <genre>dubstep</genre>
346 <title>Seniter - My Mind</title>
347 <description>dubstep</description>
348 <label-name></label-name>
349 <release></release>
350 <track-type>demo</track-type>
351 <key-signature></key-signature>
352 <isrc></isrc>
353 <video-url nil="true"></video-url>
354 <bpm nil="true"></bpm>
355 <release-year nil="true"></release-year>
356 <release-month nil="true"></release-month>
357 <release-day nil="true"></release-day>
358 <original-format>mp3</original-format>
359 <license>all-rights-reserved</license>
360 <uri>https://api.soundcloud.com/tracks/37219984</uri>
361 <user>
362 <id type="integer">12013031</id>
363 <kind>user</kind>
364 <permalink>submarine-3</permalink>
365 <username>SubMarine</username>
366 <uri>https://api.soundcloud.com/users/12013031</uri>
367 <permalink-url>http://soundcloud.com/submarine-3</permalink-url>
368 <avatar-url>https://a1.sndcdn.com/images/default_avatar_large.png?cc07a88</avatar-url>
369 </user>
370 <permalink-url>http://soundcloud.com/submarine-3/seniter-my-mind</permalink-url>
371 <artwork-url nil="true"></artwork-url>
372 <waveform-url>https://w1.sndcdn.com/FGhiJn68bxbs_m.png</waveform-url>
373 <stream-url>https://api.soundcloud.com/tracks/37219984/stream</stream-url>
374 <download-url>https://api.soundcloud.com/tracks/37219984/download</download-url>
375 <playback-count type="integer">13</playback-count>
376 <download-count type="integer">0</download-count>
377 <favoritings-count type="integer">0</favoritings-count>
378 <comment-count type="integer">0</comment-count>
379 <attachments-uri>https://api.soundcloud.com/tracks/37219984/attachments</attachments-uri>
380 </track>
381 <track>
382 <kind>track</kind>
383 <id type="integer">8241747</id>
384 <created-at type="datetime">2010-12-20T11:37:03Z</created-at>
385 <user-id type="integer">2393625</user-id>
386 <duration type="integer">400242</duration>
387 <commentable type="boolean">true</commentable>
388 <state>finished</state>
389 <original-content-size type="integer">9603713</original-content-size>
390 <sharing>public</sharing>
391 <tag-list></tag-list>
392 <permalink>la-i-found-air-through-polotics</permalink>
393 <streamable type="boolean">true</streamable>
394 <embeddable-by>all</embeddable-by>
395 <downloadable type="boolean">true</downloadable>
396 <purchase-url nil="true"></purchase-url>
397 <label-id nil="true"></label-id>
398 <purchase-title nil="true"></purchase-title>
399 <genre></genre>
400 <title>LA - I Found Air through polotics</title>
401 <description>Quality instrumental and bit of a get out of jail bootleg... one when you don't know what else will get F**king people to interact</description>
402 <label-name></label-name>
403 <release></release>
404 <track-type></track-type>
405 <key-signature></key-signature>
406 <isrc></isrc>
407 <video-url nil="true"></video-url>
408 <bpm nil="true"></bpm>
409 <release-year nil="true"></release-year>
410 <release-month nil="true"></release-month>
411 <release-day nil="true"></release-day>
412 <original-format>mp3</original-format>
413 <license>all-rights-reserved</license>
414 <uri>https://api.soundcloud.com/tracks/8241747</uri>
415 <user>
416 <id type="integer">2393625</id>
417 <kind>user</kind>
418 <permalink>submarine-1</permalink>
419 <username>Submarine</username>
420 <uri>https://api.soundcloud.com/users/2393625</uri>
421 <permalink-url>http://soundcloud.com/submarine-1</permalink-url>
422 <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url>
423 </user>
424 <permalink-url>http://soundcloud.com/submarine-1/la-i-found-air-through-polotics</permalink-url>
425 <artwork-url nil="true"></artwork-url>
426 <waveform-url>https://w1.sndcdn.com/KIpkSVViTYms_m.png</waveform-url>
427 <stream-url>https://api.soundcloud.com/tracks/8241747/stream</stream-url>
428 <download-url>https://api.soundcloud.com/tracks/8241747/download</download-url>
429 <playback-count type="integer">16</playback-count>
430 <download-count type="integer">3</download-count>
431 <favoritings-count type="integer">0</favoritings-count>
432 <comment-count type="integer">0</comment-count>
433 <attachments-uri>https://api.soundcloud.com/tracks/8241747/attachments</attachments-uri>
434 </track>
435 <track>
436 <kind>track</kind>
437 <id type="integer">61638090</id>
438 <created-at type="datetime">2012-09-29T22:06:42Z</created-at>
439 <user-id type="integer">25157649</user-id>
440 <duration type="integer">281782</duration>
441 <commentable type="boolean">true</commentable>
442 <state>finished</state>
443 <original-content-size type="integer">11423654</original-content-size>
444 <sharing>public</sharing>
445 <tag-list>Submarine Mombahouse Origional Remix Alkatraz</tag-list>
446 <permalink>tormenta-las-trompa-llegadas</permalink>
447 <streamable type="boolean">true</streamable>
448 <embeddable-by>all</embeddable-by>
449 <downloadable type="boolean">false</downloadable>
450 <purchase-url nil="true"></purchase-url>
451 <label-id nil="true"></label-id>
452 <purchase-title nil="true"></purchase-title>
453 <genre>Mombahouse</genre>
454 <title>Tormenta - Las Trompa Llegadas (Submarine Remix)</title>
455 <description>This is a remix of another one of my projects - Tormenta. A project I share with Calgary's Kousk, in the search to make world music to stimulate the mind.
456
457This is my remix of our original.
458
459I hope you enjoy.
460
461Submarine.
462
463Download will be made available when this track reaches 100 listens. </description>
464 <label-name></label-name>
465 <release></release>
466 <track-type>original</track-type>
467 <key-signature></key-signature>
468 <isrc></isrc>
469 <video-url nil="true"></video-url>
470 <bpm nil="true"></bpm>
471 <release-year nil="true"></release-year>
472 <release-month nil="true"></release-month>
473 <release-day nil="true"></release-day>
474 <original-format>mp3</original-format>
475 <license>all-rights-reserved</license>
476 <uri>https://api.soundcloud.com/tracks/61638090</uri>
477 <user>
478 <id type="integer">25157649</id>
479 <kind>user</kind>
480 <permalink>submarine-5</permalink>
481 <username>SUBmarine</username>
482 <uri>https://api.soundcloud.com/users/25157649</uri>
483 <permalink-url>http://soundcloud.com/submarine-5</permalink-url>
484 <avatar-url>https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?cc07a88</avatar-url>
485 </user>
486 <permalink-url>http://soundcloud.com/submarine-5/tormenta-las-trompa-llegadas</permalink-url>
487 <artwork-url>https://i1.sndcdn.com/artworks-000031256378-n3d3fg-large.jpg?cc07a88</artwork-url>
488 <waveform-url>https://w1.sndcdn.com/C0prIOi6Pq6p_m.png</waveform-url>
489 <stream-url>https://api.soundcloud.com/tracks/61638090/stream</stream-url>
490 <playback-count type="integer">83</playback-count>
491 <download-count type="integer">0</download-count>
492 <favoritings-count type="integer">0</favoritings-count>
493 <comment-count type="integer">1</comment-count>
494 <attachments-uri>https://api.soundcloud.com/tracks/61638090/attachments</attachments-uri>
495 </track>
496 <track>
497 <kind>track</kind>
498 <id type="integer">7976882</id>
499 <created-at type="datetime">2010-12-12T18:33:07Z</created-at>
500 <user-id type="integer">2393625</user-id>
501 <duration type="integer">50749</duration>
502 <commentable type="boolean">true</commentable>
503 <state>finished</state>
504 <original-content-size type="integer">1218386</original-content-size>
505 <sharing>public</sharing>
506 <tag-list></tag-list>
507 <permalink>the-edittttt</permalink>
508 <streamable type="boolean">true</streamable>
509 <embeddable-by>all</embeddable-by>
510 <downloadable type="boolean">false</downloadable>
511 <purchase-url nil="true"></purchase-url>
512 <label-id nil="true"></label-id>
513 <purchase-title nil="true"></purchase-title>
514 <genre></genre>
515 <title>THE EDITTTTT</title>
516 <description></description>
517 <label-name></label-name>
518 <release></release>
519 <track-type></track-type>
520 <key-signature></key-signature>
521 <isrc></isrc>
522 <video-url nil="true"></video-url>
523 <bpm nil="true"></bpm>
524 <release-year nil="true"></release-year>
525 <release-month nil="true"></release-month>
526 <release-day nil="true"></release-day>
527 <original-format>mp3</original-format>
528 <license>all-rights-reserved</license>
529 <uri>https://api.soundcloud.com/tracks/7976882</uri>
530 <user>
531 <id type="integer">2393625</id>
532 <kind>user</kind>
533 <permalink>submarine-1</permalink>
534 <username>Submarine</username>
535 <uri>https://api.soundcloud.com/users/2393625</uri>
536 <permalink-url>http://soundcloud.com/submarine-1</permalink-url>
537 <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url>
538 </user>
539 <permalink-url>http://soundcloud.com/submarine-1/the-edittttt</permalink-url>
540 <artwork-url nil="true"></artwork-url>
541 <waveform-url>https://w1.sndcdn.com/fKZgRN1JNlEw_m.png</waveform-url>
542 <stream-url>https://api.soundcloud.com/tracks/7976882/stream</stream-url>
543 <playback-count type="integer">45</playback-count>
544 <download-count type="integer">0</download-count>
545 <favoritings-count type="integer">0</favoritings-count>
546 <comment-count type="integer">0</comment-count>
547 <attachments-uri>https://api.soundcloud.com/tracks/7976882/attachments</attachments-uri>
548 </track>
549 <track>
550 <kind>track</kind>
551 <id type="integer">37252163</id>
552 <created-at type="datetime">2012-02-20T18:02:27Z</created-at>
553 <user-id type="integer">12013031</user-id>
554 <duration type="integer">232472</duration>
555 <commentable type="boolean">true</commentable>
556 <state>finished</state>
557 <original-content-size type="integer">9293392</original-content-size>
558 <sharing>public</sharing>
559 <tag-list>dubstep</tag-list>
560 <permalink>seniter-my-mind-2</permalink>
561 <streamable type="boolean">true</streamable>
562 <embeddable-by>all</embeddable-by>
563 <downloadable type="boolean">true</downloadable>
564 <purchase-url nil="true"></purchase-url>
565 <label-id nil="true"></label-id>
566 <purchase-title nil="true"></purchase-title>
567 <genre>Dubstep</genre>
568 <title>Seniter - My Mind</title>
569 <description>dubstep</description>
570 <label-name></label-name>
571 <release></release>
572 <track-type>demo</track-type>
573 <key-signature></key-signature>
574 <isrc></isrc>
575 <video-url nil="true"></video-url>
576 <bpm nil="true"></bpm>
577 <release-year nil="true"></release-year>
578 <release-month nil="true"></release-month>
579 <release-day nil="true"></release-day>
580 <original-format>mp3</original-format>
581 <license>all-rights-reserved</license>
582 <uri>https://api.soundcloud.com/tracks/37252163</uri>
583 <user>
584 <id type="integer">12013031</id>
585 <kind>user</kind>
586 <permalink>submarine-3</permalink>
587 <username>SubMarine</username>
588 <uri>https://api.soundcloud.com/users/12013031</uri>
589 <permalink-url>http://soundcloud.com/submarine-3</permalink-url>
590 <avatar-url>https://a1.sndcdn.com/images/default_avatar_large.png?cc07a88</avatar-url>
591 </user>
592 <permalink-url>http://soundcloud.com/submarine-3/seniter-my-mind-2</permalink-url>
593 <artwork-url nil="true"></artwork-url>
594 <waveform-url>https://w1.sndcdn.com/FKIkC9Ix4RVc_m.png</waveform-url>
595 <stream-url>https://api.soundcloud.com/tracks/37252163/stream</stream-url>
596 <download-url>https://api.soundcloud.com/tracks/37252163/download</download-url>
597 <playback-count type="integer">15</playback-count>
598 <download-count type="integer">0</download-count>
599 <favoritings-count type="integer">0</favoritings-count>
600 <comment-count type="integer">1</comment-count>
601 <attachments-uri>https://api.soundcloud.com/tracks/37252163/attachments</attachments-uri>
602 </track>
603 <track>
604 <kind>track</kind>
605 <id type="integer">7323275</id>
606 <created-at type="datetime">2010-11-23T20:29:21Z</created-at>
607 <user-id type="integer">1197717</user-id>
608 <duration type="integer">259441</duration>
609 <commentable type="boolean">true</commentable>
610 <state>finished</state>
611 <original-content-size type="integer">68602916</original-content-size>
612 <sharing>public</sharing>
613 <tag-list></tag-list>
614 <permalink>into-the-future</permalink>
615 <streamable type="boolean">true</streamable>
616 <embeddable-by>all</embeddable-by>
617 <downloadable type="boolean">true</downloadable>
618 <purchase-url nil="true"></purchase-url>
619 <label-id nil="true"></label-id>
620 <purchase-title nil="true"></purchase-title>
621 <genre>Garage</genre>
622 <title>INTO THE FUTURE</title>
623 <description></description>
624 <label-name>none : (</label-name>
625 <release></release>
626 <track-type>original</track-type>
627 <key-signature></key-signature>
628 <isrc></isrc>
629 <video-url nil="true"></video-url>
630 <bpm nil="true"></bpm>
631 <release-year nil="true"></release-year>
632 <release-month nil="true"></release-month>
633 <release-day nil="true"></release-day>
634 <original-format>wav</original-format>
635 <license>all-rights-reserved</license>
636 <uri>https://api.soundcloud.com/tracks/7323275</uri>
637 <user>
638 <id type="integer">1197717</id>
639 <kind>user</kind>
640 <permalink>vibecatt</permalink>
641 <username>SUBMARINE</username>
642 <uri>https://api.soundcloud.com/users/1197717</uri>
643 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
644 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
645 </user>
646 <permalink-url>http://soundcloud.com/vibecatt/into-the-future</permalink-url>
647 <artwork-url>https://i1.sndcdn.com/artworks-000003216522-dv0ekw-large.jpg?cc07a88</artwork-url>
648 <waveform-url>https://w1.sndcdn.com/68in91FGBiec_m.png</waveform-url>
649 <stream-url>https://api.soundcloud.com/tracks/7323275/stream</stream-url>
650 <download-url>https://api.soundcloud.com/tracks/7323275/download</download-url>
651 <playback-count type="integer">509</playback-count>
652 <download-count type="integer">16</download-count>
653 <favoritings-count type="integer">5</favoritings-count>
654 <comment-count type="integer">8</comment-count>
655 <attachments-uri>https://api.soundcloud.com/tracks/7323275/attachments</attachments-uri>
656 </track>
657 <track>
658 <kind>track</kind>
659 <id type="integer">28347812</id>
660 <created-at type="datetime">2011-11-18T16:19:51Z</created-at>
661 <user-id type="integer">1197717</user-id>
662 <duration type="integer">238405</duration>
663 <commentable type="boolean">true</commentable>
664 <state>finished</state>
665 <original-content-size type="integer">42027024</original-content-size>
666 <sharing>public</sharing>
667 <tag-list>dreamsound sub pads deep new dubstep dubby bright tribal winter</tag-list>
668 <permalink>blue-moon</permalink>
669 <streamable type="boolean">true</streamable>
670 <embeddable-by>all</embeddable-by>
671 <downloadable type="boolean">true</downloadable>
672 <purchase-url nil="true"></purchase-url>
673 <label-id nil="true"></label-id>
674 <purchase-title nil="true"></purchase-title>
675 <genre>dubstep/tribal/space</genre>
676 <title>Blue moon</title>
677 <description></description>
678 <label-name></label-name>
679 <release></release>
680 <track-type>original</track-type>
681 <key-signature></key-signature>
682 <isrc></isrc>
683 <video-url nil="true"></video-url>
684 <bpm nil="true"></bpm>
685 <release-year nil="true"></release-year>
686 <release-month nil="true"></release-month>
687 <release-day nil="true"></release-day>
688 <original-format>wav</original-format>
689 <license>all-rights-reserved</license>
690 <uri>https://api.soundcloud.com/tracks/28347812</uri>
691 <user>
692 <id type="integer">1197717</id>
693 <kind>user</kind>
694 <permalink>vibecatt</permalink>
695 <username>SUBMARINE</username>
696 <uri>https://api.soundcloud.com/users/1197717</uri>
697 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
698 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
699 </user>
700 <permalink-url>http://soundcloud.com/vibecatt/blue-moon</permalink-url>
701 <artwork-url>https://i1.sndcdn.com/artworks-000017277156-d680ii-large.jpg?cc07a88</artwork-url>
702 <waveform-url>https://w1.sndcdn.com/jLHOHyWmFSwv_m.png</waveform-url>
703 <stream-url>https://api.soundcloud.com/tracks/28347812/stream</stream-url>
704 <download-url>https://api.soundcloud.com/tracks/28347812/download</download-url>
705 <playback-count type="integer">454</playback-count>
706 <download-count type="integer">26</download-count>
707 <favoritings-count type="integer">10</favoritings-count>
708 <comment-count type="integer">24</comment-count>
709 <attachments-uri>https://api.soundcloud.com/tracks/28347812/attachments</attachments-uri>
710 </track>
711 <track>
712 <kind>track</kind>
713 <id type="integer">24857671</id>
714 <created-at type="datetime">2011-10-06T00:23:07Z</created-at>
715 <user-id type="integer">1197717</user-id>
716 <duration type="integer">150991</duration>
717 <commentable type="boolean">true</commentable>
718 <state>finished</state>
719 <original-content-size type="integer">26611248</original-content-size>
720 <sharing>public</sharing>
721 <tag-list></tag-list>
722 <permalink>long-winter-1</permalink>
723 <streamable type="boolean">true</streamable>
724 <embeddable-by>all</embeddable-by>
725 <downloadable type="boolean">false</downloadable>
726 <purchase-url nil="true"></purchase-url>
727 <label-id nil="true"></label-id>
728 <purchase-title nil="true"></purchase-title>
729 <genre></genre>
730 <title>LONG winter</title>
731 <description></description>
732 <label-name></label-name>
733 <release></release>
734 <track-type></track-type>
735 <key-signature></key-signature>
736 <isrc></isrc>
737 <video-url nil="true"></video-url>
738 <bpm nil="true"></bpm>
739 <release-year nil="true"></release-year>
740 <release-month nil="true"></release-month>
741 <release-day nil="true"></release-day>
742 <original-format>wav</original-format>
743 <license>all-rights-reserved</license>
744 <uri>https://api.soundcloud.com/tracks/24857671</uri>
745 <user>
746 <id type="integer">1197717</id>
747 <kind>user</kind>
748 <permalink>vibecatt</permalink>
749 <username>SUBMARINE</username>
750 <uri>https://api.soundcloud.com/users/1197717</uri>
751 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
752 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
753 </user>
754 <permalink-url>http://soundcloud.com/vibecatt/long-winter-1</permalink-url>
755 <artwork-url>https://i1.sndcdn.com/artworks-000017277235-fqm6cu-large.jpg?cc07a88</artwork-url>
756 <waveform-url>https://w1.sndcdn.com/WzBgLB4Ma2cD_m.png</waveform-url>
757 <stream-url>https://api.soundcloud.com/tracks/24857671/stream</stream-url>
758 <playback-count type="integer">149</playback-count>
759 <download-count type="integer">0</download-count>
760 <favoritings-count type="integer">4</favoritings-count>
761 <comment-count type="integer">3</comment-count>
762 <attachments-uri>https://api.soundcloud.com/tracks/24857671/attachments</attachments-uri>
763 </track>
764 <track>
765 <kind>track</kind>
766 <id type="integer">8241760</id>
767 <created-at type="datetime">2010-12-20T11:37:56Z</created-at>
768 <user-id type="integer">2393625</user-id>
769 <duration type="integer">407481</duration>
770 <commentable type="boolean">true</commentable>
771 <state>finished</state>
772 <original-content-size type="integer">9777360</original-content-size>
773 <sharing>public</sharing>
774 <tag-list></tag-list>
775 <permalink>la-prayin-gospel</permalink>
776 <streamable type="boolean">true</streamable>
777 <embeddable-by>all</embeddable-by>
778 <downloadable type="boolean">true</downloadable>
779 <purchase-url nil="true"></purchase-url>
780 <label-id nil="true"></label-id>
781 <purchase-title nil="true"></purchase-title>
782 <genre></genre>
783 <title>LA - Prayin Gospel</title>
784 <description>Again bootlegs are meant to be cheesy...</description>
785 <label-name></label-name>
786 <release></release>
787 <track-type></track-type>
788 <key-signature></key-signature>
789 <isrc></isrc>
790 <video-url nil="true"></video-url>
791 <bpm nil="true"></bpm>
792 <release-year nil="true"></release-year>
793 <release-month nil="true"></release-month>
794 <release-day nil="true"></release-day>
795 <original-format>mp3</original-format>
796 <license>all-rights-reserved</license>
797 <uri>https://api.soundcloud.com/tracks/8241760</uri>
798 <user>
799 <id type="integer">2393625</id>
800 <kind>user</kind>
801 <permalink>submarine-1</permalink>
802 <username>Submarine</username>
803 <uri>https://api.soundcloud.com/users/2393625</uri>
804 <permalink-url>http://soundcloud.com/submarine-1</permalink-url>
805 <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url>
806 </user>
807 <permalink-url>http://soundcloud.com/submarine-1/la-prayin-gospel</permalink-url>
808 <artwork-url nil="true"></artwork-url>
809 <waveform-url>https://w1.sndcdn.com/vsPZW6qU7p8V_m.png</waveform-url>
810 <stream-url>https://api.soundcloud.com/tracks/8241760/stream</stream-url>
811 <download-url>https://api.soundcloud.com/tracks/8241760/download</download-url>
812 <playback-count type="integer">17</playback-count>
813 <download-count type="integer">4</download-count>
814 <favoritings-count type="integer">0</favoritings-count>
815 <comment-count type="integer">0</comment-count>
816 <attachments-uri>https://api.soundcloud.com/tracks/8241760/attachments</attachments-uri>
817 </track>
818 <track>
819 <kind>track</kind>
820 <id type="integer">11148780</id>
821 <created-at type="datetime">2011-02-26T16:56:23Z</created-at>
822 <user-id type="integer">1197717</user-id>
823 <duration type="integer">271253</duration>
824 <commentable type="boolean">true</commentable>
825 <state>finished</state>
826 <original-content-size type="integer">71722616</original-content-size>
827 <sharing>public</sharing>
828 <tag-list></tag-list>
829 <permalink>deep-sleep</permalink>
830 <streamable type="boolean">true</streamable>
831 <embeddable-by>all</embeddable-by>
832 <downloadable type="boolean">false</downloadable>
833 <purchase-url nil="true"></purchase-url>
834 <label-id nil="true"></label-id>
835 <purchase-title nil="true"></purchase-title>
836 <genre>Ambient/garage</genre>
837 <title>DEEP SLEEP</title>
838 <description></description>
839 <label-name></label-name>
840 <release></release>
841 <track-type>original</track-type>
842 <key-signature></key-signature>
843 <isrc></isrc>
844 <video-url nil="true"></video-url>
845 <bpm type="float">134.0</bpm>
846 <release-year nil="true"></release-year>
847 <release-month nil="true"></release-month>
848 <release-day nil="true"></release-day>
849 <original-format>wav</original-format>
850 <license>all-rights-reserved</license>
851 <uri>https://api.soundcloud.com/tracks/11148780</uri>
852 <user>
853 <id type="integer">1197717</id>
854 <kind>user</kind>
855 <permalink>vibecatt</permalink>
856 <username>SUBMARINE</username>
857 <uri>https://api.soundcloud.com/users/1197717</uri>
858 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
859 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
860 </user>
861 <permalink-url>http://soundcloud.com/vibecatt/deep-sleep</permalink-url>
862 <artwork-url nil="true"></artwork-url>
863 <waveform-url>https://w1.sndcdn.com/XmYxE13Bba37_m.png</waveform-url>
864 <stream-url>https://api.soundcloud.com/tracks/11148780/stream</stream-url>
865 <playback-count type="integer">768</playback-count>
866 <download-count type="integer">0</download-count>
867 <favoritings-count type="integer">7</favoritings-count>
868 <comment-count type="integer">14</comment-count>
869 <attachments-uri>https://api.soundcloud.com/tracks/11148780/attachments</attachments-uri>
870 </track>
871 <track>
872 <kind>track</kind>
873 <id type="integer">3703311</id>
874 <created-at type="datetime">2010-06-29T14:24:27Z</created-at>
875 <user-id type="integer">1197717</user-id>
876 <duration type="integer">240181</duration>
877 <commentable type="boolean">true</commentable>
878 <state>finished</state>
879 <original-content-size type="integer">42336044</original-content-size>
880 <sharing>public</sharing>
881 <tag-list></tag-list>
882 <permalink>oh-you-just-wouldnt-let-it-lie</permalink>
883 <streamable type="boolean">true</streamable>
884 <embeddable-by>all</embeddable-by>
885 <downloadable type="boolean">true</downloadable>
886 <purchase-url nil="true"></purchase-url>
887 <label-id nil="true"></label-id>
888 <purchase-title nil="true"></purchase-title>
889 <genre>unfineshed</genre>
890 <title>Oh you just wouldnt let it lie</title>
891 <description></description>
892 <label-name></label-name>
893 <release></release>
894 <track-type></track-type>
895 <key-signature></key-signature>
896 <isrc></isrc>
897 <video-url nil="true"></video-url>
898 <bpm type="float">136.0</bpm>
899 <release-year nil="true"></release-year>
900 <release-month nil="true"></release-month>
901 <release-day nil="true"></release-day>
902 <original-format>wav</original-format>
903 <license>all-rights-reserved</license>
904 <uri>https://api.soundcloud.com/tracks/3703311</uri>
905 <user>
906 <id type="integer">1197717</id>
907 <kind>user</kind>
908 <permalink>vibecatt</permalink>
909 <username>SUBMARINE</username>
910 <uri>https://api.soundcloud.com/users/1197717</uri>
911 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
912 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
913 </user>
914 <permalink-url>http://soundcloud.com/vibecatt/oh-you-just-wouldnt-let-it-lie</permalink-url>
915 <artwork-url nil="true"></artwork-url>
916 <waveform-url>https://w1.sndcdn.com/bOpMn5TCVSwk_m.png</waveform-url>
917 <stream-url>https://api.soundcloud.com/tracks/3703311/stream</stream-url>
918 <download-url>https://api.soundcloud.com/tracks/3703311/download</download-url>
919 <playback-count type="integer">272</playback-count>
920 <download-count type="integer">7</download-count>
921 <favoritings-count type="integer">4</favoritings-count>
922 <comment-count type="integer">3</comment-count>
923 <attachments-uri>https://api.soundcloud.com/tracks/3703311/attachments</attachments-uri>
924 </track>
925 <track>
926 <kind>track</kind>
927 <id type="integer">6486500</id>
928 <created-at type="datetime">2010-10-28T12:06:14Z</created-at>
929 <user-id type="integer">1197717</user-id>
930 <duration type="integer">233100</duration>
931 <commentable type="boolean">true</commentable>
932 <state>finished</state>
933 <original-content-size type="integer">61636280</original-content-size>
934 <sharing>public</sharing>
935 <tag-list></tag-list>
936 <permalink>the-pattern</permalink>
937 <streamable type="boolean">true</streamable>
938 <embeddable-by>all</embeddable-by>
939 <downloadable type="boolean">true</downloadable>
940 <purchase-url nil="true"></purchase-url>
941 <label-id nil="true"></label-id>
942 <purchase-title nil="true"></purchase-title>
943 <genre>ambient/garage</genre>
944 <title>The DREAM pattern</title>
945 <description></description>
946 <label-name></label-name>
947 <release></release>
948 <track-type>original</track-type>
949 <key-signature></key-signature>
950 <isrc></isrc>
951 <video-url nil="true"></video-url>
952 <bpm type="float">136.0</bpm>
953 <release-year nil="true"></release-year>
954 <release-month nil="true"></release-month>
955 <release-day nil="true"></release-day>
956 <original-format>wav</original-format>
957 <license>all-rights-reserved</license>
958 <uri>https://api.soundcloud.com/tracks/6486500</uri>
959 <user>
960 <id type="integer">1197717</id>
961 <kind>user</kind>
962 <permalink>vibecatt</permalink>
963 <username>SUBMARINE</username>
964 <uri>https://api.soundcloud.com/users/1197717</uri>
965 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
966 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
967 </user>
968 <permalink-url>http://soundcloud.com/vibecatt/the-pattern</permalink-url>
969 <artwork-url>https://i1.sndcdn.com/artworks-000003021497-vfp002-large.jpg?cc07a88</artwork-url>
970 <waveform-url>https://w1.sndcdn.com/NOMmwfTvJ2Eb_m.png</waveform-url>
971 <stream-url>https://api.soundcloud.com/tracks/6486500/stream</stream-url>
972 <download-url>https://api.soundcloud.com/tracks/6486500/download</download-url>
973 <playback-count type="integer">416</playback-count>
974 <download-count type="integer">16</download-count>
975 <favoritings-count type="integer">4</favoritings-count>
976 <comment-count type="integer">3</comment-count>
977 <attachments-uri>https://api.soundcloud.com/tracks/6486500/attachments</attachments-uri>
978 </track>
979 <track>
980 <kind>track</kind>
981 <id type="integer">3591672</id>
982 <created-at type="datetime">2010-06-22T20:48:10Z</created-at>
983 <user-id type="integer">1197717</user-id>
984 <duration type="integer">370242</duration>
985 <commentable type="boolean">true</commentable>
986 <state>finished</state>
987 <original-content-size type="integer">12492933</original-content-size>
988 <sharing>public</sharing>
989 <tag-list></tag-list>
990 <permalink>rollin-down-paradise-drive</permalink>
991 <streamable type="boolean">true</streamable>
992 <embeddable-by>all</embeddable-by>
993 <downloadable type="boolean">false</downloadable>
994 <purchase-url nil="true"></purchase-url>
995 <label-id nil="true"></label-id>
996 <purchase-title nil="true"></purchase-title>
997 <genre>unfinished</genre>
998 <title>rollin down paradise drive</title>
999 <description>http://www.youtube.com/watch?v=RdD6L4cKKU8</description>
1000 <label-name></label-name>
1001 <release></release>
1002 <track-type></track-type>
1003 <key-signature></key-signature>
1004 <isrc></isrc>
1005 <video-url nil="true"></video-url>
1006 <bpm type="float">150.0</bpm>
1007 <release-year nil="true"></release-year>
1008 <release-month nil="true"></release-month>
1009 <release-day nil="true"></release-day>
1010 <original-format>m4a</original-format>
1011 <license>all-rights-reserved</license>
1012 <uri>https://api.soundcloud.com/tracks/3591672</uri>
1013 <user>
1014 <id type="integer">1197717</id>
1015 <kind>user</kind>
1016 <permalink>vibecatt</permalink>
1017 <username>SUBMARINE</username>
1018 <uri>https://api.soundcloud.com/users/1197717</uri>
1019 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1020 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1021 </user>
1022 <permalink-url>http://soundcloud.com/vibecatt/rollin-down-paradise-drive</permalink-url>
1023 <artwork-url nil="true"></artwork-url>
1024 <waveform-url>https://w1.sndcdn.com/VciyI1oB6Uey_m.png</waveform-url>
1025 <stream-url>https://api.soundcloud.com/tracks/3591672/stream</stream-url>
1026 <playback-count type="integer">341</playback-count>
1027 <download-count type="integer">0</download-count>
1028 <favoritings-count type="integer">3</favoritings-count>
1029 <comment-count type="integer">5</comment-count>
1030 <attachments-uri>https://api.soundcloud.com/tracks/3591672/attachments</attachments-uri>
1031 </track>
1032 <track>
1033 <kind>track</kind>
1034 <id type="integer">5613923</id>
1035 <created-at type="datetime">2010-09-27T14:44:45Z</created-at>
1036 <user-id type="integer">1197717</user-id>
1037 <duration type="integer">318030</duration>
1038 <commentable type="boolean">true</commentable>
1039 <state>finished</state>
1040 <original-content-size type="integer">10069025</original-content-size>
1041 <sharing>public</sharing>
1042 <tag-list></tag-list>
1043 <permalink>if-you-loved-me-you-would-ft-lucien-the-beat</permalink>
1044 <streamable type="boolean">true</streamable>
1045 <embeddable-by>all</embeddable-by>
1046 <downloadable type="boolean">false</downloadable>
1047 <purchase-url nil="true"></purchase-url>
1048 <label-id nil="true"></label-id>
1049 <purchase-title nil="true"></purchase-title>
1050 <genre>Dubstep</genre>
1051 <title>If you loved me,you would. ft Lucien &amp; the Beat</title>
1052 <description></description>
1053 <label-name></label-name>
1054 <release></release>
1055 <track-type>original</track-type>
1056 <key-signature></key-signature>
1057 <isrc></isrc>
1058 <video-url nil="true"></video-url>
1059 <bpm type="float">145.0</bpm>
1060 <release-year nil="true"></release-year>
1061 <release-month nil="true"></release-month>
1062 <release-day nil="true"></release-day>
1063 <original-format>m4a</original-format>
1064 <license>all-rights-reserved</license>
1065 <uri>https://api.soundcloud.com/tracks/5613923</uri>
1066 <user>
1067 <id type="integer">1197717</id>
1068 <kind>user</kind>
1069 <permalink>vibecatt</permalink>
1070 <username>SUBMARINE</username>
1071 <uri>https://api.soundcloud.com/users/1197717</uri>
1072 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1073 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1074 </user>
1075 <permalink-url>http://soundcloud.com/vibecatt/if-you-loved-me-you-would-ft-lucien-the-beat</permalink-url>
1076 <artwork-url nil="true"></artwork-url>
1077 <waveform-url>https://w1.sndcdn.com/kQmXBCvVRp49_m.png</waveform-url>
1078 <stream-url>https://api.soundcloud.com/tracks/5613923/stream</stream-url>
1079 <playback-count type="integer">271</playback-count>
1080 <download-count type="integer">0</download-count>
1081 <favoritings-count type="integer">2</favoritings-count>
1082 <comment-count type="integer">2</comment-count>
1083 <attachments-uri>https://api.soundcloud.com/tracks/5613923/attachments</attachments-uri>
1084 </track>
1085 <track>
1086 <kind>track</kind>
1087 <id type="integer">5614024</id>
1088 <created-at type="datetime">2010-09-27T14:49:35Z</created-at>
1089 <user-id type="integer">1197717</user-id>
1090 <duration type="integer">210418</duration>
1091 <commentable type="boolean">true</commentable>
1092 <state>finished</state>
1093 <original-content-size type="integer">6754931</original-content-size>
1094 <sharing>public</sharing>
1095 <tag-list></tag-list>
1096 <permalink>silent-h-bleep-bleep-jungle-boogie-remix</permalink>
1097 <streamable type="boolean">true</streamable>
1098 <embeddable-by>all</embeddable-by>
1099 <downloadable type="boolean">false</downloadable>
1100 <purchase-url nil="true"></purchase-url>
1101 <label-id nil="true"></label-id>
1102 <purchase-title nil="true"></purchase-title>
1103 <genre>Dubstep</genre>
1104 <title>silent H Bleep Bleep (jungle boogie remix)</title>
1105 <description></description>
1106 <label-name></label-name>
1107 <release></release>
1108 <track-type>remix</track-type>
1109 <key-signature></key-signature>
1110 <isrc></isrc>
1111 <video-url nil="true"></video-url>
1112 <bpm type="float">137.0</bpm>
1113 <release-year nil="true"></release-year>
1114 <release-month nil="true"></release-month>
1115 <release-day nil="true"></release-day>
1116 <original-format>m4a</original-format>
1117 <license>all-rights-reserved</license>
1118 <uri>https://api.soundcloud.com/tracks/5614024</uri>
1119 <user>
1120 <id type="integer">1197717</id>
1121 <kind>user</kind>
1122 <permalink>vibecatt</permalink>
1123 <username>SUBMARINE</username>
1124 <uri>https://api.soundcloud.com/users/1197717</uri>
1125 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1126 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1127 </user>
1128 <permalink-url>http://soundcloud.com/vibecatt/silent-h-bleep-bleep-jungle-boogie-remix</permalink-url>
1129 <artwork-url nil="true"></artwork-url>
1130 <waveform-url>https://w1.sndcdn.com/CDaZ3aqNQrAL_m.png</waveform-url>
1131 <stream-url>https://api.soundcloud.com/tracks/5614024/stream</stream-url>
1132 <playback-count type="integer">375</playback-count>
1133 <download-count type="integer">4</download-count>
1134 <favoritings-count type="integer">4</favoritings-count>
1135 <comment-count type="integer">11</comment-count>
1136 <attachments-uri>https://api.soundcloud.com/tracks/5614024/attachments</attachments-uri>
1137 </track>
1138 <track>
1139 <kind>track</kind>
1140 <id type="integer">4822078</id>
1141 <created-at type="datetime">2010-08-24T16:42:57Z</created-at>
1142 <user-id type="integer">1397546</user-id>
1143 <duration type="integer">5157046</duration>
1144 <commentable type="boolean">true</commentable>
1145 <state>finished</state>
1146 <original-content-size type="integer">67789022</original-content-size>
1147 <sharing>public</sharing>
1148 <tag-list>wikicong delanda oo xo redundancy wikileaks</tag-list>
1149 <permalink>kapital-identitat-mackt-fem</permalink>
1150 <streamable type="boolean">true</streamable>
1151 <embeddable-by>all</embeddable-by>
1152 <downloadable type="boolean">true</downloadable>
1153 <purchase-url nil="true"></purchase-url>
1154 <label-id nil="true"></label-id>
1155 <purchase-title nil="true"></purchase-title>
1156 <genre>zef</genre>
1157 <title>KAPITAL.IDENTIT&#196;T.MACKT.FEM</title>
1158 <description>Chris, Karl and Magnus meet in a bar to talk about the Wikicong, redudancy in societies, Flows, OO (object Oriented Philosphy) and XO (X oriented Philosophy) , Wikileaks and distributed action and entities. </description>
1159 <label-name>KIM</label-name>
1160 <release></release>
1161 <track-type>podcast</track-type>
1162 <key-signature></key-signature>
1163 <isrc></isrc>
1164 <video-url nil="true"></video-url>
1165 <bpm nil="true"></bpm>
1166 <release-year type="integer">2010</release-year>
1167 <release-month type="integer">8</release-month>
1168 <release-day type="integer">23</release-day>
1169 <original-format>mp3</original-format>
1170 <license>no-rights-reserved</license>
1171 <uri>https://api.soundcloud.com/tracks/4822078</uri>
1172 <user>
1173 <id type="integer">1397546</id>
1174 <kind>user</kind>
1175 <permalink>submarine</permalink>
1176 <username>submarine</username>
1177 <uri>https://api.soundcloud.com/users/1397546</uri>
1178 <permalink-url>http://soundcloud.com/submarine</permalink-url>
1179 <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url>
1180 </user>
1181 <permalink-url>http://soundcloud.com/submarine/kapital-identitat-mackt-fem</permalink-url>
1182 <artwork-url>https://i1.sndcdn.com/artworks-000002170048-ahtea3-large.jpg?cc07a88</artwork-url>
1183 <waveform-url>https://w1.sndcdn.com/pMuTPNymGQ2c_m.png</waveform-url>
1184 <stream-url>https://api.soundcloud.com/tracks/4822078/stream</stream-url>
1185 <download-url>https://api.soundcloud.com/tracks/4822078/download</download-url>
1186 <playback-count type="integer">90</playback-count>
1187 <download-count type="integer">3</download-count>
1188 <favoritings-count type="integer">0</favoritings-count>
1189 <comment-count type="integer">0</comment-count>
1190 <attachments-uri>https://api.soundcloud.com/tracks/4822078/attachments</attachments-uri>
1191 </track>
1192 <track>
1193 <kind>track</kind>
1194 <id type="integer">74814003</id>
1195 <created-at type="datetime">2013-01-13T21:25:23Z</created-at>
1196 <user-id type="integer">1197717</user-id>
1197 <duration type="integer">211846</duration>
1198 <commentable type="boolean">true</commentable>
1199 <state>finished</state>
1200 <original-content-size type="integer">37355340</original-content-size>
1201 <sharing>public</sharing>
1202 <tag-list></tag-list>
1203 <permalink>echos</permalink>
1204 <streamable type="boolean">true</streamable>
1205 <embeddable-by>all</embeddable-by>
1206 <downloadable type="boolean">false</downloadable>
1207 <purchase-url nil="true"></purchase-url>
1208 <label-id nil="true"></label-id>
1209 <purchase-title nil="true"></purchase-title>
1210 <genre></genre>
1211 <title>Echos</title>
1212 <description></description>
1213 <label-name></label-name>
1214 <release></release>
1215 <track-type></track-type>
1216 <key-signature></key-signature>
1217 <isrc></isrc>
1218 <video-url nil="true"></video-url>
1219 <bpm nil="true"></bpm>
1220 <release-year nil="true"></release-year>
1221 <release-month nil="true"></release-month>
1222 <release-day nil="true"></release-day>
1223 <original-format>wav</original-format>
1224 <license>all-rights-reserved</license>
1225 <uri>https://api.soundcloud.com/tracks/74814003</uri>
1226 <user>
1227 <id type="integer">1197717</id>
1228 <kind>user</kind>
1229 <permalink>vibecatt</permalink>
1230 <username>SUBMARINE</username>
1231 <uri>https://api.soundcloud.com/users/1197717</uri>
1232 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1233 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1234 </user>
1235 <permalink-url>http://soundcloud.com/vibecatt/echos</permalink-url>
1236 <artwork-url nil="true"></artwork-url>
1237 <waveform-url>https://w1.sndcdn.com/GuF1Nt5BZaJn_m.png</waveform-url>
1238 <stream-url>https://api.soundcloud.com/tracks/74814003/stream</stream-url>
1239 <playback-count type="integer">148</playback-count>
1240 <download-count type="integer">0</download-count>
1241 <favoritings-count type="integer">5</favoritings-count>
1242 <comment-count type="integer">5</comment-count>
1243 <attachments-uri>https://api.soundcloud.com/tracks/74814003/attachments</attachments-uri>
1244 </track>
1245 <track>
1246 <kind>track</kind>
1247 <id type="integer">38896423</id>
1248 <created-at type="datetime">2012-03-06T16:34:19Z</created-at>
1249 <user-id type="integer">1197717</user-id>
1250 <duration type="integer">151019</duration>
1251 <commentable type="boolean">true</commentable>
1252 <state>finished</state>
1253 <original-content-size type="integer">4974103</original-content-size>
1254 <sharing>public</sharing>
1255 <tag-list></tag-list>
1256 <permalink>work-in-progress-dunno-what-to</permalink>
1257 <streamable type="boolean">true</streamable>
1258 <embeddable-by>all</embeddable-by>
1259 <downloadable type="boolean">false</downloadable>
1260 <purchase-url nil="true"></purchase-url>
1261 <label-id nil="true"></label-id>
1262 <purchase-title nil="true"></purchase-title>
1263 <genre>dubstep/Egyptian </genre>
1264 <title>work in progress dunno what to call it really?</title>
1265 <description></description>
1266 <label-name></label-name>
1267 <release></release>
1268 <track-type>original</track-type>
1269 <key-signature></key-signature>
1270 <isrc></isrc>
1271 <video-url nil="true"></video-url>
1272 <bpm nil="true"></bpm>
1273 <release-year nil="true"></release-year>
1274 <release-month nil="true"></release-month>
1275 <release-day nil="true"></release-day>
1276 <original-format>m4a</original-format>
1277 <license>all-rights-reserved</license>
1278 <uri>https://api.soundcloud.com/tracks/38896423</uri>
1279 <user>
1280 <id type="integer">1197717</id>
1281 <kind>user</kind>
1282 <permalink>vibecatt</permalink>
1283 <username>SUBMARINE</username>
1284 <uri>https://api.soundcloud.com/users/1197717</uri>
1285 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1286 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1287 </user>
1288 <permalink-url>http://soundcloud.com/vibecatt/work-in-progress-dunno-what-to</permalink-url>
1289 <artwork-url nil="true"></artwork-url>
1290 <waveform-url>https://w1.sndcdn.com/ZigYRiuqWMZL_m.png</waveform-url>
1291 <stream-url>https://api.soundcloud.com/tracks/38896423/stream</stream-url>
1292 <playback-count type="integer">223</playback-count>
1293 <download-count type="integer">0</download-count>
1294 <favoritings-count type="integer">5</favoritings-count>
1295 <comment-count type="integer">12</comment-count>
1296 <attachments-uri>https://api.soundcloud.com/tracks/38896423/attachments</attachments-uri>
1297 </track>
1298 <track>
1299 <kind>track</kind>
1300 <id type="integer">27745819</id>
1301 <created-at type="datetime">2011-11-11T14:00:12Z</created-at>
1302 <user-id type="integer">1197717</user-id>
1303 <duration type="integer">72099</duration>
1304 <commentable type="boolean">true</commentable>
1305 <state>finished</state>
1306 <original-content-size type="integer">12700844</original-content-size>
1307 <sharing>public</sharing>
1308 <tag-list></tag-list>
1309 <permalink>click-clip</permalink>
1310 <streamable type="boolean">true</streamable>
1311 <embeddable-by>all</embeddable-by>
1312 <downloadable type="boolean">false</downloadable>
1313 <purchase-url nil="true"></purchase-url>
1314 <label-id nil="true"></label-id>
1315 <purchase-title nil="true"></purchase-title>
1316 <genre>Dubstep</genre>
1317 <title>click (clip)</title>
1318 <description></description>
1319 <label-name></label-name>
1320 <release></release>
1321 <track-type>original</track-type>
1322 <key-signature></key-signature>
1323 <isrc></isrc>
1324 <video-url nil="true"></video-url>
1325 <bpm nil="true"></bpm>
1326 <release-year nil="true"></release-year>
1327 <release-month nil="true"></release-month>
1328 <release-day nil="true"></release-day>
1329 <original-format>wav</original-format>
1330 <license>all-rights-reserved</license>
1331 <uri>https://api.soundcloud.com/tracks/27745819</uri>
1332 <user>
1333 <id type="integer">1197717</id>
1334 <kind>user</kind>
1335 <permalink>vibecatt</permalink>
1336 <username>SUBMARINE</username>
1337 <uri>https://api.soundcloud.com/users/1197717</uri>
1338 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1339 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1340 </user>
1341 <permalink-url>http://soundcloud.com/vibecatt/click-clip</permalink-url>
1342 <artwork-url>https://i1.sndcdn.com/artworks-000017277180-0i48xv-large.jpg?cc07a88</artwork-url>
1343 <waveform-url>https://w1.sndcdn.com/ie3yyCdzg1e0_m.png</waveform-url>
1344 <stream-url>https://api.soundcloud.com/tracks/27745819/stream</stream-url>
1345 <playback-count type="integer">202</playback-count>
1346 <download-count type="integer">0</download-count>
1347 <favoritings-count type="integer">5</favoritings-count>
1348 <comment-count type="integer">4</comment-count>
1349 <attachments-uri>https://api.soundcloud.com/tracks/27745819/attachments</attachments-uri>
1350 </track>
1351 <track>
1352 <kind>track</kind>
1353 <id type="integer">19273510</id>
1354 <created-at type="datetime">2011-07-18T14:03:53Z</created-at>
1355 <user-id type="integer">1197717</user-id>
1356 <duration type="integer">68675</duration>
1357 <commentable type="boolean">true</commentable>
1358 <state>finished</state>
1359 <original-content-size type="integer">18144044</original-content-size>
1360 <sharing>public</sharing>
1361 <tag-list></tag-list>
1362 <permalink>love-preview</permalink>
1363 <streamable type="boolean">true</streamable>
1364 <embeddable-by>all</embeddable-by>
1365 <downloadable type="boolean">false</downloadable>
1366 <purchase-url nil="true"></purchase-url>
1367 <label-id nil="true"></label-id>
1368 <purchase-title nil="true"></purchase-title>
1369 <genre></genre>
1370 <title>Love (preview)</title>
1371 <description></description>
1372 <label-name></label-name>
1373 <release></release>
1374 <track-type>original</track-type>
1375 <key-signature></key-signature>
1376 <isrc></isrc>
1377 <video-url nil="true"></video-url>
1378 <bpm nil="true"></bpm>
1379 <release-year nil="true"></release-year>
1380 <release-month nil="true"></release-month>
1381 <release-day nil="true"></release-day>
1382 <original-format>wav</original-format>
1383 <license>all-rights-reserved</license>
1384 <uri>https://api.soundcloud.com/tracks/19273510</uri>
1385 <user>
1386 <id type="integer">1197717</id>
1387 <kind>user</kind>
1388 <permalink>vibecatt</permalink>
1389 <username>SUBMARINE</username>
1390 <uri>https://api.soundcloud.com/users/1197717</uri>
1391 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1392 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1393 </user>
1394 <permalink-url>http://soundcloud.com/vibecatt/love-preview</permalink-url>
1395 <artwork-url>https://i1.sndcdn.com/artworks-000017277283-w1npy2-large.jpg?cc07a88</artwork-url>
1396 <waveform-url>https://w1.sndcdn.com/cQaVh8HRfUyl_m.png</waveform-url>
1397 <stream-url>https://api.soundcloud.com/tracks/19273510/stream</stream-url>
1398 <playback-count type="integer">135</playback-count>
1399 <download-count type="integer">0</download-count>
1400 <favoritings-count type="integer">0</favoritings-count>
1401 <comment-count type="integer">1</comment-count>
1402 <attachments-uri>https://api.soundcloud.com/tracks/19273510/attachments</attachments-uri>
1403 </track>
1404 <track>
1405 <kind>track</kind>
1406 <id type="integer">19272956</id>
1407 <created-at type="datetime">2011-07-18T13:50:57Z</created-at>
1408 <user-id type="integer">1197717</user-id>
1409 <duration type="integer">288188</duration>
1410 <commentable type="boolean">true</commentable>
1411 <state>finished</state>
1412 <original-content-size type="integer">50803244</original-content-size>
1413 <sharing>public</sharing>
1414 <tag-list></tag-list>
1415 <permalink>stelliferous-era-preview</permalink>
1416 <streamable type="boolean">true</streamable>
1417 <embeddable-by>all</embeddable-by>
1418 <downloadable type="boolean">true</downloadable>
1419 <purchase-url nil="true"></purchase-url>
1420 <label-id nil="true"></label-id>
1421 <purchase-title nil="true"></purchase-title>
1422 <genre></genre>
1423 <title>Stelliferous Era (preview/unmixed)</title>
1424 <description></description>
1425 <label-name></label-name>
1426 <release></release>
1427 <track-type>original</track-type>
1428 <key-signature></key-signature>
1429 <isrc></isrc>
1430 <video-url nil="true"></video-url>
1431 <bpm nil="true"></bpm>
1432 <release-year nil="true"></release-year>
1433 <release-month nil="true"></release-month>
1434 <release-day nil="true"></release-day>
1435 <original-format>wav</original-format>
1436 <license>all-rights-reserved</license>
1437 <uri>https://api.soundcloud.com/tracks/19272956</uri>
1438 <user>
1439 <id type="integer">1197717</id>
1440 <kind>user</kind>
1441 <permalink>vibecatt</permalink>
1442 <username>SUBMARINE</username>
1443 <uri>https://api.soundcloud.com/users/1197717</uri>
1444 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1445 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1446 </user>
1447 <permalink-url>http://soundcloud.com/vibecatt/stelliferous-era-preview</permalink-url>
1448 <artwork-url>https://i1.sndcdn.com/artworks-000009425676-5nj0vx-large.jpg?cc07a88</artwork-url>
1449 <waveform-url>https://w1.sndcdn.com/Ux3ASQ4wKaD0_m.png</waveform-url>
1450 <stream-url>https://api.soundcloud.com/tracks/19272956/stream</stream-url>
1451 <download-url>https://api.soundcloud.com/tracks/19272956/download</download-url>
1452 <playback-count type="integer">141</playback-count>
1453 <download-count type="integer">7</download-count>
1454 <favoritings-count type="integer">3</favoritings-count>
1455 <comment-count type="integer">7</comment-count>
1456 <attachments-uri>https://api.soundcloud.com/tracks/19272956/attachments</attachments-uri>
1457 </track>
1458 <track>
1459 <kind>track</kind>
1460 <id type="integer">61643102</id>
1461 <created-at type="datetime">2012-09-29T23:09:05Z</created-at>
1462 <user-id type="integer">25157649</user-id>
1463 <duration type="integer">1691325</duration>
1464 <commentable type="boolean">true</commentable>
1465 <state>finished</state>
1466 <original-content-size type="integer">67763578</original-content-size>
1467 <sharing>public</sharing>
1468 <tag-list>Submarine Deep House Tech Mix Alkatraz</tag-list>
1469 <permalink>0-below-1</permalink>
1470 <streamable type="boolean">true</streamable>
1471 <embeddable-by>all</embeddable-by>
1472 <downloadable type="boolean">true</downloadable>
1473 <purchase-url nil="true"></purchase-url>
1474 <label-id nil="true"></label-id>
1475 <purchase-title nil="true"></purchase-title>
1476 <genre>Deep</genre>
1477 <title>!0 Below #1</title>
1478 <description>This is the first in my !0 Below series. Nothing but deep, dark, sub bass that can only be reached by traveling with Submarine into the depths.
1479
1480This series will consist of my favourite 10 Tech House and Deep House tracks I find as I travel this world.
1481
1482Enjoy!
1483
1484!0 Below #1
1485
1486Tormenta - Las Trompa Llegadas (Submarine Remix)
1487Kolombo - Stop ou encore
1488Justin Martin, Christian Martin - Riding Spaceships (Justin Martin Vs. Leroy Peppers - DJ Version)
1489Sepehr - Apple Bottoms (Original Mix)
1490Claude VonStroke - Chimps - Re-Edit
1491Mojo Filter ft Mighty Boosh - Oaky Timbre (Loose Cannons Re-Flik)
1492Tyrek - Charlie's Soap Box (Original Mix)
1493Justin Martin, Ardalan - Lezgo VIP (Justin Martin Vs. Ardalan - DJ Version)
1494Kill Frenzy - Titsss
1495Kolombo - Busta Ass (Original Mix)
1496
1497</description>
1498 <label-name></label-name>
1499 <release></release>
1500 <track-type>live</track-type>
1501 <key-signature></key-signature>
1502 <isrc></isrc>
1503 <video-url nil="true"></video-url>
1504 <bpm nil="true"></bpm>
1505 <release-year nil="true"></release-year>
1506 <release-month nil="true"></release-month>
1507 <release-day nil="true"></release-day>
1508 <original-format>mp3</original-format>
1509 <license>all-rights-reserved</license>
1510 <uri>https://api.soundcloud.com/tracks/61643102</uri>
1511 <user>
1512 <id type="integer">25157649</id>
1513 <kind>user</kind>
1514 <permalink>submarine-5</permalink>
1515 <username>SUBmarine</username>
1516 <uri>https://api.soundcloud.com/users/25157649</uri>
1517 <permalink-url>http://soundcloud.com/submarine-5</permalink-url>
1518 <avatar-url>https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?cc07a88</avatar-url>
1519 </user>
1520 <permalink-url>http://soundcloud.com/submarine-5/0-below-1</permalink-url>
1521 <artwork-url>https://i1.sndcdn.com/artworks-000031257163-w2f5u5-large.jpg?cc07a88</artwork-url>
1522 <waveform-url>https://w1.sndcdn.com/iWUZQHgatzSu_m.png</waveform-url>
1523 <stream-url>https://api.soundcloud.com/tracks/61643102/stream</stream-url>
1524 <download-url>https://api.soundcloud.com/tracks/61643102/download</download-url>
1525 <playback-count type="integer">106</playback-count>
1526 <download-count type="integer">6</download-count>
1527 <favoritings-count type="integer">2</favoritings-count>
1528 <comment-count type="integer">4</comment-count>
1529 <attachments-uri>https://api.soundcloud.com/tracks/61643102/attachments</attachments-uri>
1530 </track>
1531 <track>
1532 <kind>track</kind>
1533 <id type="integer">4627335</id>
1534 <created-at type="datetime">2010-08-15T18:47:22Z</created-at>
1535 <user-id type="integer">1397546</user-id>
1536 <duration type="integer">1148179</duration>
1537 <commentable type="boolean">true</commentable>
1538 <state>finished</state>
1539 <original-content-size type="integer">14217533</original-content-size>
1540 <sharing>public</sharing>
1541 <tag-list></tag-list>
1542 <permalink>kapital-identitat-mackt-vier</permalink>
1543 <streamable type="boolean">true</streamable>
1544 <embeddable-by>all</embeddable-by>
1545 <downloadable type="boolean">true</downloadable>
1546 <purchase-url nil="true"></purchase-url>
1547 <label-id nil="true"></label-id>
1548 <purchase-title nil="true"></purchase-title>
1549 <genre>tropical</genre>
1550 <title>KAPITAL.IDENTIT&#196;T.MACKT.VIER</title>
1551 <description>Den hemliga tr&#228;dg&#229;rden in Stockholm with Wikicong/Tikicong and Dj Rupture on squeky island</description>
1552 <label-name>KIM</label-name>
1553 <release>4</release>
1554 <track-type>remix</track-type>
1555 <key-signature>D</key-signature>
1556 <isrc>12-345-67-89900</isrc>
1557 <video-url nil="true"></video-url>
1558 <bpm type="float">85.0</bpm>
1559 <release-year type="integer">2010</release-year>
1560 <release-month type="integer">8</release-month>
1561 <release-day type="integer">15</release-day>
1562 <original-format>mp3</original-format>
1563 <license>no-rights-reserved</license>
1564 <uri>https://api.soundcloud.com/tracks/4627335</uri>
1565 <user>
1566 <id type="integer">1397546</id>
1567 <kind>user</kind>
1568 <permalink>submarine</permalink>
1569 <username>submarine</username>
1570 <uri>https://api.soundcloud.com/users/1397546</uri>
1571 <permalink-url>http://soundcloud.com/submarine</permalink-url>
1572 <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url>
1573 </user>
1574 <permalink-url>http://soundcloud.com/submarine/kapital-identitat-mackt-vier</permalink-url>
1575 <artwork-url>https://i1.sndcdn.com/artworks-000002102568-87lu6v-large.jpg?cc07a88</artwork-url>
1576 <waveform-url>https://w1.sndcdn.com/vzioG2Vsf9hN_m.png</waveform-url>
1577 <stream-url>https://api.soundcloud.com/tracks/4627335/stream</stream-url>
1578 <download-url>https://api.soundcloud.com/tracks/4627335/download</download-url>
1579 <playback-count type="integer">404</playback-count>
1580 <download-count type="integer">42</download-count>
1581 <favoritings-count type="integer">0</favoritings-count>
1582 <comment-count type="integer">4</comment-count>
1583 <attachments-uri>https://api.soundcloud.com/tracks/4627335/attachments</attachments-uri>
1584 </track>
1585 <track>
1586 <kind>track</kind>
1587 <id type="integer">34649100</id>
1588 <created-at type="datetime">2012-01-26T23:46:38Z</created-at>
1589 <user-id type="integer">1197717</user-id>
1590 <duration type="integer">284763</duration>
1591 <commentable type="boolean">true</commentable>
1592 <state>finished</state>
1593 <original-content-size type="integer">50198444</original-content-size>
1594 <sharing>public</sharing>
1595 <tag-list></tag-list>
1596 <permalink>europa</permalink>
1597 <streamable type="boolean">true</streamable>
1598 <embeddable-by>all</embeddable-by>
1599 <downloadable type="boolean">true</downloadable>
1600 <purchase-url nil="true"></purchase-url>
1601 <label-id nil="true"></label-id>
1602 <purchase-title nil="true"></purchase-title>
1603 <genre>spacy/dubstep</genre>
1604 <title>Europa</title>
1605 <description></description>
1606 <label-name></label-name>
1607 <release></release>
1608 <track-type>original</track-type>
1609 <key-signature></key-signature>
1610 <isrc></isrc>
1611 <video-url nil="true"></video-url>
1612 <bpm nil="true"></bpm>
1613 <release-year nil="true"></release-year>
1614 <release-month nil="true"></release-month>
1615 <release-day nil="true"></release-day>
1616 <original-format>wav</original-format>
1617 <license>all-rights-reserved</license>
1618 <uri>https://api.soundcloud.com/tracks/34649100</uri>
1619 <user>
1620 <id type="integer">1197717</id>
1621 <kind>user</kind>
1622 <permalink>vibecatt</permalink>
1623 <username>SUBMARINE</username>
1624 <uri>https://api.soundcloud.com/users/1197717</uri>
1625 <permalink-url>http://soundcloud.com/vibecatt</permalink-url>
1626 <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url>
1627 </user>
1628 <permalink-url>http://soundcloud.com/vibecatt/europa</permalink-url>
1629 <artwork-url>https://i1.sndcdn.com/artworks-000017390975-hr2uvg-large.jpg?cc07a88</artwork-url>
1630 <waveform-url>https://w1.sndcdn.com/yADh0ritdoKv_m.png</waveform-url>
1631 <stream-url>https://api.soundcloud.com/tracks/34649100/stream</stream-url>
1632 <download-url>https://api.soundcloud.com/tracks/34649100/download</download-url>
1633 <playback-count type="integer">381</playback-count>
1634 <download-count type="integer">14</download-count>
1635 <favoritings-count type="integer">6</favoritings-count>
1636 <comment-count type="integer">15</comment-count>
1637 <attachments-uri>https://api.soundcloud.com/tracks/34649100/attachments</attachments-uri>
1638 </track>
1639</tracks>
21640
=== added file 'tests/data/valgrind.suppression'
--- tests/data/valgrind.suppression 1970-01-01 00:00:00 +0000
+++ tests/data/valgrind.suppression 2013-07-14 08:39:27 +0000
@@ -0,0 +1,61 @@
1
2###############################
3# GObject rules
4###############################
5
6{
7 <insert_a_suppression_name_here>
8 Memcheck:Leak
9 ...
10 fun:g_type_register_static
11}
12
13{
14 <insert_a_suppression_name_here>
15 Memcheck:Leak
16 ...
17 fun:g_type_register_fundamental
18}
19
20{
21 <insert_a_suppression_name_here>
22 Memcheck:Leak
23 ...
24 fun:type_node_fundamental_new_W
25}
26
27{
28 <insert_a_suppression_name_here>
29 Memcheck:Leak
30 ...
31 fun:type_data_make_W
32}
33
34{
35 <insert_a_suppression_name_here>
36 Memcheck:Leak
37 ...
38 fun:g_type_add_interface_static
39}
40
41{
42 <insert_a_suppression_name_here>
43 Memcheck:Leak
44 ...
45 fun:type_iface_vtable_base_init_Wm
46}
47
48{
49 <insert_a_suppression_name_here>
50 Memcheck:Leak
51 ...
52 fun:g_dbus_interface_skeleton_class_intern_init
53}
54
55{
56 <insert_a_suppression_name_here>
57 Memcheck:Leak
58 ...
59 fun:g_signal_type_cclosure_new
60}
61
062
=== added file 'tests/main.cpp'
--- tests/main.cpp 1970-01-01 00:00:00 +0000
+++ tests/main.cpp 2013-07-14 08:39:27 +0000
@@ -0,0 +1,38 @@
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Author: Pete Woods <pete.woods@canonical.com>
17 */
18
19#include <config.h>
20#include <cstdlib>
21#include <gtest/gtest.h>
22#include <QtCore/QCoreApplication>
23
24int main(int argc, char **argv) {
25 QCoreApplication application(argc, argv);
26
27 setenv("LANG", "C.UTF-8", true);
28 unsetenv("LC_ALL");
29
30 setlocale(LC_ALL, "");
31 bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
32 textdomain(GETTEXT_PACKAGE);
33
34 ::testing::InitGoogleTest(&argc, argv);
35 int result(RUN_ALL_TESTS());
36
37 return result;
38}
039
=== removed file 'tests/test_soundcloud.py'
--- tests/test_soundcloud.py 2013-02-13 14:31:12 +0000
+++ tests/test_soundcloud.py 1970-01-01 00:00:00 +0000
@@ -1,63 +0,0 @@
1#! /usr/bin/python3
2# -*- coding: utf-8 -*-
3from gi.repository import Unity
4from unittest import TestCase
5import imp
6
7class ResultSet(Unity.ResultSet):
8 def __init__(self):
9 Unity.ResultSet.__init__(self)
10 self.results = []
11
12 def do_add_result(self, result):
13 self.results.append({'uri':result.uri,
14 'title':result.title,
15 'comment':result.comment,
16 'icon':result.icon_hint})
17
18
19class ScopeTestCase(TestCase):
20 def init_scope(self, scope_path):
21 self.scope_module = imp.load_source('scope', scope_path)
22 self.scope = self.scope_module.load_scope()
23
24 def perform_query(self, query, filter_set = Unity.FilterSet.new()):
25 result_set = ResultSet()
26 ctx = Unity.SearchContext.create(query, 0, filter_set,
27 None, result_set, None)
28 s = self.scope.create_search_for_query(ctx)
29 s.run()
30 return result_set
31
32
33class TestSoundcloud(ScopeTestCase):
34 def setUp(self):
35 self.init_scope('src/unity_soundcloud_daemon.py')
36
37 def tearDown(self):
38 self.scope = None
39 self.scope_module = None
40
41 def test_valid_searches(self):
42 self.scope_module.SEARCH_URI = 'file:tests/data/mock_soundcloud_pass#'
43 expected_results = ['http://soundcloud.com/vibecatt/echos', 'Echos',
44 'http://soundcloud.com/vibecatt/ganymede', 'Ganymede']
45 results = []
46 for s in ['submarine']:
47 result_set = self.perform_query(s)
48 results.append(result_set.results[0]['uri'])
49 results.append(result_set.results[0]['title'])
50 results.append(result_set.results[1]['uri'])
51 results.append(result_set.results[1]['title'])
52
53 self.assertEqual(results, expected_results)
54
55 def test_failing_search(self):
56 self.scope_module.SEARCH_URI = 'file:tests/data/mock_soundcloud_fail#'
57 for s in ['submarine']:
58 result_set = self.perform_query(s)
59 self.assertEqual(len(result_set.results), 0)
60
61
62if __name__ == '__main__':
63 unittest.main()

Subscribers

People subscribed via source and target branches

to all changes: