Merge lp:~pete-woods/unity-scope-soundcloud/native-rewrite into lp:unity-scope-soundcloud/legacy
- native-rewrite
- Merge into trunk
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 |
Related bugs: |
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.
PS Jenkins bot (ps-jenkins) wrote : | # |
- 46. By Pete Woods
-
Set album metadata
- 47. By Pete Woods
-
Add more metadata to the preview
- 48. By Pete Woods
-
Add track artwork
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:48
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 49. By Pete Woods
-
Remove traces of libcurl
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:49
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 50. By Pete Woods
-
Add missing libunity-dev dependency
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:50
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 51. By Pete Woods
-
New tests cases
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:51
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
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.
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?
Michal Hruby (mhr3) wrote : | # |
923 + artist ? g_variant_
924 + album ? g_variant_
I suppose the latter should be g_variant_
Michal Hruby (mhr3) wrote : | # |
Tested the previews in real dash, and they work fine, it's just:
897 + addPreviewData(
898 + addPreviewData(
899 + addPreviewData(
900 + addPreviewData(
901 + addPreviewData(
902 + addPreviewData(
The music preview renderer doesn't handle this correctly, pls remove.
921 + g_variant_
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.
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
1 | === added file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 1970-01-01 00:00:00 +0000 |
3 | +++ CMakeLists.txt 2013-07-14 08:39:27 +0000 |
4 | @@ -0,0 +1,78 @@ |
5 | +project(unity-scope-soundcloud CXX) |
6 | +cmake_minimum_required(VERSION 2.8.9) |
7 | + |
8 | +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") |
9 | + |
10 | +find_package(PkgConfig REQUIRED) |
11 | + |
12 | +pkg_check_modules(UNITY REQUIRED unity REQUIRED) |
13 | +include_directories(${UNITY_INCLUDE_DIRS}) |
14 | + |
15 | +find_package(Qt5Core REQUIRED) |
16 | +include_directories(${Qt5Core_INCLUDE_DIRS}) |
17 | + |
18 | +find_package(Qt5Network REQUIRED) |
19 | +include_directories(${Qt5Network_INCLUDE_DIRS}) |
20 | + |
21 | +set(DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/data") |
22 | + |
23 | +set(CMAKE_AUTOMOC ON) |
24 | +set(CMAKE_INCLUDE_CURRENT_DIR ON) |
25 | + |
26 | +set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") |
27 | +set(SOURCE_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/src") |
28 | +include_directories(${SOURCE_DIR}) |
29 | +include_directories(${SOURCE_BINARY_DIR}) |
30 | + |
31 | +include(GNUInstallDirs) |
32 | +include(Coverage) |
33 | + |
34 | +# Workaround for libexecdir on debian |
35 | +if (EXISTS "/etc/debian_version") |
36 | + set(CMAKE_INSTALL_LIBEXECDIR ${CMAKE_INSTALL_LIBDIR}) |
37 | + set(CMAKE_INSTALL_FULL_LIBEXECDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}") |
38 | +endif() |
39 | + |
40 | +set(LOCALE_DIR "${CMAKE_INSTALL_FULL_DATADIR}/locale") |
41 | + |
42 | +add_definitions( |
43 | + -std=c++11 |
44 | + -pedantic |
45 | + -Wall |
46 | + -Wextra |
47 | +) |
48 | + |
49 | +################ |
50 | +# Definitions |
51 | +################ |
52 | + |
53 | +set(GETTEXT_PACKAGE unity-scope-soundcloud) |
54 | + |
55 | +set(GROUP_NAME "com.canonical.Unity.Scope.Music.Soundcloud") |
56 | +set(UNIQUE_NAME "/com/canonical/unity/scope/music/soundcloud") |
57 | + |
58 | +set(ICON_DIR "${CMAKE_INSTALL_FULL_DATADIR}/icons/unity-icon-theme/places/svg") |
59 | +set(ICON_PATH "${ICON_DIR}/service-soundcloud.svg") |
60 | +set(CATEGORY_ICON_PATH "${ICON_DIR}/service-soundcloud.svg") |
61 | +set(DEFAULT_ICON_PATH "${ICON_DIR}/result-music.svg") |
62 | + |
63 | +################## |
64 | +# End defnitions |
65 | +################## |
66 | + |
67 | +configure_file( |
68 | + "${SOURCE_DIR}/config.h.in" |
69 | + "${SOURCE_BINARY_DIR}/config.h" |
70 | +) |
71 | + |
72 | +add_subdirectory("data") |
73 | +#add_subdirectory("po") |
74 | +add_subdirectory("src") |
75 | + |
76 | +enable_testing() |
77 | +add_subdirectory(tests) |
78 | + |
79 | +ADD_CUSTOM_TARGET( |
80 | + check |
81 | + ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure |
82 | +) |
83 | |
84 | === removed file 'MANIFEST.in' |
85 | --- MANIFEST.in 2013-02-13 14:31:48 +0000 |
86 | +++ MANIFEST.in 1970-01-01 00:00:00 +0000 |
87 | @@ -1,4 +0,0 @@ |
88 | -include MANIFEST.in |
89 | -include src/* |
90 | -include data/* |
91 | -include po/* |
92 | |
93 | === added file 'build.sh' |
94 | --- build.sh 1970-01-01 00:00:00 +0000 |
95 | +++ build.sh 2013-07-14 08:39:27 +0000 |
96 | @@ -0,0 +1,70 @@ |
97 | +#! /bin/bash |
98 | +set -e |
99 | + |
100 | +ECLIPSE=false |
101 | +CLEAN=false |
102 | +SOURCEDIR="$PWD" |
103 | +BRANCHNAME=`basename $SOURCEDIR` |
104 | +BUILDDIR="$SOURCEDIR/../$BRANCHNAME-build" |
105 | + |
106 | +usage() { |
107 | + echo "usage: $0 [OPTIONS] [BUILD_TYPE]\n" >&2 |
108 | + echo "Script to build unity-scope-soundcloud. If BUILD_TYPE is not specified, it defaults to \"Debug\".\n" >&2 |
109 | + echo "OPTIONS:" >&2 |
110 | + echo " -e, --eclipse Generate Eclipse projects" >&2 |
111 | + echo " -c, --clean Clean the build tree before building" >&2 |
112 | + echo >&2 |
113 | + exit 1 |
114 | +} |
115 | + |
116 | +ARGS=`getopt -n$0 -u -a --longoptions="eclipse,clean,help" -o "sch" -- "$@"` |
117 | +[ $? -ne 0 ] && usage |
118 | +eval set -- "$ARGS" |
119 | + |
120 | +while [ $# -gt 0 ] |
121 | +do |
122 | + case "$1" in |
123 | + -e|--eclipse) ECLIPSE=true;; |
124 | + -c|--clean) CLEAN=true;; |
125 | + -h|--help) usage;; |
126 | + --) shift;break;; |
127 | + esac |
128 | + shift |
129 | +done |
130 | + |
131 | +[ $# -gt 1 ] && usage |
132 | + |
133 | +BUILD_TYPE="Debug" |
134 | +[ $# -eq 1 ] && BUILD_TYPE="$1" |
135 | + |
136 | +if [ -f "/usr/bin/ninja" ] ; then |
137 | + if $ECLIPSE; then |
138 | + GENERATOR="Eclipse CDT4 - Ninja" |
139 | + else |
140 | + GENERATOR="Ninja" |
141 | + fi |
142 | + BUILD_COMMAND="ninja" |
143 | +else |
144 | + if $ECLIPSE; then |
145 | + GENERATOR="Eclipse CDT4 - Unix Makefiles" |
146 | + else |
147 | + GENERATOR="Unix Makefiles" |
148 | + fi |
149 | + BUILD_COMMAND="make" |
150 | +fi |
151 | + |
152 | +echo "Using $BUILD_COMMAND to build" |
153 | + |
154 | +if $CLEAN; then |
155 | + rm -rf $BUILDDIR |
156 | +fi |
157 | + |
158 | +mkdir -p $BUILDDIR |
159 | +( |
160 | + cd $BUILDDIR |
161 | + cmake "$SOURCEDIR" -G "$GENERATOR" \ |
162 | + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ |
163 | + -DENABLE_MEMCHECK_OPTION=YES \ |
164 | + -DCMAKE_INSTALL_PREFIX="$SOURCEDIR/../$BRANCHNAME-install" |
165 | + $BUILD_COMMAND |
166 | +) |
167 | |
168 | === added directory 'cmake' |
169 | === added file 'cmake/COPYING-CMAKE-SCRIPTS' |
170 | --- cmake/COPYING-CMAKE-SCRIPTS 1970-01-01 00:00:00 +0000 |
171 | +++ cmake/COPYING-CMAKE-SCRIPTS 2013-07-14 08:39:27 +0000 |
172 | @@ -0,0 +1,22 @@ |
173 | +Redistribution and use in source and binary forms, with or without |
174 | +modification, are permitted provided that the following conditions |
175 | +are met: |
176 | + |
177 | +1. Redistributions of source code must retain the copyright |
178 | + notice, this list of conditions and the following disclaimer. |
179 | +2. Redistributions in binary form must reproduce the copyright |
180 | + notice, this list of conditions and the following disclaimer in the |
181 | + documentation and/or other materials provided with the distribution. |
182 | +3. The name of the author may not be used to endorse or promote products |
183 | + derived from this software without specific prior written permission. |
184 | + |
185 | +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
186 | +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
187 | +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
188 | +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
189 | +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
190 | +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
191 | +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
192 | +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
193 | +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
194 | +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
195 | |
196 | === added file 'cmake/Coverage.cmake' |
197 | --- cmake/Coverage.cmake 1970-01-01 00:00:00 +0000 |
198 | +++ cmake/Coverage.cmake 2013-07-14 08:39:27 +0000 |
199 | @@ -0,0 +1,37 @@ |
200 | +if (CMAKE_BUILD_TYPE MATCHES coverage) |
201 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") |
202 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage") |
203 | + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage") |
204 | + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage") |
205 | + |
206 | + find_program(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin") |
207 | + if (NOT GCOVR_EXECUTABLE) |
208 | + message(STATUS "Gcovr binary was not found, can not generate XML coverage info.") |
209 | + else () |
210 | + message(STATUS "Gcovr found, can generate XML coverage info.") |
211 | + add_custom_target (coverage-xml |
212 | + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
213 | + COMMAND "${GCOVR_EXECUTABLE}" --exclude="test.*" --exclude="obj.*" -x -r "${CMAKE_SOURCE_DIR}" |
214 | + --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml) |
215 | + endif() |
216 | + |
217 | + find_program(LCOV_EXECUTABLE lcov HINTS ${LCOV_ROOT} "${GCOVR_ROOT}/bin") |
218 | + find_program(GENHTML_EXECUTABLE genhtml HINTS ${GENHTML_ROOT}) |
219 | + if (NOT LCOV_EXECUTABLE) |
220 | + message(STATUS "Lcov binary was not found, can not generate HTML coverage info.") |
221 | + else () |
222 | + if(NOT GENHTML_EXECUTABLE) |
223 | + message(STATUS "Genthml binary not found, can not generate HTML coverage info.") |
224 | + else() |
225 | + message(STATUS "Lcov and genhtml found, can generate HTML coverage info.") |
226 | + add_custom_target (coverage-html |
227 | + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
228 | + COMMAND "${LCOV_EXECUTABLE}" --capture --output-file "${CMAKE_BINARY_DIR}/coverage.info" --no-checksum --directory "${CMAKE_BINARY_DIR}" |
229 | + COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '/usr/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info" |
230 | + COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_BINARY_DIR}/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info" |
231 | + COMMAND "${LCOV_EXECUTABLE}" --remove "${CMAKE_BINARY_DIR}/coverage.info" '${CMAKE_SOURCE_DIR}/tests/*' --output-file "${CMAKE_BINARY_DIR}/coverage.info" |
232 | + COMMAND "${GENHTML_EXECUTABLE}" --prefix "${CMAKE_BINARY_DIR}" --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info |
233 | + ) |
234 | + endif() |
235 | + endif() |
236 | +endif() |
237 | |
238 | === added file 'cmake/FindGMock.cmake' |
239 | --- cmake/FindGMock.cmake 1970-01-01 00:00:00 +0000 |
240 | +++ cmake/FindGMock.cmake 2013-07-14 08:39:27 +0000 |
241 | @@ -0,0 +1,11 @@ |
242 | +# Build with system gmock and embedded gtest |
243 | +set (GMOCK_INCLUDE_DIRS "/usr/include/gmock/include" CACHE PATH "gmock source include directory") |
244 | +set (GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory") |
245 | +set (GTEST_INCLUDE_DIRS "${GMOCK_SOURCE_DIR}/gtest/include" CACHE PATH "gtest source include directory") |
246 | + |
247 | +add_subdirectory(${GMOCK_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gmock") |
248 | + |
249 | +set(GTEST_LIBRARIES gtest) |
250 | +set(GTEST_MAIN_LIBRARIES gtest_main) |
251 | +set(GMOCK_LIBRARIES gmock) |
252 | +set(GMOCK_BOTH_LIBRARIES gmock gmock_main) |
253 | |
254 | === added file 'cmake/FindValgrind.cmake' |
255 | --- cmake/FindValgrind.cmake 1970-01-01 00:00:00 +0000 |
256 | +++ cmake/FindValgrind.cmake 2013-07-14 08:39:27 +0000 |
257 | @@ -0,0 +1,28 @@ |
258 | + |
259 | +option( |
260 | + ENABLE_MEMCHECK_OPTION |
261 | + "If set to ON, enables automatic creation of memcheck targets" |
262 | + OFF |
263 | +) |
264 | + |
265 | +find_program( |
266 | + VALGRIND_PROGRAM |
267 | + NAMES valgrind |
268 | +) |
269 | + |
270 | +if(VALGRIND_PROGRAM) |
271 | + set(VALGRIND_PROGRAM_OPTIONS "--suppressions=${CMAKE_SOURCE_DIR}/tests/data/valgrind.suppression" "--gen-suppressions=all" "--error-exitcode=1" "--leak-check=full" "--quiet") |
272 | +endif() |
273 | + |
274 | +find_package_handle_standard_args( |
275 | + VALGRIND DEFAULT_MSG |
276 | + VALGRIND_PROGRAM |
277 | +) |
278 | + |
279 | +function(add_valgrind_test NAME EXECUTABLE) |
280 | + if(ENABLE_MEMCHECK_OPTION) |
281 | + add_test(${NAME} ${VALGRIND_PROGRAM} ${VALGRIND_PROGRAM_OPTIONS} "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE}") |
282 | + else() |
283 | + add_test(${NAME} ${EXECUTABLE}) |
284 | + endif() |
285 | +endfunction() |
286 | |
287 | === added file 'data/CMakeLists.txt' |
288 | --- data/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
289 | +++ data/CMakeLists.txt 2013-07-14 08:39:27 +0000 |
290 | @@ -0,0 +1,38 @@ |
291 | + |
292 | +############################ |
293 | +# DBus service definition |
294 | +############################ |
295 | + |
296 | +configure_file( |
297 | + unity-scope-soundcloud.service.in |
298 | + unity-scope-soundcloud.service |
299 | +) |
300 | + |
301 | +install( |
302 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/unity-scope-soundcloud.service" |
303 | + DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/services/" |
304 | +) |
305 | + |
306 | +############################ |
307 | +# Scope definition |
308 | +############################ |
309 | + |
310 | +configure_file( |
311 | + soundcloud.scope.in |
312 | + soundcloud.scope |
313 | +) |
314 | + |
315 | +install( |
316 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/soundcloud.scope" |
317 | + DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes/music/" |
318 | +) |
319 | + |
320 | +############################ |
321 | +# Icons |
322 | +############################ |
323 | + |
324 | +# TODO: Why is this file already provided? |
325 | +#install( |
326 | +# FILES "icons/service-soundcloud.svg" |
327 | +# DESTINATION "${ICON_DIR}" |
328 | +#) |
329 | |
330 | === modified file 'data/soundcloud.scope.in' |
331 | --- data/soundcloud.scope.in 2013-07-08 07:47:59 +0000 |
332 | +++ data/soundcloud.scope.in 2013-07-14 08:39:27 +0000 |
333 | @@ -1,18 +1,18 @@ |
334 | [Scope] |
335 | -DBusName=com.canonical.Unity.Scope.Music.Soundcloud |
336 | -DBusPath=/com/canonical/unity/scope/music/soundcloud |
337 | -Icon=/usr/share/icons/unity-icon-theme/places/svg/service-soundcloud.svg |
338 | +DBusName=@GROUP_NAME@ |
339 | +DBusPath=@UNIQUE_NAME@ |
340 | +Icon=@ICON_PATH@ |
341 | +QueryBinary= |
342 | _Keywords=soundcloud;music;track;sound;listen; |
343 | RequiredMetadata=album[s];artist[s]; |
344 | OptionalMetadata=genre[s];label[s];license[s];stream[s]; |
345 | -Loader=/usr/share/unity-scopes/soundcloud/unity_soundcloud_daemon.py |
346 | -Module=soundcloud.unity_soundcloud_daemon |
347 | -ModuleType=python3 |
348 | +Loader= |
349 | RemoteContent=true |
350 | Type=music |
351 | _Name=SoundCloud |
352 | _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. |
353 | _SearchHint=Search SoundCloud |
354 | +CategoryIcon=@CATEGORY_ICON_PATH@ |
355 | |
356 | [Desktop Entry] |
357 | X-Ubuntu-Gettext-Domain=unity-scope-soundcloud |
358 | |
359 | === removed file 'data/unity-scope-soundcloud.service' |
360 | --- data/unity-scope-soundcloud.service 2013-07-08 07:47:59 +0000 |
361 | +++ data/unity-scope-soundcloud.service 1970-01-01 00:00:00 +0000 |
362 | @@ -1,3 +0,0 @@ |
363 | -[D-BUS Service] |
364 | -Name=com.canonical.Unity.Scope.Music.Soundcloud |
365 | -Exec=/usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s music/soundcloud.scope |
366 | |
367 | === added file 'data/unity-scope-soundcloud.service.in' |
368 | --- data/unity-scope-soundcloud.service.in 1970-01-01 00:00:00 +0000 |
369 | +++ data/unity-scope-soundcloud.service.in 2013-07-14 08:39:27 +0000 |
370 | @@ -0,0 +1,3 @@ |
371 | +[D-BUS Service] |
372 | +Name=@GROUP_NAME@ |
373 | +Exec=@CMAKE_INSTALL_FULL_LIBEXECDIR@/unity-scope-soundcloud/unity-scope-soundcloud |
374 | |
375 | === modified file 'debian/changelog' |
376 | --- debian/changelog 2013-06-05 06:18:56 +0000 |
377 | +++ debian/changelog 2013-07-14 08:39:27 +0000 |
378 | @@ -1,3 +1,9 @@ |
379 | +unity-scope-soundcloud (0.2-0ubuntu1) UNRELEASED; urgency=low |
380 | + |
381 | + * Re-write in C++. |
382 | + |
383 | + -- Pete Woods <pete.woods@canonical.com> Fri, 12 Jul 2013 16:43:17 +0100 |
384 | + |
385 | unity-scope-soundcloud (0.1daily13.06.05-0ubuntu1) saucy; urgency=low |
386 | |
387 | [ Michael Terry ] |
388 | |
389 | === modified file 'debian/control' |
390 | --- debian/control 2013-05-17 13:04:12 +0000 |
391 | +++ debian/control 2013-07-14 08:39:27 +0000 |
392 | @@ -3,14 +3,13 @@ |
393 | Priority: optional |
394 | Maintainer: David Callé <davidc@framli.eu> |
395 | Build-Depends: debhelper (>= 9), |
396 | - python3, |
397 | - python3-distutils-extra, |
398 | - python3-gi, |
399 | + cmake, |
400 | pkg-config, |
401 | - python3-nose, |
402 | - gir1.2-unity-5.0 (>= 7), |
403 | - gir1.2-dee-1.0 (>= 1.2.5), |
404 | - gir1.2-glib-2.0, |
405 | + google-mock (>= 1.6.0+svn437), |
406 | + qtbase5-dev, |
407 | + libunity-dev (>= 7.0.6), |
408 | + valgrind, |
409 | + gettext, |
410 | Standards-Version: 3.9.4 |
411 | Homepage: https://launchpad.net/unity-scope-soundcloud |
412 | # If you aren't a member of ~submarine but need to upload packaging changes, |
413 | @@ -18,15 +17,9 @@ |
414 | Vcs-Bzr: https://code.launchpad.net/~submarine/unity-scope-soundcloud/trunk |
415 | |
416 | Package: unity-scope-soundcloud |
417 | -Architecture: all |
418 | -Depends: ${misc:Depends}, |
419 | - ${python3:Depends}, |
420 | - python3, |
421 | - python3-gi, |
422 | - gir1.2-unity-5.0 (>= 7), |
423 | - gir1.2-dee-1.0 (>= 1.2.5), |
424 | - unity-scopes-runner, |
425 | - gir1.2-glib-2.0 |
426 | +Architecture: any |
427 | +Depends: ${misc:Depends}, |
428 | + ${shlibs:Depends} |
429 | Description: SoundCloud scope for Unity |
430 | This package contains the "soundcloud" scope which allows Unity |
431 | to search for SoundCloud content. |
432 | |
433 | === modified file 'debian/rules' |
434 | --- debian/rules 2013-03-21 19:23:19 +0000 |
435 | +++ debian/rules 2013-07-14 08:39:27 +0000 |
436 | @@ -1,18 +1,13 @@ |
437 | #!/usr/bin/make -f |
438 | # -*- makefile -*- |
439 | |
440 | +export DPKG_GENSYMBOLS_CHECK_LEVEL=4 |
441 | |
442 | %: |
443 | - dh $@ --with python3 |
444 | - |
445 | -override_dh_auto_clean: |
446 | - python3 setup.py clean -a |
447 | - |
448 | -override_dh_auto_build: |
449 | - python3 setup.py build |
450 | - |
451 | -override_dh_auto_test: |
452 | - nosetests3 |
453 | - |
454 | -override_dh_auto_install: |
455 | - python3 setup.py install --root=$(CURDIR)/debian/unity-scope-soundcloud --install-layout=deb |
456 | + dh $@ --parallel --fail-missing |
457 | + |
458 | +override_dh_auto_configure: |
459 | + dh_auto_configure -- -DENABLE_MEMCHECK_OPTION=YES |
460 | + |
461 | +override_dh_makeshlibs: |
462 | + dh_makeshlibs -V |
463 | |
464 | === added directory 'include' |
465 | === modified file 'po/POTFILES.in' |
466 | --- po/POTFILES.in 2013-01-20 02:51:48 +0000 |
467 | +++ po/POTFILES.in 2013-07-14 08:39:27 +0000 |
468 | @@ -1,3 +1,8 @@ |
469 | [encoding: UTF-8] |
470 | +src/Curl.cpp |
471 | +src/SoundCloud.cpp |
472 | +src/SoundCloudParser.cpp |
473 | +src/SoundCloudResult.cpp |
474 | +src/unity_soundcloud_daemon.py |
475 | src/unity_soundcloud_daemon.py |
476 | [type: gettext/ini]data/soundcloud.scope.in |
477 | |
478 | === removed file 'setup.cfg' |
479 | --- setup.cfg 2013-03-13 19:44:26 +0000 |
480 | +++ setup.cfg 1970-01-01 00:00:00 +0000 |
481 | @@ -1,6 +0,0 @@ |
482 | -[build] |
483 | -i18n=True |
484 | - |
485 | -[build_i18n] |
486 | -domain=unity-scope-soundcloud |
487 | -desktop_files=[('share/unity/scopes/music', ('data/soundcloud.scope.in',))] |
488 | |
489 | === removed file 'setup.py' |
490 | --- setup.py 2013-03-20 20:25:24 +0000 |
491 | +++ setup.py 1970-01-01 00:00:00 +0000 |
492 | @@ -1,17 +0,0 @@ |
493 | -#!/usr/bin/env python3 |
494 | -# -*- coding: utf-8 -*- |
495 | -from distutils.core import setup |
496 | -from DistUtilsExtra.command import * |
497 | - |
498 | -setup(name='unity-scope-soundcloud', |
499 | - version='0.1', |
500 | - author='David Callé', |
501 | - author_email='davidc@framli.eu', |
502 | - url='http://launchpad.net/ubuntu-scopes', |
503 | - license='GNU General Public License (GPL)', |
504 | - data_files=[ |
505 | - ('share/dbus-1/services', ['data/unity-scope-soundcloud.service']), |
506 | - ('share/unity-scopes/soundcloud', ['src/unity_soundcloud_daemon.py']), |
507 | - ('share/unity-scopes/soundcloud', ['src/__init__.py']), |
508 | - ], cmdclass={'build': build_extra.build_extra, |
509 | - 'build_i18n': build_i18n.build_i18n,}) |
510 | |
511 | === added file 'src/CMakeLists.txt' |
512 | --- src/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
513 | +++ src/CMakeLists.txt 2013-07-14 08:39:27 +0000 |
514 | @@ -0,0 +1,53 @@ |
515 | + |
516 | +######################################## |
517 | +# SoundCloud static library for testing |
518 | +######################################## |
519 | + |
520 | +set( |
521 | + SOUNDCLOUD_SOURCES |
522 | + Curl.cpp |
523 | + SoundCloud.cpp |
524 | + SoundCloudParser.cpp |
525 | + SoundCloudResult.cpp |
526 | +) |
527 | + |
528 | +add_library( |
529 | + soundcloud |
530 | + STATIC |
531 | + ${SOUNDCLOUD_SOURCES} |
532 | +) |
533 | + |
534 | +target_link_libraries( |
535 | + soundcloud |
536 | + ${UNITY_LIBRARIES} |
537 | +) |
538 | + |
539 | +qt5_use_modules( |
540 | + soundcloud |
541 | + Core |
542 | + Network |
543 | +) |
544 | + |
545 | +######################################### |
546 | +# SoundCloud executable for installation |
547 | +######################################### |
548 | + |
549 | +add_executable( |
550 | + unity-scope-soundcloud |
551 | + main.cpp |
552 | +) |
553 | + |
554 | +target_link_libraries( |
555 | + unity-scope-soundcloud |
556 | + soundcloud |
557 | +) |
558 | + |
559 | +qt5_use_modules( |
560 | + unity-scope-soundcloud |
561 | + Core |
562 | +) |
563 | + |
564 | +install( |
565 | + TARGETS unity-scope-soundcloud |
566 | + RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}/unity-scope-soundcloud/" |
567 | +) |
568 | |
569 | === added file 'src/Curl.cpp' |
570 | --- src/Curl.cpp 1970-01-01 00:00:00 +0000 |
571 | +++ src/Curl.cpp 2013-07-14 08:39:27 +0000 |
572 | @@ -0,0 +1,45 @@ |
573 | +/* |
574 | + * Copyright (C) 2013 Canonical, Ltd. |
575 | + * |
576 | + * This program is free software: you can redistribute it and/or modify it |
577 | + * under the terms of the GNU General Public License version 3, as published |
578 | + * by the Free Software Foundation. |
579 | + * |
580 | + * This program is distributed in the hope that it will be useful, but |
581 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
582 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
583 | + * PURPOSE. See the GNU General Public License for more details. |
584 | + * |
585 | + * You should have received a copy of the GNU General Public License along |
586 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
587 | + * |
588 | + * Author: Pete Woods <pete.woods@canonical.com> |
589 | + */ |
590 | + |
591 | +#include <Curl.h> |
592 | +#include <QtCore/QObject> |
593 | +#include <QtCore/QUrl> |
594 | +#include <QtCore/QEventLoop> |
595 | +#include <QtNetwork/QNetworkAccessManager> |
596 | +#include <QtNetwork/QNetworkRequest> |
597 | +#include <QtNetwork/QNetworkReply> |
598 | + |
599 | +using namespace std; |
600 | + |
601 | +Curl::Curl() { |
602 | +} |
603 | + |
604 | +Curl::~Curl() { |
605 | +} |
606 | + |
607 | +QByteArray Curl::read(const string& url) const { |
608 | + QNetworkAccessManager manager; |
609 | + QNetworkReply *reply = manager.get( |
610 | + QNetworkRequest(QUrl(QString::fromStdString(url)))); |
611 | + |
612 | + QEventLoop loop; |
613 | + QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); |
614 | + loop.exec(); |
615 | + |
616 | + return reply->readAll(); |
617 | +} |
618 | |
619 | === added file 'src/Curl.h' |
620 | --- src/Curl.h 1970-01-01 00:00:00 +0000 |
621 | +++ src/Curl.h 2013-07-14 08:39:27 +0000 |
622 | @@ -0,0 +1,34 @@ |
623 | +/* |
624 | + * Copyright (C) 2013 Canonical, Ltd. |
625 | + * |
626 | + * This program is free software: you can redistribute it and/or modify it |
627 | + * under the terms of the GNU General Public License version 3, as published |
628 | + * by the Free Software Foundation. |
629 | + * |
630 | + * This program is distributed in the hope that it will be useful, but |
631 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
632 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
633 | + * PURPOSE. See the GNU General Public License for more details. |
634 | + * |
635 | + * You should have received a copy of the GNU General Public License along |
636 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
637 | + * |
638 | + * Author: Pete Woods <pete.woods@canonical.com> |
639 | + */ |
640 | + |
641 | +#ifndef SOUNDCLOUD_CURL_H_ |
642 | +#define SOUNDCLOUD_CURL_H_ |
643 | + |
644 | +#include <QtCore/QByteArray> |
645 | +#include <string> |
646 | + |
647 | +class Curl { |
648 | +public: |
649 | + explicit Curl(); |
650 | + |
651 | + virtual ~Curl(); |
652 | + |
653 | + virtual QByteArray read(const std::string& url) const; |
654 | +}; |
655 | + |
656 | +#endif // SOUNDCLOUD_CURL_H_ |
657 | |
658 | === added file 'src/Localisation.h' |
659 | --- src/Localisation.h 1970-01-01 00:00:00 +0000 |
660 | +++ src/Localisation.h 2013-07-14 08:39:27 +0000 |
661 | @@ -0,0 +1,28 @@ |
662 | +/* |
663 | + * Copyright (C) 2013 Canonical, Ltd. |
664 | + * |
665 | + * This program is free software: you can redistribute it and/or modify it |
666 | + * under the terms of the GNU General Public License version 3, as published |
667 | + * by the Free Software Foundation. |
668 | + * |
669 | + * This program is distributed in the hope that it will be useful, but |
670 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
671 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
672 | + * PURPOSE. See the GNU General Public License for more details. |
673 | + * |
674 | + * You should have received a copy of the GNU General Public License along |
675 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
676 | + * |
677 | + * Author: Pete Woods <pete.woods@canonical.com> |
678 | + */ |
679 | + |
680 | +#ifndef SOUNDCLOUD_LOCALISATION_H_ |
681 | +#define SOUNDCLOUD_LOCALISATION_H_ |
682 | + |
683 | +#include <libintl.h> |
684 | + |
685 | +inline char* _(const char *__msgid) { |
686 | + return gettext(__msgid); |
687 | +} |
688 | + |
689 | +#endif // SOUNDCLOUD_LOCALISATION_H_ |
690 | |
691 | === added file 'src/SoundCloud.cpp' |
692 | --- src/SoundCloud.cpp 1970-01-01 00:00:00 +0000 |
693 | +++ src/SoundCloud.cpp 2013-07-14 08:39:27 +0000 |
694 | @@ -0,0 +1,255 @@ |
695 | +/* |
696 | + * Copyright (C) 2013 Canonical, Ltd. |
697 | + * |
698 | + * This program is free software: you can redistribute it and/or modify it |
699 | + * under the terms of the GNU General Public License version 3, as published |
700 | + * by the Free Software Foundation. |
701 | + * |
702 | + * This program is distributed in the hope that it will be useful, but |
703 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
704 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
705 | + * PURPOSE. See the GNU General Public License for more details. |
706 | + * |
707 | + * You should have received a copy of the GNU General Public License along |
708 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
709 | + * |
710 | + * Author: Pete Woods <pete.woods@canonical.com> |
711 | + */ |
712 | + |
713 | +#include <config.h> |
714 | +#include <SoundCloud.h> |
715 | +#include <SoundCloudParser.h> |
716 | +#include <Localisation.h> |
717 | + |
718 | +#include <string> |
719 | +#include <iostream> |
720 | + |
721 | +using namespace std; |
722 | + |
723 | +/** |
724 | + * This is the main function: the scope is defined and exported, a DBUS |
725 | + * connector is created and the main loop is run |
726 | + */ |
727 | +SoundCloud::SoundCloud(shared_ptr<Curl> curl) : |
728 | + m_curl(curl) { |
729 | + UnitySimpleScope *scope = NULL; |
730 | + UnityScopeDBusConnector *connector = NULL; |
731 | + UnityCategorySet *cats = NULL; |
732 | + UnityCategory *cat = NULL; |
733 | + GIcon *icon = NULL; |
734 | + |
735 | + /* Create and set a category for the scope, including an icon */ |
736 | + icon = g_themed_icon_new(CATEGORY_ICON_PATH); |
737 | + |
738 | + cat = unity_category_new("songs", _("Songs"), icon, |
739 | + UNITY_CATEGORY_RENDERER_VERTICAL_TILE); |
740 | + cats = unity_category_set_new(); |
741 | + unity_category_set_add(cats, cat); |
742 | + |
743 | + // Create and set up the scope |
744 | + scope = unity_simple_scope_new(); |
745 | + unity_simple_scope_set_group_name(scope, GROUP_NAME); |
746 | + unity_simple_scope_set_unique_name(scope, UNIQUE_NAME); |
747 | + unity_simple_scope_set_search_func(scope, search_func, |
748 | + reinterpret_cast<void *>(this), NULL); |
749 | + unity_simple_scope_set_preview_func(scope, preview_func, |
750 | + reinterpret_cast<void *>(this), NULL); |
751 | + unity_simple_scope_set_category_set(scope, cats); |
752 | + |
753 | + // Set up schema |
754 | + UnitySchema* schema = unity_schema_new(); |
755 | + for (const string &field : vector<string>( { "artist", "album" })) { |
756 | + unity_schema_add_field(schema, field.data(), "s", |
757 | + UNITY_SCHEMA_FIELD_TYPE_REQUIRED); |
758 | + } |
759 | + for (const string &field : vector<string>( { "genre", "label", "license", |
760 | + "stream", "duration", "provider_credits" })) { |
761 | + unity_schema_add_field(schema, field.data(), "s", |
762 | + UNITY_SCHEMA_FIELD_TYPE_OPTIONAL); |
763 | + } |
764 | + unity_simple_scope_set_schema(scope, schema); |
765 | + unity_object_unref(schema); |
766 | + |
767 | + g_object_unref(icon); |
768 | + unity_object_unref(cat); |
769 | + unity_object_unref(cats); |
770 | + |
771 | + /* |
772 | + * Setting up the connector is an action that will not be required |
773 | + * in future revisions of the API. In particular, we only need it here |
774 | + * since the scope is running locally on the device as opposed to |
775 | + * running on the Smart Scopes server |
776 | + */ |
777 | + connector = unity_scope_dbus_connector_new(UNITY_ABSTRACT_SCOPE(scope) ); |
778 | + unity_scope_dbus_connector_export(connector, NULL); |
779 | + unity_scope_dbus_connector_run(); |
780 | +} |
781 | + |
782 | +SoundCloud::~SoundCloud() { |
783 | +} |
784 | + |
785 | +static inline void addMetadata(UnityScopeResult &scope_result, const gchar *id, |
786 | + const string &value) { |
787 | + if (!value.empty()) { |
788 | + g_hash_table_insert(scope_result.metadata, (gpointer) id, |
789 | + g_variant_new_string(value.data())); |
790 | + } |
791 | +} |
792 | + |
793 | +/** |
794 | + * In this function the results from the backend are obtained and |
795 | + * added to the search results in the Dash |
796 | + * |
797 | + * @brief Search function |
798 | + * @param search Search term |
799 | + * @param user_data Additional user data |
800 | + */ |
801 | +void SoundCloud::searchFunc(UnityScopeSearchBase* search) { |
802 | + UnityScopeResult scope_result = { 0, 0, 0, UNITY_RESULT_TYPE_DEFAULT, |
803 | + (gchar *) "text/html", 0, 0, 0, 0 }; |
804 | + |
805 | + SoundCloudParser parser(m_curl); |
806 | + |
807 | + /* Fetch the results from the backend */ |
808 | + deque<SoundCloudResult> results( |
809 | + parser.getResults(search->search_context->search_query)); |
810 | + |
811 | + /* Iterate through the returned results and add them to the |
812 | + * Unity's result set |
813 | + */ |
814 | + for (const SoundCloudResult &result : results) { |
815 | + /* Build and populate a scope result from the source data */ |
816 | + scope_result.uri = const_cast<char *>(result.uri().data()); |
817 | + scope_result.title = const_cast<char *>(result.title().data()); |
818 | + scope_result.icon_hint = const_cast<char *>(result.icon().data()); |
819 | + scope_result.comment = const_cast<char *>(result.comment().data()); |
820 | + scope_result.dnd_uri = const_cast<char *>(result.uri().data()); |
821 | + |
822 | + /* Insert the metadata, if available */ |
823 | + scope_result.metadata = g_hash_table_new(g_str_hash, g_str_equal); |
824 | + g_hash_table_insert(scope_result.metadata, (gpointer) "artist", |
825 | + g_variant_new_string(result.artist().data())); |
826 | + g_hash_table_insert(scope_result.metadata, (gpointer) "album", |
827 | + g_variant_new_string("album")); |
828 | + |
829 | + addMetadata(scope_result, "genre", result.genre()); |
830 | + addMetadata(scope_result, "label", result.label()); |
831 | + addMetadata(scope_result, "license", result.license()); |
832 | + addMetadata(scope_result, "stream", result.stream()); |
833 | + addMetadata(scope_result, "duration", result.duration()); |
834 | + addMetadata(scope_result, "creation_date", result.creationDate()); |
835 | + |
836 | + /* |
837 | + * Add the returned result to the search results list, taking a |
838 | + * copy of the data passed in via scope_result |
839 | + */ |
840 | + unity_result_set_add_result(search->search_context->result_set, |
841 | + &scope_result); |
842 | + |
843 | + g_hash_table_unref(scope_result.metadata); |
844 | + } |
845 | + |
846 | +} |
847 | + |
848 | +static void addPreviewData(UnityResultPreviewer *previewer, |
849 | + UnityPreview *preview, const char *id, const char *display_name) { |
850 | + GVariant *variant = (GVariant *) g_hash_table_lookup( |
851 | + previewer->result.metadata, id); |
852 | + |
853 | + /* There are 2 ways to do this, the first method just directly |
854 | + * uses the GVariant from the hash. The second extracts the string |
855 | + * first, which might be useful for debugging. */ |
856 | + if (variant) { |
857 | + UnityInfoHint *hint = unity_info_hint_new_with_variant(id, display_name, |
858 | + NULL, variant); |
859 | + /* The ref call here and unref below are to work-around a bug in |
860 | + * libunity, see: |
861 | + * http://code.launchpad.net/~mhr3/libunity/floating-fixes */ |
862 | + g_object_ref(hint); |
863 | + unity_preview_add_info(preview, hint); |
864 | + g_object_unref(hint); |
865 | + } |
866 | +} |
867 | + |
868 | +/** |
869 | + * This function will be invoked when the user clicks on the result and |
870 | + * its preview is shown in the Dash. |
871 | + * There are a set of predefined preview types: simply pick one, instantiate |
872 | + * it, add metadata to it if available, and return it. |
873 | + * |
874 | + * @brief Dash preview function |
875 | + * @param previewer Result previewer |
876 | + * @param user_data Additional user data |
877 | + * @return Preview populated with the result's data |
878 | + */ |
879 | +UnityAbstractPreview * SoundCloud::previewFunc( |
880 | + UnityResultPreviewer *previewer) { |
881 | + UnityPreview *preview = NULL; |
882 | + UnityPreviewAction *action = NULL; |
883 | + |
884 | + /* Create a music preview */ |
885 | + preview = |
886 | + UNITY_PREVIEW(unity_music_preview_new(previewer->result.title, |
887 | + previewer->result.comment, g_icon_new_for_string(previewer->result.icon_hint, NULL))); |
888 | + |
889 | + /* Set up the preview's action */ |
890 | + action = unity_preview_action_new_with_uri(previewer->result.uri, |
891 | + _("SoundCloud"), g_icon_new_for_string(CATEGORY_ICON_PATH, NULL)); |
892 | + unity_preview_add_action(preview, action); |
893 | + unity_object_unref(action); |
894 | + |
895 | + /* If the result contains metadata, add it to the preview */ |
896 | + if (previewer->result.metadata) { |
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")); |
903 | + |
904 | + { |
905 | + GVariant *stream = (GVariant *) g_hash_table_lookup( |
906 | + previewer->result.metadata, "stream"); |
907 | + |
908 | + if (stream) { |
909 | + GVariant *artist = (GVariant *) g_hash_table_lookup( |
910 | + previewer->result.metadata, "artist"); |
911 | + GVariant *album = (GVariant *) g_hash_table_lookup( |
912 | + previewer->result.metadata, "album"); |
913 | + GVariant *duration = (GVariant *) g_hash_table_lookup( |
914 | + previewer->result.metadata, "duration"); |
915 | + guint length = 0; |
916 | + if (duration) { |
917 | + length = stoi(string(g_variant_get_string(duration, NULL))) |
918 | + / 1000; |
919 | + } |
920 | + UnityTrackMetadata *track = unity_track_metadata_new_full( |
921 | + g_variant_get_string(stream, NULL), 1, |
922 | + previewer->result.title, |
923 | + artist ? g_variant_get_string(artist, NULL) : "", |
924 | + album ? g_variant_get_string(artist, NULL) : "", |
925 | + length); |
926 | + |
927 | + unity_music_preview_add_track(UNITY_MUSIC_PREVIEW(preview), |
928 | + track); |
929 | + unity_track_metadata_set_art_icon(track, |
930 | + g_icon_new_for_string(previewer->result.icon_hint, |
931 | + NULL)); |
932 | + unity_object_unref(track); |
933 | + } |
934 | + } |
935 | + } |
936 | + |
937 | + return UNITY_ABSTRACT_PREVIEW(preview) ; |
938 | +} |
939 | + |
940 | +void SoundCloud::search_func(UnityScopeSearchBase* search, void* user_data) { |
941 | + SoundCloud *soundCloud(reinterpret_cast<SoundCloud *>(user_data)); |
942 | + soundCloud->searchFunc(search); |
943 | +} |
944 | + |
945 | +UnityAbstractPreview * |
946 | +SoundCloud::preview_func(UnityResultPreviewer *previewer, void *user_data) { |
947 | + SoundCloud *soundCloud(reinterpret_cast<SoundCloud *>(user_data)); |
948 | + return soundCloud->previewFunc(previewer); |
949 | +} |
950 | |
951 | === added file 'src/SoundCloud.h' |
952 | --- src/SoundCloud.h 1970-01-01 00:00:00 +0000 |
953 | +++ src/SoundCloud.h 2013-07-14 08:39:27 +0000 |
954 | @@ -0,0 +1,47 @@ |
955 | +/* |
956 | + * Copyright (C) 2013 Canonical, Ltd. |
957 | + * |
958 | + * This program is free software: you can redistribute it and/or modify it |
959 | + * under the terms of the GNU General Public License version 3, as published |
960 | + * by the Free Software Foundation. |
961 | + * |
962 | + * This program is distributed in the hope that it will be useful, but |
963 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
964 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
965 | + * PURPOSE. See the GNU General Public License for more details. |
966 | + * |
967 | + * You should have received a copy of the GNU General Public License along |
968 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
969 | + * |
970 | + * Author: Pete Woods <pete.woods@canonical.com> |
971 | + */ |
972 | + |
973 | +#ifndef SOUNDCLOUD_H_ |
974 | +#define SOUNDCLOUD_H_ |
975 | + |
976 | +#include <Curl.h> |
977 | + |
978 | +#include <memory> |
979 | +#include <unity.h> |
980 | + |
981 | +class SoundCloud { |
982 | +public: |
983 | + explicit SoundCloud(std::shared_ptr<Curl> curl); |
984 | + |
985 | + virtual ~SoundCloud(); |
986 | + |
987 | +protected: |
988 | + static UnityAbstractPreview * preview_func(UnityResultPreviewer *previewer, |
989 | + void *user_data); |
990 | + |
991 | + static void search_func(UnityScopeSearchBase* search, void* user_data); |
992 | + |
993 | + UnityAbstractPreview * previewFunc(UnityResultPreviewer *previewer); |
994 | + |
995 | + void searchFunc(UnityScopeSearchBase* search); |
996 | + |
997 | + std::shared_ptr<Curl> m_curl; |
998 | + |
999 | +}; |
1000 | + |
1001 | +#endif // SOUNDCLOUD_H_ |
1002 | |
1003 | === added file 'src/SoundCloudParser.cpp' |
1004 | --- src/SoundCloudParser.cpp 1970-01-01 00:00:00 +0000 |
1005 | +++ src/SoundCloudParser.cpp 2013-07-14 08:39:27 +0000 |
1006 | @@ -0,0 +1,212 @@ |
1007 | +/* |
1008 | + * Copyright (C) 2013 Canonical, Ltd. |
1009 | + * |
1010 | + * This program is free software: you can redistribute it and/or modify it |
1011 | + * under the terms of the GNU General Public License version 3, as published |
1012 | + * by the Free Software Foundation. |
1013 | + * |
1014 | + * This program is distributed in the hope that it will be useful, but |
1015 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1016 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1017 | + * PURPOSE. See the GNU General Public License for more details. |
1018 | + * |
1019 | + * You should have received a copy of the GNU General Public License along |
1020 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1021 | + * |
1022 | + * Author: Pete Woods <pete.woods@canonical.com> |
1023 | + */ |
1024 | + |
1025 | +#include <SoundCloudParser.h> |
1026 | +#include <Localisation.h> |
1027 | +#include <Curl.h> |
1028 | + |
1029 | +#include <iostream> |
1030 | +#include <sstream> |
1031 | +#include <stdexcept> |
1032 | + |
1033 | +#include <QtCore/QXmlStreamReader> |
1034 | + |
1035 | +using namespace std; |
1036 | + |
1037 | +const string SoundCloudParser::SEARCH_URI = "https://api.soundcloud.com/"; |
1038 | + |
1039 | +const string SoundCloudParser::API_KEY = "398e83f17ec3c5cf945f04772de9f400"; |
1040 | + |
1041 | +SoundCloudParser::SoundCloudParser(std::shared_ptr<Curl> curl) : |
1042 | + m_curl(curl) { |
1043 | +} |
1044 | + |
1045 | +SoundCloudParser::~SoundCloudParser() { |
1046 | +} |
1047 | + |
1048 | +deque<SoundCloudResult> SoundCloudParser::getResults(const string &searchTerm) { |
1049 | + deque<SoundCloudResult> results; |
1050 | + |
1051 | + /* Check if an actual search term was submitted, return otherwise */ |
1052 | + if (searchTerm.empty()) { |
1053 | + cerr << _("SearchTerm cannot be empty"); |
1054 | + return results; |
1055 | + } |
1056 | + |
1057 | + /* Construct the full search query */ |
1058 | + ostringstream urlStream; |
1059 | + urlStream << SEARCH_URI << "tracks?consumer_key=" << API_KEY << "&q=" |
1060 | + << searchTerm << "&order=hotness&limit=30"; |
1061 | + |
1062 | + /* |
1063 | + * Submit the query to the source, parse the results and populate |
1064 | + * the results list here. |
1065 | + */ |
1066 | + QXmlStreamReader xml(m_curl->read(urlStream.str())); |
1067 | + |
1068 | + try { |
1069 | + while (!xml.atEnd()) { |
1070 | + QXmlStreamReader::TokenType token = xml.readNext(); |
1071 | + if (xml.error() != QXmlStreamReader::NoError) { |
1072 | + throw logic_error(_("XML not well formed")); |
1073 | + } |
1074 | + |
1075 | + /* If token is just StartDocument, we'll go to next.*/ |
1076 | + if (token == QXmlStreamReader::StartDocument) { |
1077 | + continue; |
1078 | + } |
1079 | + |
1080 | + /* If token is StartElement, we'll see if we can read it.*/ |
1081 | + if (token == QXmlStreamReader::StartElement) { |
1082 | + /* If it's named tracks, we'll go to the next.*/ |
1083 | + if (xml.name() == "tracks") { |
1084 | + continue; |
1085 | + } |
1086 | + /* If it's named track, we'll dig the information from there.*/ |
1087 | + if (xml.name() == "track") { |
1088 | + parseTrack(xml, results); |
1089 | + } |
1090 | + } |
1091 | + } |
1092 | + } catch (logic_error &e) { |
1093 | + cerr << e.what() << endl; |
1094 | + results.pop_back(); |
1095 | + } |
1096 | + |
1097 | + return results; |
1098 | +} |
1099 | + |
1100 | +void SoundCloudParser::parseTrack(QXmlStreamReader& xml, |
1101 | + deque<SoundCloudResult> &results) { |
1102 | + /* Let's check that we're really getting a track. */ |
1103 | + if (xml.tokenType() != QXmlStreamReader::StartElement |
1104 | + && xml.name() == "track") { |
1105 | + cerr << _("Not a track") << endl; |
1106 | + return; |
1107 | + } |
1108 | + |
1109 | + results.push_back(SoundCloudResult()); |
1110 | + SoundCloudResult &track(results.back()); |
1111 | + |
1112 | + /* Next element... */ |
1113 | + xml.readNext(); |
1114 | + if (xml.error() != QXmlStreamReader::NoError) { |
1115 | + throw logic_error(_("XML not well formed")); |
1116 | + } |
1117 | + |
1118 | + /* |
1119 | + * We're going to loop over the things because the order might change. |
1120 | + * We'll continue the loop until we hit an EndElement named track. |
1121 | + */ |
1122 | + while (!(xml.tokenType() == QXmlStreamReader::EndElement |
1123 | + && xml.name() == "track")) { |
1124 | + if (xml.tokenType() == QXmlStreamReader::StartElement) { |
1125 | + if (xml.name() == "permalink-url") { |
1126 | + track.setUri(readCharacterData(xml)); |
1127 | + } else if (xml.name() == "artwork-url") { |
1128 | + track.setIcon(readCharacterData(xml)); |
1129 | + } else if (xml.name() == "title") { |
1130 | + track.setTitle(readCharacterData(xml)); |
1131 | + } else if (xml.name() == "description") { |
1132 | + track.setComment(readCharacterData(xml)); |
1133 | + } else if (xml.name() == "genre") { |
1134 | + track.setGenre(readCharacterData(xml)); |
1135 | + } else if (xml.name() == "label-name") { |
1136 | + track.setLabel(readCharacterData(xml)); |
1137 | + } else if (xml.name() == "license") { |
1138 | + track.setLicense(readCharacterData(xml)); |
1139 | + } else if (xml.name() == "stream-url") { |
1140 | + track.setStream(readCharacterData(xml)); |
1141 | + } else if (xml.name() == "created-at") { |
1142 | + track.setCreationDate(readCharacterData(xml)); |
1143 | + } else if (xml.name() == "duration") { |
1144 | + track.setDuration(readCharacterData(xml)); |
1145 | + } else if (xml.name() == "user") { |
1146 | + track.setArtist(readUserName(xml)); |
1147 | + } else if (xml.name() == "created-with") { |
1148 | + xml.skipCurrentElement(); |
1149 | + } |
1150 | + } |
1151 | + |
1152 | + /* ...and next... */ |
1153 | + xml.readNext(); |
1154 | + if (xml.error() != QXmlStreamReader::NoError) { |
1155 | + throw logic_error(_("XML not well formed")); |
1156 | + } |
1157 | + } |
1158 | +} |
1159 | + |
1160 | +string SoundCloudParser::readUserName(QXmlStreamReader& xml) const { |
1161 | + /* Let's check that we're really getting a user. */ |
1162 | + if (xml.tokenType() != QXmlStreamReader::StartElement |
1163 | + && xml.name() == "user") { |
1164 | + cerr << _("Not a user") << endl; |
1165 | + return ""; |
1166 | + } |
1167 | + |
1168 | + /* Next element... */ |
1169 | + xml.readNext(); |
1170 | + if (xml.error() != QXmlStreamReader::NoError) { |
1171 | + throw logic_error(_("XML not well formed")); |
1172 | + } |
1173 | + |
1174 | + string result(""); |
1175 | + |
1176 | + /* |
1177 | + * We're going to loop over the things because the order might change. |
1178 | + * We'll continue the loop until we hit an EndElement named user. |
1179 | + */ |
1180 | + while (!(xml.tokenType() == QXmlStreamReader::EndElement |
1181 | + && xml.name() == "user")) { |
1182 | + if (xml.tokenType() == QXmlStreamReader::StartElement) { |
1183 | + if (xml.name() == "username") { |
1184 | + result = readCharacterData(xml); |
1185 | + } |
1186 | + } |
1187 | + |
1188 | + /* ...and next... */ |
1189 | + xml.readNext(); |
1190 | + if (xml.error() != QXmlStreamReader::NoError) { |
1191 | + throw logic_error(_("XML not well formed")); |
1192 | + } |
1193 | + } |
1194 | + |
1195 | + return result; |
1196 | +} |
1197 | + |
1198 | +string SoundCloudParser::readCharacterData(QXmlStreamReader& xml) const { |
1199 | + /* We need a start element, like <foo> */ |
1200 | + if (xml.tokenType() != QXmlStreamReader::StartElement) { |
1201 | + return ""; |
1202 | + } |
1203 | + |
1204 | + xml.readNext(); |
1205 | + if (xml.error() != QXmlStreamReader::NoError) { |
1206 | + throw logic_error(_("XML not well formed")); |
1207 | + } |
1208 | + /* |
1209 | + * This elements needs to contain Characters so we know it's |
1210 | + * actually data, if it's not we'll leave. |
1211 | + */ |
1212 | + if (xml.tokenType() != QXmlStreamReader::Characters) { |
1213 | + return ""; |
1214 | + } |
1215 | + |
1216 | + /* Now we can get the data*/ |
1217 | + return xml.text().toString().toStdString(); |
1218 | +} |
1219 | |
1220 | === added file 'src/SoundCloudParser.h' |
1221 | --- src/SoundCloudParser.h 1970-01-01 00:00:00 +0000 |
1222 | +++ src/SoundCloudParser.h 2013-07-14 08:39:27 +0000 |
1223 | @@ -0,0 +1,62 @@ |
1224 | +/* |
1225 | + * Copyright (C) 2013 Canonical, Ltd. |
1226 | + * |
1227 | + * This program is free software: you can redistribute it and/or modify it |
1228 | + * under the terms of the GNU General Public License version 3, as published |
1229 | + * by the Free Software Foundation. |
1230 | + * |
1231 | + * This program is distributed in the hope that it will be useful, but |
1232 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1233 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1234 | + * PURPOSE. See the GNU General Public License for more details. |
1235 | + * |
1236 | + * You should have received a copy of the GNU General Public License along |
1237 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1238 | + * |
1239 | + * Author: Pete Woods <pete.woods@canonical.com> |
1240 | + */ |
1241 | + |
1242 | +#ifndef SOUNDCLOUD_PARSER_H_ |
1243 | +#define SOUNDCLOUD_PARSER_H_ |
1244 | + |
1245 | +#include <SoundCloudResult.h> |
1246 | +#include <Curl.h> |
1247 | + |
1248 | +#include <string> |
1249 | +#include <deque> |
1250 | +#include <memory> |
1251 | + |
1252 | +QT_BEGIN_NAMESPACE |
1253 | +class QXmlStreamReader; |
1254 | +QT_END_NAMESPACE |
1255 | + |
1256 | +class SoundCloudParser { |
1257 | +public: |
1258 | + static const std::string SEARCH_URI; |
1259 | + |
1260 | + static const std::string API_KEY; |
1261 | + |
1262 | + explicit SoundCloudParser(std::shared_ptr<Curl> curl); |
1263 | + |
1264 | + virtual ~SoundCloudParser(); |
1265 | + |
1266 | + /** |
1267 | + * @brief Get and parse the results from a search query |
1268 | + * @param searchTerm String submitted as the search term |
1269 | + * |
1270 | + * @return Search results |
1271 | + */ |
1272 | + std::deque<SoundCloudResult> getResults(const std::string &searchTerm); |
1273 | + |
1274 | +protected: |
1275 | + void parseTrack(QXmlStreamReader& xml, |
1276 | + std::deque<SoundCloudResult> &results); |
1277 | + |
1278 | + std::string readCharacterData(QXmlStreamReader& xml) const; |
1279 | + |
1280 | + std::string readUserName(QXmlStreamReader& xml) const; |
1281 | + |
1282 | + std::shared_ptr<Curl> m_curl; |
1283 | +}; |
1284 | + |
1285 | +#endif // SOUNDCLOUD_PARSER_H_ |
1286 | |
1287 | === added file 'src/SoundCloudResult.cpp' |
1288 | --- src/SoundCloudResult.cpp 1970-01-01 00:00:00 +0000 |
1289 | +++ src/SoundCloudResult.cpp 2013-07-14 08:39:27 +0000 |
1290 | @@ -0,0 +1,115 @@ |
1291 | +/* |
1292 | + * Copyright (C) 2013 Canonical, Ltd. |
1293 | + * |
1294 | + * This program is free software: you can redistribute it and/or modify it |
1295 | + * under the terms of the GNU General Public License version 3, as published |
1296 | + * by the Free Software Foundation. |
1297 | + * |
1298 | + * This program is distributed in the hope that it will be useful, but |
1299 | + * WITHOUT ANY WARRANTY{} without even the implied warranties of |
1300 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1301 | + * PURPOSE. See the GNU General Public License for more details. |
1302 | + * |
1303 | + * You should have received a copy of the GNU General Public License along |
1304 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1305 | + * |
1306 | + * Author: Pete Woods <pete.woods@canonical.com> |
1307 | + */ |
1308 | + |
1309 | +#include <SoundCloudResult.h> |
1310 | +#include <config.h> |
1311 | + |
1312 | +SoundCloudResult::SoundCloudResult() : |
1313 | + m_icon(DEFAULT_ICON_PATH) { |
1314 | +} |
1315 | + |
1316 | +SoundCloudResult::~SoundCloudResult() { |
1317 | +} |
1318 | + |
1319 | +void SoundCloudResult::setUri(const std::string &uri) { |
1320 | + m_uri = uri; |
1321 | +} |
1322 | + |
1323 | +const std::string & SoundCloudResult::uri() const { |
1324 | + return m_uri; |
1325 | +} |
1326 | + |
1327 | +void SoundCloudResult::setIcon(const std::string &icon) { |
1328 | + m_icon = icon; |
1329 | +} |
1330 | + |
1331 | +const std::string & SoundCloudResult::icon() const { |
1332 | + return m_icon; |
1333 | +} |
1334 | + |
1335 | +void SoundCloudResult::setTitle(const std::string &title) { |
1336 | + m_title = title; |
1337 | +} |
1338 | + |
1339 | +const std::string & SoundCloudResult::title() const { |
1340 | + return m_title; |
1341 | +} |
1342 | + |
1343 | +void SoundCloudResult::setComment(const std::string &comment) { |
1344 | + m_comment = comment; |
1345 | +} |
1346 | + |
1347 | +const std::string & SoundCloudResult::comment() const { |
1348 | + return m_comment; |
1349 | +} |
1350 | + |
1351 | +void SoundCloudResult::setGenre(const std::string &genre) { |
1352 | + m_genre = genre; |
1353 | +} |
1354 | + |
1355 | +const std::string & SoundCloudResult::genre() const { |
1356 | + return m_genre; |
1357 | +} |
1358 | + |
1359 | +void SoundCloudResult::setLabel(const std::string &label) { |
1360 | + m_label = label; |
1361 | +} |
1362 | + |
1363 | +const std::string & SoundCloudResult::label() const { |
1364 | + return m_label; |
1365 | +} |
1366 | + |
1367 | +void SoundCloudResult::setLicense(const std::string &license) { |
1368 | + m_license = license; |
1369 | +} |
1370 | + |
1371 | +const std::string & SoundCloudResult::license() const { |
1372 | + return m_license; |
1373 | +} |
1374 | + |
1375 | +void SoundCloudResult::setStream(const std::string &stream) { |
1376 | + m_stream = stream; |
1377 | +} |
1378 | + |
1379 | +const std::string & SoundCloudResult::stream() const { |
1380 | + return m_stream; |
1381 | +} |
1382 | + |
1383 | +void SoundCloudResult::setDuration(const std::string &duration) { |
1384 | + m_duration = duration; |
1385 | +} |
1386 | + |
1387 | +const std::string & SoundCloudResult::duration() const { |
1388 | + return m_duration; |
1389 | +} |
1390 | + |
1391 | +void SoundCloudResult::setArtist(const std::string &artist) { |
1392 | + m_artist = artist; |
1393 | +} |
1394 | + |
1395 | +const std::string & SoundCloudResult::artist() const { |
1396 | + return m_artist; |
1397 | +} |
1398 | + |
1399 | +void SoundCloudResult::setCreationDate(const std::string &creationDate) { |
1400 | + m_creationDate = creationDate; |
1401 | +} |
1402 | + |
1403 | +const std::string & SoundCloudResult::creationDate() const { |
1404 | + return m_creationDate; |
1405 | +} |
1406 | |
1407 | === added file 'src/SoundCloudResult.h' |
1408 | --- src/SoundCloudResult.h 1970-01-01 00:00:00 +0000 |
1409 | +++ src/SoundCloudResult.h 2013-07-14 08:39:27 +0000 |
1410 | @@ -0,0 +1,98 @@ |
1411 | +/* |
1412 | + * Copyright (C) 2013 Canonical, Ltd. |
1413 | + * |
1414 | + * This program is free software: you can redistribute it and/or modify it |
1415 | + * under the terms of the GNU General Public License version 3, as published |
1416 | + * by the Free Software Foundation. |
1417 | + * |
1418 | + * This program is distributed in the hope that it will be useful, but |
1419 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1420 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1421 | + * PURPOSE. See the GNU General Public License for more details. |
1422 | + * |
1423 | + * You should have received a copy of the GNU General Public License along |
1424 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1425 | + * |
1426 | + * Author: Pete Woods <pete.woods@canonical.com> |
1427 | + */ |
1428 | + |
1429 | +#ifndef SOUNDCLOUDRESULT_H_ |
1430 | +#define SOUNDCLOUDRESULT_H_ |
1431 | + |
1432 | +#include <string> |
1433 | + |
1434 | +class SoundCloudResult { |
1435 | +public: |
1436 | + explicit SoundCloudResult(); |
1437 | + |
1438 | + virtual ~SoundCloudResult(); |
1439 | + |
1440 | + void setUri(const std::string &uri); |
1441 | + |
1442 | + const std::string & uri() const; |
1443 | + |
1444 | + void setIcon(const std::string &icon); |
1445 | + |
1446 | + const std::string & icon() const; |
1447 | + |
1448 | + void setTitle(const std::string &title); |
1449 | + |
1450 | + const std::string & title() const; |
1451 | + |
1452 | + void setComment(const std::string &comment); |
1453 | + |
1454 | + const std::string & comment() const; |
1455 | + |
1456 | + void setGenre(const std::string &genre); |
1457 | + |
1458 | + const std::string & genre() const; |
1459 | + |
1460 | + void setLabel(const std::string &label); |
1461 | + |
1462 | + const std::string & label() const; |
1463 | + |
1464 | + void setLicense(const std::string &license); |
1465 | + |
1466 | + const std::string & license() const; |
1467 | + |
1468 | + void setStream(const std::string &stream); |
1469 | + |
1470 | + const std::string & stream() const; |
1471 | + |
1472 | + void setDuration(const std::string &duration); |
1473 | + |
1474 | + const std::string & duration() const; |
1475 | + |
1476 | + void setArtist(const std::string &artist); |
1477 | + |
1478 | + const std::string & artist() const; |
1479 | + |
1480 | + void setCreationDate(const std::string &creationDate); |
1481 | + |
1482 | + const std::string & creationDate() const; |
1483 | + |
1484 | +protected: |
1485 | + std::string m_uri; |
1486 | + |
1487 | + std::string m_icon; |
1488 | + |
1489 | + std::string m_title; |
1490 | + |
1491 | + std::string m_comment; |
1492 | + |
1493 | + std::string m_genre; |
1494 | + |
1495 | + std::string m_label; |
1496 | + |
1497 | + std::string m_license; |
1498 | + |
1499 | + std::string m_stream; |
1500 | + |
1501 | + std::string m_duration; |
1502 | + |
1503 | + std::string m_artist; |
1504 | + |
1505 | + std::string m_creationDate; |
1506 | +}; |
1507 | + |
1508 | +#endif // SOUNDCLOUDRESULT_H_ |
1509 | |
1510 | === removed file 'src/__init__.py' |
1511 | === added file 'src/config.h.in' |
1512 | --- src/config.h.in 1970-01-01 00:00:00 +0000 |
1513 | +++ src/config.h.in 2013-07-14 08:39:27 +0000 |
1514 | @@ -0,0 +1,31 @@ |
1515 | +/* |
1516 | + * Copyright (C) 2013 Canonical, Ltd. |
1517 | + * |
1518 | + * This program is free software: you can redistribute it and/or modify it |
1519 | + * under the terms of the GNU General Public License version 3, as published |
1520 | + * by the Free Software Foundation. |
1521 | + * |
1522 | + * This program is distributed in the hope that it will be useful, but |
1523 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1524 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1525 | + * PURPOSE. See the GNU General Public License for more details. |
1526 | + * |
1527 | + * You should have received a copy of the GNU General Public License along |
1528 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1529 | + * |
1530 | + * Author: Pete Woods <pete.woods@canonical.com> |
1531 | + */ |
1532 | + |
1533 | +#ifndef __CONFIG_H__ |
1534 | +#define __CONFIG_H__ |
1535 | + |
1536 | +#define GROUP_NAME "@GROUP_NAME@" |
1537 | +#define UNIQUE_NAME "@UNIQUE_NAME@" |
1538 | + |
1539 | +#define CATEGORY_ICON_PATH "@CATEGORY_ICON_PATH@" |
1540 | +#define DEFAULT_ICON_PATH "@DEFAULT_ICON_PATH@" |
1541 | + |
1542 | +#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@" |
1543 | +#define LOCALE_DIR "@LOCALE_DIR@" |
1544 | + |
1545 | +#endif /* __CONFIG_H__ */ |
1546 | |
1547 | === added file 'src/main.cpp' |
1548 | --- src/main.cpp 1970-01-01 00:00:00 +0000 |
1549 | +++ src/main.cpp 2013-07-14 08:39:27 +0000 |
1550 | @@ -0,0 +1,41 @@ |
1551 | +/* |
1552 | + * Copyright (C) 2013 Canonical, Ltd. |
1553 | + * |
1554 | + * This program is free software: you can redistribute it and/or modify it |
1555 | + * under the terms of the GNU General Public License version 3, as published |
1556 | + * by the Free Software Foundation. |
1557 | + * |
1558 | + * This program is distributed in the hope that it will be useful, but |
1559 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1560 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1561 | + * PURPOSE. See the GNU General Public License for more details. |
1562 | + * |
1563 | + * You should have received a copy of the GNU General Public License along |
1564 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1565 | + * |
1566 | + * Author: Pete Woods <pete.woods@canonical.com> |
1567 | + */ |
1568 | + |
1569 | +#include <SoundCloud.h> |
1570 | +#include <config.h> |
1571 | + |
1572 | +#include <libintl.h> |
1573 | +#include <locale.h> |
1574 | +#include <memory> |
1575 | + |
1576 | +#include <QtCore/QCoreApplication> |
1577 | + |
1578 | +using namespace std; |
1579 | + |
1580 | +int main(int argc, char **argv) { |
1581 | + QCoreApplication application(argc, argv); |
1582 | + |
1583 | + setlocale(LC_ALL, ""); |
1584 | + bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); |
1585 | + textdomain(GETTEXT_PACKAGE); |
1586 | + |
1587 | + shared_ptr<Curl> curl(new Curl()); |
1588 | + SoundCloud soundCloud(curl); |
1589 | + |
1590 | + return 0; |
1591 | +} |
1592 | |
1593 | === removed file 'src/unity_soundcloud_daemon.py' |
1594 | --- src/unity_soundcloud_daemon.py 2013-04-26 12:48:36 +0000 |
1595 | +++ src/unity_soundcloud_daemon.py 1970-01-01 00:00:00 +0000 |
1596 | @@ -1,245 +0,0 @@ |
1597 | -#! /usr/bin/python3 |
1598 | -# -*- coding: utf-8 -*- |
1599 | - |
1600 | -# Copyright (C) 2013 David Callé <davidc@framli.eu> |
1601 | -# This program is free software: you can redistribute it and/or modify it |
1602 | -# under the terms of the GNU General Public License version 3, as published |
1603 | -# by the Free Software Foundation. |
1604 | -# |
1605 | -# This program is distributed in the hope that it will be useful, but |
1606 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1607 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1608 | -# PURPOSE. See the GNU General Public License for more details. |
1609 | -# |
1610 | -# You should have received a copy of the GNU General Public License along |
1611 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1612 | - |
1613 | -from gi.repository import Unity, UnityExtras |
1614 | -from gi.repository import Gio, GLib |
1615 | -import urllib.parse |
1616 | -import urllib.request |
1617 | -import json |
1618 | -import gettext |
1619 | - |
1620 | -APP_NAME = 'unity-scope-soundcloud' |
1621 | -LOCAL_PATH = '/usr/share/locale/' |
1622 | -gettext.bindtextdomain(APP_NAME, LOCAL_PATH) |
1623 | -gettext.textdomain(APP_NAME) |
1624 | -_ = gettext.gettext |
1625 | - |
1626 | -GROUP_NAME = 'com.canonical.Unity.Scope.Music.Soundcloud' |
1627 | -UNIQUE_PATH = '/com/canonical/unity/scope/music/soundcloud' |
1628 | -SEARCH_URI = 'https://api.soundcloud.com/' |
1629 | -SEARCH_HINT = _('Search SoundCloud') |
1630 | -API_KEY = '398e83f17ec3c5cf945f04772de9f400' |
1631 | -NO_RESULTS_HINT = _('Sorry, there are no SoundCloud tracks that match your search.') |
1632 | -PROVIDER_CREDITS = _('Powered by SoundCloud') |
1633 | -SVG_DIR = '/usr/share/icons/unity-icon-theme/places/svg/' |
1634 | -PROVIDER_ICON = SVG_DIR+'service-soundcloud.svg' |
1635 | -DEFAULT_RESULT_ICON = SVG_DIR+'result-music.svg' |
1636 | -DEFAULT_RESULT_MIMETYPE = 'text/html' |
1637 | -DEFAULT_RESULT_TYPE = Unity.ResultType.DEFAULT |
1638 | - |
1639 | -c1 = {'id' :'songs', |
1640 | - 'name' :_('Songs'), |
1641 | - 'icon' :SVG_DIR+'group-songs.svg', |
1642 | - 'renderer':Unity.CategoryRenderer.VERTICAL_TILE} |
1643 | -CATEGORIES = [c1] |
1644 | - |
1645 | -FILTERS = [] |
1646 | - |
1647 | -m1 = {'id' :'album', |
1648 | - 'type' :'s', |
1649 | - 'field':Unity.SchemaFieldType.REQUIRED} |
1650 | -m2 = {'id' :'artist', |
1651 | - 'type' :'s', |
1652 | - 'field':Unity.SchemaFieldType.REQUIRED} |
1653 | -m3 = {'id' :'genre', |
1654 | - 'type' :'s', |
1655 | - 'field':Unity.SchemaFieldType.OPTIONAL} |
1656 | -m4 = {'id' :'label', |
1657 | - 'type' :'s', |
1658 | - 'field':Unity.SchemaFieldType.OPTIONAL} |
1659 | -m5 = {'id' :'license', |
1660 | - 'type' :'s', |
1661 | - 'field':Unity.SchemaFieldType.OPTIONAL} |
1662 | -m6 = {'id' :'stream', |
1663 | - 'type' :'s', |
1664 | - 'field':Unity.SchemaFieldType.OPTIONAL} |
1665 | -m7 = {'id' :'duration', |
1666 | - 'type' :'s', |
1667 | - 'field':Unity.SchemaFieldType.OPTIONAL} |
1668 | -EXTRA_METADATA = [m1, m2, m3, m4, m5, m6, m7] |
1669 | - |
1670 | -def search(search, filters): |
1671 | - ''' |
1672 | - Any search method returning results as a list of tuples. |
1673 | - Available tuple fields: |
1674 | - uri (string) |
1675 | - icon (string) |
1676 | - title (string) |
1677 | - comment (string) |
1678 | - dnd_uri (string) |
1679 | - mimetype (string) |
1680 | - category (int) |
1681 | - result_type (Unity ResultType) |
1682 | - extras metadata fields (variant) |
1683 | - ''' |
1684 | - results = [] |
1685 | - if not search: |
1686 | - return results |
1687 | - search = urllib.parse.quote(search) |
1688 | - uri = "%stracks.json?consumer_key=%s&q=%s&order=hotness&limit=30" % (SEARCH_URI, API_KEY, search) |
1689 | - print(uri) |
1690 | - data = [] |
1691 | - try: |
1692 | - response = urllib.request.urlopen(uri).read() |
1693 | - data = json.loads(response.decode('utf8')) |
1694 | - except Exception as error: |
1695 | - print(error) |
1696 | - checks = ['permalink_url', 'artwork_url', |
1697 | - 'title', 'description', 'stream_url', |
1698 | - 'genre', 'label_name', 'license', |
1699 | - 'user', 'duration'] |
1700 | - for r in data: |
1701 | - for c in checks: |
1702 | - if not c in r or not r[c]: |
1703 | - if c == 'artwork_url': |
1704 | - r[c] = r['user']['avatar_url'] |
1705 | - elif c == 'user': |
1706 | - if not r[c]['username']: |
1707 | - r[c]['username'] = '' |
1708 | - else: |
1709 | - r[c] = '' |
1710 | - if 'stream_url' in r and r['stream_url'] != '': |
1711 | - r['stream_url'] = r['stream_url'] + '?consumer_key=%s' % API_KEY |
1712 | - results.append({'uri':r['permalink_url'], |
1713 | - 'icon':r['artwork_url'], |
1714 | - 'title':r['title'], |
1715 | - 'comment':r['description'], |
1716 | - 'album':GLib.Variant('s',''), |
1717 | - 'artist':GLib.Variant('s',r['user']['username']), |
1718 | - 'genre':GLib.Variant('s',r['genre']), |
1719 | - 'label':GLib.Variant('s',r['label_name']), |
1720 | - 'license':GLib.Variant('s',r['license']), |
1721 | - 'stream':GLib.Variant('s',r['stream_url']), |
1722 | - 'duration':GLib.Variant('s',str(r['duration']))}) |
1723 | - return results |
1724 | - |
1725 | - |
1726 | -# Classes below this point establish communication |
1727 | -# with Unity, you probably shouldn't modify them. |
1728 | - |
1729 | - |
1730 | -class MySearch (Unity.ScopeSearchBase): |
1731 | - def __init__(self, search_context): |
1732 | - super (MySearch, self).__init__() |
1733 | - self.set_search_context (search_context) |
1734 | - |
1735 | - def do_run (self): |
1736 | - ''' |
1737 | - Adds results to the model |
1738 | - ''' |
1739 | - try: |
1740 | - result_set = self.search_context.result_set |
1741 | - for i in search(self.search_context.search_query, |
1742 | - self.search_context.filter_state): |
1743 | - if not 'uri' in i or not i['uri'] or i['uri'] == '': |
1744 | - continue |
1745 | - if not 'icon' in i or not i['icon'] or i['icon'] == '': |
1746 | - i['icon'] = DEFAULT_RESULT_ICON |
1747 | - if not 'mimetype' in i or not i['mimetype'] or i['mimetype'] == '': |
1748 | - i['mimetype'] = DEFAULT_RESULT_MIMETYPE |
1749 | - if not 'result_type' in i or not i['result_type'] or i['result_type'] == '': |
1750 | - i['result_type'] = DEFAULT_RESULT_TYPE |
1751 | - if not 'category' in i or not i['category'] or i['category'] == '': |
1752 | - i['category'] = 0 |
1753 | - if not 'title' in i or not i['title']: |
1754 | - i['title'] = '' |
1755 | - if not 'comment' in i or not i['comment']: |
1756 | - i['comment'] = '' |
1757 | - if not 'dnd_uri' in i or not i['dnd_uri'] or i['dnd_uri'] == '': |
1758 | - i['dnd_uri'] = i['uri'] |
1759 | - result_set.add_result(**i) |
1760 | - except Exception as error: |
1761 | - print (error) |
1762 | - |
1763 | -class Preview (Unity.ResultPreviewer): |
1764 | - |
1765 | - def do_run(self): |
1766 | - title = self.result.title.strip() |
1767 | - stream = self.result.metadata['stream'].get_string() |
1768 | - duration = int(self.result.metadata['duration'].get_string()) |
1769 | - author = self.result.metadata['artist'].get_string() |
1770 | - description = self.result.comment.strip() |
1771 | - image = self.result.icon_hint.replace('large.jpg', 'original.jpg') |
1772 | - preview = Unity.MusicPreview.new(title, description, None) |
1773 | - if stream != '': |
1774 | - t = Unity.TrackMetadata.full(stream, 1, title, author, '', duration / 1000) |
1775 | - preview.add_track(t) |
1776 | - preview.props.subtitle = author |
1777 | - preview.props.image_source_uri = image |
1778 | - icon = Gio.FileIcon.new (Gio.file_new_for_path(PROVIDER_ICON)) |
1779 | - view_action = Unity.PreviewAction.new("view", _("SoundCloud"), icon) |
1780 | - preview.add_action(view_action) |
1781 | - return preview |
1782 | - |
1783 | -class Scope (Unity.AbstractScope): |
1784 | - def __init__(self): |
1785 | - Unity.AbstractScope.__init__(self) |
1786 | - |
1787 | - def do_get_search_hint (self): |
1788 | - return SEARCH_HINT |
1789 | - |
1790 | - def do_get_schema (self): |
1791 | - ''' |
1792 | - Adds specific metadata fields |
1793 | - ''' |
1794 | - schema = Unity.Schema.new () |
1795 | - if EXTRA_METADATA: |
1796 | - for m in EXTRA_METADATA: |
1797 | - schema.add_field(m['id'], m['type'], m['field']) |
1798 | - #FIXME should be REQUIRED for credits |
1799 | - schema.add_field('provider_credits', 's', Unity.SchemaFieldType.OPTIONAL) |
1800 | - return schema |
1801 | - |
1802 | - def do_get_categories (self): |
1803 | - ''' |
1804 | - Adds categories |
1805 | - ''' |
1806 | - cs = Unity.CategorySet.new () |
1807 | - if CATEGORIES: |
1808 | - for c in CATEGORIES: |
1809 | - cat = Unity.Category.new (c['id'], c['name'], |
1810 | - Gio.ThemedIcon.new(c['icon']), |
1811 | - c['renderer']) |
1812 | - cs.add (cat) |
1813 | - return cs |
1814 | - |
1815 | - def do_get_filters (self): |
1816 | - ''' |
1817 | - Adds filters |
1818 | - ''' |
1819 | - fs = Unity.FilterSet.new () |
1820 | -# if FILTERS: |
1821 | -# |
1822 | - return fs |
1823 | - |
1824 | - def do_get_group_name (self): |
1825 | - return GROUP_NAME |
1826 | - |
1827 | - def do_get_unique_name (self): |
1828 | - return UNIQUE_PATH |
1829 | - |
1830 | - def do_create_search_for_query (self, search_context): |
1831 | - se = MySearch (search_context) |
1832 | - return se |
1833 | - |
1834 | - def do_create_previewer(self, result, metadata): |
1835 | - rp = Preview() |
1836 | - rp.set_scope_result(result) |
1837 | - rp.set_search_metadata(metadata) |
1838 | - return rp |
1839 | - |
1840 | -def load_scope(): |
1841 | - return Scope() |
1842 | |
1843 | === added file 'tests/CMakeLists.txt' |
1844 | --- tests/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
1845 | +++ tests/CMakeLists.txt 2013-07-14 08:39:27 +0000 |
1846 | @@ -0,0 +1,43 @@ |
1847 | + |
1848 | +include(FindGMock) |
1849 | +include_directories(${GMOCK_INCLUDE_DIRS}) |
1850 | +include_directories(${GTEST_INCLUDE_DIRS}) |
1851 | + |
1852 | +find_package("Valgrind" REQUIRED) |
1853 | + |
1854 | +add_definitions( |
1855 | + -DCURL_DATA_HELLO="${CMAKE_CURRENT_SOURCE_DIR}/data/curl_data_hello" |
1856 | + -DMOCK_SOUNDCLOUD_FAIL="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_fail" |
1857 | + -DMOCK_SOUNDCLOUD_MALFORMED="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_malformed" |
1858 | + -DMOCK_SOUNDCLOUD_PASS="${CMAKE_CURRENT_SOURCE_DIR}/data/mock_soundcloud_pass" |
1859 | +) |
1860 | + |
1861 | +set( |
1862 | + TEST_SOUNDCLOUD_SOURCES |
1863 | + main.cpp |
1864 | + TestCurl.cpp |
1865 | + TestSoundCloudParser.cpp |
1866 | +) |
1867 | + |
1868 | +add_executable( |
1869 | + test-soundcloud |
1870 | + ${TEST_SOUNDCLOUD_SOURCES} |
1871 | +) |
1872 | + |
1873 | +target_link_libraries( |
1874 | + test-soundcloud |
1875 | + soundcloud |
1876 | + ${UNITY_LIBRARIES} |
1877 | + ${GTEST_LIBRARIES} |
1878 | + ${GMOCK_LIBRARIES} |
1879 | +) |
1880 | + |
1881 | +qt5_use_modules( |
1882 | + test-soundcloud |
1883 | + Core |
1884 | +) |
1885 | + |
1886 | +add_valgrind_test( |
1887 | + test-soundcloud |
1888 | + test-soundcloud |
1889 | +) |
1890 | \ No newline at end of file |
1891 | |
1892 | === added file 'tests/TestCurl.cpp' |
1893 | --- tests/TestCurl.cpp 1970-01-01 00:00:00 +0000 |
1894 | +++ tests/TestCurl.cpp 2013-07-14 08:39:27 +0000 |
1895 | @@ -0,0 +1,50 @@ |
1896 | +/* |
1897 | + * Copyright (C) 2013 Canonical, Ltd. |
1898 | + * |
1899 | + * This program is free software: you can redistribute it and/or modify it |
1900 | + * under the terms of the GNU General Public License version 3, as published |
1901 | + * by the Free Software Foundation. |
1902 | + * |
1903 | + * This program is distributed in the hope that it will be useful, but |
1904 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1905 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1906 | + * PURPOSE. See the GNU General Public License for more details. |
1907 | + * |
1908 | + * You should have received a copy of the GNU General Public License along |
1909 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1910 | + * |
1911 | + * Author: Pete Woods <pete.woods@canonical.com> |
1912 | + */ |
1913 | + |
1914 | +#include <SoundCloudParser.h> |
1915 | + |
1916 | +#include <QtCore/QFile> |
1917 | + |
1918 | +#include <gmock/gmock.h> |
1919 | +#include <gtest/gtest.h> |
1920 | + |
1921 | +using namespace std; |
1922 | +using namespace testing; |
1923 | + |
1924 | +namespace { |
1925 | + |
1926 | +class TestCurl: public Test { |
1927 | +protected: |
1928 | + TestCurl() { |
1929 | + } |
1930 | + |
1931 | + virtual ~TestCurl() { |
1932 | + } |
1933 | +}; |
1934 | + |
1935 | +TEST_F(TestCurl, DownloadsFile) { |
1936 | + ostringstream urlStream; |
1937 | + urlStream << "file://" << CURL_DATA_HELLO; |
1938 | + |
1939 | + Curl curl; |
1940 | + QByteArray ba(curl.read(urlStream.str())); |
1941 | + |
1942 | + EXPECT_EQ("Hello!", QString(ba).toStdString()); |
1943 | +} |
1944 | + |
1945 | +} // namespace |
1946 | |
1947 | === added file 'tests/TestSoundCloudParser.cpp' |
1948 | --- tests/TestSoundCloudParser.cpp 1970-01-01 00:00:00 +0000 |
1949 | +++ tests/TestSoundCloudParser.cpp 2013-07-14 08:39:27 +0000 |
1950 | @@ -0,0 +1,158 @@ |
1951 | +/* |
1952 | + * Copyright (C) 2013 Canonical, Ltd. |
1953 | + * |
1954 | + * This program is free software: you can redistribute it and/or modify it |
1955 | + * under the terms of the GNU General Public License version 3, as published |
1956 | + * by the Free Software Foundation. |
1957 | + * |
1958 | + * This program is distributed in the hope that it will be useful, but |
1959 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
1960 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1961 | + * PURPOSE. See the GNU General Public License for more details. |
1962 | + * |
1963 | + * You should have received a copy of the GNU General Public License along |
1964 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
1965 | + * |
1966 | + * Author: Pete Woods <pete.woods@canonical.com> |
1967 | + */ |
1968 | + |
1969 | +#include <SoundCloudParser.h> |
1970 | +#include <config.h> |
1971 | + |
1972 | +#include <QtCore/QFile> |
1973 | + |
1974 | +#include <gmock/gmock.h> |
1975 | +#include <gtest/gtest.h> |
1976 | + |
1977 | +using namespace std; |
1978 | +using namespace testing; |
1979 | + |
1980 | +namespace { |
1981 | + |
1982 | +class MockCurl: public Curl { |
1983 | +public: |
1984 | + MOCK_CONST_METHOD1(read, QByteArray(const string &url)); |
1985 | +}; |
1986 | + |
1987 | +class TestSoundCloudParser: public Test { |
1988 | +protected: |
1989 | + TestSoundCloudParser() { |
1990 | + } |
1991 | + |
1992 | + virtual ~TestSoundCloudParser() { |
1993 | + } |
1994 | +}; |
1995 | + |
1996 | +TEST_F(TestSoundCloudParser, CanReadEmptyXml) { |
1997 | + QFile file(MOCK_SOUNDCLOUD_FAIL); |
1998 | + ASSERT_TRUE(file.open(QIODevice::ReadOnly)); |
1999 | + QByteArray soundCloudFail(file.readAll()); |
2000 | + |
2001 | + shared_ptr<MockCurl> curl(new NiceMock<MockCurl>()); |
2002 | + string expectedUrl( |
2003 | + "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=non-existing-thing&order=hotness&limit=30"); |
2004 | + EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce( |
2005 | + Return(soundCloudFail)); |
2006 | + |
2007 | + SoundCloudParser parser(curl); |
2008 | + deque<SoundCloudResult> results(parser.getResults("non-existing-thing")); |
2009 | + |
2010 | + ASSERT_EQ(0, results.size()); |
2011 | +} |
2012 | + |
2013 | +TEST_F(TestSoundCloudParser, CanReadWellFormattedXml) { |
2014 | + QFile file(MOCK_SOUNDCLOUD_PASS); |
2015 | + ASSERT_TRUE(file.open(QIODevice::ReadOnly)); |
2016 | + QByteArray soundCloudPass(file.readAll()); |
2017 | + |
2018 | + shared_ptr<MockCurl> curl(new NiceMock<MockCurl>()); |
2019 | + string expectedUrl( |
2020 | + "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=submarine&order=hotness&limit=30"); |
2021 | + EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce( |
2022 | + Return(soundCloudPass)); |
2023 | + |
2024 | + SoundCloudParser parser(curl); |
2025 | + deque<SoundCloudResult> results(parser.getResults("submarine")); |
2026 | + |
2027 | + ASSERT_EQ(30, results.size()); |
2028 | + |
2029 | + // check a basic node |
2030 | + { |
2031 | + SoundCloudResult &result(results[0]); |
2032 | + EXPECT_EQ("johnmayer", result.artist()); |
2033 | + EXPECT_EQ("", result.comment()); |
2034 | + EXPECT_EQ("2012-05-15T20:39:54Z", result.creationDate()); |
2035 | + EXPECT_EQ("308230", result.duration()); |
2036 | + EXPECT_EQ("", result.genre()); |
2037 | + EXPECT_EQ("", result.icon()); |
2038 | + EXPECT_EQ("", result.label()); |
2039 | + EXPECT_EQ("all-rights-reserved", result.license()); |
2040 | + EXPECT_EQ("https://api.soundcloud.com/tracks/46495820/stream", |
2041 | + result.stream()); |
2042 | + EXPECT_EQ("Walt Grace's Submarine Test, January 1967", result.title()); |
2043 | + EXPECT_EQ("http://soundcloud.com/johnmayer/walt-graces-submarine-test", |
2044 | + result.uri()); |
2045 | + } |
2046 | + |
2047 | + // this one has a created-with subnode - check we skip it |
2048 | + { |
2049 | + SoundCloudResult &result(results[3]); |
2050 | + EXPECT_EQ("joesallesdrums", result.artist()); |
2051 | + EXPECT_EQ("", result.comment()); |
2052 | + EXPECT_EQ("2013-07-11T19:18:55Z", result.creationDate()); |
2053 | + EXPECT_EQ("248263", result.duration()); |
2054 | + EXPECT_EQ("", result.genre()); |
2055 | + EXPECT_EQ("", result.icon()); |
2056 | + EXPECT_EQ("", result.label()); |
2057 | + EXPECT_EQ("all-rights-reserved", result.license()); |
2058 | + EXPECT_EQ("https://api.soundcloud.com/tracks/100646268/stream", |
2059 | + result.stream()); |
2060 | + EXPECT_EQ("Submarine IDGAF version", result.title()); |
2061 | + EXPECT_EQ( |
2062 | + "http://soundcloud.com/joesallesdrums/submarine-idgaf-version", |
2063 | + result.uri()); |
2064 | + } |
2065 | + |
2066 | + // this one has a created-with subnode - check we skip it |
2067 | + { |
2068 | + SoundCloudResult &result(results[28]); |
2069 | + EXPECT_EQ("submarine", result.artist()); |
2070 | + EXPECT_EQ( |
2071 | + "Den hemliga trädgården in Stockholm with Wikicong/Tikicong and Dj Rupture on squeky island", |
2072 | + result.comment()); |
2073 | + EXPECT_EQ("2010-08-15T18:47:22Z", result.creationDate()); |
2074 | + EXPECT_EQ("1148179", result.duration()); |
2075 | + EXPECT_EQ("tropical", result.genre()); |
2076 | + EXPECT_EQ( |
2077 | + "https://i1.sndcdn.com/artworks-000002102568-87lu6v-large.jpg?cc07a88", |
2078 | + result.icon()); |
2079 | + EXPECT_EQ("KIM", result.label()); |
2080 | + EXPECT_EQ("no-rights-reserved", result.license()); |
2081 | + EXPECT_EQ("https://api.soundcloud.com/tracks/4627335/stream", |
2082 | + result.stream()); |
2083 | + EXPECT_EQ("KAPITAL.IDENTITĂ„T.MACKT.VIER", result.title()); |
2084 | + EXPECT_EQ( |
2085 | + "http://soundcloud.com/submarine/kapital-identitat-mackt-vier", |
2086 | + result.uri()); |
2087 | + } |
2088 | +} |
2089 | + |
2090 | +TEST_F(TestSoundCloudParser, HandlesMalformedXml) { |
2091 | + QFile file(MOCK_SOUNDCLOUD_MALFORMED); |
2092 | + ASSERT_TRUE(file.open(QIODevice::ReadOnly)); |
2093 | + QByteArray soundCloudMalformed(file.readAll()); |
2094 | + |
2095 | + shared_ptr<MockCurl> curl(new NiceMock<MockCurl>()); |
2096 | + string expectedUrl( |
2097 | + "https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&q=malformed&order=hotness&limit=30"); |
2098 | + EXPECT_CALL(*curl, read(StrEq(expectedUrl))).Times(1).WillOnce( |
2099 | + Return(soundCloudMalformed)); |
2100 | + |
2101 | + SoundCloudParser parser(curl); |
2102 | + deque<SoundCloudResult> results(parser.getResults("malformed")); |
2103 | + |
2104 | + // The parser should have dropped the 4th result |
2105 | + ASSERT_EQ(3, results.size()); |
2106 | +} |
2107 | + |
2108 | +} // namespace |
2109 | |
2110 | === added file 'tests/data/curl_data_hello' |
2111 | --- tests/data/curl_data_hello 1970-01-01 00:00:00 +0000 |
2112 | +++ tests/data/curl_data_hello 2013-07-14 08:39:27 +0000 |
2113 | @@ -0,0 +1,1 @@ |
2114 | +Hello! |
2115 | \ No newline at end of file |
2116 | |
2117 | === modified file 'tests/data/mock_soundcloud_fail' |
2118 | --- tests/data/mock_soundcloud_fail 2013-01-16 18:29:15 +0000 |
2119 | +++ tests/data/mock_soundcloud_fail 2013-07-14 08:39:27 +0000 |
2120 | @@ -1,1 +1,2 @@ |
2121 | -<o_o> |
2122 | +<?xml version="1.0" encoding="UTF-8"?> |
2123 | +<tracks type="array"/> |
2124 | |
2125 | === added file 'tests/data/mock_soundcloud_malformed' |
2126 | --- tests/data/mock_soundcloud_malformed 1970-01-01 00:00:00 +0000 |
2127 | +++ tests/data/mock_soundcloud_malformed 2013-07-14 08:39:27 +0000 |
2128 | @@ -0,0 +1,177 @@ |
2129 | +<?xml version="1.0" encoding="UTF-8"?> |
2130 | +<tracks next-href="https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&limit=30&offset=30&order=hotness&q=submarine" type="array"> |
2131 | + <track> |
2132 | + <kind>track</kind> |
2133 | + <id type="integer">46495820</id> |
2134 | + <created-at type="datetime">2012-05-15T20:39:54Z</created-at> |
2135 | + <user-id type="integer">2303663</user-id> |
2136 | + <duration type="integer">308230</duration> |
2137 | + <commentable type="boolean">false</commentable> |
2138 | + <state>finished</state> |
2139 | + <original-content-size type="integer">12322884</original-content-size> |
2140 | + <sharing>public</sharing> |
2141 | + <tag-list></tag-list> |
2142 | + <permalink>walt-graces-submarine-test</permalink> |
2143 | + <streamable type="boolean">true</streamable> |
2144 | + <embeddable-by>all</embeddable-by> |
2145 | + <downloadable type="boolean">false</downloadable> |
2146 | + <purchase-url nil="true"></purchase-url> |
2147 | + <label-id nil="true"></label-id> |
2148 | + <purchase-title nil="true"></purchase-title> |
2149 | + <genre></genre> |
2150 | + <title>Walt Grace's Submarine Test, January 1967</title> |
2151 | + <description></description> |
2152 | + <label-name></label-name> |
2153 | + <release></release> |
2154 | + <track-type></track-type> |
2155 | + <key-signature></key-signature> |
2156 | + <isrc></isrc> |
2157 | + <video-url nil="true"></video-url> |
2158 | + <bpm nil="true"></bpm> |
2159 | + <release-year nil="true"></release-year> |
2160 | + <release-month nil="true"></release-month> |
2161 | + <release-day nil="true"></release-day> |
2162 | + <original-format>mp3</original-format> |
2163 | + <license>all-rights-reserved</license> |
2164 | + <uri>https://api.soundcloud.com/tracks/46495820</uri> |
2165 | + <user> |
2166 | + <id type="integer">2303663</id> |
2167 | + <kind>user</kind> |
2168 | + <permalink>johnmayer</permalink> |
2169 | + <username>johnmayer</username> |
2170 | + <uri>https://api.soundcloud.com/users/2303663</uri> |
2171 | + <permalink-url>http://soundcloud.com/johnmayer</permalink-url> |
2172 | + <avatar-url>https://i1.sndcdn.com/avatars-000015302931-dlue9y-large.jpg?cc07a88</avatar-url> |
2173 | + </user> |
2174 | + <permalink-url>http://soundcloud.com/johnmayer/walt-graces-submarine-test</permalink-url> |
2175 | + <artwork-url nil="true"></artwork-url> |
2176 | + <waveform-url>https://w1.sndcdn.com/P5WJmgx408ju_m.png</waveform-url> |
2177 | + <stream-url>https://api.soundcloud.com/tracks/46495820/stream</stream-url> |
2178 | + <attachments-uri>https://api.soundcloud.com/tracks/46495820/attachments</attachments-uri> |
2179 | + </track> |
2180 | + <track> |
2181 | + <kind>track</kind> |
2182 | + <id type="integer">99743581</id> |
2183 | + <created-at type="datetime">2013-07-05T03:24:05Z</created-at> |
2184 | + <user-id type="integer">50203203</user-id> |
2185 | + <duration type="integer">223550</duration> |
2186 | + <commentable type="boolean">true</commentable> |
2187 | + <state>finished</state> |
2188 | + <original-content-size type="integer">8950433</original-content-size> |
2189 | + <sharing>public</sharing> |
2190 | + <tag-list></tag-list> |
2191 | + <permalink>submarine</permalink> |
2192 | + <streamable type="boolean">true</streamable> |
2193 | + <embeddable-by>all</embeddable-by> |
2194 | + <downloadable type="boolean">false</downloadable> |
2195 | + <purchase-url nil="true"></purchase-url> |
2196 | + <label-id nil="true"></label-id> |
2197 | + <purchase-title nil="true"></purchase-title> |
2198 | + <genre>Underwater</genre> |
2199 | + <title>Submarine - Submarines</title> |
2200 | + <description>DEMO recording from our fourth rehersal. Recorded at Irene studios June 2013. |
2201 | +http://www.facebook.com/pages/Submarines/613462528665489</description> |
2202 | + <label-name></label-name> |
2203 | + <release></release> |
2204 | + <track-type>demo</track-type> |
2205 | + <key-signature></key-signature> |
2206 | + <isrc></isrc> |
2207 | + <video-url nil="true"></video-url> |
2208 | + <bpm nil="true"></bpm> |
2209 | + <release-year nil="true"></release-year> |
2210 | + <release-month nil="true"></release-month> |
2211 | + <release-day nil="true"></release-day> |
2212 | + <original-format>mp3</original-format> |
2213 | + <license>all-rights-reserved</license> |
2214 | + <uri>https://api.soundcloud.com/tracks/99743581</uri> |
2215 | + <user> |
2216 | + <id type="integer">50203203</id> |
2217 | + <kind>user</kind> |
2218 | + <permalink>submarinesband</permalink> |
2219 | + <username>SubmarinesBand</username> |
2220 | + <uri>https://api.soundcloud.com/users/50203203</uri> |
2221 | + <permalink-url>http://soundcloud.com/submarinesband</permalink-url> |
2222 | + <avatar-url>https://i1.sndcdn.com/avatars-000046620261-yfvce6-large.jpg?cc07a88</avatar-url> |
2223 | + </user> |
2224 | + <permalink-url>http://soundcloud.com/submarinesband/submarine</permalink-url> |
2225 | + <artwork-url>https://i1.sndcdn.com/artworks-000052204608-okdvk3-large.jpg?cc07a88</artwork-url> |
2226 | + <waveform-url>https://w1.sndcdn.com/p0vnPSt9Kcbe_m.png</waveform-url> |
2227 | + <stream-url>https://api.soundcloud.com/tracks/99743581/stream</stream-url> |
2228 | + <playback-count type="integer">110</playback-count> |
2229 | + <download-count type="integer">0</download-count> |
2230 | + <favoritings-count type="integer">3</favoritings-count> |
2231 | + <comment-count type="integer">1</comment-count> |
2232 | + <attachments-uri>https://api.soundcloud.com/tracks/99743581/attachments</attachments-uri> |
2233 | + </track> |
2234 | + <track> |
2235 | + <kind>track</kind> |
2236 | + <id type="integer">98612674</id> |
2237 | + <created-at type="datetime">2013-06-27T00:31:34Z</created-at> |
2238 | + <user-id type="integer">4311696</user-id> |
2239 | + <duration type="integer">302081</duration> |
2240 | + <commentable type="boolean">true</commentable> |
2241 | + <state>finished</state> |
2242 | + <original-content-size type="integer">53277180</original-content-size> |
2243 | + <sharing>public</sharing> |
2244 | + <tag-list>"bad taste records" "the nameless city" "dusted wax kingdom"</tag-list> |
2245 | + <permalink>submarine-city</permalink> |
2246 | + <streamable type="boolean">true</streamable> |
2247 | + <embeddable-by>all</embeddable-by> |
2248 | + <downloadable type="boolean">false</downloadable> |
2249 | + <purchase-url nil="true"></purchase-url> |
2250 | + <label-id nil="true"></label-id> |
2251 | + <purchase-title nil="true"></purchase-title> |
2252 | + <genre>Instrumental Hiphop</genre> |
2253 | + <title>Submarine City</title> |
2254 | + <description>http://thirdpersonlurkin.bandcamp.com/</description> |
2255 | + <label-name></label-name> |
2256 | + <release></release> |
2257 | + <track-type></track-type> |
2258 | + <key-signature></key-signature> |
2259 | + <isrc></isrc> |
2260 | + <video-url nil="true"></video-url> |
2261 | + <bpm nil="true"></bpm> |
2262 | + <release-year nil="true"></release-year> |
2263 | + <release-month nil="true"></release-month> |
2264 | + <release-day nil="true"></release-day> |
2265 | + <original-format>wav</original-format> |
2266 | + <license>all-rights-reserved</license> |
2267 | + <uri>https://api.soundcloud.com/tracks/98612674</uri> |
2268 | + <user> |
2269 | + <id type="integer">4311696</id> |
2270 | + <kind>user</kind> |
2271 | + <permalink>thirdpersonlurkin</permalink> |
2272 | + <username>Third Person Lurkin</username> |
2273 | + <uri>https://api.soundcloud.com/users/4311696</uri> |
2274 | + <permalink-url>http://soundcloud.com/thirdpersonlurkin</permalink-url> |
2275 | + <avatar-url>https://i1.sndcdn.com/avatars-000046311415-gugiy8-large.jpg?cc07a88</avatar-url> |
2276 | + </user> |
2277 | + <permalink-url>http://soundcloud.com/thirdpersonlurkin/submarine-city</permalink-url> |
2278 | + <artwork-url>https://i1.sndcdn.com/artworks-000051575400-x2qtba-large.jpg?cc07a88</artwork-url> |
2279 | + <waveform-url>https://w1.sndcdn.com/Go6PTpPCGu1x_m.png</waveform-url> |
2280 | + <stream-url>https://api.soundcloud.com/tracks/98612674/stream</stream-url> |
2281 | + <playback-count type="integer">217</playback-count> |
2282 | + <download-count type="integer">0</download-count> |
2283 | + <favoritings-count type="integer">18</favoritings-count> |
2284 | + <comment-count type="integer">4</comment-count> |
2285 | + <attachments-uri>https://api.soundcloud.com/tracks/98612674/attachments</attachments-uri> |
2286 | + </track> |
2287 | + <track> |
2288 | + <kind>track</kind> |
2289 | + <id type="integer">100646268</id> |
2290 | + <created-at type="datetime">2013-07-11T19:18:55Z</created-at> |
2291 | + <user-id type="integer">26044098</user-id> |
2292 | + <duration type="integer">248263</duration> |
2293 | + <commentable type="boolean">true</commentable> |
2294 | + <state>finished</state> |
2295 | + <original-content-size type="integer">43778092</original-content-size> |
2296 | + <sharing>public</sharing> |
2297 | + <tag-list>soundcloud:source=android-3rdparty-upload</tag-list> |
2298 | + <permalink>submarine-idgaf-version</permalink> |
2299 | + <streamable type="boolean">true</streamable> |
2300 | + <embeddable-by>all</embeddable-by> |
2301 | + <downloadable type="boolean">false</downloadable> |
2302 | + <purchase-url nil="true"></purchase-url> |
2303 | + <label-id nil="true"></label-id> |
2304 | + <purchase-title nil="true"></purchase-title> |
2305 | + <genre nil="true"></genre> |
2306 | \ No newline at end of file |
2307 | |
2308 | === modified file 'tests/data/mock_soundcloud_pass' |
2309 | --- tests/data/mock_soundcloud_pass 2013-01-16 18:29:15 +0000 |
2310 | +++ tests/data/mock_soundcloud_pass 2013-07-14 08:39:27 +0000 |
2311 | @@ -1,1 +1,1639 @@ |
2312 | -[{"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"}] |
2313 | +<?xml version="1.0" encoding="UTF-8"?> |
2314 | +<tracks next-href="https://api.soundcloud.com/tracks?consumer_key=398e83f17ec3c5cf945f04772de9f400&limit=30&offset=30&order=hotness&q=submarine" type="array"> |
2315 | + <track> |
2316 | + <kind>track</kind> |
2317 | + <id type="integer">46495820</id> |
2318 | + <created-at type="datetime">2012-05-15T20:39:54Z</created-at> |
2319 | + <user-id type="integer">2303663</user-id> |
2320 | + <duration type="integer">308230</duration> |
2321 | + <commentable type="boolean">false</commentable> |
2322 | + <state>finished</state> |
2323 | + <original-content-size type="integer">12322884</original-content-size> |
2324 | + <sharing>public</sharing> |
2325 | + <tag-list></tag-list> |
2326 | + <permalink>walt-graces-submarine-test</permalink> |
2327 | + <streamable type="boolean">true</streamable> |
2328 | + <embeddable-by>all</embeddable-by> |
2329 | + <downloadable type="boolean">false</downloadable> |
2330 | + <purchase-url nil="true"></purchase-url> |
2331 | + <label-id nil="true"></label-id> |
2332 | + <purchase-title nil="true"></purchase-title> |
2333 | + <genre></genre> |
2334 | + <title>Walt Grace's Submarine Test, January 1967</title> |
2335 | + <description></description> |
2336 | + <label-name></label-name> |
2337 | + <release></release> |
2338 | + <track-type></track-type> |
2339 | + <key-signature></key-signature> |
2340 | + <isrc></isrc> |
2341 | + <video-url nil="true"></video-url> |
2342 | + <bpm nil="true"></bpm> |
2343 | + <release-year nil="true"></release-year> |
2344 | + <release-month nil="true"></release-month> |
2345 | + <release-day nil="true"></release-day> |
2346 | + <original-format>mp3</original-format> |
2347 | + <license>all-rights-reserved</license> |
2348 | + <uri>https://api.soundcloud.com/tracks/46495820</uri> |
2349 | + <user> |
2350 | + <id type="integer">2303663</id> |
2351 | + <kind>user</kind> |
2352 | + <permalink>johnmayer</permalink> |
2353 | + <username>johnmayer</username> |
2354 | + <uri>https://api.soundcloud.com/users/2303663</uri> |
2355 | + <permalink-url>http://soundcloud.com/johnmayer</permalink-url> |
2356 | + <avatar-url>https://i1.sndcdn.com/avatars-000015302931-dlue9y-large.jpg?cc07a88</avatar-url> |
2357 | + </user> |
2358 | + <permalink-url>http://soundcloud.com/johnmayer/walt-graces-submarine-test</permalink-url> |
2359 | + <artwork-url nil="true"></artwork-url> |
2360 | + <waveform-url>https://w1.sndcdn.com/P5WJmgx408ju_m.png</waveform-url> |
2361 | + <stream-url>https://api.soundcloud.com/tracks/46495820/stream</stream-url> |
2362 | + <attachments-uri>https://api.soundcloud.com/tracks/46495820/attachments</attachments-uri> |
2363 | + </track> |
2364 | + <track> |
2365 | + <kind>track</kind> |
2366 | + <id type="integer">99743581</id> |
2367 | + <created-at type="datetime">2013-07-05T03:24:05Z</created-at> |
2368 | + <user-id type="integer">50203203</user-id> |
2369 | + <duration type="integer">223550</duration> |
2370 | + <commentable type="boolean">true</commentable> |
2371 | + <state>finished</state> |
2372 | + <original-content-size type="integer">8950433</original-content-size> |
2373 | + <sharing>public</sharing> |
2374 | + <tag-list></tag-list> |
2375 | + <permalink>submarine</permalink> |
2376 | + <streamable type="boolean">true</streamable> |
2377 | + <embeddable-by>all</embeddable-by> |
2378 | + <downloadable type="boolean">false</downloadable> |
2379 | + <purchase-url nil="true"></purchase-url> |
2380 | + <label-id nil="true"></label-id> |
2381 | + <purchase-title nil="true"></purchase-title> |
2382 | + <genre>Underwater</genre> |
2383 | + <title>Submarine - Submarines</title> |
2384 | + <description>DEMO recording from our fourth rehersal. Recorded at Irene studios June 2013. |
2385 | +http://www.facebook.com/pages/Submarines/613462528665489</description> |
2386 | + <label-name></label-name> |
2387 | + <release></release> |
2388 | + <track-type>demo</track-type> |
2389 | + <key-signature></key-signature> |
2390 | + <isrc></isrc> |
2391 | + <video-url nil="true"></video-url> |
2392 | + <bpm nil="true"></bpm> |
2393 | + <release-year nil="true"></release-year> |
2394 | + <release-month nil="true"></release-month> |
2395 | + <release-day nil="true"></release-day> |
2396 | + <original-format>mp3</original-format> |
2397 | + <license>all-rights-reserved</license> |
2398 | + <uri>https://api.soundcloud.com/tracks/99743581</uri> |
2399 | + <user> |
2400 | + <id type="integer">50203203</id> |
2401 | + <kind>user</kind> |
2402 | + <permalink>submarinesband</permalink> |
2403 | + <username>SubmarinesBand</username> |
2404 | + <uri>https://api.soundcloud.com/users/50203203</uri> |
2405 | + <permalink-url>http://soundcloud.com/submarinesband</permalink-url> |
2406 | + <avatar-url>https://i1.sndcdn.com/avatars-000046620261-yfvce6-large.jpg?cc07a88</avatar-url> |
2407 | + </user> |
2408 | + <permalink-url>http://soundcloud.com/submarinesband/submarine</permalink-url> |
2409 | + <artwork-url>https://i1.sndcdn.com/artworks-000052204608-okdvk3-large.jpg?cc07a88</artwork-url> |
2410 | + <waveform-url>https://w1.sndcdn.com/p0vnPSt9Kcbe_m.png</waveform-url> |
2411 | + <stream-url>https://api.soundcloud.com/tracks/99743581/stream</stream-url> |
2412 | + <playback-count type="integer">110</playback-count> |
2413 | + <download-count type="integer">0</download-count> |
2414 | + <favoritings-count type="integer">3</favoritings-count> |
2415 | + <comment-count type="integer">1</comment-count> |
2416 | + <attachments-uri>https://api.soundcloud.com/tracks/99743581/attachments</attachments-uri> |
2417 | + </track> |
2418 | + <track> |
2419 | + <kind>track</kind> |
2420 | + <id type="integer">98612674</id> |
2421 | + <created-at type="datetime">2013-06-27T00:31:34Z</created-at> |
2422 | + <user-id type="integer">4311696</user-id> |
2423 | + <duration type="integer">302081</duration> |
2424 | + <commentable type="boolean">true</commentable> |
2425 | + <state>finished</state> |
2426 | + <original-content-size type="integer">53277180</original-content-size> |
2427 | + <sharing>public</sharing> |
2428 | + <tag-list>"bad taste records" "the nameless city" "dusted wax kingdom"</tag-list> |
2429 | + <permalink>submarine-city</permalink> |
2430 | + <streamable type="boolean">true</streamable> |
2431 | + <embeddable-by>all</embeddable-by> |
2432 | + <downloadable type="boolean">false</downloadable> |
2433 | + <purchase-url nil="true"></purchase-url> |
2434 | + <label-id nil="true"></label-id> |
2435 | + <purchase-title nil="true"></purchase-title> |
2436 | + <genre>Instrumental Hiphop</genre> |
2437 | + <title>Submarine City</title> |
2438 | + <description>http://thirdpersonlurkin.bandcamp.com/</description> |
2439 | + <label-name></label-name> |
2440 | + <release></release> |
2441 | + <track-type></track-type> |
2442 | + <key-signature></key-signature> |
2443 | + <isrc></isrc> |
2444 | + <video-url nil="true"></video-url> |
2445 | + <bpm nil="true"></bpm> |
2446 | + <release-year nil="true"></release-year> |
2447 | + <release-month nil="true"></release-month> |
2448 | + <release-day nil="true"></release-day> |
2449 | + <original-format>wav</original-format> |
2450 | + <license>all-rights-reserved</license> |
2451 | + <uri>https://api.soundcloud.com/tracks/98612674</uri> |
2452 | + <user> |
2453 | + <id type="integer">4311696</id> |
2454 | + <kind>user</kind> |
2455 | + <permalink>thirdpersonlurkin</permalink> |
2456 | + <username>Third Person Lurkin</username> |
2457 | + <uri>https://api.soundcloud.com/users/4311696</uri> |
2458 | + <permalink-url>http://soundcloud.com/thirdpersonlurkin</permalink-url> |
2459 | + <avatar-url>https://i1.sndcdn.com/avatars-000046311415-gugiy8-large.jpg?cc07a88</avatar-url> |
2460 | + </user> |
2461 | + <permalink-url>http://soundcloud.com/thirdpersonlurkin/submarine-city</permalink-url> |
2462 | + <artwork-url>https://i1.sndcdn.com/artworks-000051575400-x2qtba-large.jpg?cc07a88</artwork-url> |
2463 | + <waveform-url>https://w1.sndcdn.com/Go6PTpPCGu1x_m.png</waveform-url> |
2464 | + <stream-url>https://api.soundcloud.com/tracks/98612674/stream</stream-url> |
2465 | + <playback-count type="integer">217</playback-count> |
2466 | + <download-count type="integer">0</download-count> |
2467 | + <favoritings-count type="integer">18</favoritings-count> |
2468 | + <comment-count type="integer">4</comment-count> |
2469 | + <attachments-uri>https://api.soundcloud.com/tracks/98612674/attachments</attachments-uri> |
2470 | + </track> |
2471 | + <track> |
2472 | + <kind>track</kind> |
2473 | + <id type="integer">100646268</id> |
2474 | + <created-at type="datetime">2013-07-11T19:18:55Z</created-at> |
2475 | + <user-id type="integer">26044098</user-id> |
2476 | + <duration type="integer">248263</duration> |
2477 | + <commentable type="boolean">true</commentable> |
2478 | + <state>finished</state> |
2479 | + <original-content-size type="integer">43778092</original-content-size> |
2480 | + <sharing>public</sharing> |
2481 | + <tag-list>soundcloud:source=android-3rdparty-upload</tag-list> |
2482 | + <permalink>submarine-idgaf-version</permalink> |
2483 | + <streamable type="boolean">true</streamable> |
2484 | + <embeddable-by>all</embeddable-by> |
2485 | + <downloadable type="boolean">false</downloadable> |
2486 | + <purchase-url nil="true"></purchase-url> |
2487 | + <label-id nil="true"></label-id> |
2488 | + <purchase-title nil="true"></purchase-title> |
2489 | + <genre nil="true"></genre> |
2490 | + <title>Submarine IDGAF version</title> |
2491 | + <description nil="true"></description> |
2492 | + <label-name nil="true"></label-name> |
2493 | + <release nil="true"></release> |
2494 | + <track-type>recording</track-type> |
2495 | + <key-signature nil="true"></key-signature> |
2496 | + <isrc nil="true"></isrc> |
2497 | + <video-url nil="true"></video-url> |
2498 | + <bpm nil="true"></bpm> |
2499 | + <release-year nil="true"></release-year> |
2500 | + <release-month nil="true"></release-month> |
2501 | + <release-day nil="true"></release-day> |
2502 | + <original-format>wav</original-format> |
2503 | + <license>all-rights-reserved</license> |
2504 | + <uri>https://api.soundcloud.com/tracks/100646268</uri> |
2505 | + <user> |
2506 | + <id type="integer">26044098</id> |
2507 | + <kind>user</kind> |
2508 | + <permalink>joesallesdrums</permalink> |
2509 | + <username>joesallesdrums</username> |
2510 | + <uri>https://api.soundcloud.com/users/26044098</uri> |
2511 | + <permalink-url>http://soundcloud.com/joesallesdrums</permalink-url> |
2512 | + <avatar-url>https://i1.sndcdn.com/avatars-000038450579-izkkv4-large.jpg?cc07a88</avatar-url> |
2513 | + </user> |
2514 | + <created-with> |
2515 | + <id type="integer">3152</id> |
2516 | + <kind>app</kind> |
2517 | + <name>SoundCloud Android</name> |
2518 | + <uri>https://api.soundcloud.com/apps/3152</uri> |
2519 | + <permalink-url>http://soundcloud.com/apps/android</permalink-url> |
2520 | + <external-url>https://market.android.com/details?id=com.soundcloud.android</external-url> |
2521 | + </created-with> |
2522 | + <permalink-url>http://soundcloud.com/joesallesdrums/submarine-idgaf-version</permalink-url> |
2523 | + <artwork-url nil="true"></artwork-url> |
2524 | + <waveform-url>https://w1.sndcdn.com/1o8Qqh6PbBmW_m.png</waveform-url> |
2525 | + <stream-url>https://api.soundcloud.com/tracks/100646268/stream</stream-url> |
2526 | + <playback-count type="integer">8</playback-count> |
2527 | + <download-count type="integer">0</download-count> |
2528 | + <favoritings-count type="integer">1</favoritings-count> |
2529 | + <comment-count type="integer">0</comment-count> |
2530 | + <attachments-uri>https://api.soundcloud.com/tracks/100646268/attachments</attachments-uri> |
2531 | + </track> |
2532 | + <track> |
2533 | + <kind>track</kind> |
2534 | + <id type="integer">8241719</id> |
2535 | + <created-at type="datetime">2010-12-20T11:35:25Z</created-at> |
2536 | + <user-id type="integer">2393625</user-id> |
2537 | + <duration type="integer">270782</duration> |
2538 | + <commentable type="boolean">true</commentable> |
2539 | + <state>finished</state> |
2540 | + <original-content-size type="integer">6497220</original-content-size> |
2541 | + <sharing>public</sharing> |
2542 | + <tag-list></tag-list> |
2543 | + <permalink>la-move-for-repulica</permalink> |
2544 | + <streamable type="boolean">true</streamable> |
2545 | + <embeddable-by>all</embeddable-by> |
2546 | + <downloadable type="boolean">true</downloadable> |
2547 | + <purchase-url nil="true"></purchase-url> |
2548 | + <label-id nil="true"></label-id> |
2549 | + <purchase-title nil="true"></purchase-title> |
2550 | + <genre></genre> |
2551 | + <title>LA - Move for Repulica</title> |
2552 | + <description>Cheesey but musically it works...</description> |
2553 | + <label-name></label-name> |
2554 | + <release></release> |
2555 | + <track-type></track-type> |
2556 | + <key-signature></key-signature> |
2557 | + <isrc></isrc> |
2558 | + <video-url nil="true"></video-url> |
2559 | + <bpm nil="true"></bpm> |
2560 | + <release-year nil="true"></release-year> |
2561 | + <release-month nil="true"></release-month> |
2562 | + <release-day nil="true"></release-day> |
2563 | + <original-format>mp3</original-format> |
2564 | + <license>all-rights-reserved</license> |
2565 | + <uri>https://api.soundcloud.com/tracks/8241719</uri> |
2566 | + <user> |
2567 | + <id type="integer">2393625</id> |
2568 | + <kind>user</kind> |
2569 | + <permalink>submarine-1</permalink> |
2570 | + <username>Submarine</username> |
2571 | + <uri>https://api.soundcloud.com/users/2393625</uri> |
2572 | + <permalink-url>http://soundcloud.com/submarine-1</permalink-url> |
2573 | + <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url> |
2574 | + </user> |
2575 | + <permalink-url>http://soundcloud.com/submarine-1/la-move-for-repulica</permalink-url> |
2576 | + <artwork-url nil="true"></artwork-url> |
2577 | + <waveform-url>https://w1.sndcdn.com/bdEHCyvZZpJ6_m.png</waveform-url> |
2578 | + <stream-url>https://api.soundcloud.com/tracks/8241719/stream</stream-url> |
2579 | + <download-url>https://api.soundcloud.com/tracks/8241719/download</download-url> |
2580 | + <playback-count type="integer">23</playback-count> |
2581 | + <download-count type="integer">3</download-count> |
2582 | + <favoritings-count type="integer">0</favoritings-count> |
2583 | + <comment-count type="integer">0</comment-count> |
2584 | + <attachments-uri>https://api.soundcloud.com/tracks/8241719/attachments</attachments-uri> |
2585 | + </track> |
2586 | + <track> |
2587 | + <kind>track</kind> |
2588 | + <id type="integer">97175058</id> |
2589 | + <created-at type="datetime">2013-06-16T21:50:00Z</created-at> |
2590 | + <user-id type="integer">1397546</user-id> |
2591 | + <duration type="integer">54339</duration> |
2592 | + <commentable type="boolean">true</commentable> |
2593 | + <state>finished</state> |
2594 | + <original-content-size type="integer">19143776</original-content-size> |
2595 | + <sharing>public</sharing> |
2596 | + <tag-list></tag-list> |
2597 | + <permalink>fc2</permalink> |
2598 | + <streamable type="boolean">true</streamable> |
2599 | + <embeddable-by>all</embeddable-by> |
2600 | + <downloadable type="boolean">false</downloadable> |
2601 | + <purchase-url nil="true"></purchase-url> |
2602 | + <label-id nil="true"></label-id> |
2603 | + <purchase-title nil="true"></purchase-title> |
2604 | + <genre></genre> |
2605 | + <title>Fc2</title> |
2606 | + <description></description> |
2607 | + <label-name></label-name> |
2608 | + <release></release> |
2609 | + <track-type></track-type> |
2610 | + <key-signature></key-signature> |
2611 | + <isrc></isrc> |
2612 | + <video-url nil="true"></video-url> |
2613 | + <bpm nil="true"></bpm> |
2614 | + <release-year nil="true"></release-year> |
2615 | + <release-month nil="true"></release-month> |
2616 | + <release-day nil="true"></release-day> |
2617 | + <original-format>wav</original-format> |
2618 | + <license>cc-by</license> |
2619 | + <uri>https://api.soundcloud.com/tracks/97175058</uri> |
2620 | + <user> |
2621 | + <id type="integer">1397546</id> |
2622 | + <kind>user</kind> |
2623 | + <permalink>submarine</permalink> |
2624 | + <username>submarine</username> |
2625 | + <uri>https://api.soundcloud.com/users/1397546</uri> |
2626 | + <permalink-url>http://soundcloud.com/submarine</permalink-url> |
2627 | + <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url> |
2628 | + </user> |
2629 | + <permalink-url>http://soundcloud.com/submarine/fc2</permalink-url> |
2630 | + <artwork-url nil="true"></artwork-url> |
2631 | + <waveform-url>https://w1.sndcdn.com/p2dDB46hkNGP_m.png</waveform-url> |
2632 | + <stream-url>https://api.soundcloud.com/tracks/97175058/stream</stream-url> |
2633 | + <playback-count type="integer">6</playback-count> |
2634 | + <download-count type="integer">0</download-count> |
2635 | + <favoritings-count type="integer">0</favoritings-count> |
2636 | + <comment-count type="integer">0</comment-count> |
2637 | + <attachments-uri>https://api.soundcloud.com/tracks/97175058/attachments</attachments-uri> |
2638 | + </track> |
2639 | + <track> |
2640 | + <kind>track</kind> |
2641 | + <id type="integer">37219984</id> |
2642 | + <created-at type="datetime">2012-02-20T11:01:57Z</created-at> |
2643 | + <user-id type="integer">12013031</user-id> |
2644 | + <duration type="integer">232472</duration> |
2645 | + <commentable type="boolean">true</commentable> |
2646 | + <state>finished</state> |
2647 | + <original-content-size type="integer">9293392</original-content-size> |
2648 | + <sharing>public</sharing> |
2649 | + <tag-list>dubstep</tag-list> |
2650 | + <permalink>seniter-my-mind</permalink> |
2651 | + <streamable type="boolean">true</streamable> |
2652 | + <embeddable-by>all</embeddable-by> |
2653 | + <downloadable type="boolean">true</downloadable> |
2654 | + <purchase-url nil="true"></purchase-url> |
2655 | + <label-id nil="true"></label-id> |
2656 | + <purchase-title nil="true"></purchase-title> |
2657 | + <genre>dubstep</genre> |
2658 | + <title>Seniter - My Mind</title> |
2659 | + <description>dubstep</description> |
2660 | + <label-name></label-name> |
2661 | + <release></release> |
2662 | + <track-type>demo</track-type> |
2663 | + <key-signature></key-signature> |
2664 | + <isrc></isrc> |
2665 | + <video-url nil="true"></video-url> |
2666 | + <bpm nil="true"></bpm> |
2667 | + <release-year nil="true"></release-year> |
2668 | + <release-month nil="true"></release-month> |
2669 | + <release-day nil="true"></release-day> |
2670 | + <original-format>mp3</original-format> |
2671 | + <license>all-rights-reserved</license> |
2672 | + <uri>https://api.soundcloud.com/tracks/37219984</uri> |
2673 | + <user> |
2674 | + <id type="integer">12013031</id> |
2675 | + <kind>user</kind> |
2676 | + <permalink>submarine-3</permalink> |
2677 | + <username>SubMarine</username> |
2678 | + <uri>https://api.soundcloud.com/users/12013031</uri> |
2679 | + <permalink-url>http://soundcloud.com/submarine-3</permalink-url> |
2680 | + <avatar-url>https://a1.sndcdn.com/images/default_avatar_large.png?cc07a88</avatar-url> |
2681 | + </user> |
2682 | + <permalink-url>http://soundcloud.com/submarine-3/seniter-my-mind</permalink-url> |
2683 | + <artwork-url nil="true"></artwork-url> |
2684 | + <waveform-url>https://w1.sndcdn.com/FGhiJn68bxbs_m.png</waveform-url> |
2685 | + <stream-url>https://api.soundcloud.com/tracks/37219984/stream</stream-url> |
2686 | + <download-url>https://api.soundcloud.com/tracks/37219984/download</download-url> |
2687 | + <playback-count type="integer">13</playback-count> |
2688 | + <download-count type="integer">0</download-count> |
2689 | + <favoritings-count type="integer">0</favoritings-count> |
2690 | + <comment-count type="integer">0</comment-count> |
2691 | + <attachments-uri>https://api.soundcloud.com/tracks/37219984/attachments</attachments-uri> |
2692 | + </track> |
2693 | + <track> |
2694 | + <kind>track</kind> |
2695 | + <id type="integer">8241747</id> |
2696 | + <created-at type="datetime">2010-12-20T11:37:03Z</created-at> |
2697 | + <user-id type="integer">2393625</user-id> |
2698 | + <duration type="integer">400242</duration> |
2699 | + <commentable type="boolean">true</commentable> |
2700 | + <state>finished</state> |
2701 | + <original-content-size type="integer">9603713</original-content-size> |
2702 | + <sharing>public</sharing> |
2703 | + <tag-list></tag-list> |
2704 | + <permalink>la-i-found-air-through-polotics</permalink> |
2705 | + <streamable type="boolean">true</streamable> |
2706 | + <embeddable-by>all</embeddable-by> |
2707 | + <downloadable type="boolean">true</downloadable> |
2708 | + <purchase-url nil="true"></purchase-url> |
2709 | + <label-id nil="true"></label-id> |
2710 | + <purchase-title nil="true"></purchase-title> |
2711 | + <genre></genre> |
2712 | + <title>LA - I Found Air through polotics</title> |
2713 | + <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> |
2714 | + <label-name></label-name> |
2715 | + <release></release> |
2716 | + <track-type></track-type> |
2717 | + <key-signature></key-signature> |
2718 | + <isrc></isrc> |
2719 | + <video-url nil="true"></video-url> |
2720 | + <bpm nil="true"></bpm> |
2721 | + <release-year nil="true"></release-year> |
2722 | + <release-month nil="true"></release-month> |
2723 | + <release-day nil="true"></release-day> |
2724 | + <original-format>mp3</original-format> |
2725 | + <license>all-rights-reserved</license> |
2726 | + <uri>https://api.soundcloud.com/tracks/8241747</uri> |
2727 | + <user> |
2728 | + <id type="integer">2393625</id> |
2729 | + <kind>user</kind> |
2730 | + <permalink>submarine-1</permalink> |
2731 | + <username>Submarine</username> |
2732 | + <uri>https://api.soundcloud.com/users/2393625</uri> |
2733 | + <permalink-url>http://soundcloud.com/submarine-1</permalink-url> |
2734 | + <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url> |
2735 | + </user> |
2736 | + <permalink-url>http://soundcloud.com/submarine-1/la-i-found-air-through-polotics</permalink-url> |
2737 | + <artwork-url nil="true"></artwork-url> |
2738 | + <waveform-url>https://w1.sndcdn.com/KIpkSVViTYms_m.png</waveform-url> |
2739 | + <stream-url>https://api.soundcloud.com/tracks/8241747/stream</stream-url> |
2740 | + <download-url>https://api.soundcloud.com/tracks/8241747/download</download-url> |
2741 | + <playback-count type="integer">16</playback-count> |
2742 | + <download-count type="integer">3</download-count> |
2743 | + <favoritings-count type="integer">0</favoritings-count> |
2744 | + <comment-count type="integer">0</comment-count> |
2745 | + <attachments-uri>https://api.soundcloud.com/tracks/8241747/attachments</attachments-uri> |
2746 | + </track> |
2747 | + <track> |
2748 | + <kind>track</kind> |
2749 | + <id type="integer">61638090</id> |
2750 | + <created-at type="datetime">2012-09-29T22:06:42Z</created-at> |
2751 | + <user-id type="integer">25157649</user-id> |
2752 | + <duration type="integer">281782</duration> |
2753 | + <commentable type="boolean">true</commentable> |
2754 | + <state>finished</state> |
2755 | + <original-content-size type="integer">11423654</original-content-size> |
2756 | + <sharing>public</sharing> |
2757 | + <tag-list>Submarine Mombahouse Origional Remix Alkatraz</tag-list> |
2758 | + <permalink>tormenta-las-trompa-llegadas</permalink> |
2759 | + <streamable type="boolean">true</streamable> |
2760 | + <embeddable-by>all</embeddable-by> |
2761 | + <downloadable type="boolean">false</downloadable> |
2762 | + <purchase-url nil="true"></purchase-url> |
2763 | + <label-id nil="true"></label-id> |
2764 | + <purchase-title nil="true"></purchase-title> |
2765 | + <genre>Mombahouse</genre> |
2766 | + <title>Tormenta - Las Trompa Llegadas (Submarine Remix)</title> |
2767 | + <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. |
2768 | + |
2769 | +This is my remix of our original. |
2770 | + |
2771 | +I hope you enjoy. |
2772 | + |
2773 | +Submarine. |
2774 | + |
2775 | +Download will be made available when this track reaches 100 listens. </description> |
2776 | + <label-name></label-name> |
2777 | + <release></release> |
2778 | + <track-type>original</track-type> |
2779 | + <key-signature></key-signature> |
2780 | + <isrc></isrc> |
2781 | + <video-url nil="true"></video-url> |
2782 | + <bpm nil="true"></bpm> |
2783 | + <release-year nil="true"></release-year> |
2784 | + <release-month nil="true"></release-month> |
2785 | + <release-day nil="true"></release-day> |
2786 | + <original-format>mp3</original-format> |
2787 | + <license>all-rights-reserved</license> |
2788 | + <uri>https://api.soundcloud.com/tracks/61638090</uri> |
2789 | + <user> |
2790 | + <id type="integer">25157649</id> |
2791 | + <kind>user</kind> |
2792 | + <permalink>submarine-5</permalink> |
2793 | + <username>SUBmarine</username> |
2794 | + <uri>https://api.soundcloud.com/users/25157649</uri> |
2795 | + <permalink-url>http://soundcloud.com/submarine-5</permalink-url> |
2796 | + <avatar-url>https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?cc07a88</avatar-url> |
2797 | + </user> |
2798 | + <permalink-url>http://soundcloud.com/submarine-5/tormenta-las-trompa-llegadas</permalink-url> |
2799 | + <artwork-url>https://i1.sndcdn.com/artworks-000031256378-n3d3fg-large.jpg?cc07a88</artwork-url> |
2800 | + <waveform-url>https://w1.sndcdn.com/C0prIOi6Pq6p_m.png</waveform-url> |
2801 | + <stream-url>https://api.soundcloud.com/tracks/61638090/stream</stream-url> |
2802 | + <playback-count type="integer">83</playback-count> |
2803 | + <download-count type="integer">0</download-count> |
2804 | + <favoritings-count type="integer">0</favoritings-count> |
2805 | + <comment-count type="integer">1</comment-count> |
2806 | + <attachments-uri>https://api.soundcloud.com/tracks/61638090/attachments</attachments-uri> |
2807 | + </track> |
2808 | + <track> |
2809 | + <kind>track</kind> |
2810 | + <id type="integer">7976882</id> |
2811 | + <created-at type="datetime">2010-12-12T18:33:07Z</created-at> |
2812 | + <user-id type="integer">2393625</user-id> |
2813 | + <duration type="integer">50749</duration> |
2814 | + <commentable type="boolean">true</commentable> |
2815 | + <state>finished</state> |
2816 | + <original-content-size type="integer">1218386</original-content-size> |
2817 | + <sharing>public</sharing> |
2818 | + <tag-list></tag-list> |
2819 | + <permalink>the-edittttt</permalink> |
2820 | + <streamable type="boolean">true</streamable> |
2821 | + <embeddable-by>all</embeddable-by> |
2822 | + <downloadable type="boolean">false</downloadable> |
2823 | + <purchase-url nil="true"></purchase-url> |
2824 | + <label-id nil="true"></label-id> |
2825 | + <purchase-title nil="true"></purchase-title> |
2826 | + <genre></genre> |
2827 | + <title>THE EDITTTTT</title> |
2828 | + <description></description> |
2829 | + <label-name></label-name> |
2830 | + <release></release> |
2831 | + <track-type></track-type> |
2832 | + <key-signature></key-signature> |
2833 | + <isrc></isrc> |
2834 | + <video-url nil="true"></video-url> |
2835 | + <bpm nil="true"></bpm> |
2836 | + <release-year nil="true"></release-year> |
2837 | + <release-month nil="true"></release-month> |
2838 | + <release-day nil="true"></release-day> |
2839 | + <original-format>mp3</original-format> |
2840 | + <license>all-rights-reserved</license> |
2841 | + <uri>https://api.soundcloud.com/tracks/7976882</uri> |
2842 | + <user> |
2843 | + <id type="integer">2393625</id> |
2844 | + <kind>user</kind> |
2845 | + <permalink>submarine-1</permalink> |
2846 | + <username>Submarine</username> |
2847 | + <uri>https://api.soundcloud.com/users/2393625</uri> |
2848 | + <permalink-url>http://soundcloud.com/submarine-1</permalink-url> |
2849 | + <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url> |
2850 | + </user> |
2851 | + <permalink-url>http://soundcloud.com/submarine-1/the-edittttt</permalink-url> |
2852 | + <artwork-url nil="true"></artwork-url> |
2853 | + <waveform-url>https://w1.sndcdn.com/fKZgRN1JNlEw_m.png</waveform-url> |
2854 | + <stream-url>https://api.soundcloud.com/tracks/7976882/stream</stream-url> |
2855 | + <playback-count type="integer">45</playback-count> |
2856 | + <download-count type="integer">0</download-count> |
2857 | + <favoritings-count type="integer">0</favoritings-count> |
2858 | + <comment-count type="integer">0</comment-count> |
2859 | + <attachments-uri>https://api.soundcloud.com/tracks/7976882/attachments</attachments-uri> |
2860 | + </track> |
2861 | + <track> |
2862 | + <kind>track</kind> |
2863 | + <id type="integer">37252163</id> |
2864 | + <created-at type="datetime">2012-02-20T18:02:27Z</created-at> |
2865 | + <user-id type="integer">12013031</user-id> |
2866 | + <duration type="integer">232472</duration> |
2867 | + <commentable type="boolean">true</commentable> |
2868 | + <state>finished</state> |
2869 | + <original-content-size type="integer">9293392</original-content-size> |
2870 | + <sharing>public</sharing> |
2871 | + <tag-list>dubstep</tag-list> |
2872 | + <permalink>seniter-my-mind-2</permalink> |
2873 | + <streamable type="boolean">true</streamable> |
2874 | + <embeddable-by>all</embeddable-by> |
2875 | + <downloadable type="boolean">true</downloadable> |
2876 | + <purchase-url nil="true"></purchase-url> |
2877 | + <label-id nil="true"></label-id> |
2878 | + <purchase-title nil="true"></purchase-title> |
2879 | + <genre>Dubstep</genre> |
2880 | + <title>Seniter - My Mind</title> |
2881 | + <description>dubstep</description> |
2882 | + <label-name></label-name> |
2883 | + <release></release> |
2884 | + <track-type>demo</track-type> |
2885 | + <key-signature></key-signature> |
2886 | + <isrc></isrc> |
2887 | + <video-url nil="true"></video-url> |
2888 | + <bpm nil="true"></bpm> |
2889 | + <release-year nil="true"></release-year> |
2890 | + <release-month nil="true"></release-month> |
2891 | + <release-day nil="true"></release-day> |
2892 | + <original-format>mp3</original-format> |
2893 | + <license>all-rights-reserved</license> |
2894 | + <uri>https://api.soundcloud.com/tracks/37252163</uri> |
2895 | + <user> |
2896 | + <id type="integer">12013031</id> |
2897 | + <kind>user</kind> |
2898 | + <permalink>submarine-3</permalink> |
2899 | + <username>SubMarine</username> |
2900 | + <uri>https://api.soundcloud.com/users/12013031</uri> |
2901 | + <permalink-url>http://soundcloud.com/submarine-3</permalink-url> |
2902 | + <avatar-url>https://a1.sndcdn.com/images/default_avatar_large.png?cc07a88</avatar-url> |
2903 | + </user> |
2904 | + <permalink-url>http://soundcloud.com/submarine-3/seniter-my-mind-2</permalink-url> |
2905 | + <artwork-url nil="true"></artwork-url> |
2906 | + <waveform-url>https://w1.sndcdn.com/FKIkC9Ix4RVc_m.png</waveform-url> |
2907 | + <stream-url>https://api.soundcloud.com/tracks/37252163/stream</stream-url> |
2908 | + <download-url>https://api.soundcloud.com/tracks/37252163/download</download-url> |
2909 | + <playback-count type="integer">15</playback-count> |
2910 | + <download-count type="integer">0</download-count> |
2911 | + <favoritings-count type="integer">0</favoritings-count> |
2912 | + <comment-count type="integer">1</comment-count> |
2913 | + <attachments-uri>https://api.soundcloud.com/tracks/37252163/attachments</attachments-uri> |
2914 | + </track> |
2915 | + <track> |
2916 | + <kind>track</kind> |
2917 | + <id type="integer">7323275</id> |
2918 | + <created-at type="datetime">2010-11-23T20:29:21Z</created-at> |
2919 | + <user-id type="integer">1197717</user-id> |
2920 | + <duration type="integer">259441</duration> |
2921 | + <commentable type="boolean">true</commentable> |
2922 | + <state>finished</state> |
2923 | + <original-content-size type="integer">68602916</original-content-size> |
2924 | + <sharing>public</sharing> |
2925 | + <tag-list></tag-list> |
2926 | + <permalink>into-the-future</permalink> |
2927 | + <streamable type="boolean">true</streamable> |
2928 | + <embeddable-by>all</embeddable-by> |
2929 | + <downloadable type="boolean">true</downloadable> |
2930 | + <purchase-url nil="true"></purchase-url> |
2931 | + <label-id nil="true"></label-id> |
2932 | + <purchase-title nil="true"></purchase-title> |
2933 | + <genre>Garage</genre> |
2934 | + <title>INTO THE FUTURE</title> |
2935 | + <description></description> |
2936 | + <label-name>none : (</label-name> |
2937 | + <release></release> |
2938 | + <track-type>original</track-type> |
2939 | + <key-signature></key-signature> |
2940 | + <isrc></isrc> |
2941 | + <video-url nil="true"></video-url> |
2942 | + <bpm nil="true"></bpm> |
2943 | + <release-year nil="true"></release-year> |
2944 | + <release-month nil="true"></release-month> |
2945 | + <release-day nil="true"></release-day> |
2946 | + <original-format>wav</original-format> |
2947 | + <license>all-rights-reserved</license> |
2948 | + <uri>https://api.soundcloud.com/tracks/7323275</uri> |
2949 | + <user> |
2950 | + <id type="integer">1197717</id> |
2951 | + <kind>user</kind> |
2952 | + <permalink>vibecatt</permalink> |
2953 | + <username>SUBMARINE</username> |
2954 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
2955 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
2956 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
2957 | + </user> |
2958 | + <permalink-url>http://soundcloud.com/vibecatt/into-the-future</permalink-url> |
2959 | + <artwork-url>https://i1.sndcdn.com/artworks-000003216522-dv0ekw-large.jpg?cc07a88</artwork-url> |
2960 | + <waveform-url>https://w1.sndcdn.com/68in91FGBiec_m.png</waveform-url> |
2961 | + <stream-url>https://api.soundcloud.com/tracks/7323275/stream</stream-url> |
2962 | + <download-url>https://api.soundcloud.com/tracks/7323275/download</download-url> |
2963 | + <playback-count type="integer">509</playback-count> |
2964 | + <download-count type="integer">16</download-count> |
2965 | + <favoritings-count type="integer">5</favoritings-count> |
2966 | + <comment-count type="integer">8</comment-count> |
2967 | + <attachments-uri>https://api.soundcloud.com/tracks/7323275/attachments</attachments-uri> |
2968 | + </track> |
2969 | + <track> |
2970 | + <kind>track</kind> |
2971 | + <id type="integer">28347812</id> |
2972 | + <created-at type="datetime">2011-11-18T16:19:51Z</created-at> |
2973 | + <user-id type="integer">1197717</user-id> |
2974 | + <duration type="integer">238405</duration> |
2975 | + <commentable type="boolean">true</commentable> |
2976 | + <state>finished</state> |
2977 | + <original-content-size type="integer">42027024</original-content-size> |
2978 | + <sharing>public</sharing> |
2979 | + <tag-list>dreamsound sub pads deep new dubstep dubby bright tribal winter</tag-list> |
2980 | + <permalink>blue-moon</permalink> |
2981 | + <streamable type="boolean">true</streamable> |
2982 | + <embeddable-by>all</embeddable-by> |
2983 | + <downloadable type="boolean">true</downloadable> |
2984 | + <purchase-url nil="true"></purchase-url> |
2985 | + <label-id nil="true"></label-id> |
2986 | + <purchase-title nil="true"></purchase-title> |
2987 | + <genre>dubstep/tribal/space</genre> |
2988 | + <title>Blue moon</title> |
2989 | + <description></description> |
2990 | + <label-name></label-name> |
2991 | + <release></release> |
2992 | + <track-type>original</track-type> |
2993 | + <key-signature></key-signature> |
2994 | + <isrc></isrc> |
2995 | + <video-url nil="true"></video-url> |
2996 | + <bpm nil="true"></bpm> |
2997 | + <release-year nil="true"></release-year> |
2998 | + <release-month nil="true"></release-month> |
2999 | + <release-day nil="true"></release-day> |
3000 | + <original-format>wav</original-format> |
3001 | + <license>all-rights-reserved</license> |
3002 | + <uri>https://api.soundcloud.com/tracks/28347812</uri> |
3003 | + <user> |
3004 | + <id type="integer">1197717</id> |
3005 | + <kind>user</kind> |
3006 | + <permalink>vibecatt</permalink> |
3007 | + <username>SUBMARINE</username> |
3008 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3009 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3010 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3011 | + </user> |
3012 | + <permalink-url>http://soundcloud.com/vibecatt/blue-moon</permalink-url> |
3013 | + <artwork-url>https://i1.sndcdn.com/artworks-000017277156-d680ii-large.jpg?cc07a88</artwork-url> |
3014 | + <waveform-url>https://w1.sndcdn.com/jLHOHyWmFSwv_m.png</waveform-url> |
3015 | + <stream-url>https://api.soundcloud.com/tracks/28347812/stream</stream-url> |
3016 | + <download-url>https://api.soundcloud.com/tracks/28347812/download</download-url> |
3017 | + <playback-count type="integer">454</playback-count> |
3018 | + <download-count type="integer">26</download-count> |
3019 | + <favoritings-count type="integer">10</favoritings-count> |
3020 | + <comment-count type="integer">24</comment-count> |
3021 | + <attachments-uri>https://api.soundcloud.com/tracks/28347812/attachments</attachments-uri> |
3022 | + </track> |
3023 | + <track> |
3024 | + <kind>track</kind> |
3025 | + <id type="integer">24857671</id> |
3026 | + <created-at type="datetime">2011-10-06T00:23:07Z</created-at> |
3027 | + <user-id type="integer">1197717</user-id> |
3028 | + <duration type="integer">150991</duration> |
3029 | + <commentable type="boolean">true</commentable> |
3030 | + <state>finished</state> |
3031 | + <original-content-size type="integer">26611248</original-content-size> |
3032 | + <sharing>public</sharing> |
3033 | + <tag-list></tag-list> |
3034 | + <permalink>long-winter-1</permalink> |
3035 | + <streamable type="boolean">true</streamable> |
3036 | + <embeddable-by>all</embeddable-by> |
3037 | + <downloadable type="boolean">false</downloadable> |
3038 | + <purchase-url nil="true"></purchase-url> |
3039 | + <label-id nil="true"></label-id> |
3040 | + <purchase-title nil="true"></purchase-title> |
3041 | + <genre></genre> |
3042 | + <title>LONG winter</title> |
3043 | + <description></description> |
3044 | + <label-name></label-name> |
3045 | + <release></release> |
3046 | + <track-type></track-type> |
3047 | + <key-signature></key-signature> |
3048 | + <isrc></isrc> |
3049 | + <video-url nil="true"></video-url> |
3050 | + <bpm nil="true"></bpm> |
3051 | + <release-year nil="true"></release-year> |
3052 | + <release-month nil="true"></release-month> |
3053 | + <release-day nil="true"></release-day> |
3054 | + <original-format>wav</original-format> |
3055 | + <license>all-rights-reserved</license> |
3056 | + <uri>https://api.soundcloud.com/tracks/24857671</uri> |
3057 | + <user> |
3058 | + <id type="integer">1197717</id> |
3059 | + <kind>user</kind> |
3060 | + <permalink>vibecatt</permalink> |
3061 | + <username>SUBMARINE</username> |
3062 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3063 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3064 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3065 | + </user> |
3066 | + <permalink-url>http://soundcloud.com/vibecatt/long-winter-1</permalink-url> |
3067 | + <artwork-url>https://i1.sndcdn.com/artworks-000017277235-fqm6cu-large.jpg?cc07a88</artwork-url> |
3068 | + <waveform-url>https://w1.sndcdn.com/WzBgLB4Ma2cD_m.png</waveform-url> |
3069 | + <stream-url>https://api.soundcloud.com/tracks/24857671/stream</stream-url> |
3070 | + <playback-count type="integer">149</playback-count> |
3071 | + <download-count type="integer">0</download-count> |
3072 | + <favoritings-count type="integer">4</favoritings-count> |
3073 | + <comment-count type="integer">3</comment-count> |
3074 | + <attachments-uri>https://api.soundcloud.com/tracks/24857671/attachments</attachments-uri> |
3075 | + </track> |
3076 | + <track> |
3077 | + <kind>track</kind> |
3078 | + <id type="integer">8241760</id> |
3079 | + <created-at type="datetime">2010-12-20T11:37:56Z</created-at> |
3080 | + <user-id type="integer">2393625</user-id> |
3081 | + <duration type="integer">407481</duration> |
3082 | + <commentable type="boolean">true</commentable> |
3083 | + <state>finished</state> |
3084 | + <original-content-size type="integer">9777360</original-content-size> |
3085 | + <sharing>public</sharing> |
3086 | + <tag-list></tag-list> |
3087 | + <permalink>la-prayin-gospel</permalink> |
3088 | + <streamable type="boolean">true</streamable> |
3089 | + <embeddable-by>all</embeddable-by> |
3090 | + <downloadable type="boolean">true</downloadable> |
3091 | + <purchase-url nil="true"></purchase-url> |
3092 | + <label-id nil="true"></label-id> |
3093 | + <purchase-title nil="true"></purchase-title> |
3094 | + <genre></genre> |
3095 | + <title>LA - Prayin Gospel</title> |
3096 | + <description>Again bootlegs are meant to be cheesy...</description> |
3097 | + <label-name></label-name> |
3098 | + <release></release> |
3099 | + <track-type></track-type> |
3100 | + <key-signature></key-signature> |
3101 | + <isrc></isrc> |
3102 | + <video-url nil="true"></video-url> |
3103 | + <bpm nil="true"></bpm> |
3104 | + <release-year nil="true"></release-year> |
3105 | + <release-month nil="true"></release-month> |
3106 | + <release-day nil="true"></release-day> |
3107 | + <original-format>mp3</original-format> |
3108 | + <license>all-rights-reserved</license> |
3109 | + <uri>https://api.soundcloud.com/tracks/8241760</uri> |
3110 | + <user> |
3111 | + <id type="integer">2393625</id> |
3112 | + <kind>user</kind> |
3113 | + <permalink>submarine-1</permalink> |
3114 | + <username>Submarine</username> |
3115 | + <uri>https://api.soundcloud.com/users/2393625</uri> |
3116 | + <permalink-url>http://soundcloud.com/submarine-1</permalink-url> |
3117 | + <avatar-url>https://i1.sndcdn.com/avatars-000002220972-lnqvui-large.jpg?cc07a88</avatar-url> |
3118 | + </user> |
3119 | + <permalink-url>http://soundcloud.com/submarine-1/la-prayin-gospel</permalink-url> |
3120 | + <artwork-url nil="true"></artwork-url> |
3121 | + <waveform-url>https://w1.sndcdn.com/vsPZW6qU7p8V_m.png</waveform-url> |
3122 | + <stream-url>https://api.soundcloud.com/tracks/8241760/stream</stream-url> |
3123 | + <download-url>https://api.soundcloud.com/tracks/8241760/download</download-url> |
3124 | + <playback-count type="integer">17</playback-count> |
3125 | + <download-count type="integer">4</download-count> |
3126 | + <favoritings-count type="integer">0</favoritings-count> |
3127 | + <comment-count type="integer">0</comment-count> |
3128 | + <attachments-uri>https://api.soundcloud.com/tracks/8241760/attachments</attachments-uri> |
3129 | + </track> |
3130 | + <track> |
3131 | + <kind>track</kind> |
3132 | + <id type="integer">11148780</id> |
3133 | + <created-at type="datetime">2011-02-26T16:56:23Z</created-at> |
3134 | + <user-id type="integer">1197717</user-id> |
3135 | + <duration type="integer">271253</duration> |
3136 | + <commentable type="boolean">true</commentable> |
3137 | + <state>finished</state> |
3138 | + <original-content-size type="integer">71722616</original-content-size> |
3139 | + <sharing>public</sharing> |
3140 | + <tag-list></tag-list> |
3141 | + <permalink>deep-sleep</permalink> |
3142 | + <streamable type="boolean">true</streamable> |
3143 | + <embeddable-by>all</embeddable-by> |
3144 | + <downloadable type="boolean">false</downloadable> |
3145 | + <purchase-url nil="true"></purchase-url> |
3146 | + <label-id nil="true"></label-id> |
3147 | + <purchase-title nil="true"></purchase-title> |
3148 | + <genre>Ambient/garage</genre> |
3149 | + <title>DEEP SLEEP</title> |
3150 | + <description></description> |
3151 | + <label-name></label-name> |
3152 | + <release></release> |
3153 | + <track-type>original</track-type> |
3154 | + <key-signature></key-signature> |
3155 | + <isrc></isrc> |
3156 | + <video-url nil="true"></video-url> |
3157 | + <bpm type="float">134.0</bpm> |
3158 | + <release-year nil="true"></release-year> |
3159 | + <release-month nil="true"></release-month> |
3160 | + <release-day nil="true"></release-day> |
3161 | + <original-format>wav</original-format> |
3162 | + <license>all-rights-reserved</license> |
3163 | + <uri>https://api.soundcloud.com/tracks/11148780</uri> |
3164 | + <user> |
3165 | + <id type="integer">1197717</id> |
3166 | + <kind>user</kind> |
3167 | + <permalink>vibecatt</permalink> |
3168 | + <username>SUBMARINE</username> |
3169 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3170 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3171 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3172 | + </user> |
3173 | + <permalink-url>http://soundcloud.com/vibecatt/deep-sleep</permalink-url> |
3174 | + <artwork-url nil="true"></artwork-url> |
3175 | + <waveform-url>https://w1.sndcdn.com/XmYxE13Bba37_m.png</waveform-url> |
3176 | + <stream-url>https://api.soundcloud.com/tracks/11148780/stream</stream-url> |
3177 | + <playback-count type="integer">768</playback-count> |
3178 | + <download-count type="integer">0</download-count> |
3179 | + <favoritings-count type="integer">7</favoritings-count> |
3180 | + <comment-count type="integer">14</comment-count> |
3181 | + <attachments-uri>https://api.soundcloud.com/tracks/11148780/attachments</attachments-uri> |
3182 | + </track> |
3183 | + <track> |
3184 | + <kind>track</kind> |
3185 | + <id type="integer">3703311</id> |
3186 | + <created-at type="datetime">2010-06-29T14:24:27Z</created-at> |
3187 | + <user-id type="integer">1197717</user-id> |
3188 | + <duration type="integer">240181</duration> |
3189 | + <commentable type="boolean">true</commentable> |
3190 | + <state>finished</state> |
3191 | + <original-content-size type="integer">42336044</original-content-size> |
3192 | + <sharing>public</sharing> |
3193 | + <tag-list></tag-list> |
3194 | + <permalink>oh-you-just-wouldnt-let-it-lie</permalink> |
3195 | + <streamable type="boolean">true</streamable> |
3196 | + <embeddable-by>all</embeddable-by> |
3197 | + <downloadable type="boolean">true</downloadable> |
3198 | + <purchase-url nil="true"></purchase-url> |
3199 | + <label-id nil="true"></label-id> |
3200 | + <purchase-title nil="true"></purchase-title> |
3201 | + <genre>unfineshed</genre> |
3202 | + <title>Oh you just wouldnt let it lie</title> |
3203 | + <description></description> |
3204 | + <label-name></label-name> |
3205 | + <release></release> |
3206 | + <track-type></track-type> |
3207 | + <key-signature></key-signature> |
3208 | + <isrc></isrc> |
3209 | + <video-url nil="true"></video-url> |
3210 | + <bpm type="float">136.0</bpm> |
3211 | + <release-year nil="true"></release-year> |
3212 | + <release-month nil="true"></release-month> |
3213 | + <release-day nil="true"></release-day> |
3214 | + <original-format>wav</original-format> |
3215 | + <license>all-rights-reserved</license> |
3216 | + <uri>https://api.soundcloud.com/tracks/3703311</uri> |
3217 | + <user> |
3218 | + <id type="integer">1197717</id> |
3219 | + <kind>user</kind> |
3220 | + <permalink>vibecatt</permalink> |
3221 | + <username>SUBMARINE</username> |
3222 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3223 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3224 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3225 | + </user> |
3226 | + <permalink-url>http://soundcloud.com/vibecatt/oh-you-just-wouldnt-let-it-lie</permalink-url> |
3227 | + <artwork-url nil="true"></artwork-url> |
3228 | + <waveform-url>https://w1.sndcdn.com/bOpMn5TCVSwk_m.png</waveform-url> |
3229 | + <stream-url>https://api.soundcloud.com/tracks/3703311/stream</stream-url> |
3230 | + <download-url>https://api.soundcloud.com/tracks/3703311/download</download-url> |
3231 | + <playback-count type="integer">272</playback-count> |
3232 | + <download-count type="integer">7</download-count> |
3233 | + <favoritings-count type="integer">4</favoritings-count> |
3234 | + <comment-count type="integer">3</comment-count> |
3235 | + <attachments-uri>https://api.soundcloud.com/tracks/3703311/attachments</attachments-uri> |
3236 | + </track> |
3237 | + <track> |
3238 | + <kind>track</kind> |
3239 | + <id type="integer">6486500</id> |
3240 | + <created-at type="datetime">2010-10-28T12:06:14Z</created-at> |
3241 | + <user-id type="integer">1197717</user-id> |
3242 | + <duration type="integer">233100</duration> |
3243 | + <commentable type="boolean">true</commentable> |
3244 | + <state>finished</state> |
3245 | + <original-content-size type="integer">61636280</original-content-size> |
3246 | + <sharing>public</sharing> |
3247 | + <tag-list></tag-list> |
3248 | + <permalink>the-pattern</permalink> |
3249 | + <streamable type="boolean">true</streamable> |
3250 | + <embeddable-by>all</embeddable-by> |
3251 | + <downloadable type="boolean">true</downloadable> |
3252 | + <purchase-url nil="true"></purchase-url> |
3253 | + <label-id nil="true"></label-id> |
3254 | + <purchase-title nil="true"></purchase-title> |
3255 | + <genre>ambient/garage</genre> |
3256 | + <title>The DREAM pattern</title> |
3257 | + <description></description> |
3258 | + <label-name></label-name> |
3259 | + <release></release> |
3260 | + <track-type>original</track-type> |
3261 | + <key-signature></key-signature> |
3262 | + <isrc></isrc> |
3263 | + <video-url nil="true"></video-url> |
3264 | + <bpm type="float">136.0</bpm> |
3265 | + <release-year nil="true"></release-year> |
3266 | + <release-month nil="true"></release-month> |
3267 | + <release-day nil="true"></release-day> |
3268 | + <original-format>wav</original-format> |
3269 | + <license>all-rights-reserved</license> |
3270 | + <uri>https://api.soundcloud.com/tracks/6486500</uri> |
3271 | + <user> |
3272 | + <id type="integer">1197717</id> |
3273 | + <kind>user</kind> |
3274 | + <permalink>vibecatt</permalink> |
3275 | + <username>SUBMARINE</username> |
3276 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3277 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3278 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3279 | + </user> |
3280 | + <permalink-url>http://soundcloud.com/vibecatt/the-pattern</permalink-url> |
3281 | + <artwork-url>https://i1.sndcdn.com/artworks-000003021497-vfp002-large.jpg?cc07a88</artwork-url> |
3282 | + <waveform-url>https://w1.sndcdn.com/NOMmwfTvJ2Eb_m.png</waveform-url> |
3283 | + <stream-url>https://api.soundcloud.com/tracks/6486500/stream</stream-url> |
3284 | + <download-url>https://api.soundcloud.com/tracks/6486500/download</download-url> |
3285 | + <playback-count type="integer">416</playback-count> |
3286 | + <download-count type="integer">16</download-count> |
3287 | + <favoritings-count type="integer">4</favoritings-count> |
3288 | + <comment-count type="integer">3</comment-count> |
3289 | + <attachments-uri>https://api.soundcloud.com/tracks/6486500/attachments</attachments-uri> |
3290 | + </track> |
3291 | + <track> |
3292 | + <kind>track</kind> |
3293 | + <id type="integer">3591672</id> |
3294 | + <created-at type="datetime">2010-06-22T20:48:10Z</created-at> |
3295 | + <user-id type="integer">1197717</user-id> |
3296 | + <duration type="integer">370242</duration> |
3297 | + <commentable type="boolean">true</commentable> |
3298 | + <state>finished</state> |
3299 | + <original-content-size type="integer">12492933</original-content-size> |
3300 | + <sharing>public</sharing> |
3301 | + <tag-list></tag-list> |
3302 | + <permalink>rollin-down-paradise-drive</permalink> |
3303 | + <streamable type="boolean">true</streamable> |
3304 | + <embeddable-by>all</embeddable-by> |
3305 | + <downloadable type="boolean">false</downloadable> |
3306 | + <purchase-url nil="true"></purchase-url> |
3307 | + <label-id nil="true"></label-id> |
3308 | + <purchase-title nil="true"></purchase-title> |
3309 | + <genre>unfinished</genre> |
3310 | + <title>rollin down paradise drive</title> |
3311 | + <description>http://www.youtube.com/watch?v=RdD6L4cKKU8</description> |
3312 | + <label-name></label-name> |
3313 | + <release></release> |
3314 | + <track-type></track-type> |
3315 | + <key-signature></key-signature> |
3316 | + <isrc></isrc> |
3317 | + <video-url nil="true"></video-url> |
3318 | + <bpm type="float">150.0</bpm> |
3319 | + <release-year nil="true"></release-year> |
3320 | + <release-month nil="true"></release-month> |
3321 | + <release-day nil="true"></release-day> |
3322 | + <original-format>m4a</original-format> |
3323 | + <license>all-rights-reserved</license> |
3324 | + <uri>https://api.soundcloud.com/tracks/3591672</uri> |
3325 | + <user> |
3326 | + <id type="integer">1197717</id> |
3327 | + <kind>user</kind> |
3328 | + <permalink>vibecatt</permalink> |
3329 | + <username>SUBMARINE</username> |
3330 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3331 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3332 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3333 | + </user> |
3334 | + <permalink-url>http://soundcloud.com/vibecatt/rollin-down-paradise-drive</permalink-url> |
3335 | + <artwork-url nil="true"></artwork-url> |
3336 | + <waveform-url>https://w1.sndcdn.com/VciyI1oB6Uey_m.png</waveform-url> |
3337 | + <stream-url>https://api.soundcloud.com/tracks/3591672/stream</stream-url> |
3338 | + <playback-count type="integer">341</playback-count> |
3339 | + <download-count type="integer">0</download-count> |
3340 | + <favoritings-count type="integer">3</favoritings-count> |
3341 | + <comment-count type="integer">5</comment-count> |
3342 | + <attachments-uri>https://api.soundcloud.com/tracks/3591672/attachments</attachments-uri> |
3343 | + </track> |
3344 | + <track> |
3345 | + <kind>track</kind> |
3346 | + <id type="integer">5613923</id> |
3347 | + <created-at type="datetime">2010-09-27T14:44:45Z</created-at> |
3348 | + <user-id type="integer">1197717</user-id> |
3349 | + <duration type="integer">318030</duration> |
3350 | + <commentable type="boolean">true</commentable> |
3351 | + <state>finished</state> |
3352 | + <original-content-size type="integer">10069025</original-content-size> |
3353 | + <sharing>public</sharing> |
3354 | + <tag-list></tag-list> |
3355 | + <permalink>if-you-loved-me-you-would-ft-lucien-the-beat</permalink> |
3356 | + <streamable type="boolean">true</streamable> |
3357 | + <embeddable-by>all</embeddable-by> |
3358 | + <downloadable type="boolean">false</downloadable> |
3359 | + <purchase-url nil="true"></purchase-url> |
3360 | + <label-id nil="true"></label-id> |
3361 | + <purchase-title nil="true"></purchase-title> |
3362 | + <genre>Dubstep</genre> |
3363 | + <title>If you loved me,you would. ft Lucien & the Beat</title> |
3364 | + <description></description> |
3365 | + <label-name></label-name> |
3366 | + <release></release> |
3367 | + <track-type>original</track-type> |
3368 | + <key-signature></key-signature> |
3369 | + <isrc></isrc> |
3370 | + <video-url nil="true"></video-url> |
3371 | + <bpm type="float">145.0</bpm> |
3372 | + <release-year nil="true"></release-year> |
3373 | + <release-month nil="true"></release-month> |
3374 | + <release-day nil="true"></release-day> |
3375 | + <original-format>m4a</original-format> |
3376 | + <license>all-rights-reserved</license> |
3377 | + <uri>https://api.soundcloud.com/tracks/5613923</uri> |
3378 | + <user> |
3379 | + <id type="integer">1197717</id> |
3380 | + <kind>user</kind> |
3381 | + <permalink>vibecatt</permalink> |
3382 | + <username>SUBMARINE</username> |
3383 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3384 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3385 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3386 | + </user> |
3387 | + <permalink-url>http://soundcloud.com/vibecatt/if-you-loved-me-you-would-ft-lucien-the-beat</permalink-url> |
3388 | + <artwork-url nil="true"></artwork-url> |
3389 | + <waveform-url>https://w1.sndcdn.com/kQmXBCvVRp49_m.png</waveform-url> |
3390 | + <stream-url>https://api.soundcloud.com/tracks/5613923/stream</stream-url> |
3391 | + <playback-count type="integer">271</playback-count> |
3392 | + <download-count type="integer">0</download-count> |
3393 | + <favoritings-count type="integer">2</favoritings-count> |
3394 | + <comment-count type="integer">2</comment-count> |
3395 | + <attachments-uri>https://api.soundcloud.com/tracks/5613923/attachments</attachments-uri> |
3396 | + </track> |
3397 | + <track> |
3398 | + <kind>track</kind> |
3399 | + <id type="integer">5614024</id> |
3400 | + <created-at type="datetime">2010-09-27T14:49:35Z</created-at> |
3401 | + <user-id type="integer">1197717</user-id> |
3402 | + <duration type="integer">210418</duration> |
3403 | + <commentable type="boolean">true</commentable> |
3404 | + <state>finished</state> |
3405 | + <original-content-size type="integer">6754931</original-content-size> |
3406 | + <sharing>public</sharing> |
3407 | + <tag-list></tag-list> |
3408 | + <permalink>silent-h-bleep-bleep-jungle-boogie-remix</permalink> |
3409 | + <streamable type="boolean">true</streamable> |
3410 | + <embeddable-by>all</embeddable-by> |
3411 | + <downloadable type="boolean">false</downloadable> |
3412 | + <purchase-url nil="true"></purchase-url> |
3413 | + <label-id nil="true"></label-id> |
3414 | + <purchase-title nil="true"></purchase-title> |
3415 | + <genre>Dubstep</genre> |
3416 | + <title>silent H Bleep Bleep (jungle boogie remix)</title> |
3417 | + <description></description> |
3418 | + <label-name></label-name> |
3419 | + <release></release> |
3420 | + <track-type>remix</track-type> |
3421 | + <key-signature></key-signature> |
3422 | + <isrc></isrc> |
3423 | + <video-url nil="true"></video-url> |
3424 | + <bpm type="float">137.0</bpm> |
3425 | + <release-year nil="true"></release-year> |
3426 | + <release-month nil="true"></release-month> |
3427 | + <release-day nil="true"></release-day> |
3428 | + <original-format>m4a</original-format> |
3429 | + <license>all-rights-reserved</license> |
3430 | + <uri>https://api.soundcloud.com/tracks/5614024</uri> |
3431 | + <user> |
3432 | + <id type="integer">1197717</id> |
3433 | + <kind>user</kind> |
3434 | + <permalink>vibecatt</permalink> |
3435 | + <username>SUBMARINE</username> |
3436 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3437 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3438 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3439 | + </user> |
3440 | + <permalink-url>http://soundcloud.com/vibecatt/silent-h-bleep-bleep-jungle-boogie-remix</permalink-url> |
3441 | + <artwork-url nil="true"></artwork-url> |
3442 | + <waveform-url>https://w1.sndcdn.com/CDaZ3aqNQrAL_m.png</waveform-url> |
3443 | + <stream-url>https://api.soundcloud.com/tracks/5614024/stream</stream-url> |
3444 | + <playback-count type="integer">375</playback-count> |
3445 | + <download-count type="integer">4</download-count> |
3446 | + <favoritings-count type="integer">4</favoritings-count> |
3447 | + <comment-count type="integer">11</comment-count> |
3448 | + <attachments-uri>https://api.soundcloud.com/tracks/5614024/attachments</attachments-uri> |
3449 | + </track> |
3450 | + <track> |
3451 | + <kind>track</kind> |
3452 | + <id type="integer">4822078</id> |
3453 | + <created-at type="datetime">2010-08-24T16:42:57Z</created-at> |
3454 | + <user-id type="integer">1397546</user-id> |
3455 | + <duration type="integer">5157046</duration> |
3456 | + <commentable type="boolean">true</commentable> |
3457 | + <state>finished</state> |
3458 | + <original-content-size type="integer">67789022</original-content-size> |
3459 | + <sharing>public</sharing> |
3460 | + <tag-list>wikicong delanda oo xo redundancy wikileaks</tag-list> |
3461 | + <permalink>kapital-identitat-mackt-fem</permalink> |
3462 | + <streamable type="boolean">true</streamable> |
3463 | + <embeddable-by>all</embeddable-by> |
3464 | + <downloadable type="boolean">true</downloadable> |
3465 | + <purchase-url nil="true"></purchase-url> |
3466 | + <label-id nil="true"></label-id> |
3467 | + <purchase-title nil="true"></purchase-title> |
3468 | + <genre>zef</genre> |
3469 | + <title>KAPITAL.IDENTITÄT.MACKT.FEM</title> |
3470 | + <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> |
3471 | + <label-name>KIM</label-name> |
3472 | + <release></release> |
3473 | + <track-type>podcast</track-type> |
3474 | + <key-signature></key-signature> |
3475 | + <isrc></isrc> |
3476 | + <video-url nil="true"></video-url> |
3477 | + <bpm nil="true"></bpm> |
3478 | + <release-year type="integer">2010</release-year> |
3479 | + <release-month type="integer">8</release-month> |
3480 | + <release-day type="integer">23</release-day> |
3481 | + <original-format>mp3</original-format> |
3482 | + <license>no-rights-reserved</license> |
3483 | + <uri>https://api.soundcloud.com/tracks/4822078</uri> |
3484 | + <user> |
3485 | + <id type="integer">1397546</id> |
3486 | + <kind>user</kind> |
3487 | + <permalink>submarine</permalink> |
3488 | + <username>submarine</username> |
3489 | + <uri>https://api.soundcloud.com/users/1397546</uri> |
3490 | + <permalink-url>http://soundcloud.com/submarine</permalink-url> |
3491 | + <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url> |
3492 | + </user> |
3493 | + <permalink-url>http://soundcloud.com/submarine/kapital-identitat-mackt-fem</permalink-url> |
3494 | + <artwork-url>https://i1.sndcdn.com/artworks-000002170048-ahtea3-large.jpg?cc07a88</artwork-url> |
3495 | + <waveform-url>https://w1.sndcdn.com/pMuTPNymGQ2c_m.png</waveform-url> |
3496 | + <stream-url>https://api.soundcloud.com/tracks/4822078/stream</stream-url> |
3497 | + <download-url>https://api.soundcloud.com/tracks/4822078/download</download-url> |
3498 | + <playback-count type="integer">90</playback-count> |
3499 | + <download-count type="integer">3</download-count> |
3500 | + <favoritings-count type="integer">0</favoritings-count> |
3501 | + <comment-count type="integer">0</comment-count> |
3502 | + <attachments-uri>https://api.soundcloud.com/tracks/4822078/attachments</attachments-uri> |
3503 | + </track> |
3504 | + <track> |
3505 | + <kind>track</kind> |
3506 | + <id type="integer">74814003</id> |
3507 | + <created-at type="datetime">2013-01-13T21:25:23Z</created-at> |
3508 | + <user-id type="integer">1197717</user-id> |
3509 | + <duration type="integer">211846</duration> |
3510 | + <commentable type="boolean">true</commentable> |
3511 | + <state>finished</state> |
3512 | + <original-content-size type="integer">37355340</original-content-size> |
3513 | + <sharing>public</sharing> |
3514 | + <tag-list></tag-list> |
3515 | + <permalink>echos</permalink> |
3516 | + <streamable type="boolean">true</streamable> |
3517 | + <embeddable-by>all</embeddable-by> |
3518 | + <downloadable type="boolean">false</downloadable> |
3519 | + <purchase-url nil="true"></purchase-url> |
3520 | + <label-id nil="true"></label-id> |
3521 | + <purchase-title nil="true"></purchase-title> |
3522 | + <genre></genre> |
3523 | + <title>Echos</title> |
3524 | + <description></description> |
3525 | + <label-name></label-name> |
3526 | + <release></release> |
3527 | + <track-type></track-type> |
3528 | + <key-signature></key-signature> |
3529 | + <isrc></isrc> |
3530 | + <video-url nil="true"></video-url> |
3531 | + <bpm nil="true"></bpm> |
3532 | + <release-year nil="true"></release-year> |
3533 | + <release-month nil="true"></release-month> |
3534 | + <release-day nil="true"></release-day> |
3535 | + <original-format>wav</original-format> |
3536 | + <license>all-rights-reserved</license> |
3537 | + <uri>https://api.soundcloud.com/tracks/74814003</uri> |
3538 | + <user> |
3539 | + <id type="integer">1197717</id> |
3540 | + <kind>user</kind> |
3541 | + <permalink>vibecatt</permalink> |
3542 | + <username>SUBMARINE</username> |
3543 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3544 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3545 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3546 | + </user> |
3547 | + <permalink-url>http://soundcloud.com/vibecatt/echos</permalink-url> |
3548 | + <artwork-url nil="true"></artwork-url> |
3549 | + <waveform-url>https://w1.sndcdn.com/GuF1Nt5BZaJn_m.png</waveform-url> |
3550 | + <stream-url>https://api.soundcloud.com/tracks/74814003/stream</stream-url> |
3551 | + <playback-count type="integer">148</playback-count> |
3552 | + <download-count type="integer">0</download-count> |
3553 | + <favoritings-count type="integer">5</favoritings-count> |
3554 | + <comment-count type="integer">5</comment-count> |
3555 | + <attachments-uri>https://api.soundcloud.com/tracks/74814003/attachments</attachments-uri> |
3556 | + </track> |
3557 | + <track> |
3558 | + <kind>track</kind> |
3559 | + <id type="integer">38896423</id> |
3560 | + <created-at type="datetime">2012-03-06T16:34:19Z</created-at> |
3561 | + <user-id type="integer">1197717</user-id> |
3562 | + <duration type="integer">151019</duration> |
3563 | + <commentable type="boolean">true</commentable> |
3564 | + <state>finished</state> |
3565 | + <original-content-size type="integer">4974103</original-content-size> |
3566 | + <sharing>public</sharing> |
3567 | + <tag-list></tag-list> |
3568 | + <permalink>work-in-progress-dunno-what-to</permalink> |
3569 | + <streamable type="boolean">true</streamable> |
3570 | + <embeddable-by>all</embeddable-by> |
3571 | + <downloadable type="boolean">false</downloadable> |
3572 | + <purchase-url nil="true"></purchase-url> |
3573 | + <label-id nil="true"></label-id> |
3574 | + <purchase-title nil="true"></purchase-title> |
3575 | + <genre>dubstep/Egyptian </genre> |
3576 | + <title>work in progress dunno what to call it really?</title> |
3577 | + <description></description> |
3578 | + <label-name></label-name> |
3579 | + <release></release> |
3580 | + <track-type>original</track-type> |
3581 | + <key-signature></key-signature> |
3582 | + <isrc></isrc> |
3583 | + <video-url nil="true"></video-url> |
3584 | + <bpm nil="true"></bpm> |
3585 | + <release-year nil="true"></release-year> |
3586 | + <release-month nil="true"></release-month> |
3587 | + <release-day nil="true"></release-day> |
3588 | + <original-format>m4a</original-format> |
3589 | + <license>all-rights-reserved</license> |
3590 | + <uri>https://api.soundcloud.com/tracks/38896423</uri> |
3591 | + <user> |
3592 | + <id type="integer">1197717</id> |
3593 | + <kind>user</kind> |
3594 | + <permalink>vibecatt</permalink> |
3595 | + <username>SUBMARINE</username> |
3596 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3597 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3598 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3599 | + </user> |
3600 | + <permalink-url>http://soundcloud.com/vibecatt/work-in-progress-dunno-what-to</permalink-url> |
3601 | + <artwork-url nil="true"></artwork-url> |
3602 | + <waveform-url>https://w1.sndcdn.com/ZigYRiuqWMZL_m.png</waveform-url> |
3603 | + <stream-url>https://api.soundcloud.com/tracks/38896423/stream</stream-url> |
3604 | + <playback-count type="integer">223</playback-count> |
3605 | + <download-count type="integer">0</download-count> |
3606 | + <favoritings-count type="integer">5</favoritings-count> |
3607 | + <comment-count type="integer">12</comment-count> |
3608 | + <attachments-uri>https://api.soundcloud.com/tracks/38896423/attachments</attachments-uri> |
3609 | + </track> |
3610 | + <track> |
3611 | + <kind>track</kind> |
3612 | + <id type="integer">27745819</id> |
3613 | + <created-at type="datetime">2011-11-11T14:00:12Z</created-at> |
3614 | + <user-id type="integer">1197717</user-id> |
3615 | + <duration type="integer">72099</duration> |
3616 | + <commentable type="boolean">true</commentable> |
3617 | + <state>finished</state> |
3618 | + <original-content-size type="integer">12700844</original-content-size> |
3619 | + <sharing>public</sharing> |
3620 | + <tag-list></tag-list> |
3621 | + <permalink>click-clip</permalink> |
3622 | + <streamable type="boolean">true</streamable> |
3623 | + <embeddable-by>all</embeddable-by> |
3624 | + <downloadable type="boolean">false</downloadable> |
3625 | + <purchase-url nil="true"></purchase-url> |
3626 | + <label-id nil="true"></label-id> |
3627 | + <purchase-title nil="true"></purchase-title> |
3628 | + <genre>Dubstep</genre> |
3629 | + <title>click (clip)</title> |
3630 | + <description></description> |
3631 | + <label-name></label-name> |
3632 | + <release></release> |
3633 | + <track-type>original</track-type> |
3634 | + <key-signature></key-signature> |
3635 | + <isrc></isrc> |
3636 | + <video-url nil="true"></video-url> |
3637 | + <bpm nil="true"></bpm> |
3638 | + <release-year nil="true"></release-year> |
3639 | + <release-month nil="true"></release-month> |
3640 | + <release-day nil="true"></release-day> |
3641 | + <original-format>wav</original-format> |
3642 | + <license>all-rights-reserved</license> |
3643 | + <uri>https://api.soundcloud.com/tracks/27745819</uri> |
3644 | + <user> |
3645 | + <id type="integer">1197717</id> |
3646 | + <kind>user</kind> |
3647 | + <permalink>vibecatt</permalink> |
3648 | + <username>SUBMARINE</username> |
3649 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3650 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3651 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3652 | + </user> |
3653 | + <permalink-url>http://soundcloud.com/vibecatt/click-clip</permalink-url> |
3654 | + <artwork-url>https://i1.sndcdn.com/artworks-000017277180-0i48xv-large.jpg?cc07a88</artwork-url> |
3655 | + <waveform-url>https://w1.sndcdn.com/ie3yyCdzg1e0_m.png</waveform-url> |
3656 | + <stream-url>https://api.soundcloud.com/tracks/27745819/stream</stream-url> |
3657 | + <playback-count type="integer">202</playback-count> |
3658 | + <download-count type="integer">0</download-count> |
3659 | + <favoritings-count type="integer">5</favoritings-count> |
3660 | + <comment-count type="integer">4</comment-count> |
3661 | + <attachments-uri>https://api.soundcloud.com/tracks/27745819/attachments</attachments-uri> |
3662 | + </track> |
3663 | + <track> |
3664 | + <kind>track</kind> |
3665 | + <id type="integer">19273510</id> |
3666 | + <created-at type="datetime">2011-07-18T14:03:53Z</created-at> |
3667 | + <user-id type="integer">1197717</user-id> |
3668 | + <duration type="integer">68675</duration> |
3669 | + <commentable type="boolean">true</commentable> |
3670 | + <state>finished</state> |
3671 | + <original-content-size type="integer">18144044</original-content-size> |
3672 | + <sharing>public</sharing> |
3673 | + <tag-list></tag-list> |
3674 | + <permalink>love-preview</permalink> |
3675 | + <streamable type="boolean">true</streamable> |
3676 | + <embeddable-by>all</embeddable-by> |
3677 | + <downloadable type="boolean">false</downloadable> |
3678 | + <purchase-url nil="true"></purchase-url> |
3679 | + <label-id nil="true"></label-id> |
3680 | + <purchase-title nil="true"></purchase-title> |
3681 | + <genre></genre> |
3682 | + <title>Love (preview)</title> |
3683 | + <description></description> |
3684 | + <label-name></label-name> |
3685 | + <release></release> |
3686 | + <track-type>original</track-type> |
3687 | + <key-signature></key-signature> |
3688 | + <isrc></isrc> |
3689 | + <video-url nil="true"></video-url> |
3690 | + <bpm nil="true"></bpm> |
3691 | + <release-year nil="true"></release-year> |
3692 | + <release-month nil="true"></release-month> |
3693 | + <release-day nil="true"></release-day> |
3694 | + <original-format>wav</original-format> |
3695 | + <license>all-rights-reserved</license> |
3696 | + <uri>https://api.soundcloud.com/tracks/19273510</uri> |
3697 | + <user> |
3698 | + <id type="integer">1197717</id> |
3699 | + <kind>user</kind> |
3700 | + <permalink>vibecatt</permalink> |
3701 | + <username>SUBMARINE</username> |
3702 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3703 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3704 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3705 | + </user> |
3706 | + <permalink-url>http://soundcloud.com/vibecatt/love-preview</permalink-url> |
3707 | + <artwork-url>https://i1.sndcdn.com/artworks-000017277283-w1npy2-large.jpg?cc07a88</artwork-url> |
3708 | + <waveform-url>https://w1.sndcdn.com/cQaVh8HRfUyl_m.png</waveform-url> |
3709 | + <stream-url>https://api.soundcloud.com/tracks/19273510/stream</stream-url> |
3710 | + <playback-count type="integer">135</playback-count> |
3711 | + <download-count type="integer">0</download-count> |
3712 | + <favoritings-count type="integer">0</favoritings-count> |
3713 | + <comment-count type="integer">1</comment-count> |
3714 | + <attachments-uri>https://api.soundcloud.com/tracks/19273510/attachments</attachments-uri> |
3715 | + </track> |
3716 | + <track> |
3717 | + <kind>track</kind> |
3718 | + <id type="integer">19272956</id> |
3719 | + <created-at type="datetime">2011-07-18T13:50:57Z</created-at> |
3720 | + <user-id type="integer">1197717</user-id> |
3721 | + <duration type="integer">288188</duration> |
3722 | + <commentable type="boolean">true</commentable> |
3723 | + <state>finished</state> |
3724 | + <original-content-size type="integer">50803244</original-content-size> |
3725 | + <sharing>public</sharing> |
3726 | + <tag-list></tag-list> |
3727 | + <permalink>stelliferous-era-preview</permalink> |
3728 | + <streamable type="boolean">true</streamable> |
3729 | + <embeddable-by>all</embeddable-by> |
3730 | + <downloadable type="boolean">true</downloadable> |
3731 | + <purchase-url nil="true"></purchase-url> |
3732 | + <label-id nil="true"></label-id> |
3733 | + <purchase-title nil="true"></purchase-title> |
3734 | + <genre></genre> |
3735 | + <title>Stelliferous Era (preview/unmixed)</title> |
3736 | + <description></description> |
3737 | + <label-name></label-name> |
3738 | + <release></release> |
3739 | + <track-type>original</track-type> |
3740 | + <key-signature></key-signature> |
3741 | + <isrc></isrc> |
3742 | + <video-url nil="true"></video-url> |
3743 | + <bpm nil="true"></bpm> |
3744 | + <release-year nil="true"></release-year> |
3745 | + <release-month nil="true"></release-month> |
3746 | + <release-day nil="true"></release-day> |
3747 | + <original-format>wav</original-format> |
3748 | + <license>all-rights-reserved</license> |
3749 | + <uri>https://api.soundcloud.com/tracks/19272956</uri> |
3750 | + <user> |
3751 | + <id type="integer">1197717</id> |
3752 | + <kind>user</kind> |
3753 | + <permalink>vibecatt</permalink> |
3754 | + <username>SUBMARINE</username> |
3755 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3756 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3757 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3758 | + </user> |
3759 | + <permalink-url>http://soundcloud.com/vibecatt/stelliferous-era-preview</permalink-url> |
3760 | + <artwork-url>https://i1.sndcdn.com/artworks-000009425676-5nj0vx-large.jpg?cc07a88</artwork-url> |
3761 | + <waveform-url>https://w1.sndcdn.com/Ux3ASQ4wKaD0_m.png</waveform-url> |
3762 | + <stream-url>https://api.soundcloud.com/tracks/19272956/stream</stream-url> |
3763 | + <download-url>https://api.soundcloud.com/tracks/19272956/download</download-url> |
3764 | + <playback-count type="integer">141</playback-count> |
3765 | + <download-count type="integer">7</download-count> |
3766 | + <favoritings-count type="integer">3</favoritings-count> |
3767 | + <comment-count type="integer">7</comment-count> |
3768 | + <attachments-uri>https://api.soundcloud.com/tracks/19272956/attachments</attachments-uri> |
3769 | + </track> |
3770 | + <track> |
3771 | + <kind>track</kind> |
3772 | + <id type="integer">61643102</id> |
3773 | + <created-at type="datetime">2012-09-29T23:09:05Z</created-at> |
3774 | + <user-id type="integer">25157649</user-id> |
3775 | + <duration type="integer">1691325</duration> |
3776 | + <commentable type="boolean">true</commentable> |
3777 | + <state>finished</state> |
3778 | + <original-content-size type="integer">67763578</original-content-size> |
3779 | + <sharing>public</sharing> |
3780 | + <tag-list>Submarine Deep House Tech Mix Alkatraz</tag-list> |
3781 | + <permalink>0-below-1</permalink> |
3782 | + <streamable type="boolean">true</streamable> |
3783 | + <embeddable-by>all</embeddable-by> |
3784 | + <downloadable type="boolean">true</downloadable> |
3785 | + <purchase-url nil="true"></purchase-url> |
3786 | + <label-id nil="true"></label-id> |
3787 | + <purchase-title nil="true"></purchase-title> |
3788 | + <genre>Deep</genre> |
3789 | + <title>!0 Below #1</title> |
3790 | + <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. |
3791 | + |
3792 | +This series will consist of my favourite 10 Tech House and Deep House tracks I find as I travel this world. |
3793 | + |
3794 | +Enjoy! |
3795 | + |
3796 | +!0 Below #1 |
3797 | + |
3798 | +Tormenta - Las Trompa Llegadas (Submarine Remix) |
3799 | +Kolombo - Stop ou encore |
3800 | +Justin Martin, Christian Martin - Riding Spaceships (Justin Martin Vs. Leroy Peppers - DJ Version) |
3801 | +Sepehr - Apple Bottoms (Original Mix) |
3802 | +Claude VonStroke - Chimps - Re-Edit |
3803 | +Mojo Filter ft Mighty Boosh - Oaky Timbre (Loose Cannons Re-Flik) |
3804 | +Tyrek - Charlie's Soap Box (Original Mix) |
3805 | +Justin Martin, Ardalan - Lezgo VIP (Justin Martin Vs. Ardalan - DJ Version) |
3806 | +Kill Frenzy - Titsss |
3807 | +Kolombo - Busta Ass (Original Mix) |
3808 | + |
3809 | +</description> |
3810 | + <label-name></label-name> |
3811 | + <release></release> |
3812 | + <track-type>live</track-type> |
3813 | + <key-signature></key-signature> |
3814 | + <isrc></isrc> |
3815 | + <video-url nil="true"></video-url> |
3816 | + <bpm nil="true"></bpm> |
3817 | + <release-year nil="true"></release-year> |
3818 | + <release-month nil="true"></release-month> |
3819 | + <release-day nil="true"></release-day> |
3820 | + <original-format>mp3</original-format> |
3821 | + <license>all-rights-reserved</license> |
3822 | + <uri>https://api.soundcloud.com/tracks/61643102</uri> |
3823 | + <user> |
3824 | + <id type="integer">25157649</id> |
3825 | + <kind>user</kind> |
3826 | + <permalink>submarine-5</permalink> |
3827 | + <username>SUBmarine</username> |
3828 | + <uri>https://api.soundcloud.com/users/25157649</uri> |
3829 | + <permalink-url>http://soundcloud.com/submarine-5</permalink-url> |
3830 | + <avatar-url>https://i1.sndcdn.com/avatars-000023509019-umhpcf-large.jpg?cc07a88</avatar-url> |
3831 | + </user> |
3832 | + <permalink-url>http://soundcloud.com/submarine-5/0-below-1</permalink-url> |
3833 | + <artwork-url>https://i1.sndcdn.com/artworks-000031257163-w2f5u5-large.jpg?cc07a88</artwork-url> |
3834 | + <waveform-url>https://w1.sndcdn.com/iWUZQHgatzSu_m.png</waveform-url> |
3835 | + <stream-url>https://api.soundcloud.com/tracks/61643102/stream</stream-url> |
3836 | + <download-url>https://api.soundcloud.com/tracks/61643102/download</download-url> |
3837 | + <playback-count type="integer">106</playback-count> |
3838 | + <download-count type="integer">6</download-count> |
3839 | + <favoritings-count type="integer">2</favoritings-count> |
3840 | + <comment-count type="integer">4</comment-count> |
3841 | + <attachments-uri>https://api.soundcloud.com/tracks/61643102/attachments</attachments-uri> |
3842 | + </track> |
3843 | + <track> |
3844 | + <kind>track</kind> |
3845 | + <id type="integer">4627335</id> |
3846 | + <created-at type="datetime">2010-08-15T18:47:22Z</created-at> |
3847 | + <user-id type="integer">1397546</user-id> |
3848 | + <duration type="integer">1148179</duration> |
3849 | + <commentable type="boolean">true</commentable> |
3850 | + <state>finished</state> |
3851 | + <original-content-size type="integer">14217533</original-content-size> |
3852 | + <sharing>public</sharing> |
3853 | + <tag-list></tag-list> |
3854 | + <permalink>kapital-identitat-mackt-vier</permalink> |
3855 | + <streamable type="boolean">true</streamable> |
3856 | + <embeddable-by>all</embeddable-by> |
3857 | + <downloadable type="boolean">true</downloadable> |
3858 | + <purchase-url nil="true"></purchase-url> |
3859 | + <label-id nil="true"></label-id> |
3860 | + <purchase-title nil="true"></purchase-title> |
3861 | + <genre>tropical</genre> |
3862 | + <title>KAPITAL.IDENTITÄT.MACKT.VIER</title> |
3863 | + <description>Den hemliga trädgården in Stockholm with Wikicong/Tikicong and Dj Rupture on squeky island</description> |
3864 | + <label-name>KIM</label-name> |
3865 | + <release>4</release> |
3866 | + <track-type>remix</track-type> |
3867 | + <key-signature>D</key-signature> |
3868 | + <isrc>12-345-67-89900</isrc> |
3869 | + <video-url nil="true"></video-url> |
3870 | + <bpm type="float">85.0</bpm> |
3871 | + <release-year type="integer">2010</release-year> |
3872 | + <release-month type="integer">8</release-month> |
3873 | + <release-day type="integer">15</release-day> |
3874 | + <original-format>mp3</original-format> |
3875 | + <license>no-rights-reserved</license> |
3876 | + <uri>https://api.soundcloud.com/tracks/4627335</uri> |
3877 | + <user> |
3878 | + <id type="integer">1397546</id> |
3879 | + <kind>user</kind> |
3880 | + <permalink>submarine</permalink> |
3881 | + <username>submarine</username> |
3882 | + <uri>https://api.soundcloud.com/users/1397546</uri> |
3883 | + <permalink-url>http://soundcloud.com/submarine</permalink-url> |
3884 | + <avatar-url>https://i1.sndcdn.com/avatars-000001518209-313nsa-large.jpg?cc07a88</avatar-url> |
3885 | + </user> |
3886 | + <permalink-url>http://soundcloud.com/submarine/kapital-identitat-mackt-vier</permalink-url> |
3887 | + <artwork-url>https://i1.sndcdn.com/artworks-000002102568-87lu6v-large.jpg?cc07a88</artwork-url> |
3888 | + <waveform-url>https://w1.sndcdn.com/vzioG2Vsf9hN_m.png</waveform-url> |
3889 | + <stream-url>https://api.soundcloud.com/tracks/4627335/stream</stream-url> |
3890 | + <download-url>https://api.soundcloud.com/tracks/4627335/download</download-url> |
3891 | + <playback-count type="integer">404</playback-count> |
3892 | + <download-count type="integer">42</download-count> |
3893 | + <favoritings-count type="integer">0</favoritings-count> |
3894 | + <comment-count type="integer">4</comment-count> |
3895 | + <attachments-uri>https://api.soundcloud.com/tracks/4627335/attachments</attachments-uri> |
3896 | + </track> |
3897 | + <track> |
3898 | + <kind>track</kind> |
3899 | + <id type="integer">34649100</id> |
3900 | + <created-at type="datetime">2012-01-26T23:46:38Z</created-at> |
3901 | + <user-id type="integer">1197717</user-id> |
3902 | + <duration type="integer">284763</duration> |
3903 | + <commentable type="boolean">true</commentable> |
3904 | + <state>finished</state> |
3905 | + <original-content-size type="integer">50198444</original-content-size> |
3906 | + <sharing>public</sharing> |
3907 | + <tag-list></tag-list> |
3908 | + <permalink>europa</permalink> |
3909 | + <streamable type="boolean">true</streamable> |
3910 | + <embeddable-by>all</embeddable-by> |
3911 | + <downloadable type="boolean">true</downloadable> |
3912 | + <purchase-url nil="true"></purchase-url> |
3913 | + <label-id nil="true"></label-id> |
3914 | + <purchase-title nil="true"></purchase-title> |
3915 | + <genre>spacy/dubstep</genre> |
3916 | + <title>Europa</title> |
3917 | + <description></description> |
3918 | + <label-name></label-name> |
3919 | + <release></release> |
3920 | + <track-type>original</track-type> |
3921 | + <key-signature></key-signature> |
3922 | + <isrc></isrc> |
3923 | + <video-url nil="true"></video-url> |
3924 | + <bpm nil="true"></bpm> |
3925 | + <release-year nil="true"></release-year> |
3926 | + <release-month nil="true"></release-month> |
3927 | + <release-day nil="true"></release-day> |
3928 | + <original-format>wav</original-format> |
3929 | + <license>all-rights-reserved</license> |
3930 | + <uri>https://api.soundcloud.com/tracks/34649100</uri> |
3931 | + <user> |
3932 | + <id type="integer">1197717</id> |
3933 | + <kind>user</kind> |
3934 | + <permalink>vibecatt</permalink> |
3935 | + <username>SUBMARINE</username> |
3936 | + <uri>https://api.soundcloud.com/users/1197717</uri> |
3937 | + <permalink-url>http://soundcloud.com/vibecatt</permalink-url> |
3938 | + <avatar-url>https://i1.sndcdn.com/avatars-000009396694-nye554-large.jpg?cc07a88</avatar-url> |
3939 | + </user> |
3940 | + <permalink-url>http://soundcloud.com/vibecatt/europa</permalink-url> |
3941 | + <artwork-url>https://i1.sndcdn.com/artworks-000017390975-hr2uvg-large.jpg?cc07a88</artwork-url> |
3942 | + <waveform-url>https://w1.sndcdn.com/yADh0ritdoKv_m.png</waveform-url> |
3943 | + <stream-url>https://api.soundcloud.com/tracks/34649100/stream</stream-url> |
3944 | + <download-url>https://api.soundcloud.com/tracks/34649100/download</download-url> |
3945 | + <playback-count type="integer">381</playback-count> |
3946 | + <download-count type="integer">14</download-count> |
3947 | + <favoritings-count type="integer">6</favoritings-count> |
3948 | + <comment-count type="integer">15</comment-count> |
3949 | + <attachments-uri>https://api.soundcloud.com/tracks/34649100/attachments</attachments-uri> |
3950 | + </track> |
3951 | +</tracks> |
3952 | |
3953 | === added file 'tests/data/valgrind.suppression' |
3954 | --- tests/data/valgrind.suppression 1970-01-01 00:00:00 +0000 |
3955 | +++ tests/data/valgrind.suppression 2013-07-14 08:39:27 +0000 |
3956 | @@ -0,0 +1,61 @@ |
3957 | + |
3958 | +############################### |
3959 | +# GObject rules |
3960 | +############################### |
3961 | + |
3962 | +{ |
3963 | + <insert_a_suppression_name_here> |
3964 | + Memcheck:Leak |
3965 | + ... |
3966 | + fun:g_type_register_static |
3967 | +} |
3968 | + |
3969 | +{ |
3970 | + <insert_a_suppression_name_here> |
3971 | + Memcheck:Leak |
3972 | + ... |
3973 | + fun:g_type_register_fundamental |
3974 | +} |
3975 | + |
3976 | +{ |
3977 | + <insert_a_suppression_name_here> |
3978 | + Memcheck:Leak |
3979 | + ... |
3980 | + fun:type_node_fundamental_new_W |
3981 | +} |
3982 | + |
3983 | +{ |
3984 | + <insert_a_suppression_name_here> |
3985 | + Memcheck:Leak |
3986 | + ... |
3987 | + fun:type_data_make_W |
3988 | +} |
3989 | + |
3990 | +{ |
3991 | + <insert_a_suppression_name_here> |
3992 | + Memcheck:Leak |
3993 | + ... |
3994 | + fun:g_type_add_interface_static |
3995 | +} |
3996 | + |
3997 | +{ |
3998 | + <insert_a_suppression_name_here> |
3999 | + Memcheck:Leak |
4000 | + ... |
4001 | + fun:type_iface_vtable_base_init_Wm |
4002 | +} |
4003 | + |
4004 | +{ |
4005 | + <insert_a_suppression_name_here> |
4006 | + Memcheck:Leak |
4007 | + ... |
4008 | + fun:g_dbus_interface_skeleton_class_intern_init |
4009 | +} |
4010 | + |
4011 | +{ |
4012 | + <insert_a_suppression_name_here> |
4013 | + Memcheck:Leak |
4014 | + ... |
4015 | + fun:g_signal_type_cclosure_new |
4016 | +} |
4017 | + |
4018 | |
4019 | === added file 'tests/main.cpp' |
4020 | --- tests/main.cpp 1970-01-01 00:00:00 +0000 |
4021 | +++ tests/main.cpp 2013-07-14 08:39:27 +0000 |
4022 | @@ -0,0 +1,38 @@ |
4023 | +/* |
4024 | + * Copyright (C) 2013 Canonical, Ltd. |
4025 | + * |
4026 | + * This program is free software; you can redistribute it and/or modify |
4027 | + * it under the terms of the GNU General Public License as published by |
4028 | + * the Free Software Foundation; version 3. |
4029 | + * |
4030 | + * This program is distributed in the hope that it will be useful, |
4031 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
4032 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4033 | + * GNU General Public License for more details. |
4034 | + * |
4035 | + * You should have received a copy of the GNU General Public License |
4036 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
4037 | + * |
4038 | + * Author: Pete Woods <pete.woods@canonical.com> |
4039 | + */ |
4040 | + |
4041 | +#include <config.h> |
4042 | +#include <cstdlib> |
4043 | +#include <gtest/gtest.h> |
4044 | +#include <QtCore/QCoreApplication> |
4045 | + |
4046 | +int main(int argc, char **argv) { |
4047 | + QCoreApplication application(argc, argv); |
4048 | + |
4049 | + setenv("LANG", "C.UTF-8", true); |
4050 | + unsetenv("LC_ALL"); |
4051 | + |
4052 | + setlocale(LC_ALL, ""); |
4053 | + bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); |
4054 | + textdomain(GETTEXT_PACKAGE); |
4055 | + |
4056 | + ::testing::InitGoogleTest(&argc, argv); |
4057 | + int result(RUN_ALL_TESTS()); |
4058 | + |
4059 | + return result; |
4060 | +} |
4061 | |
4062 | === removed file 'tests/test_soundcloud.py' |
4063 | --- tests/test_soundcloud.py 2013-02-13 14:31:12 +0000 |
4064 | +++ tests/test_soundcloud.py 1970-01-01 00:00:00 +0000 |
4065 | @@ -1,63 +0,0 @@ |
4066 | -#! /usr/bin/python3 |
4067 | -# -*- coding: utf-8 -*- |
4068 | -from gi.repository import Unity |
4069 | -from unittest import TestCase |
4070 | -import imp |
4071 | - |
4072 | -class ResultSet(Unity.ResultSet): |
4073 | - def __init__(self): |
4074 | - Unity.ResultSet.__init__(self) |
4075 | - self.results = [] |
4076 | - |
4077 | - def do_add_result(self, result): |
4078 | - self.results.append({'uri':result.uri, |
4079 | - 'title':result.title, |
4080 | - 'comment':result.comment, |
4081 | - 'icon':result.icon_hint}) |
4082 | - |
4083 | - |
4084 | -class ScopeTestCase(TestCase): |
4085 | - def init_scope(self, scope_path): |
4086 | - self.scope_module = imp.load_source('scope', scope_path) |
4087 | - self.scope = self.scope_module.load_scope() |
4088 | - |
4089 | - def perform_query(self, query, filter_set = Unity.FilterSet.new()): |
4090 | - result_set = ResultSet() |
4091 | - ctx = Unity.SearchContext.create(query, 0, filter_set, |
4092 | - None, result_set, None) |
4093 | - s = self.scope.create_search_for_query(ctx) |
4094 | - s.run() |
4095 | - return result_set |
4096 | - |
4097 | - |
4098 | -class TestSoundcloud(ScopeTestCase): |
4099 | - def setUp(self): |
4100 | - self.init_scope('src/unity_soundcloud_daemon.py') |
4101 | - |
4102 | - def tearDown(self): |
4103 | - self.scope = None |
4104 | - self.scope_module = None |
4105 | - |
4106 | - def test_valid_searches(self): |
4107 | - self.scope_module.SEARCH_URI = 'file:tests/data/mock_soundcloud_pass#' |
4108 | - expected_results = ['http://soundcloud.com/vibecatt/echos', 'Echos', |
4109 | - 'http://soundcloud.com/vibecatt/ganymede', 'Ganymede'] |
4110 | - results = [] |
4111 | - for s in ['submarine']: |
4112 | - result_set = self.perform_query(s) |
4113 | - results.append(result_set.results[0]['uri']) |
4114 | - results.append(result_set.results[0]['title']) |
4115 | - results.append(result_set.results[1]['uri']) |
4116 | - results.append(result_set.results[1]['title']) |
4117 | - |
4118 | - self.assertEqual(results, expected_results) |
4119 | - |
4120 | - def test_failing_search(self): |
4121 | - self.scope_module.SEARCH_URI = 'file:tests/data/mock_soundcloud_fail#' |
4122 | - for s in ['submarine']: |
4123 | - result_set = self.perform_query(s) |
4124 | - self.assertEqual(len(result_set.results), 0) |
4125 | - |
4126 | - |
4127 | -if __name__ == '__main__': |
4128 | - unittest.main() |
FAILED: Continuous integration, rev:44 jenkins. qa.ubuntu. com/job/ unity-scope- soundcloud- ci/4/ jenkins. qa.ubuntu. com/job/ unity-scope- soundcloud- saucy-amd64- ci/2/console jenkins. qa.ubuntu. com/job/ unity-scope- soundcloud- saucy-armhf- ci/2/console jenkins. qa.ubuntu. com/job/ unity-scope- soundcloud- saucy-i386- ci/2/console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins: 8080/job/ unity-scope- soundcloud- ci/4/rebuild
http://