amarok: remove, replacement incomming
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
|
@ -1,14 +0,0 @@
|
|||
# Note: Please keep this in sync with Mainpage.dox
|
||||
|
||||
Bart Cerneels <bart.cerneels@kde.org>
|
||||
Edward Toroshchin <edward.hades@gmail.com>
|
||||
Mark Kretschmann <kretschmann@gmail.com>
|
||||
Matěj Laitl <matej@laitl.cz>
|
||||
Myriam Schweingruber <myriam@kde.org>
|
||||
Patrick von Reth <patrick.vonreth@gmail.com>
|
||||
Ralf Engels <ralf-engels@gmx.de>
|
||||
Rick W. Chen <stuffcorpse@archlinux.us>
|
||||
Sam Lade <sam@sentynel.com>
|
||||
Sven Krohlas <sven@asbest-online.de>
|
||||
Téo Mrnjavac <teo@kde.org>
|
||||
Valorie Zimmerman <valorie@kde.org>
|
|
@ -1,247 +0,0 @@
|
|||
project(Amarok)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
|
||||
|
||||
message(STATUS "${CMAKE_MODULE_PATH}")
|
||||
|
||||
option(WITH_UTILITIES "Enable building of utilities" ON)
|
||||
option(WITH_PLAYER "Enable building of main Amarok player" ON)
|
||||
option(WITH_MP3Tunes "Enable mp3tunes in the Amarok player, requires multiple extra dependencies" ON)
|
||||
option(WITH_IPOD "Enable iPod support in Amarok" ON)
|
||||
option(WITH_MYSQL_EMBEDDED "Build the embedded database library -- highly recommended" ON)
|
||||
option(WITH_PLAYGROUND "Enable building of playground scripts and applets (WARNING: some of them might have legal issues!)" OFF)
|
||||
|
||||
############### Taglib
|
||||
set(TAGLIB_MIN_VERSION "1.7")
|
||||
find_package(Taglib REQUIRED)
|
||||
|
||||
# Check if TagLib is built with ASF and MP4 support
|
||||
include(CheckCXXSourceCompiles)
|
||||
set(CMAKE_REQUIRED_INCLUDES "${TAGLIB_INCLUDES}")
|
||||
set(CMAKE_REQUIRED_LIBRARIES "${TAGLIB_LIBRARIES}")
|
||||
|
||||
check_cxx_source_compiles("#include <asftag.h>
|
||||
int main() { TagLib::ASF::Tag tag; return 0;}" TAGLIB_ASF_FOUND)
|
||||
if( NOT TAGLIB_ASF_FOUND )
|
||||
message(FATAL_ERROR "TagLib does not have ASF support compiled in.")
|
||||
endif( NOT TAGLIB_ASF_FOUND )
|
||||
|
||||
check_cxx_source_compiles("#include <mp4tag.h>
|
||||
int main() { TagLib::MP4::Tag tag(0, 0); return 0;}" TAGLIB_MP4_FOUND)
|
||||
if( NOT TAGLIB_MP4_FOUND )
|
||||
message(FATAL_ERROR "TagLib does not have MP4 support compiled in.")
|
||||
endif( NOT TAGLIB_MP4_FOUND )
|
||||
|
||||
check_cxx_source_compiles("#include <modtag.h>
|
||||
#include <modfile.h>
|
||||
#include <s3mfile.h>
|
||||
#include <itfile.h>
|
||||
#include <xmfile.h>
|
||||
using namespace TagLib;
|
||||
int main() { char *s; Mod::Tag tag; Mod::File modfile(s); S3M::File s3mfile(s);
|
||||
IT::File itfile(s); XM::File xmfile(s); return 0; }" TAGLIB_MOD_FOUND)
|
||||
|
||||
check_cxx_source_compiles("#include <opusfile.h>
|
||||
int main() { char *s; TagLib::Ogg::Opus::File opusfile(s); return 0;}" TAGLIB_OPUS_FOUND)
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES)
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
|
||||
set(TAGLIB-EXTRAS_MIN_VERSION "1.0")
|
||||
find_package(Taglib-Extras)
|
||||
set(TAGLIB_EXTRAS_FOUND ${TAGLIB-EXTRAS_FOUND}) # we need a c-compatible name for the include file
|
||||
|
||||
include(CheckTagLibFileName)
|
||||
|
||||
check_taglib_filename(COMPLEX_TAGLIB_FILENAME)
|
||||
###############
|
||||
|
||||
|
||||
# Needed to conditionally build tests and gui
|
||||
if(KDE4_BUILD_TESTS)
|
||||
add_definitions(-DDEBUG)
|
||||
endif()
|
||||
|
||||
if(WITH_DESKTOP_UI)
|
||||
add_definitions(-DDESKTOP_UI)
|
||||
endif()
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed")
|
||||
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
endif (CMAKE_COMPILER_IS_GNUCXX)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shared
|
||||
${CMAKE_CURRENT_BINARY_DIR}/shared
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") # Require C++11
|
||||
|
||||
# WORKAROUND for Clang bug: http://llvm.org/bugs/show_bug.cgi?id=15651
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-delayed-template-parsing")
|
||||
endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32)
|
||||
|
||||
|
||||
include( MacroBoolTo01 )
|
||||
include( MacroLibrary )
|
||||
add_definitions( ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )
|
||||
|
||||
# QCA2 is required for the Script Updater
|
||||
find_package( QCA2 )
|
||||
|
||||
macro_optional_find_package( LibLastFm )
|
||||
set( LIBLASTFM_MIN_VERSION )
|
||||
if( LIBLASTFM_FOUND )
|
||||
if("${LIBLASTFM_VERSION}" VERSION_LESS "1.0.0")
|
||||
set(LIBLASTFM_FOUND FALSE)
|
||||
endif()
|
||||
endif( LIBLASTFM_FOUND )
|
||||
macro_bool_to_01( LIBLASTFM_FOUND HAVE_LIBLASTFM )
|
||||
|
||||
macro_optional_find_package( FFmpeg )
|
||||
|
||||
if( FFMPEG_FOUND )
|
||||
macro_optional_find_package( LibOFA )
|
||||
macro_bool_to_01( LIBOFA_FOUND HAVE_LIBOFA )
|
||||
endif( FFMPEG_FOUND )
|
||||
|
||||
string( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER )
|
||||
if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug )
|
||||
set( DEBUG_BUILD_TYPE ON )
|
||||
add_definitions(-Wall -Wextra)
|
||||
endif( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug )
|
||||
|
||||
# this needs to be here because also code in shared/ needs config.h. This is also the
|
||||
# reason why various checks are above why they belong under if( WITH_PLAYER )
|
||||
configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h )
|
||||
|
||||
add_subdirectory( data )
|
||||
add_subdirectory( images )
|
||||
add_subdirectory( shared )
|
||||
|
||||
if( WITH_PLAYER )
|
||||
include(MacroLogFeature)
|
||||
|
||||
macro_log_feature( QT_QTOPENGL_FOUND "QtOpenGL" "Required for the spectrum analyzer" "http://qt-project.org" FALSE "" "" )
|
||||
|
||||
find_package(MySQLAmarok REQUIRED)
|
||||
if( WITH_MYSQL_EMBEDDED )
|
||||
set( BUILD_MYSQLE_COLLECTION TRUE )
|
||||
macro_log_feature( MYSQL_EMBEDDED_FOUND "mysqld" "Embedded MySQL Libraries" "http://www.mysql.com" TRUE "" "" )
|
||||
else( WITH_MYSQL_EMBEDDED )
|
||||
add_definitions( "-DNO_MYSQL_EMBEDDED" )
|
||||
endif( WITH_MYSQL_EMBEDDED )
|
||||
macro_log_feature( MYSQL_FOUND "mysql" "MySQL Server Libraries" "http://www.mysql.com" TRUE "" "" )
|
||||
|
||||
# zlib is required for mysql embedded
|
||||
find_package(ZLIB REQUIRED)
|
||||
macro_log_feature( ZLIB_FOUND "zlib" "zlib" "" TRUE "" "" )
|
||||
|
||||
macro_log_feature( QCA2_FOUND "qca2" "Qt Cryptographic Architecture" "http://delta.affinix.com/qca/" FALSE "" "" )
|
||||
|
||||
# QJson is required for the PlaydarCollection
|
||||
macro_optional_find_package(QJSON)
|
||||
macro_log_feature( QJSON_FOUND "QJson" "Qt JSON Parser used for the Playdar Collection" "http://qjson.sourceforge.net/" FALSE "" "" )
|
||||
|
||||
# We tell users that we need 1.0.3, but we really check just >= 1.0.0. This is because
|
||||
# upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-(
|
||||
# will be fixed in liblastfm-1.0.4
|
||||
set( LIBLASTFM_MIN_VERSION "1.0.3" )
|
||||
macro_log_feature( LIBLASTFM_FOUND "liblastfm" "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists"
|
||||
"http://cdn.last.fm/client/liblastfm-${LIBLASTFM_MIN_VERSION}.tar.gz" FALSE ${LIBLASTFM_MIN_VERSION} "" )
|
||||
|
||||
macro_log_feature( FFMPEG_FOUND "ffmpeg" "Libraries and tools for handling multimedia data" "http://www.ffmpeg.org/" FALSE "0.7" "" )
|
||||
|
||||
if( FFMPEG_FOUND )
|
||||
macro_log_feature( LIBOFA_FOUND "libofa" "Enable MusicDNS service" "http://code.google.com/p/musicip-libofa/" FALSE "0.9.x" "" )
|
||||
endif( FFMPEG_FOUND )
|
||||
|
||||
##gpodder Service
|
||||
macro_optional_find_package( Mygpo-qt 1.0.7 QUIET )
|
||||
macro_log_feature( LIBMYGPO_QT_FOUND "libmygpo-qt" "Enable gpodder.net service" "http://wiki.gpodder.org/wiki/Libmygpo-qt" FALSE "1.0.7" "" )
|
||||
macro_bool_to_01( LIBMYGPO_QT_FOUND HAVE_LIBMYGPOQT )
|
||||
|
||||
if( WITH_IPOD )
|
||||
find_package(Ipod)
|
||||
if( IPOD_FOUND AND NOT WIN32 )
|
||||
if("${IPOD_VERSION}" VERSION_LESS "0.8.2")
|
||||
set(IPOD_FOUND FALSE)
|
||||
endif()
|
||||
endif( IPOD_FOUND AND NOT WIN32 )
|
||||
macro_log_feature( IPOD_FOUND "libgpod" "Support Apple iPod/iPad/iPhone audio devices" "http://sourceforge.net/projects/gtkpod/" FALSE ${IPOD_MIN_VERSION} "" )
|
||||
macro_optional_find_package(GDKPixBuf)
|
||||
macro_log_feature( GDKPIXBUF_FOUND "GDK-PixBuf" "Support for artwork on iPod audio devices via GDK-PixBuf" "http://developer.gnome.org/arch/imaging/gdkpixbuf.html" FALSE "2.0.x" "" )
|
||||
endif( WITH_IPOD )
|
||||
|
||||
macro_optional_find_package(Mtp)
|
||||
macro_log_feature( MTP_FOUND "libmtp" "Enable Support for portable media devices that use the media transfer protocol" "http://libmtp.sourceforge.net/" FALSE "1.0.0" "")
|
||||
|
||||
if( WITH_MP3Tunes )
|
||||
find_package(CURL)
|
||||
macro_log_feature( CURL_FOUND "curl" "cURL provides the necessary network libraries required by mp3tunes." "http://curl.haxx.se" FALSE "" "" )
|
||||
|
||||
find_package(LibXml2)
|
||||
macro_log_feature( LIBXML2_FOUND "libxml2" "LibXML2 is an XML parser required by mp3tunes." "http://www.xmlsoft.org" FALSE "" "" )
|
||||
|
||||
macro_optional_find_package(OpenSSL)
|
||||
macro_optional_find_package(Libgcrypt)
|
||||
if ( OPENSSL_FOUND OR LIBGCRYPT_FOUND )
|
||||
set (_mp3tunes_crypto TRUE )
|
||||
else ( OPENSSL_FOUND OR LIBGCRYPT_FOUND )
|
||||
message( SEND_ERROR "Building with mp3tunes support REQUIRES either OpenSSL or GNU Libgcrypt" )
|
||||
endif ( OPENSSL_FOUND OR LIBGCRYPT_FOUND )
|
||||
macro_log_feature( _mp3tunes_crypto "openssl or libgcrypt" "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" FALSE "" "" )
|
||||
|
||||
find_package(Loudmouth)
|
||||
macro_log_feature( LOUDMOUTH_FOUND "loudmouth" "Loudmouth is the communication backend needed by mp3tunes for syncing." "http://www.loudmouth-project.org" FALSE "" "" )
|
||||
|
||||
include(CheckQtGlib)
|
||||
macro_log_feature(QT4_GLIB_SUPPORT "Qt4 Glib support" "Qt4 must be compiled with glib support for mp3tunes" "http://www.trolltech.com" FALSE "" "")
|
||||
endif( WITH_MP3Tunes )
|
||||
|
||||
if( WITH_IPOD OR WITH_MP3Tunes )
|
||||
find_package(GObject)
|
||||
macro_log_feature( GOBJECT_FOUND "gobject" "Required by libgpod and mp3tunes." "http://www.gtk.org" FALSE "2.x" "" )
|
||||
find_package(GLIB2)
|
||||
macro_log_feature( GLIB2_FOUND "glib2" "Required by libgpod and mp3tunes" "http://www.gtk.org" FALSE "2.x" "")
|
||||
endif( WITH_IPOD OR WITH_MP3Tunes )
|
||||
|
||||
find_program( CLAMZ_FOUND clamz PATH )
|
||||
macro_log_feature( CLAMZ_FOUND "clamz" "Optional requirement to download songs from the Amazon MP3 store. Highly recommended on Linux, as the official downloader from Amazon is quite broken on many systems." "https://code.google.com/p/clamz/" FALSE )
|
||||
|
||||
find_package(PythonInterp)
|
||||
macro_log_feature(PYTHONINTERP_FOUND "Python" "Required for generating the autocompletion file for the script console" "https://www.python.org" FALSE "2.x" "")
|
||||
|
||||
include_directories( ${KDE4_INCLUDES} )
|
||||
|
||||
if( KDE4_BUILD_TESTS AND NOT WIN32 )
|
||||
ENABLE_TESTING()
|
||||
add_subdirectory( tests )
|
||||
endif( KDE4_BUILD_TESTS AND NOT WIN32 )
|
||||
|
||||
add_subdirectory( src )
|
||||
|
||||
# Also display taglib in the feature log
|
||||
macro_log_feature( TAGLIB_FOUND "taglib" "Support for Audio metadata." "http://developer.kde.org/~wheeler/taglib.html" TRUE "${TAGLIB_MIN_VERSION}" "Required for tag reading" )
|
||||
# following line is here (and not near TAGLIB_MOD_FOUND) because there may be no MacroLogFeature without kdelibs
|
||||
macro_log_feature( TAGLIB_MOD_FOUND "taglib" "Additional support for Audio metadata of mod, s3m, it and xm files." "http://developer.kde.org/~wheeler/taglib.html" FALSE "1.8" "" )
|
||||
macro_log_feature( TAGLIB_OPUS_FOUND "taglib" "Additional support for Audio metadata of opus files." "http://developer.kde.org/~wheeler/taglib.html" FALSE "1.9" "" )
|
||||
|
||||
endif( WITH_PLAYER )
|
||||
|
||||
if( WITH_UTILITIES )
|
||||
set(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Base directory for executables and libraries" FORCE)
|
||||
set(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "The subdirectory to the binaries prefix (default prefix/bin)" FORCE)
|
||||
add_subdirectory( utilities )
|
||||
endif( WITH_UTILITIES )
|
||||
|
||||
if( WITH_PLAYGROUND )
|
||||
add_subdirectory( playground )
|
||||
message(STATUS "Included playground subdirectory in configuration")
|
||||
endif( WITH_PLAYGROUND )
|
||||
|
||||
include(CTest)
|
340
amarok/COPYING
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -1,397 +0,0 @@
|
|||
GNU Free Documentation License
|
||||
Version 1.2, November 2002
|
||||
|
||||
|
||||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
0. PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document "free" in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of "copyleft", which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
|
||||
1. APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The "Document", below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as "you". You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A "Modified Version" of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A "Secondary Section" is a named appendix or a front-matter section of
|
||||
the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall subject
|
||||
(or to related matters) and contains nothing that could fall directly
|
||||
within that overall subject. (Thus, if the Document is in part a
|
||||
textbook of mathematics, a Secondary Section may not explain any
|
||||
mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The "Invariant Sections" are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The "Cover Texts" are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A "Transparent" copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not "Transparent" is called "Opaque".
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, LaTeX input format, SGML
|
||||
or XML using a publicly available DTD, and standard-conforming simple
|
||||
HTML, PostScript or PDF designed for human modification. Examples of
|
||||
transparent image formats include PNG, XCF and JPG. Opaque formats
|
||||
include proprietary formats that can be read and edited only by
|
||||
proprietary word processors, SGML or XML for which the DTD and/or
|
||||
processing tools are not generally available, and the
|
||||
machine-generated HTML, PostScript or PDF produced by some word
|
||||
processors for output purposes only.
|
||||
|
||||
The "Title Page" means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, "Title Page" means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
A section "Entitled XYZ" means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as "Acknowledgements",
|
||||
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section "Entitled XYZ" according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
|
||||
2. VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
|
||||
3. COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
|
||||
4. MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
A. Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
B. List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
C. State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
D. Preserve all the copyright notices of the Document.
|
||||
E. Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
F. Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
G. Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
H. Include an unaltered copy of this License.
|
||||
I. Preserve the section Entitled "History", Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled "History" in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
J. Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the "History" section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
K. For any section Entitled "Acknowledgements" or "Dedications",
|
||||
Preserve the Title of the section, and preserve in the section all
|
||||
the substance and tone of each of the contributor acknowledgements
|
||||
and/or dedications given therein.
|
||||
L. Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
M. Delete any section Entitled "Endorsements". Such a section
|
||||
may not be included in the Modified Version.
|
||||
N. Do not retitle any existing section to be Entitled "Endorsements"
|
||||
or to conflict in title with any Invariant Section.
|
||||
O. Preserve any Warranty Disclaimers.
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled "Endorsements", provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties--for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
|
||||
5. COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled "History"
|
||||
in the various original documents, forming one section Entitled
|
||||
"History"; likewise combine any sections Entitled "Acknowledgements",
|
||||
and any sections Entitled "Dedications". You must delete all sections
|
||||
Entitled "Endorsements".
|
||||
|
||||
|
||||
6. COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
|
||||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an "aggregate" if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included in an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
|
||||
8. TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled "Acknowledgements",
|
||||
"Dedications", or "History", the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
|
||||
9. TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document except
|
||||
as expressly provided for under this License. Any other attempt to
|
||||
copy, modify, sublicense or distribute the Document is void, and will
|
||||
automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this
|
||||
License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
|
||||
10. FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
http://www.gnu.org/copyleft/.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation.
|
||||
|
||||
|
||||
ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
Copyright (c) YEAR YOUR NAME.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the "with...Texts." line with this:
|
||||
|
||||
with the Invariant Sections being LIST THEIR TITLES, with the
|
||||
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
|
@ -1,510 +0,0 @@
|
|||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations
|
||||
below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it
|
||||
becomes a de-facto standard. To achieve this, non-free programs must
|
||||
be allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control
|
||||
compilation and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at least
|
||||
three years, to give the same user the materials specified in
|
||||
Subsection 6a, above, for a charge no more than the cost of
|
||||
performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply, and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License
|
||||
may add an explicit geographical distribution limitation excluding those
|
||||
countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms
|
||||
of the ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library.
|
||||
It is safest to attach them to the start of each source file to most
|
||||
effectively convey the exclusion of warranty; and each file should
|
||||
have at least the "copyright" line and a pointer to where the full
|
||||
notice is found.
|
||||
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or
|
||||
your school, if any, to sign a "copyright disclaimer" for the library,
|
||||
if necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James
|
||||
Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
set(CTEST_PROJECT_NAME "Amarok")
|
||||
set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
|
||||
|
||||
set(CTEST_DROP_METHOD "http")
|
||||
set(CTEST_DROP_SITE "my.cdash.org")
|
||||
set(CTEST_DROP_LOCATION "/submit.php?project=Amarok")
|
||||
set(CTEST_DROP_SITE_CDASH TRUE)
|
||||
|
5912
amarok/ChangeLog
|
@ -1,133 +0,0 @@
|
|||
****************************************************************************
|
||||
* BIG FAT WARNING: *
|
||||
* Media Device Framework is outdated and is going to be removed as soon as *
|
||||
* we rewrite MtpCollection and AudioCdColleciton not to use it anymore. *
|
||||
****************************************************************************
|
||||
|
||||
Media Device Framework
|
||||
======================
|
||||
|
||||
1. Solid Interface
|
||||
|
||||
Solid is KDE's hardware detection library, and Amarok uses it to detect
|
||||
all of the devices that it knows how to interface with. It does this
|
||||
through two classes:
|
||||
|
||||
MediaDeviceCache(singleton) - Talks directly to Solid, gets list of all
|
||||
present media devices and external hard drives, even if Amarok does not
|
||||
support them.
|
||||
|
||||
MediaDeviceMonitor(singleton) - Talks to the MDC to see what devices are
|
||||
available. Keeps track of the kind of devices that Amarok supports.
|
||||
It does this by receiving and caching a single ConnectionAssistant
|
||||
object from the MediaDeviceCollectionFactory of the particular device
|
||||
type, so that as devices are detected, they can be tested for
|
||||
compatibility with Amarok.
|
||||
|
||||
2. Collection/Metadata
|
||||
|
||||
Music-related data in Amarok is handled in Collections, themselves
|
||||
consisting of metadata such as Tracks, Artists etc. The base classes
|
||||
to set up collections are abstract, and several classes which provide
|
||||
more media-device-specific methods are available to be subclassed. It
|
||||
is some of these classes that must be subclassed to add support in
|
||||
Amarok for a device. The heart of it all is MediaDeviceHandler, and
|
||||
this class will be discussed in depth.
|
||||
|
||||
NNTS = No Need To Subclass
|
||||
|
||||
2.1 Connection
|
||||
|
||||
ConnectionAssistant - Knows how to identify that a particular device
|
||||
matches the type of this CA. Can also create MediaDeviceInfo.
|
||||
|
||||
MediaDeviceInfo - Contains the device-specific information pertinent to
|
||||
connection, such as mountpoint.
|
||||
|
||||
2.2 Factory/Collection
|
||||
|
||||
MediaDeviceCollectionFactory(NNTS) - Creates
|
||||
MediaDeviceCollections. Provides ConnectionAssistant to register the
|
||||
appropriate device type with the MDM.
|
||||
|
||||
MediaDeviceCollection - Given a MediaDeviceInfo object, connects to the
|
||||
device described by creating a MediaDeviceHandler. Provides a few
|
||||
other rudimentary functions.
|
||||
|
||||
MediaDeviceCollectionLocation(NNTS) - Receives/sends orders to add
|
||||
tracks to Collection, remove them, copy them. move them. Forwards the
|
||||
low-level work (the actual copying/deleting etc.) to the
|
||||
MediaDeviceHandler.
|
||||
|
||||
MediaDeviceMeta*(NNTS) - The actual metadata a Collection consists of:
|
||||
Track, Album, Artist, Genre, Composer. No need to reimplement these,
|
||||
as they are standard across all devices, and the interactions
|
||||
concerning them are dealt with in the MediaDeviceHandler.
|
||||
|
||||
2.3 Handler and Capabilities
|
||||
|
||||
2.3.1 Handler
|
||||
|
||||
MediaDeviceHandler - This is it. This is the beast that knows how to
|
||||
do all the low-level tasks specific to a given device: connection,
|
||||
parsing metadata, copying, deletion, changing of metadata, battery%,
|
||||
device capacity, the whole lot of it. Since it is responsible for so
|
||||
many pieces, and since these pieces vary greatly from device to device,
|
||||
it actually relies on Capability-based classes that each know how to do
|
||||
a particular job.
|
||||
|
||||
Capabilities are similar to Java interfaces, and provide a standard
|
||||
way for the MediaDeviceHandler class to ask the many subclasses of
|
||||
MediaDeviceHandler for what they are capable of, and depending on that,
|
||||
will make different requests. For instance, AudioCDs cannot
|
||||
be written to, so they would have no use for WriteCapability, and don't
|
||||
have to implement it.
|
||||
|
||||
The MediaDeviceHandler has abstracted the logic so common to several
|
||||
device implementations. The libraries libgpod and libmtp, for
|
||||
instance, are based on a struct that is a linked list of metadata, in
|
||||
particular tracks. The common way to parse the devices with these
|
||||
libraries is to walk down this linked list until all metadata has been
|
||||
read into the appropriate MediaDeviceMeta classes. This is exactly
|
||||
what the Handler does, and the only differences are the names of the
|
||||
linked list structs, and the functions called or member data read to
|
||||
retrieve this data. It is these basic function calls that are then
|
||||
called in the subclasses of the Capability classes, with the
|
||||
top-level logic already standardized and done in the main
|
||||
MediaDeviceHandler class.
|
||||
|
||||
Note: To see the logic hereto referred, check the MediaDeviceHandler's
|
||||
calls to the Capability classes, and the order of the function calls.
|
||||
This helps to understand how best to map the functions of the
|
||||
Capability interface, to function calls or member-data access using the
|
||||
appropriate library.
|
||||
|
||||
2.3.2 Capabilities
|
||||
|
||||
ReadCapability - Maps the necessary functions to read the structs
|
||||
specific to the device, with the goal of parsing the entire device's
|
||||
metadata. Can also read the device's capacity, used and total.
|
||||
|
||||
WriteCapability - Receives generic commands related to writing to
|
||||
the device: find where to copy a new track onto the device, copy the
|
||||
track, delete the track. Subclass this Capability also to provide a full
|
||||
mapping onto the functions required to set the metadata on a newly
|
||||
created track struct, and the higher logic of in what order to do this
|
||||
is handled by the main Handler class.
|
||||
|
||||
ArtworkCapability - Optional. If the device supports artwork, this
|
||||
provides the interface for reading/writing that artwork.
|
||||
|
||||
PlaylistCapability - Optional. If the device supports playlists, this
|
||||
provides the interface for reading/writing playlists, parsing logic is
|
||||
based again on a linked-list struct that is traversed in a standard
|
||||
fashion. The subclass of this just maps to the appropriate functions
|
||||
to walk the linked list.
|
||||
|
||||
|
||||
3. Appendix/Notes
|
||||
|
||||
- At the time of writing, there isn't a full implementation of Solid on
|
||||
Windows or Mac, which limits support of devices mainly to Linux. Also,
|
||||
libraries used to interface at the low level (libgpod, libmtp) are
|
||||
Linux-specific.
|
Before Width: | Height: | Size: 194 KiB |
|
@ -1,27 +0,0 @@
|
|||
Collection Architecture
|
||||
-----------------------
|
||||
|
||||
Collection is a container for a set of objects that collectively provider tracks to the application.
|
||||
It does this by providing Meta::Base derieved objects via the QueryMaker (which every collection has).
|
||||
|
||||
On plugin load a CollectionFactory is registered with CollectionManager which listens to the
|
||||
newCollection() signal. CollectionManager is responsible for integrating the new Collection within
|
||||
the rest of the application. Collection makes user visible strings, icons and other information
|
||||
available for the UI to use.
|
||||
|
||||
TrackProvider actually creates the Meta::Track objects using trackForUrl() which has a specially
|
||||
formatted URL that is unique accross application settings. A collection has it's own URL protocol
|
||||
which all uidUrl's of the collection's tracks start with.
|
||||
|
||||
For getting tracks according to metadata or statistical information each Collection has a QueryMaker
|
||||
implementation. Any component can get an instance of this specialized QueryMaker using Collection::queryMaker().
|
||||
CollectionManager has a special QueryMaker that will return results of all the registered collections
|
||||
using their queryMaker(). Use this if you want a track resolved without caring about it's origin.
|
||||
|
||||
TrackProvider and QueryMakers can be used seperatly from the collections. In practice though you'll
|
||||
find only TrackProvider getting used by Services and the filesystem browser. If needing to combinine
|
||||
it with a QueryMaker you are probably creating a Collection anyway.
|
||||
Also note that Collection objects don't use shared pointers so they are not especially well protected
|
||||
against getting removed. Holding the pointer to a QueryMaker for a prolonged amount of time
|
||||
invites problems (e.g. when the usb device is removed. We had a number of bugs for this)
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
Meta Architecture
|
||||
-----------------
|
||||
|
||||
The meta objects (located in src/core/meta) e.g. Meta::Track and the more
|
||||
often used Meta::TrackPtr represent data connected to music related objects.
|
||||
|
||||
There are classes for Tracks, Albums, Artists, Composers, Genres, Years and Labels.
|
||||
These classes all derive from Meta::Base to facilitate their common methods (name
|
||||
and sorting) and observer interaction.
|
||||
|
||||
[Design decision] They are not QObjects to avoid the overhead of the Qt MetaObject
|
||||
support variables. Collections are potentially millions of tracks where a significant
|
||||
proportion of tracks (in the case of MemoryCollections: all tracks) could at any time
|
||||
be loaded in memory.
|
||||
|
||||
Meta::Observer is a virtual class that can be derived from by components that are
|
||||
interested in changes to the tracks during application lifetime. It has
|
||||
metadataChanged() methods for each of the Meta types and the ability to subscribe
|
||||
to any Meta object.
|
||||
|
||||
KSharedPtr is used for all functions returning a pointer in the Meta classes. It strong,
|
||||
reference tracking smart pointer which will only delete an object once the last reference
|
||||
holding KSharedPtr goes out of scope or is deleted.
|
||||
|
||||
[Note] Playlists will be made part of Meta as well. They have a similar Observer
|
||||
pattern but have been kept seperate because PlaylistObserver requires more functions.
|
||||
Pollution of the Observer class could be avoided using a playlistChanged(enum Change,
|
||||
QVariant value) type method.
|
||||
|
||||
[Design decision] The list of meta objects contains Tracks, Albums, Artists, Composers,
|
||||
Genres, Years and Labels because these are the categories that you can sort by in
|
||||
the collection view and thus have to be returned by the QueryMaker and represented
|
||||
in an item in the CollectionTreeItem.
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
Playback Queue Architecture
|
||||
---------------------------
|
||||
|
||||
Simple sequential list of upcoming tracks. The PlaybackController takes the first track on this list for playback. It does not include the currently playing track.
|
||||
There are no modes (random, repeat, etc) affecting the playback order. The behavior of these modes are implemented using Playlists and playlist-tracking who change the actual content of the queue to get the same result.
|
||||
|
||||
A QAbstractItemModel for the PlaybackQueue is exposed as the main interface. It's possible to insert and remove rows using the default methods and drag/drop of mime-data containing meta types is supported. It's a flat QModelIndex containing only tracks. For purposes of display it can be used with proxy models such as QtGroupingProxy to group by album/artist/composer. Sorting of the queue is possible but is one undoable QAction. How the new order is determined does not matter, but use a proxy models such as QSortFilterProxyModel is suggested because of it's well known semantics and uses within Amarok.
|
||||
Using extra columns and data roles the PlaybackQueueModel gives info about certain queue-only information associated with a track. An example of this is whether a track is part of a tracked playlist or if a manual user interaction locked the track at it's current place.
|
||||
|
||||
Playback history is not part of the PlaybackQueue. It has to be implemented separately using a PlaybackObserver.
|
||||
|
||||
Old Playlist Queue Manager Behavior
|
||||
-----------------------------------
|
||||
Select in order and press Ctrl+U to move those tracks in selection order to the top of the queue.
|
|
@ -1,88 +0,0 @@
|
|||
Playlist architecture
|
||||
---------------------
|
||||
note: this is about the media sources playlist, *not* The Playlist as the playback queue has been called for historic reasons.
|
||||
|
||||
A playlist is an ordered list of tracks. The creation method of this list determines the type (or category):
|
||||
* When created by the user themselves and manually editable it's a User Playlist.
|
||||
|
||||
* A Dynamic Playlist is generated based on some statistical rules. It's an amarok specific type that also reacts to changes made in the playback queue by the user.
|
||||
|
||||
* A Smart Playlist is the result of a query of the Collections. It doesn't change unless it's being re-generated at startup or at the user's request.
|
||||
|
||||
A Radio Channel has tracks that are not or only limited determined by the user but rather come in as a "stream" (high level). Implementation can be a single HTTP/RTSP URL like icecast or a pre-selected list of stream-able URLs such as with last.fm. The implementations can allow some control over track selection with functionality like last.fm's love/ban or tag selection like spotify.
|
||||
|
||||
* Podcast Channels are also playlists that are generated by parsing a podcast feed (RSS or atom). They only contain tracks of the PodcastEpisode type. In amarok they are displayed separately from the other playlists but internally they use the same code such as the ItemModels, PlaylistManager and the synchronization support.
|
||||
|
||||
[note] The Playlist base class currently lives in the Playlists:: namespace. It is to be moved to Meta::.
|
||||
|
||||
Asynchronous Track Loading
|
||||
--------------------------
|
||||
The tracks() method will return immediately, possibly with a list of tracks that were already in memory. A call to the tracks() method might also do a triggerTrackLoad() which will start the asynchronous loading of tracks in the background. PlaylistObserver::trackAdded() will be called for each track that is added additionally to the playlist. trackRemoved() can also be called when the previous tracklist is affected.
|
||||
[note] automatic loading and async depends on the implementation.
|
||||
|
||||
PlaylistProvider
|
||||
----------------
|
||||
The PlaylistProvider base class is registered with PlaylistManager so it can act as a central point to distribute playlist to other Amarok components.
|
||||
Playlist loading can also be made asynchronous in the implementations. PlaylistProvider::playlistCount() can return -1 to indicate a full load is required to calculate this. After calling playlists(), which can return an empty list, playlistAdded() signals might be emitted while the asynchronous loading is going on.
|
||||
PlaylistProviders can offer the UI QActions for the provider, a specific playlist or a specific track in a playlist. Playlist also has these last 2 methods which in the default implementation call the provider's implementations. It's recommended to implement playlist and track actions in the provider.
|
||||
|
||||
Playlist Synchronization
|
||||
------------------------
|
||||
It's possible to set up a link between playlists of the same category but from different PlaylistProviders. PlaylistManager will try to bring those playlists in the same state i.e. the same tracks in the same order.
|
||||
The synchronization logic is implemented in SyncedPlaylist, a virtual class created with a factory pattern so other syncing algorithms can be applied at runtime. An example where this could be used: GPodderProvider's playlists are representations of the state of data on a web-service (gpodder.net). It has certain restrictions but also features that go beyond regular playlist synchronization. GPodderProvider can create a SyncedPlaylist class that specifically handles podcasts and keeps the limitations of the service and PodcastChannels in mind.
|
||||
[note] currently podcast synchronization uses the special function Playlist::syncTrackStatus() which should be replaced by the above mechanism to avoid implementation-at-high-level-creep.
|
||||
|
||||
A SynchronizedPlaylist will appear to the higher layers as one playlist which exists on multiple PlaylistProviders. In order to display the multiple copies to the user a QItemProxyModel is used by the UI.
|
||||
|
||||
The synchronization algorithm uses only those functions that are also needed by the regular playlist use cases. In theory Playlist implementations don't need to think about synchronization. In practice synchronization will only properly work with fully functional PlaylistProvider and Playlist implementations, which are desirable anyway.
|
||||
|
||||
PlaylistBrowserModel
|
||||
--------------------
|
||||
PlaylistBrowserModel is the base class for ItemModels used to display the various playlist types. Although all playlist can be displayed using this base class all categories have their own specialized implementation to implement setData(), dropMimeData() and category specific actions (ex. PodcastModel::refreshPodcasts()). Not that these are usually convenience version of Provider actions.
|
||||
PlaylistBrowser model requests playlist for it's category from PlaylistManager who gathers them from the providers and group Synchronized playlists together in a SyncedPlaylist. PlaylistBrowserModel is a tree with playlist on the first level and tracks as it's children. In order to have playlists grouped by origin (i.e. PlaylistProvider) the PlaylistByProvider proxy.
|
||||
|
||||
Playlist Tracking by PlaybackQueue
|
||||
----------------------------------
|
||||
The PlaybackQueue can be made to track a single playlist's state. In general this just means that all current tracks of the playlist are appended to the queue and that it will act on trackAdded() signals. However, because the playback queue only has the upcoming tracks changes to tracks that have already been played are not possible. The distinction between a playlist and the queue has to be clear to the user.
|
||||
Using playlist tracking it's possible to implement all modes of the old Playlist by creating categories implementing the behavior of the modes.
|
||||
|
||||
User Playlists
|
||||
--------------
|
||||
File based: XSPFPlaylist, M3UPlaylist, PLSPlaylist
|
||||
Database based: SqlPlaylist
|
||||
|
||||
These playlists will load tracks using MetaProxy::Track which will start a worker thread to get a real track object using CollectionManager::trackForUrl(). It depends on the implementation and contents of the file which URL is used to resolve the track.
|
||||
M3U and PLS by specification require their contents to be playable URLs. For most collections the playable URL and uidUrl won't match, so these tracks won't be playable until their "real" track is resolved.
|
||||
XSPF does support storing of the uidUrl (identifier tag). Amarok always writes track's uidUrl to XSPF. The current playback queue state is also saved with XSPF to a dedicated file ($KDEHOME/share/apps/amarok/current.xspf).
|
||||
The playlist implementation fills the proxy tracks with any tag information it has stored. This way a recently loaded playlist has usable content while loading tracks is done asynchronously.
|
||||
If the playback queue is restored with invalid (empty) tracks, XSPFPlaylist, MetaProxy and CollectionManager::trackForUrl() are to be investigated.
|
||||
|
||||
Dynamic Playlists
|
||||
-----------------
|
||||
Using a custom UI the settings for selecting tracks are configured. The Dynamic Playlist will select tracks and make them available from the tracks() method. These tracks can be displayed to the user as a preview of the settings but are mainly used in the playback queue.
|
||||
Using the Selector/Bias system other components and plugins can add track selection conditions or statistical bias options to the dynamic playlist generator.
|
||||
[note] current implementation does not derive from Playlists::Playlist nor does it use a PlaylistProvider. It's a mode of the playback queue, not a loadable playlist.
|
||||
|
||||
Smart Playlists
|
||||
---------------
|
||||
The basis of a Smart Playlist is a QueryMaker query and some additional limiters such as track count and total file size (useful to fill a media player). The list of tracks is not kept between sessions so a smart playlist is generated when first accessed. To avoid unneeded recalculation an active smart playlist will only be regenerated when the user requests it or when the synchronization of a playlist requires an up-to-date list.
|
||||
|
||||
Podcast Channels
|
||||
----------------
|
||||
This type is used for both the local (SQL based) PodcastProvider, some media device implementations and the gpodder web service. In the local collection the utility class PodcastReader is used to parse a podcast feed and update the PodcastChannel implementation. The base classes of PodcastMeta.cpp are used as intermediary data storage for new Channels and Episodes that have not been saved in the PodcastProvider yet.
|
||||
|
||||
Radio Channels
|
||||
--------------
|
||||
The most common form of a radio channel is a HTTP stream. This implementation listens to signals from EngineController/PlaybackController/Phonon while playing the stream and determines when a metadata change represents a real track change. It will then push append the a new track with that metadata but the same url. This will not cause a real track change but rather a transition in the PlaybackController to the new playing track. It's a seamless progression in the PlaybackQueue as well.
|
||||
|
||||
Services like last.fm and spotify also provider Radio Channels but it's implementation in possible user interaction is implementation specific.
|
||||
|
||||
Random/Shuffle Playlist
|
||||
-----------------------
|
||||
This is a very simple randomizing playlist that takes the current play queue and shuffles the upcoming tracks at the start of a playing track. This way the user can see the next upcoming track already and change or remove them if desired. This playlist will respect the manual changes made to the playback order and not shuffle any of the tracks queued by the user.
|
||||
The shuffling of tracks should be a visual animation to make it clear what is happening and be somewhat pleasing to watch.
|
||||
|
||||
Old Playlist Queue Manager Behavior
|
||||
-----------------------------------
|
||||
|
||||
Implemented in PlaybackQueue.
|
|
@ -1,92 +0,0 @@
|
|||
This document explains how to install Amarok 2 from git in your home directory - in an easy way :)
|
||||
==================================================================================================
|
||||
|
||||
A detailed blog post on how to make a local build can be found here: http://blogs.fsfe.org/myriam/2009/09/26/compiling-amarok-from-git-locally-full-summary/
|
||||
|
||||
* If you already have Amarok installed from your distro, uninstall it to prevent setting conflicts and similar.
|
||||
|
||||
* Install git, the compiler and KDE 4 development packages:
|
||||
|
||||
In Kubuntu, Debian, and all their derivatives:
|
||||
sudo aptitude install git-core build-essential kdesdk kdelibs5-dev libkonq5-dev kdebase-workspace-dev
|
||||
|
||||
In Archlinux:
|
||||
sudo pacman -Sy git base-devel kdelibs kdebase-runtime
|
||||
|
||||
In Gentoo:
|
||||
sudo emerge -av dev-util/git kdelibs plasma-workspace
|
||||
|
||||
In OpenSuSE:
|
||||
sudo zypper install git
|
||||
|
||||
In Fedora:
|
||||
sudo yum install git kdelibs-devel
|
||||
|
||||
|
||||
* Install ccache to speed up compilation
|
||||
ccache -M 2G
|
||||
|
||||
* Append the following to $HOME/.bashrc:
|
||||
export PATH=$HOME/kde/bin:$PATH
|
||||
export KDEDIR=$HOME/kde
|
||||
export KDEDIRS=$KDEDIR
|
||||
|
||||
* Reload your edited .bashrc:
|
||||
source $HOME/.bashrc
|
||||
|
||||
NOTE: if you are not using the bash shell, edit your proper shell config file (~/.zshrc or ~/.tcshrc or whatever it may be)
|
||||
|
||||
* Make KDE aware of Amarok's plugin location:
|
||||
echo 'export KDEDIR=$HOME/kde' >> $HOME/.kde/env/myenv.sh
|
||||
echo 'export KDEDIRS=$KDEDIR' >> $HOME/.kde/env/myenv.sh
|
||||
|
||||
Some distributions call the above folder $HOME/.kde4/... (OpenSuSE in particular).
|
||||
|
||||
* Create folders:
|
||||
mkdir $HOME/kde
|
||||
mkdir $HOME/kde/src
|
||||
mkdir -p $HOME/kde/build/amarok
|
||||
|
||||
* Make sure you have all necessary dependencies
|
||||
See the README file for the complete list of necessary dependencies. Make sure you have the development files of these packages.
|
||||
For distribution specific requirements refer to http://community.kde.org/Amarok/Development/Development_HowTo
|
||||
|
||||
* Check out Amarok:
|
||||
cd $HOME/kde/src
|
||||
git clone git://anongit.kde.org/amarok
|
||||
|
||||
* Building:
|
||||
cd $HOME/kde/build/amarok
|
||||
cmake -DCMAKE_INSTALL_PREFIX=$HOME/kde -DCMAKE_BUILD_TYPE=debugfull $HOME/kde/src/amarok
|
||||
make install
|
||||
|
||||
* Enabling unit tests:
|
||||
|
||||
If you are a regular Amarok contributor, please build with tests enabled.
|
||||
|
||||
Install gmock from http://code.google.com/p/googlemock/
|
||||
Add the following flag to your cmake line: -DKDE4_BUILD_TESTS=ON
|
||||
|
||||
Once compiled, jsut run the tests with 'make test'
|
||||
|
||||
For more information about the test infrastructure, read the Qtestlib Manual: http://doc.trolltech.com/4.5/qtestlib-manual.html
|
||||
|
||||
* Updating KDE Config:
|
||||
kbuildsycoca4 --noincremental
|
||||
|
||||
|
||||
Now you are ready to run Amarok 2, by typing "amarok" in the shell :)
|
||||
|
||||
Please also refer to the following wiki page
|
||||
http://techbase.kde.org/Getting_Started/Sources/KDE_git-tutorial
|
||||
|
||||
NOTE:
|
||||
If you have installed MySQL Embedded in non-default location (i.e. $HOME/usr),
|
||||
Amarok may fail to start with error regarding libmysqlclient library. In this
|
||||
case, add the following string to your ~/.bashrc:
|
||||
export LD_LIBRARY_PATH=$HOME/usr/lib/mysql:$LD_LIBRARY_PATH
|
||||
|
||||
where $HOME/usr is the path you've used in --prefix option.
|
||||
|
||||
|
||||
Have fun :)
|
|
@ -1,23 +0,0 @@
|
|||
|
||||
# --[ Close bug in bugs.kde.org as fixed ]-----------------------------|
|
||||
#BUG: <bug number>
|
||||
#FIXED-IN: <optional release version>
|
||||
#
|
||||
# --[ Add to release changelog optionally close wish in bugs.kde.org ]-|
|
||||
#FEATURE: <optional bug number>
|
||||
#FIXED-IN: <optional release version>
|
||||
#
|
||||
# --[ Copy commit message to a bug or wish in bugs.kde.org ]-----------|
|
||||
#CCBUG: <bug number>
|
||||
#
|
||||
# --[ Copy commit message to an email address ]------------------------|
|
||||
#CCMAIL: <email>
|
||||
#
|
||||
# --[ Close a review on git.reviewboard.kde.org as submitted ]---------|
|
||||
#REVIEW: <review number>
|
||||
#
|
||||
# --[ Notify documentation team of user visible changes ]--------------|
|
||||
#GUI:
|
||||
#
|
||||
# --[ Notify Commit Digest team of something interesting ]-------------|
|
||||
#DIGEST:
|
|
@ -1,21 +0,0 @@
|
|||
The following checklist is supposed to help you make sure you don't forget anything important in a commit.
|
||||
|
||||
Before hacking:
|
||||
* Does it fit Amarok's vision or at least not work against it?
|
||||
* Who will maintain the code?
|
||||
|
||||
Before committing:
|
||||
* Does it conform to Amarok's coding style?
|
||||
* Has it been added to the changelog in case of a bug, feature or UI change?
|
||||
* Does it introduce new dependencies?
|
||||
* Does the diff contain only the changes you made and files you added/removed? Does it contain all of them?
|
||||
* Do existing regression tests still pass?
|
||||
* Does it add new strings? Is Amarok in string freeze?
|
||||
* Are you pushing a big change that does not fix a bug while Amarok is in beta?
|
||||
* Is there a feature request, bug report or review request associated with it? (Please close them with the commit message.)
|
||||
|
||||
Additionally for commits introducing new features:
|
||||
* Is Amarok in feature freeze?
|
||||
* Are new tests needed?
|
||||
* Has it been reviewed by a usability person?
|
||||
* Does user documentation exist?
|
|
@ -1,69 +0,0 @@
|
|||
=== Const Correctness ===
|
||||
|
||||
What is const correctness?
|
||||
|
||||
It's a programming paradigm that helps writing correct code. In C++, const
|
||||
correctness comprises a set of different techniques, you can read up about them
|
||||
here [1]. In this article however I only want to focus on one form of const
|
||||
correctness, that is object constness.
|
||||
|
||||
Why should I care about const correctness?
|
||||
|
||||
Because it increases type safety, makes your code more easy to understand, and
|
||||
it helps making your code correct.
|
||||
|
||||
Let's have an example, the following function:
|
||||
|
||||
void printStruct( MyStruct* str );
|
||||
|
||||
Is it save to assume that MyStruct is unchanged? Can I give it a structure
|
||||
that is allocated in a read-only memory location?
|
||||
We can assume this (because of the name of the function) but we can't be sure.
|
||||
|
||||
It get's even worse if you use a reference like this:
|
||||
|
||||
void printStruct( MyStruct& str );
|
||||
|
||||
Now you can't even see in the calling code that something might go wrong since
|
||||
a line like this:
|
||||
|
||||
printStruct( str );
|
||||
|
||||
is not seen as dangerous. In C it is always a call-by-value. In C++ it isn't.
|
||||
|
||||
The solution is easy. Just declare the function like this:
|
||||
|
||||
void printStruct( const MyStruct& str );
|
||||
|
||||
Now nothing can go wrong. We get the benefit of a call-by-reference without
|
||||
the danger.
|
||||
Now one last problem. What if MyStruct is a class like this:
|
||||
|
||||
class MyStruct {
|
||||
void print();
|
||||
}
|
||||
|
||||
How would the compiler know that calling "print" on the const MyStruct does
|
||||
not change the object?
|
||||
The compiler can't. We have to tell it like this:
|
||||
|
||||
void print() const;
|
||||
|
||||
Now everything is all right. Everybody is on the same page and we don't
|
||||
have to look an hour which function might have changed our variables
|
||||
in some unexpected place.
|
||||
|
||||
|
||||
A last word about payoff.
|
||||
Regardless if we are just programming for fun or professionally we should
|
||||
think about payoff.
|
||||
|
||||
Writing "const" all over the place is confusing, costs time and leads
|
||||
to compile time errors.
|
||||
So why the effort?
|
||||
This does not really prevent many bugs. At least in my experience.
|
||||
However it has one big benefit: It really helps searching bugs. Const-
|
||||
correctness is really a nice thing since we are using more time searching
|
||||
bugs than actually programming.
|
||||
|
||||
[1] http://www.parashift.com/c++-faq-lite/const-correctness.html
|
|
@ -1,8 +0,0 @@
|
|||
This command is mandatory for all amarok developers:
|
||||
git config branch.master.rebase true
|
||||
|
||||
The result of this is that all "git pull" commands will do a rebase rather then a merge.
|
||||
Your local commits will be rewritten (parented to origin/master). The prevents the log
|
||||
to become unreadable because of all the merge commits.
|
||||
|
||||
Note: rebasing can be dangerous. Check before pushing if something looks fishy.
|
|
@ -1,383 +0,0 @@
|
|||
Hacking on Amarok
|
||||
-----------------
|
||||
|
||||
Have a look at the community wiki for further information.
|
||||
Also have a look at the requirements for Amarok here:
|
||||
http://community.kde.org/Amarok/Development/Requirements
|
||||
|
||||
Join the irc channel.
|
||||
|
||||
New requirements, bugfixes and every other patch goes to the
|
||||
review board.
|
||||
Try not to post patches in the bugs database or the mailing list.
|
||||
|
||||
Please respect these guidelines when coding for Amarok, thanks!
|
||||
|
||||
* Where this document isn't clear, refer to Amarok code.
|
||||
|
||||
|
||||
This C++ FAQ is a life saver in many situations, so you want to keep it handy:
|
||||
|
||||
http://www.parashift.com/c++-faq-lite/
|
||||
|
||||
|
||||
Formatting
|
||||
----------
|
||||
* Spaces, not tabs
|
||||
* Indentation is 4 spaces
|
||||
* Lines should be limited to 90 characters
|
||||
* Spaces between brackets and argument functions, except for template arguments
|
||||
* For pointer and reference variable declarations put a space between the type
|
||||
and the * or & and no space before the variable name.
|
||||
* For if, else, while and similar statements put the brackets on the next line,
|
||||
although brackets are not needed for single statements.
|
||||
* Function and class definitions have their brackets on separate lines
|
||||
* A function implementation's return type is on its own line.
|
||||
* CamelCase.{cpp,h} style file names.
|
||||
* Qt includes a foreach keyword which makes it very easy to iterate over all
|
||||
elements of a container.
|
||||
|
||||
Example:
|
||||
|
||||
| bool
|
||||
| MyClass::myMethod( QStringList list, const QString &name )
|
||||
| {
|
||||
| if( list.isEmpty() )
|
||||
| return false;
|
||||
|
|
||||
| /* Define the temporary variable like this to restrict its scope
|
||||
| * when you do not need it outside the loop. Let the compiler
|
||||
| * optimise it. */
|
||||
| foreach( const QString &string, list )
|
||||
| debug() << "Current string is " << string << endl;
|
||||
|
|
||||
| switch( m_enumValue )
|
||||
| {
|
||||
| case Something:
|
||||
| return true;
|
||||
| case SomethingElse:
|
||||
| {
|
||||
| int auxiliaryVariable; // needs scoping in case construct
|
||||
| break;
|
||||
| }
|
||||
| }
|
||||
| }
|
||||
|
||||
|
||||
Using "astyle" for auto formatting
|
||||
----------------------------------
|
||||
The program astyle can be used to automatically format source code, which can
|
||||
be useful for badly formatted 3rd party patches.
|
||||
|
||||
Use it like this to get (approximately) Amarok formatting style:
|
||||
|
||||
"astyle -s4 -b -p -U -D -o source.cpp"
|
||||
|
||||
|
||||
Class, Function & Variable Naming
|
||||
---------------------------------
|
||||
*Use CamelCase for everything.
|
||||
*Local variables should start out with a lowercase letter.
|
||||
*Class names are captialized
|
||||
*Prefix class member variables with m_, ex. m_trackList.
|
||||
*Prefix static member variables with s_, ex s_instance
|
||||
*Functions are named in the Qt style. It's like Java's, without the "get"
|
||||
prefix.
|
||||
*A getter is variable()
|
||||
*If it's a getter for a boolean, prefix with 'is', so isCondition()
|
||||
*A setter is setVariable( arg ).
|
||||
|
||||
|
||||
Includes
|
||||
--------
|
||||
Header includes should be listed in the following order:
|
||||
- Own Header
|
||||
- Amarok includes, relative to src/ (or shared/) preferably
|
||||
- KDE includes, <KJob> is preferred to <kjob.h>
|
||||
- Qt includes
|
||||
- other includes
|
||||
|
||||
They should also be sorted alphabetically (case-sensitively: classes on same level before
|
||||
folders), for ease of locating them. A small comment if applicable is also helpful.
|
||||
|
||||
Includes in a header file should be kept to the absolute minimum, as to keep compile times
|
||||
low. This can be achieved by using "forward declarations" instead of includes, like
|
||||
"class QListView;"
|
||||
|
||||
TIP:
|
||||
Kate/KDevelop users can sort the headers automatically. Select the lines you want to sort,
|
||||
then Tools -> Filter Selection Through Command -> "sort".
|
||||
|
||||
In vim the same can be achieved by marking the block, and then doing ":sort".
|
||||
|
||||
Example:
|
||||
|
||||
| #include "MySuperWidget.h"
|
||||
|
|
||||
| #include "EngineController.h"
|
||||
| #include "core/playlists/Playlist.h"
|
||||
| #include "core/support/Debug.h"
|
||||
| #include "core/support/Amarok.h"
|
||||
|
|
||||
| #include <KDialogBase> // baseclass
|
||||
| #include <KPushButton> // see function...
|
||||
|
|
||||
| #include <QGraphicsView>
|
||||
| #include <QWidget>
|
||||
|
||||
|
||||
Comments
|
||||
--------
|
||||
Comment your code. Don't comment what the code does, comment on the purpose of the code. It's
|
||||
good for others reading your code, and ultimately it's good for you too.
|
||||
|
||||
Comments are essential when adding a strange hack, like the following example:
|
||||
|
||||
| /**
|
||||
| * Due to xine-lib, we have to make K3Process close all fds, otherwise we get "device
|
||||
| * is busy" messages. Used by AmarokProcIO and AmarokProcess, exploiting commSetupDoneC(),
|
||||
| * a virtual method that happens to be called in the forked process.
|
||||
| * See bug #103750 for more information.
|
||||
| */
|
||||
| class AmarokProcIO : public K3ProcIO
|
||||
| {
|
||||
| public:
|
||||
| virtual int commSetupDoneC();
|
||||
| };
|
||||
|
||||
|
||||
Otherwise the comment is in the header. Use the Doxygen syntax. See: http://www.stack.nl/~dimitri/doxygen/
|
||||
You should be able to write this comment and explain the what the function does.
|
||||
If you can't, go back to the code and think what you really wanted to do.
|
||||
If the comment is getting to complicated or confusing, go back to the code and do better.
|
||||
|
||||
Example:
|
||||
|
||||
| /**
|
||||
| * Start playback.
|
||||
| * @param offset Start playing at @p msec position.
|
||||
| * @return True for success.
|
||||
| */
|
||||
| virtual bool play( uint offset = 0 ) = 0;
|
||||
|
||||
|
||||
Header Formatting
|
||||
-----------------
|
||||
General rules apply here. Please keep header function definitions aligned nicely,
|
||||
if possible. It helps greatly when looking through the code. Sorted methods,
|
||||
either by name or by their function (ie, group all related methods together) is
|
||||
great too. Access levels should be sorted in this order: public, protected, private.
|
||||
|
||||
| #ifndef AMAROK_QUEUEMANAGER_H
|
||||
| #define AMAROK_QUEUEMANAGER_H
|
||||
|
|
||||
| #include <QListView>
|
||||
|
|
||||
| namespace MyNamespace {
|
||||
| /**
|
||||
| * View showing currently queued tracks.
|
||||
| */
|
||||
| class QueueList : public QListView
|
||||
| {
|
||||
| Q_OBJECT
|
||||
|
|
||||
| public:
|
||||
| explicit QueueList( QWidget *parent, const QString ̛&name = QString() );
|
||||
| ~QueueList();
|
||||
|
|
||||
| public slots:
|
||||
| void moveSelectedUp();
|
||||
| void moveSelectedDown();
|
||||
|
|
||||
| private:
|
||||
| int m_member;
|
||||
| QHash<int, QString> m_names;
|
||||
| };
|
||||
| } // namespace MyNamespace
|
||||
|
|
||||
| #endif /* AMAROK_QUEUEMANAGER_H */
|
||||
|
||||
|
||||
Associated .cpp file could look like (skipping license):
|
||||
|
||||
| #define DEBUG_PREFIX "MyNamespace::QueueList" // only if you use debug(), warning()...
|
||||
|
|
||||
| #include "QueueList.h"
|
||||
|
|
||||
| using namespace MyNamespace;
|
||||
|
|
||||
| QueueList::QueueList( QWidget *parent, const QString ̛&name )
|
||||
| : QListView( parent )
|
||||
| , m_member( name.length() )
|
||||
| {
|
||||
| }
|
||||
|
||||
|
||||
0 vs NULL
|
||||
---------
|
||||
The use of 0 to express a null pointer is preferred over the use of NULL.
|
||||
0 is not a magic value, it's the defined value of the null pointer in C++.
|
||||
NULL, on the other hand, is a preprocessor directive (#define) and not only is
|
||||
it more typing than '0' but preprocessor directives are less elegant.
|
||||
|
||||
| SomeClass *instance = 0;
|
||||
|
||||
|
||||
Const Correctness
|
||||
-----------------
|
||||
Try to keep your code const correct. Declare methods const if they don't mutate the object,
|
||||
and use const variables. It improves safety, and also makes it easier to understand the code.
|
||||
|
||||
See: http://www.parashift.com/c++-faq-lite/const-correctness.html
|
||||
const_correstness.txt
|
||||
|
||||
Example:
|
||||
|
||||
| bool
|
||||
| MyClass::isValidFile( const QString &path ) const
|
||||
| {
|
||||
| const bool valid = QFile::exist( path );
|
||||
| return valid;
|
||||
| }
|
||||
|
||||
|
||||
Debugging
|
||||
---------
|
||||
debug.h contains some handy functions for our debug console output.
|
||||
Please use them instead of kDebug().
|
||||
|
||||
Usage:
|
||||
|
||||
| #include "debug.h"
|
||||
|
|
||||
| debug() << "Something is happening";
|
||||
| warning() << "Something bad may happen";
|
||||
| error() << "Something bad did happen!";
|
||||
|
||||
Additionally, there are some macros for debugging functions:
|
||||
|
||||
DEBUG_BLOCK
|
||||
DEBUG_FUNC_INFO
|
||||
DEBUG_LINE_INFO
|
||||
DEBUG_INDENT
|
||||
DEBUG_UNINDENT
|
||||
|
||||
AMAROK_NOTIMPLEMENTED
|
||||
AMAROK_DEPRECATED
|
||||
|
||||
threadweaver.h has two additional macros:
|
||||
DEBUG_THREAD_FUNC_INFO outputs the memory address of the current QThread or 'none'
|
||||
if its the original GUI thread.
|
||||
SHOULD_BE_GUI outputs a warning message if it occurs in a thread that isn't in
|
||||
the original "GUI Thread", otherwise it is silent. Useful for documenting
|
||||
functions and to prevent problems in the future.
|
||||
|
||||
|
||||
Errors & Asserts
|
||||
----------------
|
||||
*Use Q_ASSERT where appropriate. If you don't know what an assert is, look it up now.
|
||||
|
||||
*Never use fatal(). There must be a better option than crashing a user's
|
||||
application (its not uncommon for end-users to have debugging enabled).
|
||||
|
||||
*KMessageBox is fine to use to prompt the user, but do not use it to display errors
|
||||
or informational messages. Instead, KDE::StatusBar has a few handy methods. Refer to
|
||||
amarok/src/statusbar/statusBarBase.h
|
||||
|
||||
|
||||
Commenting Out Code
|
||||
-------------------
|
||||
Don't keep commented out code. It just causes confusion and makes the source
|
||||
harder to read. Remember, the last revision before your change is always
|
||||
availabe in Git. Hence no need for leaving cruft in the source.
|
||||
|
||||
Wrong:
|
||||
| myWidget->show();
|
||||
| //myWidget->rise(); // what is this good for?
|
||||
|
||||
Correct:
|
||||
| myWidget->show();
|
||||
|
||||
|
||||
Unit Tests and API Docs
|
||||
-----------------------
|
||||
Amarok uses the "Jenkins" system for doing automatic nightly builds, checking for
|
||||
compile errors, and visualizing Unit Tests. You can see the results here:
|
||||
|
||||
http://build.kde.org/view/EXTRAGEAR/job/amarok_master/
|
||||
|
||||
The API DOc for Amarok can be found here:
|
||||
|
||||
http://api.kde.org/extragear-api/multimedia-apidocs/amarok/html/index.html
|
||||
|
||||
|
||||
Tips & Tricks
|
||||
-------------
|
||||
A useful service is http://lxr.kde.org. Lxr is a cross reference of the entire
|
||||
KDE SVN repository. You can for instance use it to search for example code
|
||||
from other applications for a given KDElibs method.
|
||||
|
||||
|
||||
Markey's .vimrc
|
||||
---------------
|
||||
|
||||
let ruby_no_expensive = 1
|
||||
syntax on
|
||||
|
||||
set shiftwidth=4
|
||||
set tabstop=4
|
||||
set expandtab
|
||||
set hlsearch
|
||||
set ruler
|
||||
set smartindent
|
||||
set nowrap
|
||||
|
||||
set ignorecase
|
||||
set smartcase
|
||||
|
||||
set title
|
||||
set showtabline=2 "Makes the status bar always show, also for just one tab
|
||||
|
||||
autocmd FileType ruby set shiftwidth=2 tabstop=2
|
||||
|
||||
|
||||
Git and SVN aware prompt
|
||||
----------------
|
||||
The following prompt shows the current git branch if sitting in a git repository.
|
||||
Random crap courtesy of shell colours.
|
||||
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;33m\]`git branch 2>/dev/null|cut -f2 -d\* -s`\[\033[00m\]\$ '
|
||||
|
||||
This is an even more colorful configuration for .bashrc that displays the
|
||||
current git branch if sitting in a git repository and the current SVN revision
|
||||
if sitting in an SVN checkout.
|
||||
svn_prompt() {
|
||||
SVNBRANCH=`svn info 2>/dev/null | grep Revision: | cut -f 2 -d " "`
|
||||
if [ -n "$SVNBRANCH" ]; then
|
||||
BRANCH=" (r$SVNBRANCH)";
|
||||
else
|
||||
BRANCH="";
|
||||
fi
|
||||
echo "$BRANCH"
|
||||
}
|
||||
export PS1='\[\e[0;32m\]\u@\h\[\e[m\] \[\e[1;34m\]\w\[\e[m\]\[\033[01;33m\]`__git_ps1`\[\e[m\]\[\e[01;35m\]`svn_prompt`\[\e[m\]\[\033[00m\] \[\e[1;32m\]\$ \[\e[m\]\[\e[1;37m\] '
|
||||
|
||||
Git KDE commit template
|
||||
-----------------------
|
||||
|
||||
HACKING/commit-template should be used so commits to KDE git servers are properly formatted and using the commit keywords.
|
||||
configure git to use the template using:
|
||||
git config commit.template HACKING/commmit-template
|
||||
|
||||
Copyright
|
||||
---------
|
||||
To comply with the GPL, add your name, email address & the year to the top of any file
|
||||
that you edit. If you bring in code or files from elsewhere, make sure its
|
||||
GPL-compatible and to put the authors name, email & copyright year to the top of
|
||||
those files.
|
||||
|
||||
Please note that it is not sufficient to write a pointer to the license (like a URL).
|
||||
The complete license header needs to be written everytime.
|
||||
|
||||
|
||||
Thanks, now have fun!
|
||||
-- the Amarok developers
|
|
@ -1,51 +0,0 @@
|
|||
Usage of Amarok::config()
|
||||
-------------------------
|
||||
We provide this method for convenience, but it is important to use it properly. By
|
||||
inspection, we can see that we may produce very obscure bugs in the wrong case:
|
||||
|
||||
| KConfig
|
||||
| *config( const QString &group )
|
||||
| {
|
||||
| //Slightly more useful config() that allows setting the group simultaneously
|
||||
| KGlobal::config()->setGroup( group );
|
||||
| return KGlobal::config();
|
||||
| }
|
||||
|
||||
Take the following example:
|
||||
|
||||
| void
|
||||
| f1()
|
||||
| {
|
||||
| KConfig *config = Amarok::config( "Group 2" );
|
||||
| config->writeEntry( "Group 2 Variable", true );
|
||||
| }
|
||||
|
|
||||
| void
|
||||
| doStuff()
|
||||
| {
|
||||
| KConfig *config = Amarok::config( "Group 1" );
|
||||
| f1();
|
||||
| config->writeEntry( "Group 1 Variable", true );
|
||||
| }
|
||||
|
||||
We would expect the following results:
|
||||
|
||||
| [Group 1]
|
||||
| Group 1 Variable = true
|
||||
|
|
||||
| [Group 2]
|
||||
| Group 2 Variable = true
|
||||
|
||||
However because the config group is changed before writing the entry:
|
||||
| [Group 1]
|
||||
|
|
||||
| [Group 2]
|
||||
| Group 1 Variable = true
|
||||
| Group 2 Variable = true
|
||||
|
||||
Which is clearly incorrect. And hard to see when your wondering why f1() is not
|
||||
working. So do not store a value of Amarok::config, make it a habit to just
|
||||
always call writeEntry or readEntry directly.
|
||||
|
||||
Correct:
|
||||
| amarok::config( "Group 1" )->writeEntry( "Group 1 Variable", true );
|
|
@ -1,117 +0,0 @@
|
|||
TIPS FOR CORRECT MEMORY MANAGEMENT WITH C++ AND QT
|
||||
==================================================
|
||||
|
||||
|
||||
1)
|
||||
Use of "Smart Pointers":
|
||||
A smart pointer in C++ means (in its most simple incarnation) a
|
||||
pointer that automatically sets itself to 0, when the object it points
|
||||
to is being destroyed (deleted).
|
||||
|
||||
Advantages:
|
||||
|
||||
No risk of "dangling pointers". A dangling pointer is a pointer that
|
||||
has been deleted, but still contains the memory address of the object
|
||||
that has been destroyed. What happens if you delete this again is
|
||||
called a "double-free", and almost always leads to a crash. With a
|
||||
smart pointer, you can delete the object safely again, because
|
||||
deleting a 0-pointer is defined as a safe (doing nothing) operation in
|
||||
the C++ standard.
|
||||
|
||||
Example:
|
||||
|
||||
WRONG:
|
||||
|
||||
QWidget* foo = new QWidget();
|
||||
delete foo;
|
||||
delete foo;
|
||||
<BOOOOM>
|
||||
|
||||
RIGHT:
|
||||
|
||||
QPointer<QWidget> foo = new QWidget();
|
||||
delete foo;
|
||||
delete foo;
|
||||
<not nice, but no crash>
|
||||
|
||||
|
||||
2)
|
||||
Always make sure not to dereference a 0-pointer:
|
||||
|
||||
This is _the_ single most common crash cause in Amarok 2 currently.
|
||||
It's easy to prevent, but unfortunately also easy to miss:
|
||||
|
||||
Example:
|
||||
|
||||
WRONG:
|
||||
|
||||
Meta::TrackPtr foo;
|
||||
debug() << foo->prettyUrl();
|
||||
<BOOOOM>
|
||||
|
||||
RIGHT:
|
||||
|
||||
Meta::TrackPtr foo;
|
||||
if( foo )
|
||||
debug() << foo->prettyUrl();
|
||||
<no output, and no crash>
|
||||
|
||||
Also be aware that Amarok is multi-threaded. So somebody could
|
||||
change pointers while you are looking away like here:
|
||||
|
||||
WRONG:
|
||||
|
||||
Meta::TrackPtr myTrack;
|
||||
if( myTrack && myTrack->album() )
|
||||
debug() << myTrack->album()->name();
|
||||
<somebody could set the album to 0 just after the if>
|
||||
|
||||
RIGHT:
|
||||
|
||||
Meta::TrackPtr myTrack;
|
||||
Meta::AlbumPtr myAlbum = myTrack ? myTrack->album() : 0;
|
||||
if( myAlbum )
|
||||
debug() << myAlbum->name();
|
||||
|
||||
|
||||
3)
|
||||
Private d-pointer classes can be used in cases where the interfaces
|
||||
of a library should remain stable but the size of members and their
|
||||
inner working should change.
|
||||
Qt is doing it. KDE is doing it. We are also doing it in some places
|
||||
for no apparent reason and no benefit.
|
||||
|
||||
However, if you are doing it, never, ever, use private d-pointer
|
||||
classes in QObject derived subclasses:
|
||||
|
||||
What can happen is that you do a "delete d;" in your destructor, and
|
||||
then Qt goes ahead and auto-deletes other QObject pointers contained
|
||||
in the private class again, through means of its automatic deleting of
|
||||
QObjects with a parent Object. -> <BOOOOM>
|
||||
|
||||
Read more about this topic in Michael Pyne's interesting blog article:
|
||||
|
||||
http://www.purinchu.net/wp/2009/02/04/another-programming-tidbit/
|
||||
|
||||
|
||||
4)
|
||||
Use Valgrind:
|
||||
<Ralf disagrees. Larger projects with big libraries will have so
|
||||
many dirty places that Valgrind reports too many issues.
|
||||
Our own way of handling singleton objects does not help. They
|
||||
just leak. Instead have a sharp look at all your instance variables.
|
||||
Ensure that all are initialized in the constructor and all deleted
|
||||
in the destructor.>
|
||||
|
||||
This is one of the most advanced memory debugging tools available,
|
||||
it's free, and we even have found volunteers that run regular Valgrind
|
||||
checks (both for memory access bugs and memory leaks) on Amarok trunk.
|
||||
Reading the Valgrind logs correctly is a bit of an art in itself, but
|
||||
I'm willing to explain this in another posting, if there is a demand.
|
||||
|
||||
|
||||
Recommended reading on the topic of memory management is this page of
|
||||
the excellent "C++ FAQ Lite":
|
||||
|
||||
http://www.parashift.com/c++-faq-lite/freestore-mgmt.html
|
||||
|
|
@ -1,616 +0,0 @@
|
|||
|
||||
Warning: outdated.
|
||||
Look at HACKING/amarokTables.svg and keep it up to date.
|
||||
|
||||
|
||||
-- MySQL dump 10.13 Distrib 5.1.58, for debian-linux-gnu (x86_64)
|
||||
--
|
||||
-- Host: localhost Database: amarok
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 5.1.58-1ubuntu1
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin` (
|
||||
`component` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`version` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `albums`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `albums`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `albums` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
`artist` int(11) DEFAULT NULL,
|
||||
`image` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `albums_name_artist` (`name`,`artist`),
|
||||
KEY `albums_name` (`name`),
|
||||
KEY `albums_artist` (`artist`),
|
||||
KEY `albums_image` (`image`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=547 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `amazon`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `amazon`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `amazon` (
|
||||
`asin` varchar(20) COLLATE utf8_bin DEFAULT NULL,
|
||||
`locale` varchar(2) COLLATE utf8_bin DEFAULT NULL,
|
||||
`filename` varchar(33) COLLATE utf8_bin DEFAULT NULL,
|
||||
`refetchdate` int(11) DEFAULT NULL,
|
||||
KEY `amazon_date` (`refetchdate`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `artists`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `artists`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `artists` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `artists_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=966 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `bookmark_groups`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `bookmark_groups`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `bookmark_groups` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) DEFAULT NULL,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`custom` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `bookmarks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `bookmarks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `bookmarks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) DEFAULT NULL,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`url` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`custom` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `composers`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `composers`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `composers` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `composers_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=268 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `devices`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `devices`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `devices` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`type` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`label` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`lastmountpoint` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`uuid` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`servername` varchar(80) COLLATE utf8_bin DEFAULT NULL,
|
||||
`sharename` varchar(240) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `devices_uuid` (`uuid`),
|
||||
KEY `devices_type` (`type`),
|
||||
KEY `devices_rshare` (`servername`,`sharename`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `directories`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `directories`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `directories` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`deviceid` int(11) DEFAULT NULL,
|
||||
`dir` varchar(1000) COLLATE utf8_bin NOT NULL,
|
||||
`changedate` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `directories_deviceid` (`deviceid`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1051 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `genres`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `genres`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `genres` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `genres_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=132 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `images`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `images`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `images` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`path` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `images_name` (`path`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=356 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `labels`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `labels`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `labels` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`label` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `labels_label` (`label`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `lyrics`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `lyrics`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `lyrics` (
|
||||
`url` int(11) NOT NULL,
|
||||
`lyrics` text COLLATE utf8_bin,
|
||||
PRIMARY KEY (`url`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `magnatune_albums`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `magnatune_albums`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `magnatune_albums` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`year` int(11) DEFAULT NULL,
|
||||
`artist_id` int(11) DEFAULT NULL,
|
||||
`album_code` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`cover_url` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `magnatune_albums_name` (`name`),
|
||||
KEY `magnatune_albums_artist_id` (`artist_id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1154 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `magnatune_artists`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `magnatune_artists`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `magnatune_artists` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`artist_page` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`photo_url` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `magnatune_artists_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=500 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `magnatune_genre`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `magnatune_genre`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `magnatune_genre` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`album_id` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `magnatune_genre_name` (`name`),
|
||||
KEY `magnatune_genre_album_id` (`album_id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2783 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `magnatune_moods`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `magnatune_moods`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `magnatune_moods` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`track_id` int(11) DEFAULT NULL,
|
||||
`mood` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2762 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `magnatune_tracks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `magnatune_tracks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `magnatune_tracks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`track_number` int(11) DEFAULT NULL,
|
||||
`length` int(11) DEFAULT NULL,
|
||||
`album_id` int(11) DEFAULT NULL,
|
||||
`artist_id` int(11) DEFAULT NULL,
|
||||
`preview_lofi` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`preview_ogg` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`preview_url` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `magnatune_tracks_album_id` (`album_id`),
|
||||
KEY `magnatune_tracks_artist_id` (`artist_id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=14831 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `playlist_groups`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `playlist_groups`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `playlist_groups` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) DEFAULT NULL,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `parent_podchannel` (`parent_id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `playlist_tracks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `playlist_tracks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `playlist_tracks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`playlist_id` int(11) DEFAULT NULL,
|
||||
`track_num` int(11) DEFAULT NULL,
|
||||
`url` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`title` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`album` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`artist` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`length` int(11) DEFAULT NULL,
|
||||
`uniqueid` varchar(128) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `parent_playlist_tracks` (`playlist_id`),
|
||||
KEY `playlist_tracks_uniqueid` (`uniqueid`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `playlists`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `playlists`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `playlists` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) DEFAULT NULL,
|
||||
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`description` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`urlid` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `parent_playlist` (`parent_id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `podcastchannels`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `podcastchannels`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `podcastchannels` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`url` text COLLATE utf8_bin,
|
||||
`title` text COLLATE utf8_bin,
|
||||
`weblink` text COLLATE utf8_bin,
|
||||
`image` text COLLATE utf8_bin,
|
||||
`description` text COLLATE utf8_bin,
|
||||
`copyright` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`directory` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`labels` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`subscribedate` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`autoscan` tinyint(1) DEFAULT NULL,
|
||||
`fetchtype` int(11) DEFAULT NULL,
|
||||
`haspurge` tinyint(1) DEFAULT NULL,
|
||||
`purgecount` int(11) DEFAULT NULL,
|
||||
`writetags` tinyint(1) DEFAULT NULL,
|
||||
`filenamelayout` varchar(1024) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `url_podchannel` (`url`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `podcastepisodes`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `podcastepisodes`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `podcastepisodes` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`url` text COLLATE utf8_bin,
|
||||
`channel` int(11) DEFAULT NULL,
|
||||
`localurl` text COLLATE utf8_bin,
|
||||
`guid` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
|
||||
`title` text COLLATE utf8_bin,
|
||||
`subtitle` text COLLATE utf8_bin,
|
||||
`sequencenumber` int(11) DEFAULT NULL,
|
||||
`description` text COLLATE utf8_bin,
|
||||
`mimetype` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`pubdate` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`duration` int(11) DEFAULT NULL,
|
||||
`filesize` int(11) DEFAULT NULL,
|
||||
`isnew` tinyint(1) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `url_podepisode` (`url`),
|
||||
FULLTEXT KEY `localurl_podepisode` (`localurl`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=263 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `statistics`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `statistics`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `statistics` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`url` int(11) NOT NULL,
|
||||
`createdate` int(11) DEFAULT NULL,
|
||||
`accessdate` int(11) DEFAULT NULL,
|
||||
`score` float DEFAULT NULL,
|
||||
`rating` int(11) NOT NULL DEFAULT '0',
|
||||
`playcount` int(11) NOT NULL DEFAULT '0',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `statistics_url` (`url`),
|
||||
KEY `statistics_createdate` (`createdate`),
|
||||
KEY `statistics_accessdate` (`accessdate`),
|
||||
KEY `statistics_score` (`score`),
|
||||
KEY `statistics_rating` (`rating`),
|
||||
KEY `statistics_playcount` (`playcount`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=6721 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `statistics_permanent`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `statistics_permanent`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `statistics_permanent` (
|
||||
`url` varchar(324) COLLATE utf8_bin NOT NULL,
|
||||
`firstplayed` datetime DEFAULT NULL,
|
||||
`lastplayed` datetime DEFAULT NULL,
|
||||
`score` float DEFAULT NULL,
|
||||
`rating` int(11) DEFAULT '0',
|
||||
`playcount` int(11) DEFAULT NULL,
|
||||
UNIQUE KEY `stats_perm_url` (`url`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `statistics_tag`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `statistics_tag`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `statistics_tag` (
|
||||
`name` varchar(108) COLLATE utf8_bin DEFAULT NULL,
|
||||
`artist` varchar(108) COLLATE utf8_bin DEFAULT NULL,
|
||||
`album` varchar(108) COLLATE utf8_bin DEFAULT NULL,
|
||||
`firstplayed` datetime DEFAULT NULL,
|
||||
`lastplayed` datetime DEFAULT NULL,
|
||||
`score` float DEFAULT NULL,
|
||||
`rating` int(11) DEFAULT '0',
|
||||
`playcount` int(11) DEFAULT NULL,
|
||||
UNIQUE KEY `stats_tag_name_artist_album` (`name`,`artist`,`album`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tracks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tracks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tracks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`url` int(11) DEFAULT NULL,
|
||||
`artist` int(11) DEFAULT NULL,
|
||||
`album` int(11) DEFAULT NULL,
|
||||
`genre` int(11) DEFAULT NULL,
|
||||
`composer` int(11) DEFAULT NULL,
|
||||
`year` int(11) DEFAULT NULL,
|
||||
`title` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`comment` text COLLATE utf8_bin,
|
||||
`tracknumber` int(11) DEFAULT NULL,
|
||||
`discnumber` int(11) DEFAULT NULL,
|
||||
`bitrate` int(11) DEFAULT NULL,
|
||||
`length` int(11) DEFAULT NULL,
|
||||
`samplerate` int(11) DEFAULT NULL,
|
||||
`filesize` int(11) DEFAULT NULL,
|
||||
`filetype` int(11) DEFAULT NULL,
|
||||
`bpm` float DEFAULT NULL,
|
||||
`createdate` int(11) DEFAULT NULL,
|
||||
`modifydate` int(11) DEFAULT NULL,
|
||||
`albumgain` float DEFAULT NULL,
|
||||
`albumpeakgain` float DEFAULT NULL,
|
||||
`trackgain` float DEFAULT NULL,
|
||||
`trackpeakgain` float DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `tracks_url` (`url`),
|
||||
KEY `tracks_id` (`id`),
|
||||
KEY `tracks_artist` (`artist`),
|
||||
KEY `tracks_album` (`album`),
|
||||
KEY `tracks_genre` (`genre`),
|
||||
KEY `tracks_composer` (`composer`),
|
||||
KEY `tracks_year` (`year`),
|
||||
KEY `tracks_title` (`title`),
|
||||
KEY `tracks_discnumber` (`discnumber`),
|
||||
KEY `tracks_createdate` (`createdate`),
|
||||
KEY `tracks_length` (`length`),
|
||||
KEY `tracks_bitrate` (`bitrate`),
|
||||
KEY `tracks_filesize` (`filesize`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=6721 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `urls`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `urls`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `urls` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`deviceid` int(11) DEFAULT NULL,
|
||||
`rpath` varchar(324) COLLATE utf8_bin NOT NULL,
|
||||
`directory` int(11) DEFAULT NULL,
|
||||
`uniqueid` varchar(128) COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uniqueid` (`uniqueid`),
|
||||
UNIQUE KEY `urls_id_rpath` (`deviceid`,`rpath`),
|
||||
KEY `urls_uniqueid` (`uniqueid`),
|
||||
KEY `urls_directory` (`directory`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=6721 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `urls_labels`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `urls_labels`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `urls_labels` (
|
||||
`url` int(11) DEFAULT NULL,
|
||||
`label` int(11) DEFAULT NULL,
|
||||
KEY `urlslabels_url` (`url`),
|
||||
KEY `urlslabels_label` (`label`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `years`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `years`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `years` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `years_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2011-12-21 12:50:14
|
|
@ -1,40 +0,0 @@
|
|||
QWeakPointer
|
||||
====================
|
||||
QWeakPointer is a guarded pointer for QObjects, so it automatically becomes 0 when
|
||||
the data it points to is deleted. If you have a member variable that's a QObject
|
||||
and are ever worried that it might be dangling, make it a QWeakPointer. There's
|
||||
really no reason not to for variables that stick around, it adds little
|
||||
overhead.
|
||||
|
||||
KSharedPtr
|
||||
====================
|
||||
Unlike QWeakPointer, KSharedPtr is dangerous and must be used carefully.
|
||||
|
||||
== Undercounting ==
|
||||
KSharedPtr uses reference counting. When a KSharedPtr is in scope, it adds one
|
||||
to the reference counter. When a KSharedPtr loses scope, it deletes one from the
|
||||
reference count. When the reference count become 0 it deletes the object. So if
|
||||
there were any normal pointers to that data and all the KSharedPtrs are deleted,
|
||||
then the object is deleted and the normal pointers dangle. Segfaults ensue.
|
||||
|
||||
The solution is to just make sure that any normal pointers are temporary and
|
||||
everything else is a KSharedPtr if reference counting is required for your class. Even
|
||||
if the pointer is temporary, but is then handed off to some other class that
|
||||
might keep it around, thats a potentional crash now or in the future.
|
||||
|
||||
|
||||
== Reference Cycles ==
|
||||
One issue with reference counting in general is the creation of a reference
|
||||
cycle. If class A has a KSharedPtr<B> property and class B has a KSharedPtr<A>
|
||||
property and two objects of A and B point to each other and the KSharedPtrs
|
||||
loose scope, a reference cycle is created. Despite not being accessible from
|
||||
anywhere in the program, the reference counter of KSharedPtr<A> and
|
||||
KSharedPtr<B> will never go to 0. Memory leaks. The solution is to be careful.
|
||||
|
||||
== Dreaded Diamonds ==
|
||||
Since the objects KSharedPtr point to must derive from QSharedData, it's not
|
||||
uncommon for a "dreaded diamond" inheritance issue to arise. Basically if A and
|
||||
B both inherit QSharedData and C inherits A and B, then C inherits QSharedData
|
||||
twice. The solution is really easy, just add a 'virtual' keyword when A and B
|
||||
inherit QSharedData. Eg class A : public virtual QSharedData. Details at:
|
||||
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.8
|
|
@ -1,58 +0,0 @@
|
|||
Preface:
|
||||
======
|
||||
You've probably noticed the epic struggle we've had with Amarok 2
|
||||
hanging on exit. After _months_ of tinkering I've now been able to
|
||||
identify and fix this issue. This document explains how to prevent
|
||||
such issues in the future.
|
||||
|
||||
What is a static object?
|
||||
=================
|
||||
A static object is being initialized on program start, and will only
|
||||
become instantiated once. It's conveniently used with the singleton
|
||||
design pattern, e.g. in Amarok code.
|
||||
|
||||
Example:
|
||||
|
||||
static AmarokMenu s_menu;
|
||||
|
||||
What is so dangerous about static objects?
|
||||
================================
|
||||
A static object's destructor is called _after_ the QApplication
|
||||
destructor has been executed. This is fine for plain old datatypes
|
||||
(POD) like int, float, and pointers, as they do not have a destructor.
|
||||
It's also fine for objects with a trivial destructor that does not
|
||||
interfere with the rest of the program.
|
||||
|
||||
The danger lies in using static objects that call other parts of the
|
||||
application in their destructor. This is e.g. true for most QObjects,
|
||||
which rely on the QApplication being intact. If the QApplication is
|
||||
destroyed before the static QObject's destructor is run, _bad_ things
|
||||
can happen. To name a few: Crashing, hanging, eating live kitten, or
|
||||
forcing you to use XMMS.
|
||||
|
||||
How can I prevent these problems?
|
||||
==========================
|
||||
Use K_GLOBAL_STATIC, and use qAddPostRoutine() to ensure that the
|
||||
static object's destructor is called when QCoreApplication destructs.
|
||||
|
||||
Example:
|
||||
|
||||
class AmarokMenu : public QMenu
|
||||
{
|
||||
AmarokMenu();
|
||||
};
|
||||
K_GLOBAL_STATIC( AmarokMenu, s_menu )
|
||||
|
||||
AmarokMenu::AmarokMenu()
|
||||
{
|
||||
// K_GLOBAL_STATIC is cleaned up *after* Q(Core)Application is gone
|
||||
// but we have to cleanup before -> use qAddPostRoutine
|
||||
qAddPostRoutine( s_menu.destroy );
|
||||
}
|
||||
|
||||
Further reading:
|
||||
===========
|
||||
http://api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/group__KDEMacros.html
|
||||
|
||||
|
||||
Thanks for reading, and happy hacking :)
|
|
@ -1,33 +0,0 @@
|
|||
/****************************************************************************************
|
||||
* Copyright (c) 2010 Foo Bar <foo@bar.com> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify it under *
|
||||
* the terms of the GNU General Public License as published by the Free Software *
|
||||
* Foundation; either version 2 of the License, or (at your option) any later *
|
||||
* version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY *
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE. See the GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License along with *
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include "Template.h"
|
||||
|
||||
#include "Debug.h"
|
||||
|
||||
|
||||
Template::Template()
|
||||
{
|
||||
DEBUG_BLOCK
|
||||
}
|
||||
|
||||
Template::~Template()
|
||||
{
|
||||
DEBUG_BLOCK
|
||||
}
|
||||
|
||||
|
||||
#include "moc_Template.cpp"
|
|
@ -1,44 +0,0 @@
|
|||
/****************************************************************************************
|
||||
* Copyright (c) 2010 Foo Bar <foo@bar.com> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify it under *
|
||||
* the terms of the GNU General Public License as published by the Free Software *
|
||||
* Foundation; either version 2 of the License, or (at your option) any later *
|
||||
* version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY *
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE. See the GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License along with *
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************************/
|
||||
|
||||
#ifndef AMAROK_TEMPLATE_H
|
||||
#define AMAROK_TEMPLATE_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
/**
|
||||
* A class for blah
|
||||
*
|
||||
**/
|
||||
class /*AMAROK_EXPORT*/ Template : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Template();
|
||||
~Template();
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
protected:
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
#endif // end include guard
|
|
@ -1,96 +0,0 @@
|
|||
=== USABILITY ===
|
||||
|
||||
This article was originally published here:
|
||||
|
||||
http://amarok.kde.org/blog/archives/1132-Micro-Options,-Many-Options,-No-Options-A-practical-guide-to-help-you-decide..html
|
||||
|
||||
|
||||
|
||||
Not very long ago, Aaron wrote an article about improving our user experience, stating that
|
||||
"Micro-Options Suck". Coincidentally, an article appeared on dot.kde.org only a few hours later, stating the
|
||||
following: "Choice Is Not A Usability Problem".
|
||||
|
||||
Ardent readers will notice that there is possibly a contradiction here. In this
|
||||
article I would like to explain why this is not really a contradiction, but
|
||||
rather a misunderstanding. To get us started, let's make a jump back in time
|
||||
(using Flux Capacitor technology):
|
||||
|
||||
The year is 2004. It's cold. You are alone. There is a house in the north
|
||||
(called "KDE"), and a house in the south ("GNOME"). Press "n" or "s".
|
||||
|
||||
> n
|
||||
|
||||
You have entered the house of KDE. It's a big house, full of obscure items. The
|
||||
sheer number of items is highly impressive, but you get confused. It is too
|
||||
much. What is your next step? Press "n" or "s".
|
||||
|
||||
> s
|
||||
|
||||
You have entered the house of GNOME. This house is neat, clean, but also kind of
|
||||
empty. There are very few things to play with. You get confused. What is your
|
||||
next step?
|
||||
|
||||
> I give up. User reboots into Windows.
|
||||
|
||||
|
||||
The gist of this little analogy:
|
||||
|
||||
KDE was wrong. GNOME was wrong. Also - they both were right!
|
||||
|
||||
|
||||
This is quite obviously another contradiction. Obviously this means that Mark is
|
||||
not quite right in the head! Well, you're possibly right on both accounts, but
|
||||
let me explain why it actually makes sense: The truth is somewhere in
|
||||
between.
|
||||
|
||||
KDE has historically been known for being "the nerd's desktop". Basically, we
|
||||
were so proud of having our own desktop that we quickly determined that giving
|
||||
everyone as much freedom as possible is ideal. After all, the competition
|
||||
(Windows) did not offer this. Developer A came along, going "Hey, I have this
|
||||
fancy idea. It's a bit weird, but let me show you!". Developer B was quick to
|
||||
reply: "Hell yeah, why not? After all this is our own desktop. We can make all
|
||||
of our dreams come true. Let's do it!"
|
||||
|
||||
GNOME has historically been known for being very sparse with options. They did
|
||||
this for a good reason: Someone smart realized that KDE was totally going
|
||||
overboard with options. Too much is too much. Let me show you a classical
|
||||
example:
|
||||
|
||||
http://amarok.kde.org/blog/uploads/crypto_ssl.jpg
|
||||
|
||||
|
||||
Now let me show you an example of the Dolphin settings dialog:
|
||||
|
||||
http://amarok.kde.org/blog/uploads/dolphin_settings.png
|
||||
|
||||
|
||||
Dolphin has won 2009's Akademy Award for "Best Application". The above
|
||||
screenshot demonstrates one of our reasons for choosing it: Peter Penz realized
|
||||
what generations of GUI developers (both in KDE and GNOME) got wrong: The true
|
||||
secret to getting your settings right is choosing the essential ones, while
|
||||
making good choices for defaults that don't need micro-options.
|
||||
|
||||
Unfortunately, this is not easy, and it separates the good GUI designer from the
|
||||
bad one. In fact making these choices is bloody damn hard, I kid you not. It
|
||||
requires a lot of thought, experience, and taste. But in the end, you, as a
|
||||
developer, are responsible for making these choices. Creating software is not
|
||||
about giving the user a LEGO blocks game. If options get too complex, the users
|
||||
might as well learn programming and do it all by themselves. That's because, if
|
||||
you think about it, choosing an option is programming: You make the
|
||||
program use one code path, or a different one. This is essentially the same as
|
||||
an "if() {}; else() {};" block wrapped in GUI sugar.
|
||||
|
||||
To sum it up:
|
||||
|
||||
Before adding an option, think hard about it. Could the same be achieved with a
|
||||
smarter algorithm? Often options are bad excuses for deciding between one bad
|
||||
implementation and another bad one. Find a good one!
|
||||
|
||||
Don't try to solve the problem by removing all options. Some options are very
|
||||
useful, and they are actually needed. Finding out which of these are needed is
|
||||
the developer's task. It's a hard task, but it can be done.
|
||||
|
||||
Consider asking professionals. We have a KDE Usability team, comprised of real
|
||||
experts on this topic. Among them is Celeste, a member of the KDE board. She
|
||||
knows what she's talking about, and she's generally very helpful. Don't be shy,
|
||||
ask them!
|
|
@ -1,7 +0,0 @@
|
|||
Installing Amarok
|
||||
=================
|
||||
|
||||
Build instructions can be found at
|
||||
% http://community.kde.org/Amarok/Development/Compiling
|
||||
% http://techbase.kde.org/Getting_Started/Build/KDE4
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
Amarok does not have clear maintainers of all parts of the codebase. The current list of components and maintainers can be found here: http://community.kde.org/Amarok/Development/Components
|
||||
|
||||
You are welcome to work on any part of it provided you coordinate with others working in that part.
|
||||
|
||||
If you need to contact someone about a particular part it is best to contact the developer mailing list at amarok-devel@kde.org or the assignee of the corresponding component on http://bugs.kde.org directly.
|
|
@ -1,46 +0,0 @@
|
|||
/** @mainpage The Amarok Source Code Documentation
|
||||
|
||||
<p>
|
||||
This is the developer online reference for the Amarok music player.
|
||||
|
||||
To follow or get involved with the development of Amarok,
|
||||
join the <a href="https://mail.kde.org/mailman/listinfo/amarok-devel">amarok-devel mailing list</a>.
|
||||
|
||||
Instructions for building a development version of KDE can be found in the
|
||||
<a href="http://techbase.kde.org/Getting_Started">getting started</a> section
|
||||
of the <a href="http://techbase.kde.org">KDE Techbase</a>.
|
||||
</p>
|
||||
|
||||
@maintainers
|
||||
Amarok does not have clear maintainers of any part of the codebase. You are welcome to work on any part of it provided you coordinate with others working in that part. <br/>
|
||||
If you need to contact someone about a particular part it is best to contact the developer mailing list at amarok-devel@kde.org or the assignee of the corresponding component on http://bugs.kde.org directly.
|
||||
|
||||
@authors
|
||||
<!--
|
||||
To update the authors list, use the following:
|
||||
$ cat AUTHORS | sed 's#<#\\<#' | sed 's#>#\\><br/>#'
|
||||
-->
|
||||
Bart Cerneels \<bart.cerneels@kde.org\><br/>
|
||||
Edward Toroshchin \<edward.hades@gmail.com\><br/>
|
||||
Leo Franchi \<lfranchi@kde.org\><br/>
|
||||
Mark Kretschmann \<kretschmann@kde.org\><br/>
|
||||
Matěj Laitl \<matej@laitl.cz\><br/>
|
||||
Myriam Schweingruber \<myriam@kde.org\><br/>
|
||||
Patrick von Reth \<patrick.vonreth@gmail.com\><br/>
|
||||
Ralf Engels \<ralf-engels@gmx.de\><br/>
|
||||
Rick W. Chen \<stuffcorpse@archlinux.us\><br/>
|
||||
Sam Lade \<sam@sentynel.com\><br/>
|
||||
Sven Krohlas \<sven@asbest-online.de\><br/>
|
||||
Téo Mrnjavac \<teo@kde.org\><br/>
|
||||
Valorie Zimmerman \<valorie@kde.org\><br/>
|
||||
|
||||
@licenses
|
||||
@gpl (if not stated otherwise in the source file)
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_NAME = Amarok
|
||||
// DOXYGEN_ENABLE = YES
|
||||
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,3 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
$XGETTEXT_QT utilities/collectionscanner/CollectionScanner.cpp -o $podir/amarokcollectionscanner_qt.pot
|
178
amarok/README
|
@ -1,178 +0,0 @@
|
|||
Amarok - the audio player for KDE
|
||||
===================================
|
||||
|
||||
There are many media players around these days, it's true. What's missing from most
|
||||
players is a user interface that doesn't get in the way of the user. How many
|
||||
buttons do you have to press for simply adding some new tracks to the playlist?
|
||||
Amarok tries to be a little different, providing a simple drag and drop interface
|
||||
that really makes playlist handling easy.
|
||||
|
||||
|
||||
FEATURES
|
||||
==========
|
||||
|
||||
* Quick and simple drag and drop playlist creation
|
||||
* Music library
|
||||
* Cross platform: Support for Unix, MacOS X and Windows
|
||||
* Plays all audio formats known to man
|
||||
* Cover art download using Last.fm services
|
||||
* Automatic play-statistics generation (iRate style)
|
||||
* Full lyrics download
|
||||
* Learn about your music with integrated Wikipedia
|
||||
* Full Last.fm support
|
||||
* gpodder.net support
|
||||
* Configurable on screen display for track changes
|
||||
* Podcast support
|
||||
* iPod support, as well as other media players
|
||||
* Powerful scripting interface
|
||||
* KDE integration
|
||||
* Integration with multiple web sources including Magnatune, Jamendo,
|
||||
Ampache, MP3tunes, and others.
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
DEPENDENCIES
|
||||
==============
|
||||
|
||||
Required
|
||||
* KDE-Libs 4.8.4 (or newer) + KDE-Base-runtime 4.8 (oxygen-icons) (or newer)
|
||||
http://www.kde.org
|
||||
|
||||
* Phonon backend, one of the following is strongly recommended
|
||||
* phonon-gstreamer 4.6.3 (or newer)
|
||||
* phonon-vlc 0.6.1 (or newer; as of 0.6.1 doesn't yet play Audio CDs, bug 313046)
|
||||
|
||||
* Qt 4.8.3 (or newer)
|
||||
http://qt-project.org
|
||||
|
||||
* TagLib 1.7 (or newer)
|
||||
(Metadata tagging library)
|
||||
|
||||
* TagLib Extras 1.0.1 (or newer)
|
||||
(Support for metadata reading of additional file types)
|
||||
svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib-extras
|
||||
|
||||
* MySQL 5.0 (or newer) Embedded: libmysqld compiled with fPIC
|
||||
(In-process database support)
|
||||
|
||||
* QtScript Generator, Qt Bindings 0.1.0
|
||||
(Qt Bindings for QtScript for Amarok's scripting system)
|
||||
http://code.google.com/p/qtscriptgenerator/
|
||||
http://qt.gitorious.org/qt-labs/qtscriptgenerator
|
||||
|
||||
* LibQCA 2.0.2 (or newer)
|
||||
(Qt Cryptographic Architecture)
|
||||
http://delta.affinix.com/qca/
|
||||
|
||||
Optional
|
||||
* Taglib 1.8 for support of MOD, IT, S3M and XM files
|
||||
* Taglib 1.9 for support of Opus files
|
||||
http://developer.kde.org/~wheeler/taglib.html
|
||||
https://github.com/taglib/taglib
|
||||
|
||||
* iPod support requires:
|
||||
* libgpod 0.8.2 (or newer)
|
||||
http://www.gtkpod.org/libgpod/
|
||||
* optional iPod album artwork support requires:
|
||||
* libgpod built with GDKPixBuf support enabled
|
||||
* GDKPixBuf 2.0 (or newer) itself
|
||||
|
||||
* libmtp 1.0.0 (or newer)
|
||||
(MTP device support)
|
||||
http://libmtp.sourceforge.net/
|
||||
|
||||
* Spectrum analyzer requires:
|
||||
* QtOpenGL
|
||||
|
||||
* Mp3tunes.com integration (including syncronization) requires:
|
||||
* OpenSSL http://www.openssl.org
|
||||
* libxml2 http://xmlsoft.org
|
||||
* libcurl http://curl.haxx.se
|
||||
* Glib2 http://www.gtk.org
|
||||
* Loudmouth, the Jabber library, http://www.loudmouth-project.org/
|
||||
* Qt must be compiled with Glib enabled
|
||||
|
||||
* Liblastfm 1.0.3 (or newer)
|
||||
(For scrobbling, internet radio, and artist info)
|
||||
http://cdn.last.fm/client/liblastfm-1.0.3.tar.gz
|
||||
https://github.com/eartle/liblastfm
|
||||
|
||||
* QJson 0.7 (or newer)
|
||||
(Qt JSON Parser for the Playdar Collection)
|
||||
http://qjson.sourceforge.net/
|
||||
|
||||
* MySQL 5.0 (or newer) Server (external database support)
|
||||
|
||||
* MusicBrainz-based audio fingerprint tag lookup requires:
|
||||
* FFmpeg 0.7.0 (or newer) - http://ffmpeg.org/
|
||||
* libavcodec & libavformat specifically
|
||||
* LibOFA - http://code.google.com/p/musicip-libofa/
|
||||
|
||||
* gpodder.net Podcast Provider & Service
|
||||
* libmygpo-qt 1.0.7 (or newer)
|
||||
|
||||
* Transcoding requires (at runtime):
|
||||
* FFmpeg 0.7.0 (or newer) - http://ffmpeg.org/
|
||||
* For all supported encoders to be available in Amarok, FFmpeg needs to
|
||||
support the following codecs:
|
||||
* libfaac (NOT just "aac")
|
||||
* alac
|
||||
* flac
|
||||
* libmp3lame (NOT just "mp3")
|
||||
* libvorbis (NOT just "vorbis")
|
||||
* wmav2
|
||||
|
||||
* CD support requires:
|
||||
* audiocd-kio - http://www.kde.org/ (part of KDE multimedia)
|
||||
|
||||
* Downloading songs from Amazon works best on non Windows systems using
|
||||
* clamz - https://code.google.com/p/clamz/
|
||||
* The official downloader should work fine on Windows, too. But it's broken on many Linux systems.
|
||||
|
||||
* Building tests require:
|
||||
* gmock 1.4 (or newer) - http://code.google.com/p/googlemock/
|
||||
|
||||
Please note that if compiling from source you also need to install -dev/-devel
|
||||
versions of these packages, depending on your distribution.
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
IMPORTANT INSTALL INSTRUCTIONS
|
||||
================================
|
||||
|
||||
To compile from source, please refer to the INSTALL file.
|
||||
|
||||
Packages for popular distributions are available at http://amarok.kde.org
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
FURTHER RESOURCES
|
||||
===================
|
||||
|
||||
For answers to problems like "Amarok won't play any MP3s!" and "My MP3s skip
|
||||
and stutter!" please visit:
|
||||
|
||||
http://amarok.kde.org/
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
CONTRIBUTING
|
||||
==============
|
||||
|
||||
If you wish to contribute to Amarok, you should build it from Git and subscribe
|
||||
to the amarok AT kde.org mailing list. The IRC channel is also a place where
|
||||
it's nice to be. There you can talk to other developers easily, and you can see
|
||||
instant notifications of commits to the Git master repository. For instant email
|
||||
notification of commits, visit http://commitfilter.kde.org/ , and http://amarok.be/fisheye
|
||||
provides a slightly-less-instant overview.
|
||||
|
||||
More information at:
|
||||
http://community.kde.org/Amarok/Development/Join
|
||||
|
||||
See you on IRC!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
WWW: http://amarok.kde.org
|
||||
MAIL: amarok@kde.org
|
||||
IRC: irc.freenode.net - #amarok, #amarok.de, #amarok.es, #amarok.fr
|
|
@ -1,2 +0,0 @@
|
|||
Open amarok bugs are listed here:
|
||||
http://tinyurl.com/allamarokbugs
|
|
@ -1,3 +0,0 @@
|
|||
[Project]
|
||||
Manager=KDevCMakeManager
|
||||
Name=amarok
|
|
@ -1,3 +0,0 @@
|
|||
|
||||
add_subdirectory(modules)
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# install the cmake files
|
||||
|
||||
file(GLOB cmakeFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.cmake")
|
||||
|
||||
set(module_install_dir ${DATA_INSTALL_DIR}/cmake/modules )
|
||||
|
||||
install( FILES ${cmakeFiles} DESTINATION ${module_install_dir} )
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES})
|
||||
set(CMAKE_REQUIRED_DEFINITIONS "")
|
||||
set(CMAKE_REQUIRED_FLAGS "")
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
#include <QtCore/QtGlobal>
|
||||
int main()
|
||||
{
|
||||
#if defined(QT_NO_GLIBASDF)
|
||||
#error \"Qt was compiled with Glib disabled\"
|
||||
#endif
|
||||
return 0;
|
||||
}"
|
||||
QT4_GLIB_SUPPORT)
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
# taglib changed filenames to be a char/wchar struct on some platforms, need to check for it
|
||||
macro (CHECK_TAGLIB_FILENAME TAGLIB_FILENAME_COMPLEX)
|
||||
include (CheckCXXSourceCompiles)
|
||||
set (CMAKE_REQUIRED_FLAGS ${TAGLIB_CFLAGS})
|
||||
set (CMAKE_REQUIRED_INCLUDES ${TAGLIB_INCLUDES})
|
||||
set (CMAKE_REQUIRED_LIBRARIES ${TAGLIB_LIBRARIES})
|
||||
check_cxx_source_compiles(
|
||||
"#include <tfile.h>
|
||||
int main()
|
||||
{
|
||||
TagLib::FileName fileName1(\"char\");
|
||||
TagLib::FileName fileName2(L\"wchar\");
|
||||
return 0;
|
||||
}" ${TAGLIB_FILENAME_COMPLEX})
|
||||
endmacro (CHECK_TAGLIB_FILENAME)
|
|
@ -1,63 +0,0 @@
|
|||
# - Find GDK-PixBuf
|
||||
# Find the GDK-PixBuf include directories and libraries
|
||||
#
|
||||
# This module defines
|
||||
# GDKPIXBUF_FOUND - true if the following are found
|
||||
# GDKPIXBUF_INCLUDE_DIR - GDK-PixBuf include directory
|
||||
# GDKPIXBUF_LIBRARY - GDK-PixBuf library location
|
||||
|
||||
find_package( PkgConfig )
|
||||
if( PKG_CONFIG_FOUND )
|
||||
# If pkg-config finds gdk-pixbuf-2.0, this will set:
|
||||
# PC_GDKPIXBUF_FOUND (to TRUE)
|
||||
# PC_GDKPIXBUF_INCLUDEDIR
|
||||
# PC_GDKPIXBUF_INCLUDE_DIRS
|
||||
# PC_GDKPIXBUF_LIBDIR
|
||||
# PC_GDKPIXBUF_LIBRARY_DIRS
|
||||
# These variables are then used as hints to find_path()
|
||||
# and find_library()
|
||||
pkg_search_module( PC_GDKPIXBUF gdk-pixbuf-2.0 )
|
||||
endif( PKG_CONFIG_FOUND )
|
||||
|
||||
find_path( GDKPIXBUF_INCLUDE_DIR gdk-pixbuf/gdk-pixbuf.h
|
||||
HINTS
|
||||
# Hints provided by pkg-config
|
||||
${PC_GDKPIXBUF_INCLUDEDIR}
|
||||
${PC_GDKPIXBUF_INCLUDEDIR}/*
|
||||
${PC_GDKPIXBUF_INCLUDE_DIRS}
|
||||
PATHS
|
||||
# Standard include directories
|
||||
/usr/include/
|
||||
/sw/include/
|
||||
/usr/local/include/
|
||||
${KDE4_INCLUDE_DIR}
|
||||
# Search all subdirs of the above
|
||||
/usr/include/*
|
||||
/sw/include/*
|
||||
/usr/local/include/*
|
||||
${KDE4_INCLUDE_DIR}/*
|
||||
PATH_SUFFIXES
|
||||
# Subdirectory hints
|
||||
gdk-pixbuf-2.0
|
||||
gtk-2.0
|
||||
)
|
||||
|
||||
find_library( GDKPIXBUF_LIBRARY gdk_pixbuf-2.0
|
||||
HINTS
|
||||
# Hints provided by pkg-config
|
||||
${PC_GDKPIXBUF_LIBDIR}
|
||||
${PC_GDKPIXBUF_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
include( FindPackageHandleStandardArgs )
|
||||
# Sets GDKPIXBUF_FOUND to true if GDKPIXBUF_INCLUDE_DIR and
|
||||
# GDKPIXBUF_LIBRARY are both set
|
||||
find_package_handle_standard_args( GDKPixBuf DEFAULT_MSG
|
||||
GDKPIXBUF_LIBRARY
|
||||
GDKPIXBUF_INCLUDE_DIR
|
||||
)
|
||||
if( GDKPIXBUF_FOUND )
|
||||
message( STATUS "\tInclude directory: ${GDKPIXBUF_INCLUDE_DIR}" )
|
||||
endif( GDKPIXBUF_FOUND )
|
||||
|
||||
mark_as_advanced( GDKPIXBUF_INCLUDE_DIR GDKPIXBUF_LIBRARY )
|
|
@ -1,171 +0,0 @@
|
|||
# - Find Googlemock
|
||||
# Find the google mock includes and the google mock libraries
|
||||
# This module defines
|
||||
# GOOGLEMOCK_INCLUDE_DIR, root google mock include dir
|
||||
# GOOGLEMOCK_LIBRARY, the path to Google Mock library
|
||||
# GOOGLEMOCK_LIBRARIES, the path to Google Mock and Google Test library
|
||||
# GOOGLEMOCK_FOUND, whether Google Mock was found
|
||||
#
|
||||
# since google test and google mock is not supposed to be supplied pre-compiled
|
||||
# we try to find the google mock sources as a fallback
|
||||
|
||||
find_program(GMOCK-CONFIG_EXECUTABLE NAMES gmock-config PATHS
|
||||
${BIN_INSTALL_DIR}
|
||||
/opt/local/bin
|
||||
/usr/bin
|
||||
)
|
||||
|
||||
if(GMOCK-CONFIG_EXECUTABLE)
|
||||
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --includedir OUTPUT_VARIABLE GOOGLEMOCK_INCLUDE_DIR)
|
||||
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --ldflags OUTPUT_VARIABLE GOOGLEMOCK_LDFLAGS)
|
||||
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE GOOGLEMOCK_libs_tmp)
|
||||
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LDFLAGS} ${GOOGLEMOCK_libs_tmp})
|
||||
|
||||
if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARIES)
|
||||
set(GOOGLEMOCK_FOUND TRUE)
|
||||
message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")
|
||||
else(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARIES)
|
||||
set(GOOGLEMOCK_FOUND FALSE)
|
||||
if (GOOGLEMOCK_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find required package Googlemock")
|
||||
endif(GOOGLEMOCK_FIND_REQUIRED)
|
||||
endif(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARIES)
|
||||
|
||||
else(GMOCK-CONFIG_EXECUTABLE)
|
||||
|
||||
find_path(GOOGLEMOCK_INCLUDE_DIR NAMES gmock.h
|
||||
HINTS
|
||||
~/usr/include
|
||||
/opt/local/include
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/kde4/include
|
||||
${KDE4_INCLUDE_DIR}
|
||||
PATH_SUFFIXES gmock
|
||||
)
|
||||
|
||||
find_library( GOOGLEMOCK_LIBRARY NAMES gmock
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
find_library( GOOGLEMOCK_DEP_GTEST_LIBRARY NAMES gtest
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
# google-mock >= 1.5 requires pthread
|
||||
# see: http://code.google.com/p/googlemock/source/browse/trunk/CHANGES
|
||||
if( NOT WIN32 AND GOOGLEMOCK_LIBRARY )
|
||||
find_library( GOOGLEMOCK_DEP_PTHREAD_LIBRARY NAMES pthread
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
endif( NOT WIN32 AND GOOGLEMOCK_LIBRARY )
|
||||
|
||||
# Google recommends not to distribute a pre-build libary and ubuntu is following
|
||||
# this advice with libgtest 1.6.0
|
||||
# However they are distributing sources, so we are looking if we at least have
|
||||
# them available
|
||||
if( NOT GOOGLEMOCK_DEP_GTEST_LIBRARY )
|
||||
find_path( GOOGLEMOCK_SOURCES NAMES gmock
|
||||
PATHS /usr/src
|
||||
NO_DEFAULT_PATH
|
||||
NO_CMAKE_PATH
|
||||
)
|
||||
|
||||
# found googlemock as sources. then we also have the gtest sources since they
|
||||
# are included
|
||||
if( GOOGLEMOCK_SOURCES )
|
||||
find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
|
||||
PATHS "${GOOGLEMOCK_SOURCES}/gmock"
|
||||
NO_DEFAULT_PATH
|
||||
NO_CMAKE_PATH
|
||||
)
|
||||
|
||||
# make sure that we use the gtest supplied with googlemock
|
||||
set(GOOGLEMOCK_INCLUDE_DIR
|
||||
"${GOOGLEMOCK_INCLUDE_DIR}"
|
||||
"${GOOGLEMOCK_SOURCES}/gmock"
|
||||
"${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest/include"
|
||||
)
|
||||
|
||||
elseif( GOOGLEMOCK_SOURCES )
|
||||
find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
|
||||
PATHS /usr/src
|
||||
NO_DEFAULT_PATH
|
||||
NO_CMAKE_PATH
|
||||
)
|
||||
|
||||
# in this case we also have to use the static google mock library
|
||||
set( OLD_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
set( CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
find_library( GOOGLEMOCK_LIBRARY_STATIC NAMES gmock
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
set( CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif( GOOGLEMOCK_SOURCES )
|
||||
|
||||
endif( NOT GOOGLEMOCK_DEP_GTEST_LIBRARY )
|
||||
|
||||
# -- googlemock and gtest library available
|
||||
if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_LIBRARY)
|
||||
set(GOOGLEMOCK_FOUND TRUE)
|
||||
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY} ${GOOGLEMOCK_DEP_GTEST_LIBRARY} ${GOOGLEMOCK_DEP_PTHREAD_LIBRARY})
|
||||
message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")
|
||||
|
||||
|
||||
# -- googlemock and gtest sources available
|
||||
elseif(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_SOURCES)
|
||||
set(GOOGLEMOCK_FOUND TRUE)
|
||||
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY_STATIC} gtest)
|
||||
set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
|
||||
message(STATUS "Found libgmock but need to build gtest: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES} ${GOOGLEMOCK_DEP_GTEST_SOURCES}")
|
||||
|
||||
# -- googlemock sources and gtest sources available
|
||||
elseif(GOOGLEMOCK_SOURCES)
|
||||
set(GOOGLEMOCK_FOUND TRUE)
|
||||
set(GOOGLEMOCK_LIBRARIES gtest)
|
||||
set(GOOGLEMOCK_SRCS "${GOOGLEMOCK_SOURCES}/gmock/src/gmock-all.cc" CACHE PATH "Google mock source file that needs to be added")
|
||||
set(GOOGLEMOCK_SOURCES "${GOOGLEMOCK_SOURCES}/gmock" CACHE PATH "Path to the google-mock sources")
|
||||
set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
|
||||
message(STATUS "Found gmock and gtest but need to build both: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_DEP_GTEST_SOURCES}")
|
||||
mark_as_advanced(GOOGLEMOCK_SRCS)
|
||||
|
||||
# -- googlemock but no gtest
|
||||
else(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_SOURCES)
|
||||
set(GOOGLEMOCK_FOUND FALSE)
|
||||
if (GOOGLEMOCK_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find required package Googlemock or gtest")
|
||||
endif(GOOGLEMOCK_FIND_REQUIRED)
|
||||
endif(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_LIBRARY)
|
||||
|
||||
endif(GMOCK-CONFIG_EXECUTABLE)
|
||||
|
||||
mark_as_advanced(GOOGLEMOCK_INCLUDE_DIR GOOGLEMOCK_LIBRARIES)
|
|
@ -1,22 +0,0 @@
|
|||
# - Find HUpnp
|
||||
# HUpnp is a Universal Plug and Play (UPnP) library
|
||||
# used by the UPnP collection.
|
||||
# Defines:
|
||||
# HUPNP_INCLUDE_DIR
|
||||
# HUPNP_LIBRARIES
|
||||
# HUPNP_FOUND
|
||||
|
||||
find_path(HUPNP_INCLUDE_DIR HUpnp HINTS ${KDE4_INCLUDE_DIR})
|
||||
|
||||
find_library(HUPNP_LIBRARIES HUpnp PATHS ${KDE4_LIB_DIR})
|
||||
|
||||
if(HUPNP_INCLUDE_DIR AND HUPNP_LIBRARIES)
|
||||
set(HUPNP_FOUND TRUE)
|
||||
message(STATUS "Found HUpnp")
|
||||
else(HUPNP_INCLUDE_DIR and HUPNP_LIBRARIES)
|
||||
set(HUPNP_FOUND FALSE)
|
||||
if(HUPNP_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find required package HUpnp: <http://herqq.org>")
|
||||
endif(HUPNP_FIND_REQUIRED)
|
||||
endif(HUPNP_INCLUDE_DIR AND HUPNP_LIBRARIES)
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
# - Find IFP library
|
||||
# Find the native IFP includes and library
|
||||
# This module defines
|
||||
# IFP_INCLUDE_DIR, where to find ifp.h, etc.
|
||||
# IFP_LIBRARIES, libraries to link against to use IFP.
|
||||
# IFP_FOUND, If false, do NOT try to use IFP.
|
||||
# also defined, but NOT for general use are
|
||||
# IFP_LIBRARY, where to find the IFP library.
|
||||
|
||||
if (IFP_INCLUDE_DIR)
|
||||
# Already in cache, be silent
|
||||
set(Ifp_FIND_QUIETLY TRUE)
|
||||
endif (IFP_INCLUDE_DIR)
|
||||
|
||||
FIND_PATH(IFP_INCLUDE_DIR ifp.h
|
||||
)
|
||||
|
||||
FIND_LIBRARY(IFP_LIBRARY ifp
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(IFP DEFAULT_MSG IFP_LIBRARY IFP_INCLUDE_DIR)
|
||||
|
||||
MARK_AS_ADVANCED(IFP_INCLUDE_DIR IFP_LIBRARY)
|
|
@ -1,48 +0,0 @@
|
|||
# - Try to find the libgpod library
|
||||
# Once done this will define
|
||||
#
|
||||
# IPOD_FOUND - system has libgpod
|
||||
# IPOD_INCLUDE_DIRS - the libgpod include directory
|
||||
# IPOD_LIBRARIES - Link these to use libgpod
|
||||
# IPOD_CFLAGS - Compiler switches required for using libgpod
|
||||
# IPOD_VERSION - Version number of libgpod
|
||||
#
|
||||
|
||||
if (IPOD_INCLUDE_DIRS AND IPOD_LIBRARIES)
|
||||
|
||||
# in cache already
|
||||
SET(IPOD_FOUND TRUE)
|
||||
|
||||
else (IPOD_INCLUDE_DIRS AND IPOD_LIBRARIES)
|
||||
if(NOT WIN32)
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
find_package(PkgConfig)
|
||||
PKG_SEARCH_MODULE(IPOD libgpod-1.0)
|
||||
else(NOT WIN32)
|
||||
find_path(IPOD_INCLUDE_DIRS
|
||||
NAMES
|
||||
gpod/itdb.h
|
||||
PATH_SUFFIXES gpod-1.0
|
||||
)
|
||||
|
||||
find_library(IPOD_LIBRARIES NAMES
|
||||
gpod libgpod gpod-4 libgpod-4
|
||||
)
|
||||
if(IPOD_INCLUDE_DIRS AND IPOD_LIBRARIES)
|
||||
set(IPOD_FOUND ON)
|
||||
endif(IPOD_INCLUDE_DIRS AND IPOD_LIBRARIES)
|
||||
endif(NOT WIN32)
|
||||
IF (IPOD_FOUND)
|
||||
IF (NOT IPOD_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found libgpod-1 ${IPOD_VERSION}")
|
||||
ENDIF (NOT IPOD_FIND_QUIETLY)
|
||||
ELSE (IPOD_FOUND)
|
||||
IF (IPOD_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could NOT find libgpod-1, check FindPkgConfig output above!")
|
||||
ENDIF (IPOD_FIND_REQUIRED)
|
||||
ENDIF (IPOD_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(IPOD_INCLUDE_DIRS)
|
||||
|
||||
endif (IPOD_INCLUDE_DIRS AND IPOD_LIBRARIES)
|
|
@ -1,54 +0,0 @@
|
|||
# - Find LibLastFM
|
||||
# Find the liblastfm includes and the liblastfm libraries
|
||||
# This module defines
|
||||
# LIBLASTFM_FOUND, whether liblastfm was found. If it was, it further sets:
|
||||
# LIBLASTFM_INCLUDE_DIR, root lastfm include dir
|
||||
# LIBLASTFM_LIBRARY, the path to liblastfm
|
||||
# LIBLASTFM_VERSION, version of found liblastfm as a string, e.g "0.3"
|
||||
|
||||
|
||||
find_path(LIBLASTFM_INCLUDE_DIR NAMES global.h
|
||||
HINTS
|
||||
~/usr/include
|
||||
/opt/local/include
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/kde4/include
|
||||
${KDE4_INCLUDE_DIR}
|
||||
PATH_SUFFIXES lastfm
|
||||
)
|
||||
|
||||
find_library( LIBLASTFM_LIBRARY NAMES lastfm
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
|
||||
if(LIBLASTFM_INCLUDE_DIR AND LIBLASTFM_LIBRARY)
|
||||
set(LIBLASTFM_FOUND TRUE)
|
||||
else(LIBLASTFM_INCLUDE_DIR AND LIBLASTFM_LIBRARY)
|
||||
set(LIBLASTFM_FOUND FALSE)
|
||||
endif(LIBLASTFM_INCLUDE_DIR AND LIBLASTFM_LIBRARY)
|
||||
|
||||
if(LIBLASTFM_FOUND)
|
||||
set(regex "#define LASTFM_VERSION_STRING \"(.*)\"")
|
||||
file(STRINGS "${LIBLASTFM_INCLUDE_DIR}/global.h" LIBLASTFM_VERSION REGEX ${regex})
|
||||
if(${LIBLASTFM_VERSION} MATCHES ${regex})
|
||||
set(LIBLASTFM_VERSION ${CMAKE_MATCH_1})
|
||||
message(STATUS "Found liblastfm: ${LIBLASTFM_INCLUDE_DIR}, ${LIBLASTFM_LIBRARY}, version ${LIBLASTFM_VERSION}")
|
||||
else(${LIBLASTFM_VERSION} MATCHES ${regex})
|
||||
message(WARNING "Found liblastfm: ${LIBLASTFM_INCLUDE_DIR} - but failed to parse version")
|
||||
set(LIBLASTFM_FOUND FALSE)
|
||||
unset(LIBLASTFM_INCLUDE_DIR)
|
||||
unset(LIBLASTFM_LIBRARY)
|
||||
endif(${LIBLASTFM_VERSION} MATCHES ${regex})
|
||||
unset(regex)
|
||||
endif(LIBLASTFM_FOUND)
|
||||
|
||||
mark_as_advanced(LIBLASTFM_INCLUDE_DIR LIBLASTFM_LIBRARY)
|
|
@ -1,34 +0,0 @@
|
|||
find_path(LIBOFA_INCLUDE_DIR NAMES ofa.h
|
||||
HINTS
|
||||
~/usr/include
|
||||
/opt/local/include
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/kde4/include
|
||||
${KDE4_INCLUDE_DIR}
|
||||
PATH_SUFFIXES ofa1
|
||||
)
|
||||
|
||||
find_library(LIBOFA_LIBRARY NAMES ofa
|
||||
PATHS
|
||||
~/usr/lib
|
||||
/opt/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/opt/kde4/lib
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
|
||||
if(LIBOFA_INCLUDE_DIR AND LIBOFA_LIBRARY)
|
||||
set(LIBOFA_FOUND TRUE)
|
||||
message(STATUS "Found libofa: ${LIBOFA_INCLUDE_DIR}, ${LIBOFA_LIBRARY}")
|
||||
else(LIBOFA_INCLUDE_DIR AND LIBOFA_LIBRARY)
|
||||
set(LIBOFA_FOUND FALSE)
|
||||
if (LIBOFA_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find required package LibOFA")
|
||||
endif(LIBOFA_FIND_REQUIRED)
|
||||
endif(LIBOFA_INCLUDE_DIR AND LIBOFA_LIBRARY)
|
||||
|
||||
mark_as_advanced(LIBOFA_INCLUDE_DIR LIBOFA_LIBRARY)
|
|
@ -1,30 +0,0 @@
|
|||
# - Try to find the GNU Libgcrypt library
|
||||
# Once done this will define
|
||||
#
|
||||
# LIBGCRYPT_FOUND - system has the Libgcrypt library
|
||||
# LIBGCRYPT_LIBS - The libraries needed to use Libgcrypt
|
||||
|
||||
# Copyright (c) 2006, Pino Toscano, <toscano.pino@tiscali.it>
|
||||
# Copyright (c) 2008, Modestas Vainius, <modestas@vainius.eu>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
|
||||
check_include_files(gcrypt.h HAVE_GCRYPT_H)
|
||||
|
||||
if (HAVE_GCRYPT_H)
|
||||
set(LIBGCRYPT_HEADERS_FOUND TRUE)
|
||||
endif (HAVE_GCRYPT_H)
|
||||
|
||||
if (LIBGCRYPT_HEADERS_FOUND)
|
||||
find_library(LIBGCRYPT_LIBS NAMES gcrypt )
|
||||
endif (LIBGCRYPT_HEADERS_FOUND)
|
||||
|
||||
if (LIBGCRYPT_LIBS)
|
||||
set(LIBGCRYPT_FOUND TRUE)
|
||||
message(STATUS "Libgcrypt found: ${LIBGCRYPT_LIBS}")
|
||||
elseif (Libgcrypt_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find Libgcrypt")
|
||||
endif (LIBGCRYPT_LIBS)
|
|
@ -1,48 +0,0 @@
|
|||
|
||||
# - Find libmygpo-qt
|
||||
# Find the libmygpo-qt includes and the libmygpo-qt libraries
|
||||
# This module defines
|
||||
# LIBMYGPO_QT_INCLUDE_DIR, root mygpo-qt include dir
|
||||
# LIBMYGPO_QT_LIBRARY, the path to libmygpo-qt
|
||||
# LIBMYGPO_QT_FOUND, whether libmygpo-qt was found
|
||||
|
||||
|
||||
find_path(LIBMYGPO_QT_INCLUDE_DIR NAMES ApiRequest.h
|
||||
HINTS
|
||||
~/usr/include
|
||||
/opt/local/include
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/kde4/include
|
||||
~/kde/include
|
||||
PATH_SUFFIXES mygpo-qt
|
||||
)
|
||||
|
||||
find_library( LIBMYGPO_QT_LIBRARY NAMES mygpo-qt
|
||||
PATHS
|
||||
~/usr/lib
|
||||
~/usr/lib64
|
||||
/opt/local/lib
|
||||
/opt/local/lib64
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
/opt/kde4/lib
|
||||
/opt/kde4/lib64
|
||||
~/kde/lib
|
||||
~/kde/lib64
|
||||
)
|
||||
|
||||
|
||||
if(LIBMYGPO_QT_INCLUDE_DIR AND LIBMYGPO_QT_LIBRARY)
|
||||
set(LIBMYGPO_QT_FOUND TRUE)
|
||||
message(STATUS "Found libmygpo-qt: ${LIBMYGPO_QT_INCLUDE_DIR}, ${LIBMYGPO_QT_LIBRARY}")
|
||||
else(LIBMYGPO_QT_INCLUDE_DIR AND LIBMYGPO_QT_LIBRARY)
|
||||
set(LIBMYGPO_QT_FOUND FALSE)
|
||||
if (LIBMYGPO_QT_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find required package libmygpo-qt")
|
||||
endif(LIBMYGPO_QT_FIND_REQUIRED)
|
||||
endif(LIBMYGPO_QT_INCLUDE_DIR AND LIBMYGPO_QT_LIBRARY)
|
||||
|
||||
mark_as_advanced(LIBMYGPO_QT_INCLUDE_DIR LIBMYGPO_QT_LIBRARY)
|
|
@ -1,46 +0,0 @@
|
|||
# - Try to find the loudmouth library
|
||||
# Once done this will define
|
||||
#
|
||||
# LOUDMOUTH_FOUND - system has libgpod
|
||||
# LOUDMOUTH_INCLUDE_DIRS - the libgpod include directory
|
||||
# LOUDMOUTH_LIBRARIES - Link these to use libgpod
|
||||
# LOUDMOUTH_DEFINITIONS - Compiler switches required for using libgpod
|
||||
#
|
||||
|
||||
if (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
||||
|
||||
# in cache already
|
||||
SET(LOUDMOUTH_FOUND TRUE)
|
||||
|
||||
else (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
||||
if(NOT WIN32)
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
find_package(PkgConfig)
|
||||
PKG_SEARCH_MODULE(LOUDMOUTH loudmouth-1.0)
|
||||
|
||||
else(NOT WIN32)
|
||||
|
||||
FIND_PATH(LOUDMOUTH_INCLUDE_DIRS loudmouth/loudmouth.h /usr/include/loudmouth-1.0
|
||||
${_LOUDMOUTHIncDir}
|
||||
)
|
||||
|
||||
FIND_LIBRARY(LOUDMOUTH_LIBRARIES NAMES loudmouth-1
|
||||
PATHS
|
||||
${_LOUDMOUTHLinkDir}
|
||||
)
|
||||
|
||||
endif(NOT WIN32)
|
||||
|
||||
if (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
||||
SET(LOUDMOUTH_FOUND TRUE)
|
||||
else (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
||||
SET(LOUDMOUTH_FOUND_FALSE)
|
||||
endif (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Loudmouth DEFAULT_MSG LOUDMOUTH_INCLUDE_DIRS LOUDMOUTH_LIBRARIES )
|
||||
|
||||
MARK_AS_ADVANCED(LOUDMOUTH_INCLUDE_DIRS LOUDMOUTH_LIBRARIES)
|
||||
|
||||
endif (LOUDMOUTH_INCLUDE_DIRS AND LOUDMOUTH_LIBRARIES)
|
|
@ -1,55 +0,0 @@
|
|||
# - Try to find the libmtp library
|
||||
# Once done this will define
|
||||
#
|
||||
# MTP_FOUND - system has libmtp
|
||||
# MTP_INCLUDE_DIR - the libmtp include directory
|
||||
# MTP_LIBRARIES - Link these to use libmtp
|
||||
# MTP_DEFINITIONS - Compiler switches required for using libmtp
|
||||
#
|
||||
|
||||
if (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND MTP_VERSION_OKAY)
|
||||
|
||||
# in cache already
|
||||
SET(MTP_FOUND TRUE)
|
||||
|
||||
else (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND MTP_VERSION_OKAY)
|
||||
if(NOT WIN32)
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
INCLUDE(FindPkgConfig)
|
||||
|
||||
pkg_check_modules(_MTP libmtp)
|
||||
|
||||
set(MTP_DEFINITIONS ${_MTP_CFLAGS})
|
||||
endif(NOT WIN32)
|
||||
FIND_PATH(MTP_INCLUDE_DIR libmtp.h
|
||||
${_MTP_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
FIND_LIBRARY(MTP_LIBRARIES NAMES mtp
|
||||
PATHS
|
||||
${_MTP_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --atleast-version=1.0.0 libmtp OUTPUT_VARIABLE _pkgconfigDevNull RETURN_VALUE MTP_VERSION_OKAY)
|
||||
|
||||
if (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND MTP_VERSION_OKAY STREQUAL "0")
|
||||
set(MTP_FOUND TRUE)
|
||||
endif (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND MTP_VERSION_OKAY STREQUAL "0")
|
||||
|
||||
if (MTP_FOUND)
|
||||
if (NOT Mtp_FIND_QUIETLY)
|
||||
message(STATUS "Found MTP: ${MTP_LIBRARIES}")
|
||||
endif (NOT Mtp_FIND_QUIETLY)
|
||||
else (MTP_FOUND)
|
||||
if (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND NOT MTP_VERSION_OKAY STREQUAL "0")
|
||||
message(STATUS "Found MTP but version requirements not met")
|
||||
endif (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND NOT MTP_VERSION_OKAY STREQUAL "0")
|
||||
if (Mtp_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find MTP")
|
||||
endif (Mtp_FIND_REQUIRED)
|
||||
endif (MTP_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(MTP_INCLUDE_DIR MTP_LIBRARIES MTP_VERSION_OKAY)
|
||||
|
||||
endif (MTP_INCLUDE_DIR AND MTP_LIBRARIES AND MTP_VERSION_OKAY)
|
|
@ -1,115 +0,0 @@
|
|||
# - Find MySQL / MySQL Embedded
|
||||
# Find the MySQL includes and client library
|
||||
# This module defines
|
||||
# MYSQL_INCLUDE_DIR, where to find mysql.h
|
||||
# MYSQL_LIBRARIES, the libraries needed to use MySQL.
|
||||
# MYSQL_EMBEDDED_LIBRARIES, the libraries needed to use MySQL Embedded.
|
||||
# MYSQL_FOUND, If false, do not try to use MySQL.
|
||||
# MYSQL_EMBEDDED_FOUND, If false, do not try to use MySQL Embedded.
|
||||
|
||||
# Copyright (c) 2006, Jaroslaw Staniek, <js@iidea.pl>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
if(NOT WIN32)
|
||||
find_program(MYSQLCONFIG_EXECUTABLE NAMES mysql_config mysql_config5 HINTS ${BIN_INSTALL_DIR})
|
||||
endif(NOT WIN32)
|
||||
|
||||
find_path(MYSQL_INCLUDE_DIR mysql.h PATH_SUFFIXES mysql mysql5/mysql)
|
||||
|
||||
if(MYSQLCONFIG_EXECUTABLE)
|
||||
exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_CFLAGS)
|
||||
exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_LIBRARIES)
|
||||
exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --libmysqld-libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_EMBEDDED_LIBSTEMP)
|
||||
|
||||
set(MYSQL_EMBEDDED_CFLAGS ${MYSQL_CFLAGS})
|
||||
|
||||
if(MYSQL_EMBEDDED_LIBSTEMP)
|
||||
set( HAVE_MYSQL_EMBEDDED true )
|
||||
endif(MYSQL_EMBEDDED_LIBSTEMP)
|
||||
|
||||
find_library(MYSQLD_PIC_SEPARATE
|
||||
mysqld_pic
|
||||
PATH_SUFFIXES mysql
|
||||
)
|
||||
|
||||
if(MYSQLD_PIC_SEPARATE)
|
||||
string(REPLACE "lmysqld" "lmysqld_pic" MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBSTEMP})
|
||||
# append link directory to variable as mysql_config is not always (since Ubuntu 12.04?)
|
||||
# reporting this directory with when being called with --libs
|
||||
get_filename_component(MYSQL_EMBEDDED_LIB_DIR_TMP "${MYSQLD_PIC_SEPARATE}" PATH)
|
||||
set(MYSQL_EMBEDDED_LIBRARIES "${MYSQL_EMBEDDED_LIBRARIES} -L${MYSQL_EMBEDDED_LIB_DIR_TMP}")
|
||||
else(MYSQLD_PIC_SEPARATE)
|
||||
set(MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBSTEMP})
|
||||
endif(MYSQLD_PIC_SEPARATE)
|
||||
|
||||
if (UNIX)
|
||||
# libmysqld wants -lpthread, but it is very likely it does not say that
|
||||
# explicitly in --libmysqld-libs
|
||||
find_package(Threads)
|
||||
set(MYSQL_EMBEDDED_LIBRARIES "${MYSQL_EMBEDDED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}")
|
||||
endif(UNIX)
|
||||
|
||||
else(MYSQLCONFIG_EXECUTABLE)
|
||||
|
||||
if(WIN32)
|
||||
set(MYSQL_CLIENT_LIBRARY_NAME libmysql)
|
||||
else(WIN32)
|
||||
set(MYSQL_CLIENT_LIBRARY_NAME mysqlclient)
|
||||
endif(WIN32)
|
||||
|
||||
find_library(MYSQL_LIBRARIES NAMES ${MYSQL_CLIENT_LIBRARY_NAME}
|
||||
PATHS
|
||||
~/usr/lib/mysql
|
||||
/opt/mysql/mysql/lib
|
||||
usr/mysql/lib/mysql
|
||||
opt/local/lib/mysql5/mysql
|
||||
opt/mysqle/lib/mysql
|
||||
usr/lib/mysql
|
||||
usr/lib64/mysql
|
||||
usr/lib64
|
||||
usr/local/lib/mysql
|
||||
opt/local/lib/mysql
|
||||
opt/ports/lib/mysql5/mysql
|
||||
)
|
||||
|
||||
find_library(MYSQL_EMBEDDED_LIBRARIES NAMES mysqld_pic mysqld libmysqld
|
||||
PATHS
|
||||
~/usr/lib/mysql
|
||||
/opt/local/lib/mysql5/mysql
|
||||
/opt/mysqle/lib/mysql
|
||||
/usr/lib/mysql
|
||||
/usr/lib64/mysql
|
||||
/usr/local/lib/mysql
|
||||
/opt/mysql/lib/mysql
|
||||
/opt/local/lib/mysql
|
||||
/opt/ports/lib/mysql5/mysql
|
||||
)
|
||||
|
||||
macro_push_required_vars()
|
||||
set( CMAKE_REQUIRED_INCLUDES ${MYSQL_INCLUDE_DIR} )
|
||||
set( CMAKE_REQUIRED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES} )
|
||||
include_directories( ${MYSQL_INCLUDE_DIR} )
|
||||
check_cxx_source_compiles( "#if (defined(_WIN32) || defined(_WIN64))\n#define __LCC__\n#endif\n#include <mysql.h>\nint main() { int i = MYSQL_OPT_USE_EMBEDDED_CONNECTION; }" HAVE_MYSQL_EMBEDDED )
|
||||
macro_pop_required_vars()
|
||||
|
||||
endif(MYSQLCONFIG_EXECUTABLE)
|
||||
|
||||
if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
|
||||
set(MYSQL_FOUND TRUE)
|
||||
message(STATUS "Found MySQL: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}")
|
||||
else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
|
||||
set(MYSQL_FOUND FALSE)
|
||||
message(STATUS "MySQL not found.")
|
||||
endif(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
|
||||
|
||||
if(MYSQL_INCLUDE_DIR AND MYSQL_EMBEDDED_LIBRARIES AND HAVE_MYSQL_EMBEDDED)
|
||||
set(MYSQL_EMBEDDED_FOUND TRUE)
|
||||
message(STATUS "Found MySQL Embedded: ${MYSQL_INCLUDE_DIR}, ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||
else(MYSQL_INCLUDE_DIR AND MYSQL_EMBEDDED_LIBRARIES AND HAVE_MYSQL_EMBEDDED)
|
||||
set(MYSQL_EMBEDDED_FOUND FALSE)
|
||||
message(STATUS "MySQL Embedded not found.")
|
||||
endif(MYSQL_INCLUDE_DIR AND MYSQL_EMBEDDED_LIBRARIES AND HAVE_MYSQL_EMBEDDED)
|
||||
|
||||
mark_as_advanced(MYSQL_INCLUDE_DIR MYSQL_LIBRARIES MYSQL_EMBEDDED_LIBRARIES)
|
|
@ -1,41 +0,0 @@
|
|||
# - Try to find the libnjb library
|
||||
# Once done this will define
|
||||
#
|
||||
# NJB_FOUND - system has libnjb
|
||||
# NJB_INCLUDE_DIR - the libnjb include directory
|
||||
# NJB_LIBRARIES - Link these to use libnjb
|
||||
# NJB_DEFINITIONS - Compiler switches required for using libnjb
|
||||
#
|
||||
|
||||
if (NJB_INCLUDE_DIR AND NJB_LIBRARIES)
|
||||
|
||||
# in cache already
|
||||
SET(NJB_FOUND TRUE)
|
||||
|
||||
else (NJB_INCLUDE_DIR AND NJB_LIBRARIES)
|
||||
if(NOT WIN32)
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
INCLUDE(FindPkgConfig)
|
||||
|
||||
pkg_check_modules(_NJB libnjb)
|
||||
|
||||
set(NJB_DEFINITIONS ${_NJB_CFLAGS})
|
||||
endif(NOT WIN32)
|
||||
|
||||
FIND_PATH(NJB_INCLUDE_DIR libnjb.h
|
||||
${_NJB_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
FIND_LIBRARY(NJB_LIBRARIES NAMES njb
|
||||
PATHS
|
||||
${_NJB_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Njb DEFAULT_MSG NJB_INCLUDE_DIR NJB_LIBRARIES )
|
||||
|
||||
MARK_AS_ADVANCED(NJB_INCLUDE_DIR NJB_LIBRARIES)
|
||||
|
||||
endif (NJB_INCLUDE_DIR AND NJB_LIBRARIES)
|
|
@ -1,44 +0,0 @@
|
|||
## Ian Monroe <ian@monroe.nu> Copyright 2009
|
||||
# released under public domain or:
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
|
||||
include(CheckCXXSourceRuns)
|
||||
|
||||
if(NOT WIN32)
|
||||
file( READ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/bindingstest/QtScriptBindingsTest.cpp" source )
|
||||
message(STATUS "Checking if the QtScript Qt Bindings are installed.")
|
||||
|
||||
|
||||
set(CMAKE_REQUIRED_DEFINTIONS ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )
|
||||
set(CMAKE_REQUIRED_INCLUDES ${QT_QTCORE_INCLUDE_DIR} ${QT_QTSCRIPT_INCLUDE_DIR} ${KDE4_INCLUDES})
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${QT_QTSCRIPT_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} -L${KDE4_LIB_DIR} -lkdecore -lkdeui)
|
||||
message( STATUS "includes ${CMAKE_REQUIRED_INCLUDES} libraries ${CMAKE_REQUIRED_LIBRARIES}" )
|
||||
CHECK_CXX_SOURCE_RUNS( "${source}" BINDINGS_RUN_RESULT)
|
||||
|
||||
if(BINDINGS_RUN_RESULT EQUAL 1)
|
||||
message( STATUS "QtBindings found")
|
||||
set(QTSCRIPTQTBINDINGS_FOUND TRUE)
|
||||
else(BINDINGS_RUN_RESULT EQUAL 1)
|
||||
message( STATUS "QtBindings not found. run `cd cmake/modules/bindingstest; mkdir build; cd build; cmake ..; make; ./bindingstest; echo $?` If it prints '0' then you're actually fine.")
|
||||
set(QTSCRIPTQTBINDINGS_FOUND FALSE)
|
||||
endif(BINDINGS_RUN_RESULT EQUAL 1)
|
||||
|
||||
set(CMAKE_REQUIRED_DEFINTIONS "" )
|
||||
set(CMAKE_REQUIRED_INCLUDES "")
|
||||
set(CMAKE_REQUIRED_LIBRARIES "")
|
||||
else(NOT WIN32)
|
||||
set(QTSCRIPTQTBINDINGS_FOUND TRUE)
|
||||
endif(NOT WIN32)
|
|
@ -1,135 +0,0 @@
|
|||
# - Try to find the Taglib-Extras library
|
||||
# Once done this will define
|
||||
#
|
||||
# TAGLIB-EXTRAS_FOUND - system has the taglib library
|
||||
# TAGLIB-EXTRAS_CFLAGS - the taglib cflags
|
||||
# TAGLIB-EXTRAS_LIBRARIES - The libraries needed to use taglib
|
||||
|
||||
# Copyright (c) 2006, Laurent Montel, <montel@kde.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
if(NOT TAGLIB-EXTRAS_MIN_VERSION)
|
||||
set(TAGLIB-EXTRAS_MIN_VERSION "1.0")
|
||||
endif(NOT TAGLIB-EXTRAS_MIN_VERSION)
|
||||
|
||||
if(NOT WIN32)
|
||||
find_program(TAGLIB-EXTRASCONFIG_EXECUTABLE NAMES taglib-extras-config PATHS
|
||||
${BIN_INSTALL_DIR}
|
||||
)
|
||||
endif(NOT WIN32)
|
||||
|
||||
#reset vars
|
||||
set(TAGLIB-EXTRAS_LIBRARIES)
|
||||
set(TAGLIB-EXTRAS_CFLAGS)
|
||||
|
||||
# if taglib-extras-config has been found
|
||||
if(TAGLIB-EXTRASCONFIG_EXECUTABLE)
|
||||
|
||||
exec_program(${TAGLIB-EXTRASCONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB-EXTRAS_VERSION)
|
||||
|
||||
if(TAGLIB-EXTRAS_VERSION STRLESS "${TAGLIB-EXTRAS_MIN_VERSION}")
|
||||
message(STATUS "TagLib-Extras version too old: version searched :${TAGLIB-EXTRAS_MIN_VERSION}, found ${TAGLIB-EXTRAS_VERSION}")
|
||||
set(TAGLIB-EXTRAS_FOUND FALSE)
|
||||
else(TAGLIB-EXTRAS_VERSION STRLESS "${TAGLIB-EXTRAS_MIN_VERSION}")
|
||||
|
||||
exec_program(${TAGLIB-EXTRASCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB-EXTRAS_LIBRARIES)
|
||||
|
||||
exec_program(${TAGLIB-EXTRASCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB-EXTRAS_CFLAGS)
|
||||
|
||||
if(TAGLIB-EXTRAS_LIBRARIES AND TAGLIB-EXTRAS_CFLAGS)
|
||||
set(TAGLIB-EXTRAS_FOUND TRUE)
|
||||
endif(TAGLIB-EXTRAS_LIBRARIES AND TAGLIB-EXTRAS_CFLAGS)
|
||||
string(REGEX REPLACE " *-I" ";" TAGLIB-EXTRAS_INCLUDES "${TAGLIB-EXTRAS_CFLAGS}")
|
||||
endif(TAGLIB-EXTRAS_VERSION STRLESS "${TAGLIB-EXTRAS_MIN_VERSION}")
|
||||
mark_as_advanced(TAGLIB-EXTRAS_CFLAGS TAGLIB-EXTRAS_LIBRARIES TAGLIB-EXTRAS_INCLUDES)
|
||||
|
||||
else(TAGLIB-EXTRASCONFIG_EXECUTABLE)
|
||||
|
||||
find_path(TAGLIB-EXTRAS_INCLUDES
|
||||
NAMES
|
||||
tfile_helper.h
|
||||
PATH_SUFFIXES taglib-extras
|
||||
PATHS
|
||||
${KDE4_INCLUDE_DIR}
|
||||
${INCLUDE_INSTALL_DIR}
|
||||
)
|
||||
|
||||
IF(NOT WIN32)
|
||||
# on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX
|
||||
|
||||
FIND_LIBRARY(TAGLIB-EXTRAS_LIBRARIES tag-extras PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR})
|
||||
|
||||
ELSE(NOT WIN32)
|
||||
|
||||
# 1. get all possible libnames
|
||||
SET(args PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR})
|
||||
SET(newargs "")
|
||||
SET(libnames_release "")
|
||||
SET(libnames_debug "")
|
||||
|
||||
LIST(LENGTH args listCount)
|
||||
|
||||
# just one name
|
||||
LIST(APPEND libnames_release "tag-extras")
|
||||
LIST(APPEND libnames_debug "tag-extrasd")
|
||||
|
||||
SET(newargs ${args})
|
||||
|
||||
# search the release lib
|
||||
FIND_LIBRARY(TAGLIB-EXTRAS_LIBRARIES_RELEASE
|
||||
NAMES ${libnames_release}
|
||||
${newargs}
|
||||
)
|
||||
|
||||
# search the debug lib
|
||||
FIND_LIBRARY(TAGLIB-EXTRAS_LIBRARIES_DEBUG
|
||||
NAMES ${libnames_debug}
|
||||
${newargs}
|
||||
)
|
||||
|
||||
IF(TAGLIB-EXTRAS_LIBRARIES_RELEASE AND TAGLIB-EXTRAS_LIBRARIES_DEBUG)
|
||||
|
||||
# both libs found
|
||||
SET(TAGLIB-EXTRAS_LIBRARIES optimized ${TAGLIB-EXTRAS_LIBRARIES_RELEASE}
|
||||
debug ${TAGLIB-EXTRAS_LIBRARIES_DEBUG})
|
||||
|
||||
ELSE(TAGLIB-EXTRAS_LIBRARIES_RELEASE AND TAGLIB-EXTRAS_LIBRARIES_DEBUG)
|
||||
|
||||
IF(TAGLIB-EXTRAS_LIBRARIES_RELEASE)
|
||||
|
||||
# only release found
|
||||
SET(TAGLIB-EXTRAS_LIBRARIES ${TAGLIB-EXTRAS_LIBRARIES_RELEASE})
|
||||
|
||||
ELSE(TAGLIB-EXTRAS_LIBRARIES_RELEASE)
|
||||
|
||||
# only debug (or nothing) found
|
||||
SET(TAGLIB-EXTRAS_LIBRARIES ${TAGLIB-EXTRAS_LIBRARIES_DEBUG})
|
||||
|
||||
ENDIF(TAGLIB-EXTRAS_LIBRARIES_RELEASE)
|
||||
|
||||
ENDIF(TAGLIB-EXTRAS_LIBRARIES_RELEASE AND TAGLIB-EXTRAS_LIBRARIES_DEBUG)
|
||||
|
||||
MARK_AS_ADVANCED(TAGLIB-EXTRAS_LIBRARIES_RELEASE)
|
||||
MARK_AS_ADVANCED(TAGLIB-EXTRAS_LIBRARIES_DEBUG)
|
||||
|
||||
ENDIF(NOT WIN32)
|
||||
|
||||
INCLUDE(FindPackageMessage)
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Taglib-Extras DEFAULT_MSG TAGLIB-EXTRAS_INCLUDES TAGLIB-EXTRAS_LIBRARIES)
|
||||
|
||||
endif(TAGLIB-EXTRASCONFIG_EXECUTABLE)
|
||||
|
||||
|
||||
if(TAGLIB-EXTRAS_FOUND)
|
||||
if(NOT Taglib-Extras_FIND_QUIETLY AND TAGLIB-EXTRASCONFIG_EXECUTABLE)
|
||||
message(STATUS "Taglib-Extras found: ${TAGLIB-EXTRAS_LIBRARIES}")
|
||||
endif(NOT Taglib-Extras_FIND_QUIETLY AND TAGLIB-EXTRASCONFIG_EXECUTABLE)
|
||||
else(TAGLIB-EXTRAS_FOUND)
|
||||
if(Taglib-Extras_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find Taglib-Extras")
|
||||
endif(Taglib-Extras_FIND_REQUIRED)
|
||||
endif(TAGLIB-EXTRAS_FOUND)
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
cmake_minimum_required (VERSION 2.6)
|
||||
|
||||
find_package( KDE4 REQUIRED )
|
||||
|
||||
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
|
||||
include_directories (${QT_QTCORE_INCLUDE_DIR} ${QT_QTSCRIPT_INCLUDE_DIR} ${KDE4_INCLUDES})
|
||||
|
||||
add_executable (bindingstest QtScriptBindingsTest.cpp)
|
||||
target_link_libraries( bindingstest ${QT_QTSCRIPT_LIBRARY} ${KDE4_KDEUI_LIBS} )
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2009 Ian Monroe <ian@monroe.nu>
|
||||
* released under public domain or:
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtScript/QScriptEngine>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
#define FAIL 0xA
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app( argc, argv, false );
|
||||
|
||||
QStringList allowedBindings;
|
||||
allowedBindings << "qt.core" << "qt.gui" << "qt.sql" << "qt.xml" << "qt.network";
|
||||
QScriptEngine engine;
|
||||
foreach( QString binding, allowedBindings )
|
||||
{
|
||||
QScriptValue error = engine.importExtension( binding );
|
||||
if( error.isUndefined() )
|
||||
{ // undefined indiciates success
|
||||
continue;
|
||||
}
|
||||
|
||||
qDebug() << "Extension" << binding << "not found:" << error.toString();
|
||||
qDebug() << "Available extensions:" << engine.availableExtensions();
|
||||
return FAIL;
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
install( FILES amarok_homerc DESTINATION ${CONFIG_INSTALL_DIR} )
|
||||
install( FILES amarok.notifyrc DESTINATION ${DATA_INSTALL_DIR}/amarok )
|
||||
|
||||
install(FILES DefaultPlaylistLayouts.xml
|
||||
first_run_jingle.ogg
|
||||
DESTINATION ${DATA_INSTALL_DIR}/amarok/data)
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<playlist_layouts version="2.1.0">
|
||||
<layout name="Default">
|
||||
<single_track show_cover="true">
|
||||
<row>
|
||||
<element value="Title" size="0.80" bold="false" alignment="left"/>
|
||||
<element value="Length" size="0.20" bold="false" alignment="right"/>
|
||||
</row>
|
||||
<row>
|
||||
<element value="Artist" size="0.5" bold="false" italic="true" alignment="left"/>
|
||||
<element value="Album" size="0.5" bold="false" alignment="right"/>
|
||||
</row>
|
||||
</single_track>
|
||||
<group_head show_cover="true" active_indicator_row="-1">
|
||||
<row>
|
||||
<element value="Album" size="1" bold="true" alignment="center"/>
|
||||
</row>
|
||||
<row>
|
||||
<element value="Album artist" size="1" bold="true" italic="true" alignment="center"/>
|
||||
</row>
|
||||
</group_head>
|
||||
<group_body show_cover="false">
|
||||
<row>
|
||||
<element value="Title (with track number)" size="0.8" bold="false" alignment="left"/>
|
||||
<element value="Length" size="0.2" bold="false" alignment="right"/>
|
||||
</row>
|
||||
</group_body>
|
||||
<group_variousArtistsBody show_cover="false">
|
||||
<row>
|
||||
<element value="Title (with track number)" size="0.6" bold="false" alignment="left"/>
|
||||
<element value="Artist" size="0" bold="false" italic="true" alignment="left"/>
|
||||
<element value="Length" size="0.15" bold="false" alignment="right"/>
|
||||
</row>
|
||||
</group_variousArtistsBody>
|
||||
</layout>
|
||||
<layout name="No Grouping" group_by="None">
|
||||
<single_track show_cover="true">
|
||||
<row>
|
||||
<element value="Title" size="0.5" bold="false" alignment="left"/>
|
||||
<element value="Length" size="0.5" bold="false" alignment="right"/>
|
||||
</row>
|
||||
<row>
|
||||
<element value="Artist" size="0.5" bold="false" italic="true" alignment="left"/>
|
||||
<element value="Album" size="0.5" bold="false" alignment="right"/>
|
||||
</row>
|
||||
</single_track>
|
||||
<group_head show_cover="false" active_indicator_row="-1">
|
||||
</group_head>
|
||||
<group_body show_cover="true">
|
||||
<row>
|
||||
<element value="Title" size="0.5" bold="false" alignment="left"/>
|
||||
<element value="Length" size="0.5" bold="false" alignment="right"/>
|
||||
</row>
|
||||
<row>
|
||||
<element value="Artist" size="0.5" bold="false" italic="true" alignment="left"/>
|
||||
<element value="Album" size="0.5" bold="false" alignment="right"/>
|
||||
</row>
|
||||
</group_body>
|
||||
</layout>
|
||||
<layout name="No Grouping (Single Line)" group_by="None">
|
||||
<single_track active_indicator_row="0" show_cover="false" >
|
||||
<row>
|
||||
<element suffix="" prefix="" size="0.5" bold="true" alignment="left" value="Title" underline="false" italic="false" />
|
||||
<element suffix="" prefix="" size="0" bold="false" alignment="left" value="Artist" underline="false" italic="true" />
|
||||
<element suffix="" prefix="" size="0" bold="false" alignment="right" value="Length" underline="false" italic="false" />
|
||||
</row>
|
||||
</single_track>
|
||||
<group_head active_indicator_row="0" show_cover="false" />
|
||||
<group_body active_indicator_row="0" show_cover="false" >
|
||||
<row>
|
||||
<element suffix="" prefix="" size="0.5" bold="true" alignment="left" value="Title" underline="false" italic="false" />
|
||||
<element suffix="" prefix="" size="0" bold="false" alignment="left" value="Artist" underline="false" italic="true" />
|
||||
<element suffix="" prefix="" size="0" bold="false" alignment="right" value="Length" underline="false" italic="false" />
|
||||
</row>
|
||||
</group_body>
|
||||
</layout>
|
||||
<layout name="Verbose" >
|
||||
<single_track active_indicator_row="0" show_cover="true" >
|
||||
<row>
|
||||
<element size="0.65" bold="false" alignment="left" value="Title" italic="false" />
|
||||
<element size="0.2" bold="false" alignment="center" value="Rating" italic="false" />
|
||||
<element size="0.15" bold="false" alignment="right" value="Length" italic="false" />
|
||||
</row>
|
||||
<row>
|
||||
<element size="0.5" bold="false" alignment="left" value="Artist" italic="true" />
|
||||
<element size="0.5" bold="false" alignment="right" value="Album" italic="false" />
|
||||
</row>
|
||||
</single_track>
|
||||
<group_head active_indicator_row="-1" show_cover="true" >
|
||||
<row>
|
||||
<element size="1" bold="true" alignment="left" value="Album" italic="false" />
|
||||
</row>
|
||||
<row>
|
||||
<element size="0.8" bold="true" alignment="left" value="Album artist" italic="true" />
|
||||
<element size="0" bold="false" alignment="right" value="Type" italic="false" />
|
||||
</row>
|
||||
<row>
|
||||
<element size="0.43" bold="false" alignment="left" value="Genre" italic="true" />
|
||||
<element size="0.57" bold="false" alignment="right" value="Group tracks" italic="false" />
|
||||
</row>
|
||||
<row>
|
||||
<element size="0.39" bold="false" alignment="left" value="Year" italic="false" />
|
||||
<element size="0" bold="false" alignment="right" value="Group length" italic="false" />
|
||||
</row>
|
||||
</group_head>
|
||||
<group_body active_indicator_row="0" show_cover="false" >
|
||||
<row>
|
||||
<element size="0.7" bold="false" alignment="left" value="Title (with track number)" italic="false" />
|
||||
<element size="0.15" bold="false" alignment="center" value="Rating" italic="false" />
|
||||
<element size="0.15" bold="false" alignment="right" value="Length" italic="false" />
|
||||
</row>
|
||||
</group_body>
|
||||
<group_variousArtistsBody active_indicator_row="0" show_cover="false" >
|
||||
<row>
|
||||
<element size="0.7" bold="false" alignment="left" value="Title (with track number)" italic="false" />
|
||||
<element size="0.15" bold="false" alignment="center" value="Rating" italic="false" />
|
||||
<element size="0.15" bold="false" alignment="right" value="Length" italic="false" />
|
||||
</row>
|
||||
<row>
|
||||
<element value="Artist" prefix=" " size="0" bold="false" italic="true" alignment="left"/>
|
||||
</row>
|
||||
</group_variousArtistsBody>
|
||||
</layout>
|
||||
</playlist_layouts>
|
|
@ -1,236 +0,0 @@
|
|||
[Global]
|
||||
IconName=amarok
|
||||
Comment=Amarok
|
||||
Comment[bg]=Amarok
|
||||
Comment[bs]=Amarok
|
||||
Comment[ca]=Amarok
|
||||
Comment[ca@valencia]=Amarok
|
||||
Comment[cs]=Amarok
|
||||
Comment[csb]=Amarok
|
||||
Comment[da]=Amarok
|
||||
Comment[de]=Amarok
|
||||
Comment[el]=AmaroK
|
||||
Comment[en_GB]=Amarok
|
||||
Comment[eo]=Amarok
|
||||
Comment[es]=Amarok
|
||||
Comment[et]=Amarok
|
||||
Comment[eu]=Amarok
|
||||
Comment[fi]=Amarok
|
||||
Comment[fr]=Amarok
|
||||
Comment[ga]=Amarok
|
||||
Comment[gl]=Amarok
|
||||
Comment[hu]=Amarok
|
||||
Comment[id]=Amarok
|
||||
Comment[is]=Amarok
|
||||
Comment[it]=Amarok
|
||||
Comment[ja]=Amarok
|
||||
Comment[km]=Amarok
|
||||
Comment[ko]=Amarok
|
||||
Comment[lt]=Amarok
|
||||
Comment[lv]=Amarok
|
||||
Comment[nb]=Amarok
|
||||
Comment[nds]=Amarok
|
||||
Comment[nl]=Amarok
|
||||
Comment[pa]=ਅਮਰੋਕ
|
||||
Comment[pl]=Amarok
|
||||
Comment[pt]=Amarok
|
||||
Comment[pt_BR]=Amarok
|
||||
Comment[ro]=Amarok
|
||||
Comment[ru]=Amarok
|
||||
Comment[sk]=Amarok
|
||||
Comment[sl]=Amarok
|
||||
Comment[sr]=Амарок
|
||||
Comment[sr@ijekavian]=Амарок
|
||||
Comment[sr@ijekavianlatin]=Amarok
|
||||
Comment[sr@latin]=Amarok
|
||||
Comment[sv]=Amarok
|
||||
Comment[th]=แอมอะร็อก
|
||||
Comment[tr]=Amarok
|
||||
Comment[ug]=Amarok
|
||||
Comment[uk]=Amarok
|
||||
Comment[x-test]=xxAmarokxx
|
||||
Comment[zh_CN]=Amarok
|
||||
Comment[zh_TW]=Amarok 影音播放器
|
||||
|
||||
[Event/trackChange]
|
||||
Name=Track Change
|
||||
Name[bg]=Прехвърляне запис
|
||||
Name[bs]=Promjena numere
|
||||
Name[ca]=Canvi de peça
|
||||
Name[ca@valencia]=Canvi de peça
|
||||
Name[cs]=Změna skladby
|
||||
Name[da]=Sporskift
|
||||
Name[de]=Stückwechsel
|
||||
Name[el]=Αλλαγή κομματιού
|
||||
Name[en_GB]=Track Change
|
||||
Name[es]=Cambio de pista
|
||||
Name[et]=Pala muutumine
|
||||
Name[eu]=Pistaren aldaketa
|
||||
Name[fi]=Kappaleen vaihdos
|
||||
Name[fr]=Changement de piste
|
||||
Name[ga]=Athrú Amhráin
|
||||
Name[gl]=Cambio de pista
|
||||
Name[hu]=Számváltás
|
||||
Name[id]=Track Berubah
|
||||
Name[is]=Skipt um lag
|
||||
Name[it]=Cambiamento della traccia
|
||||
Name[ja]=トラック変更
|
||||
Name[km]=ការផ្លាស់ប្ដូរបទ
|
||||
Name[ko]=트랙 변경
|
||||
Name[lt]=Dainos pasikeitimas
|
||||
Name[lv]=Celiņa maiņa
|
||||
Name[nb]=Sporbytte
|
||||
Name[nds]=Stückwessel
|
||||
Name[nl]=Wijziging van track
|
||||
Name[pa]=ਟਰੈਕ ਬਦਲਾ
|
||||
Name[pl]=Zmiana utworu
|
||||
Name[pt]=Mudança de Faixa
|
||||
Name[pt_BR]=Alteração de faixa
|
||||
Name[ro]=Schimbare pistă
|
||||
Name[ru]=Смена дорожки
|
||||
Name[sk]=Zmena skladby
|
||||
Name[sl]=Sprememba skladbe
|
||||
Name[sr]=Промена нумере
|
||||
Name[sr@ijekavian]=Промјена нумере
|
||||
Name[sr@ijekavianlatin]=Promjena numere
|
||||
Name[sr@latin]=Promena numere
|
||||
Name[sv]=Spårändring
|
||||
Name[th]=แทร็กเปลี่ยน
|
||||
Name[tr]=Parça Değişimi
|
||||
Name[uk]=Зміна композиції
|
||||
Name[x-test]=xxTrack Changexx
|
||||
Name[zh_CN]=音轨更改
|
||||
Name[zh_TW]=曲目變更
|
||||
Comment=Amarok changed to a new track
|
||||
Comment[bg]=Amarok прехвърли към друг запис
|
||||
Comment[bs]=Amarok je prešao na novu numeru
|
||||
Comment[ca]=L'Amarok ha canviat a una peça nova
|
||||
Comment[ca@valencia]=L'Amarok ha canviat a una peça nova
|
||||
Comment[cs]=Amarok přešel na novou skladbu
|
||||
Comment[da]=Amarok skiftede til et nyt spor
|
||||
Comment[de]=Amarok gibt ein neues Stück wieder
|
||||
Comment[el]=Το Amarok άλλαξε σε νέο κομμάτι
|
||||
Comment[en_GB]=Amarok changed to a new track
|
||||
Comment[es]=Amarok cambió a una nueva pista
|
||||
Comment[et]=Amarok võttis ette uue pala
|
||||
Comment[eu]=Amarok pista berri batera aldatu da
|
||||
Comment[fi]=Amarok vaihtoi kappaletta
|
||||
Comment[fr]=Amarok lit une nouvelle piste
|
||||
Comment[ga]=Thosaigh Amarok amhrán nua
|
||||
Comment[gl]=Amarok cambiado a unha nova pista
|
||||
Comment[hu]=Az Amarok átváltott egy új számra
|
||||
Comment[id]=Amarok mengubah track menjadi baru
|
||||
Comment[is]=Amarok skipti yfir í nýtt lag
|
||||
Comment[it]=Amarok è passato a una nuova traccia
|
||||
Comment[ja]=Amarok は新しいトラックに変更されました
|
||||
Comment[km]=Amarok បានផ្លាស់ប្ដូរទៅបទថ្មី
|
||||
Comment[ko]=Amarok에서 새 트랙을 재생함
|
||||
Comment[lt]=Amarokas persijungė į naują dainą
|
||||
Comment[lv]=Amarok sāka atskaņot jaunu celiņu
|
||||
Comment[nb]=Amarok byttet til et nytt spor
|
||||
Comment[nds]=Amarok hett na en nieg Stück wesselt
|
||||
Comment[nl]=Amarok is naar een nieuwe track gegaan
|
||||
Comment[pa]=ਅਮਰੋਕ ਨੇ ਨਵਾਂ ਟਰੈਕ ਬਦਲਿਆ
|
||||
Comment[pl]=Utwór został zmieniony na nowy
|
||||
Comment[pt]=O Amarok mudou para uma faixa nova
|
||||
Comment[pt_BR]=O Amarok mudou para uma nova faixa
|
||||
Comment[ro]=Amarok a trecut la altă piesă
|
||||
Comment[ru]=Amarok перешёл на новую дорожку
|
||||
Comment[sk]=Amarok zmenil skladbu na novú
|
||||
Comment[sl]=Amarok je zamenjal skladbo
|
||||
Comment[sr]=Амарок је прешао на нову нумеру
|
||||
Comment[sr@ijekavian]=Амарок је прешао на нову нумеру
|
||||
Comment[sr@ijekavianlatin]=Amarok je prešao na novu numeru
|
||||
Comment[sr@latin]=Amarok je prešao na novu numeru
|
||||
Comment[sv]=Amarok bytte till ett nytt spår
|
||||
Comment[th]=แอมอะร็อกเปลี่ยนเป็นแทร็กใหม่
|
||||
Comment[tr]=Amarok yeni bir parçaya geçti
|
||||
Comment[uk]=Композиція у Amarok змінилася
|
||||
Comment[x-test]=xxAmarok changed to a new trackxx
|
||||
Comment[zh_CN]=Amarok 更改到新音轨
|
||||
Comment[zh_TW]=Amarok 已變更至新的曲目
|
||||
Action=Popup
|
||||
|
||||
[Event/message]
|
||||
Name=Message
|
||||
Name[bs]=Poruka
|
||||
Name[ca]=Missatge
|
||||
Name[ca@valencia]=Missatge
|
||||
Name[cs]=Zpráva
|
||||
Name[da]=Besked
|
||||
Name[de]=Nachricht
|
||||
Name[el]=Μήνυμα
|
||||
Name[en_GB]=Message
|
||||
Name[es]=Mensaje
|
||||
Name[et]=Teade
|
||||
Name[fi]=Viesti
|
||||
Name[fr]=Message
|
||||
Name[ga]=Teachtaireacht
|
||||
Name[gl]=Mensaxe
|
||||
Name[hu]=Üzenet
|
||||
Name[id]=Pesan
|
||||
Name[it]=Messaggio
|
||||
Name[lt]=Pranešimas
|
||||
Name[lv]=Ziņojums
|
||||
Name[mr]=संदेश
|
||||
Name[nb]=Melding
|
||||
Name[nl]=Bericht
|
||||
Name[pa]=ਸੁਨੇਹਾ
|
||||
Name[pl]=Wiadomość
|
||||
Name[pt]=Mensagem
|
||||
Name[pt_BR]=Mensagem
|
||||
Name[ro]=Mesaj
|
||||
Name[ru]=Сообщение
|
||||
Name[sk]=Správa
|
||||
Name[sl]=Sporočilo
|
||||
Name[sr]=Порука
|
||||
Name[sr@ijekavian]=Порука
|
||||
Name[sr@ijekavianlatin]=Poruka
|
||||
Name[sr@latin]=Poruka
|
||||
Name[sv]=Meddelande
|
||||
Name[tr]=İleti
|
||||
Name[ug]=ئۇچۇر
|
||||
Name[uk]=Повідомлення
|
||||
Name[x-test]=xxMessagexx
|
||||
Name[zh_CN]=消息
|
||||
Name[zh_TW]=訊息
|
||||
Comment=Amarok issued an uncategorized text message
|
||||
Comment[bs]=Amarok je izbacio nekategorizovanu tekstualnu poruku
|
||||
Comment[ca]=L'Amarok ha emès un missatge de text sense categoria
|
||||
Comment[ca@valencia]=L'Amarok ha emés un missatge de text sense categoria
|
||||
Comment[cs]=Amarok vyvolal nezařazenou textovou zprávu
|
||||
Comment[da]=Amarok udsendte en ikke-kategoriseret tekstmeddelelse
|
||||
Comment[de]=Amarok hat eine nicht kategorisierte Textnachricht ausgegeben
|
||||
Comment[el]=Το Amarok εξέδωσε ένα μη κατηγοριοποιημένο μήνυμα σε απλό κείμενο
|
||||
Comment[en_GB]=Amarok issued an uncategorised text message
|
||||
Comment[es]=Amarok emitió un mensaje de texto no clasificado
|
||||
Comment[et]=Amarok andis liigitamata tekstiteate
|
||||
Comment[fi]=Amarok lähetti luokittelemattoman tekstiviestin
|
||||
Comment[fr]=Amarok a émis un message de texte sans catégorie
|
||||
Comment[ga]=Chuir Amarok teachtaireacht téacs gan catagóir amach
|
||||
Comment[gl]=Amarok enviou unha mensaxe de texto sen categoría.
|
||||
Comment[hu]=Az Amarok egy kategorizálatlan szöveges üzenetet adott ki
|
||||
Comment[id]=Amarok mengeluarkan pesan teks tidak berkategori
|
||||
Comment[it]=Amarok ha generato un messaggio di testo non categorizzato
|
||||
Comment[lt]=Amarok pateikė tekstinį pranešimą be kategorijos
|
||||
Comment[lv]=Amarok izdeva teksta ziņojumu bez kategorijas
|
||||
Comment[nb]=Amarok sendte en tekstmelding uten kategori
|
||||
Comment[nl]=Amarok stuurde een niet gecategoriseerd tekstbericht
|
||||
Comment[pl]=Amarok wystosował niekategoryzowaną wiadomość tekstową
|
||||
Comment[pt]=O Amarok enviou uma mensagem de texto sem categoria
|
||||
Comment[pt_BR]=O Amarok emitiu uma mensagem de texto não-categorizada
|
||||
Comment[ro]=Amarok a emis un mesaj textual necategorizat
|
||||
Comment[ru]=Сообщение от Amarok, не относящееся ни к какой из категорий
|
||||
Comment[sk]=Amarok vydal nekategorizovanú textovú správu
|
||||
Comment[sl]=Amarok je oddal nekategorizirano besedilno sporočilo
|
||||
Comment[sr]=Амарок је издао општу текстуалну поруку
|
||||
Comment[sr@ijekavian]=Амарок је издао општу текстуалну поруку
|
||||
Comment[sr@ijekavianlatin]=Amarok je izdao opštu tekstualnu poruku
|
||||
Comment[sr@latin]=Amarok je izdao opštu tekstualnu poruku
|
||||
Comment[sv]=Amarok skickade ett okategoriserat textmeddelande
|
||||
Comment[tr]=Amarok kategorilenmemiş bir metin iletisi oluşturdu
|
||||
Comment[uk]=Програмою Amarok надіслано текстове повідомлення, що не належить до певної категорії
|
||||
Comment[x-test]=xxAmarok issued an uncategorized text messagexx
|
||||
Comment[zh_CN]=Amarok 发出了一条未分类文本消息
|
||||
Comment[zh_TW]=Amarok 發出了一個未分類的文字訊息
|
||||
Action=Popup
|
|
@ -1,3 +0,0 @@
|
|||
[Containment 0]
|
||||
firstShowingApplet=0
|
||||
plugins=currenttrack,wikipedia,lyrics
|
|
@ -1,81 +0,0 @@
|
|||
add_subdirectory( icons )
|
||||
|
||||
########### install files ###############
|
||||
|
||||
install(FILES
|
||||
amarok_icon.svg
|
||||
ball.png
|
||||
default-theme-clean.svg
|
||||
dot.png
|
||||
emblem-amazon.png
|
||||
emblem-default.png
|
||||
emblem-jamendo.png
|
||||
emblem-jamendo-scalable.svgz
|
||||
emblem-lastfm.png
|
||||
emblem-lastfm-scalable.svg
|
||||
emblem-gpodder.png
|
||||
emblem-gpodder-scalable.svgz
|
||||
emblem-magnatune.png
|
||||
emblem-mp3tunes.png
|
||||
emblem-ampache.png
|
||||
emblem-ampache-scalable.svgz
|
||||
emblem-scripted.png
|
||||
emblem-scripted-scalable.svgz
|
||||
grid.png
|
||||
lastfm-default-cover.png
|
||||
echonest.png
|
||||
lastfm.png
|
||||
loading1.png
|
||||
loading2.png
|
||||
mb_aicon.png
|
||||
mb_licon.png
|
||||
mb_ticon.png
|
||||
navigation_arrows.svg
|
||||
nocover.png
|
||||
playlist-bookmark-16.png
|
||||
playlist-layouts-22.png
|
||||
playlist-sorting-16.png
|
||||
pud_items.svg
|
||||
smallstar.png
|
||||
star.png
|
||||
volume_icon.png
|
||||
volume_muted_icon.png
|
||||
wirl1.png
|
||||
wirl2.png
|
||||
service_info_loading1.png
|
||||
service_info_loading2.png
|
||||
service_info_loading3.png
|
||||
service_info_loading4.png
|
||||
service_info_loading5.png
|
||||
service_info_loading6.png
|
||||
service_info_loading7.png
|
||||
service_info_loading8.png
|
||||
service_info_loading9.png
|
||||
service_info_loading10.png
|
||||
service_info_loading11.png
|
||||
service_info_loading12.png
|
||||
hover_info_collections.png
|
||||
hover_info_dynamic_playlists.png
|
||||
hover_info_files.png
|
||||
hover_info_internet.png
|
||||
hover_info_playlists.png
|
||||
hover_info_user_playlists.png
|
||||
hover_info_podcasts.png
|
||||
opendesktop-22.png
|
||||
|
||||
emblem-delicious.png
|
||||
emblem-digg.png
|
||||
emblem-facebook.png
|
||||
emblem-identica.png
|
||||
emblem-linkedin.png
|
||||
emblem-myspace.png
|
||||
emblem-reddit.png
|
||||
emblem-stackoverflow.png
|
||||
emblem-twitter.png
|
||||
emblem-wikipedia.png
|
||||
emblem-xing.png
|
||||
|
||||
DESTINATION ${DATA_INSTALL_DIR}/amarok/images
|
||||
)
|
||||
|
||||
kde4_install_icons( ${ICON_INSTALL_DIR} )
|
|
@ -1,551 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128"
|
||||
height="128"
|
||||
viewBox="0 0 854.238 854.238"
|
||||
overflow="visible"
|
||||
enable-background="new 0 0 854.238 854.238"
|
||||
xml:space="preserve"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
sodipodi:docname="amarok_icon.svg"
|
||||
sodipodi:docbase="/home/hydrogen/kde/src/amarok/src/images"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><sodipodi:namedview
|
||||
inkscape:window-height="688"
|
||||
inkscape:window-width="1258"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:zoom="2.5708446"
|
||||
inkscape:cx="168.23042"
|
||||
inkscape:cy="57.765811"
|
||||
inkscape:window-x="1280"
|
||||
inkscape:window-y="26"
|
||||
inkscape:current-layer="svg2" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs217"><radialGradient
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
id="radialGradient29545"
|
||||
cx="375.21439"
|
||||
cy="783.16357"
|
||||
r="300.5752"
|
||||
fx="375.21439"
|
||||
fy="783.16357"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0.0112"
|
||||
style="stop-color:#eeeeef;stop-opacity:0.94117647;"
|
||||
id="stop29547" />
|
||||
<stop
|
||||
offset="0.29210001"
|
||||
style="stop-color:#6193cf;stop-opacity:1;"
|
||||
id="stop29549" />
|
||||
<stop
|
||||
offset="0.45750001"
|
||||
style="stop-color:#2c72c7;stop-opacity:1;"
|
||||
id="stop29551" />
|
||||
<stop
|
||||
offset="0.6767"
|
||||
style="stop-color:#0057ae;stop-opacity:1;"
|
||||
id="stop29553" />
|
||||
<stop
|
||||
offset="0.8653"
|
||||
style="stop-color:#004d9a;stop-opacity:1;"
|
||||
id="stop29555" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#00438a;stop-opacity:1;"
|
||||
id="stop29557" />
|
||||
</radialGradient><linearGradient
|
||||
id="linearGradient5498"><stop
|
||||
style="stop-color:#eeeeee;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5500" /><stop
|
||||
style="stop-color:#eeeeee;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5502" /></linearGradient><mask
|
||||
id="XMLID_26_"
|
||||
height="44.813"
|
||||
width="93.126"
|
||||
y="461.543"
|
||||
x="155.705"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g69">
|
||||
<linearGradient
|
||||
y2="466.75449"
|
||||
x2="200.0733"
|
||||
y1="562.85791"
|
||||
x1="211.7222"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_1_">
|
||||
<stop
|
||||
id="stop72"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop74"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_1_)"
|
||||
id="ellipse76"
|
||||
ry="59.682999"
|
||||
rx="80.542"
|
||||
cy="495.98801"
|
||||
cx="203.617" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_2_"
|
||||
height="127.553"
|
||||
width="156.907"
|
||||
y="425.034"
|
||||
x="101.57"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g86">
|
||||
<linearGradient
|
||||
y2="563.47321"
|
||||
x2="186.92191"
|
||||
y1="397.62061"
|
||||
x1="206.09081"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_3_">
|
||||
<stop
|
||||
id="stop89"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop91"
|
||||
style="stop-color:#CBCBCB"
|
||||
offset="0.1111" />
|
||||
<stop
|
||||
id="stop93"
|
||||
style="stop-color:#969696"
|
||||
offset="0.2396" />
|
||||
<stop
|
||||
id="stop95"
|
||||
style="stop-color:#686868"
|
||||
offset="0.3698" />
|
||||
<stop
|
||||
id="stop97"
|
||||
style="stop-color:#424242"
|
||||
offset="0.4991" />
|
||||
<stop
|
||||
id="stop99"
|
||||
style="stop-color:#252525"
|
||||
offset="0.6273" />
|
||||
<stop
|
||||
id="stop101"
|
||||
style="stop-color:#111111"
|
||||
offset="0.7542" />
|
||||
<stop
|
||||
id="stop103"
|
||||
style="stop-color:#040404"
|
||||
offset="0.8792" />
|
||||
<stop
|
||||
id="stop105"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_3_)"
|
||||
id="ellipse107"
|
||||
ry="123.604"
|
||||
rx="160.94"
|
||||
cy="495.62299"
|
||||
cx="194.76401" />
|
||||
</g>
|
||||
</mask><linearGradient
|
||||
gradientTransform="matrix(-1.1256295,0,0,1.1256295,1028.9091,-39.54673)"
|
||||
y2="643.30768"
|
||||
x2="480.12021"
|
||||
y1="815.45459"
|
||||
x1="429.84909"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_4_">
|
||||
<stop
|
||||
id="stop112"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop114"
|
||||
style="stop-color:#E5EAF2"
|
||||
offset="1" />
|
||||
</linearGradient><linearGradient
|
||||
y2="560.35498"
|
||||
x2="278.14471"
|
||||
y1="634.63232"
|
||||
x1="220.9512"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_5_">
|
||||
<stop
|
||||
id="stop119"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop121"
|
||||
style="stop-color:#193D6B"
|
||||
offset="1" />
|
||||
</linearGradient><mask
|
||||
id="XMLID_10_"
|
||||
height="527.73"
|
||||
width="447.197"
|
||||
y="217.631"
|
||||
x="191.541"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g159">
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.931,0,0,0.9299,28.7459,21.6629)"
|
||||
fy="155.23289"
|
||||
fx="657.2124"
|
||||
r="606.95343"
|
||||
cy="155.23289"
|
||||
cx="657.2124"
|
||||
id="XMLID_11_">
|
||||
<stop
|
||||
id="stop162"
|
||||
style="stop-color:#C9C9C8"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop164"
|
||||
style="stop-color:#C4C4C4"
|
||||
offset="0.0881" />
|
||||
<stop
|
||||
id="stop166"
|
||||
style="stop-color:#B8B8B7"
|
||||
offset="0.2192" />
|
||||
<stop
|
||||
id="stop168"
|
||||
style="stop-color:#A1A0A0"
|
||||
offset="0.3769" />
|
||||
<stop
|
||||
id="stop170"
|
||||
style="stop-color:#7F7F7E"
|
||||
offset="0.5556" />
|
||||
<stop
|
||||
id="stop172"
|
||||
style="stop-color:#4F4F4E"
|
||||
offset="0.7517" />
|
||||
<stop
|
||||
id="stop174"
|
||||
style="stop-color:#121212"
|
||||
offset="0.9595" />
|
||||
<stop
|
||||
id="stop176"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<circle
|
||||
style="fill:url(#XMLID_11_)"
|
||||
id="circle178"
|
||||
r="302.95401"
|
||||
cy="444.22601"
|
||||
cx="408.427" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_13_"
|
||||
height="187.183"
|
||||
width="252.506"
|
||||
y="279.317"
|
||||
x="243.061"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
style="filter:url(#Adobe_OpacityMaskFilter_4_)"
|
||||
id="g193">
|
||||
<linearGradient
|
||||
y2="417.81519"
|
||||
x2="372.38071"
|
||||
y1="266.93359"
|
||||
x1="340.0488"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_14_">
|
||||
<stop
|
||||
id="stop196"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop198"
|
||||
style="stop-color:#F8F8F8"
|
||||
offset="0.0867" />
|
||||
<stop
|
||||
id="stop200"
|
||||
style="stop-color:#E4E4E4"
|
||||
offset="0.2156" />
|
||||
<stop
|
||||
id="stop202"
|
||||
style="stop-color:#C2C2C2"
|
||||
offset="0.3708" />
|
||||
<stop
|
||||
id="stop204"
|
||||
style="stop-color:#949494"
|
||||
offset="0.5465" />
|
||||
<stop
|
||||
id="stop206"
|
||||
style="stop-color:#595959"
|
||||
offset="0.7394" />
|
||||
<stop
|
||||
id="stop208"
|
||||
style="stop-color:#151515"
|
||||
offset="0.9438" />
|
||||
<stop
|
||||
id="stop210"
|
||||
style="stop-color:#000000"
|
||||
offset="0.9944" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_14_)"
|
||||
id="ellipse212"
|
||||
ry="183.32201"
|
||||
rx="215.32401"
|
||||
cy="374.28201"
|
||||
cx="363.052" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_23_"
|
||||
height="587.491"
|
||||
width="576.609"
|
||||
y="97.149"
|
||||
x="122.963"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
style="filter:url(#Adobe_OpacityMaskFilter)"
|
||||
id="g31">
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="-20.899401"
|
||||
fx="88.977501"
|
||||
r="673.11609"
|
||||
cy="-20.899401"
|
||||
cx="88.977501"
|
||||
id="XMLID_24_">
|
||||
<stop
|
||||
id="stop34"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0.309" />
|
||||
<stop
|
||||
id="stop36"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_24_)"
|
||||
id="ellipse38"
|
||||
ry="349.10599"
|
||||
rx="512.93402"
|
||||
cy="286.172"
|
||||
cx="295.89499" />
|
||||
</g>
|
||||
</mask><radialGradient
|
||||
id="XMLID_22_"
|
||||
cx="622.72803"
|
||||
cy="621.17328"
|
||||
r="510.71881"
|
||||
fx="622.72803"
|
||||
fy="621.17328"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="stop14" />
|
||||
<stop
|
||||
offset="0.2814"
|
||||
style="stop-color:#E6E6E6"
|
||||
id="stop16" />
|
||||
<stop
|
||||
offset="0.7515"
|
||||
style="stop-color:#C0C0C0"
|
||||
id="stop18" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#B2B2B2"
|
||||
id="stop20" />
|
||||
</radialGradient><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5498"
|
||||
id="linearGradient2295"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="220.36789"
|
||||
y1="756.76105"
|
||||
x2="185.21225"
|
||||
y2="491.06723" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5498"
|
||||
id="linearGradient2298"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="247.47713"
|
||||
y1="274.88394"
|
||||
x2="130.31757"
|
||||
y2="580.54669" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5498"
|
||||
id="linearGradient2301"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="370.62177"
|
||||
y1="-309.6048"
|
||||
x2="370.20648"
|
||||
y2="458.38397" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5498"
|
||||
id="linearGradient2304"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1508.4957"
|
||||
y1="-363.42487"
|
||||
x2="361.1441"
|
||||
y2="630.52039" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_5_"
|
||||
id="linearGradient2307"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
x1="331.49609"
|
||||
y1="790.51508"
|
||||
x2="409.85471"
|
||||
y2="688.75092" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_5_"
|
||||
id="linearGradient2310"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
x1="319.186"
|
||||
y1="713.54639"
|
||||
x2="373.12509"
|
||||
y2="626.00598" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_5_"
|
||||
id="linearGradient2313"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
x1="264.5405"
|
||||
y1="704.23578"
|
||||
x2="335.09619"
|
||||
y2="612.60522" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_5_"
|
||||
id="linearGradient2316"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
x1="237.20799"
|
||||
y1="684.01898"
|
||||
x2="328.18469"
|
||||
y2="565.86761" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_5_"
|
||||
id="linearGradient2319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
x1="220.9512"
|
||||
y1="634.63232"
|
||||
x2="278.14471"
|
||||
y2="560.35498" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_4_"
|
||||
id="linearGradient2322"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.1256295,0,0,1.1256295,1028.9091,-39.54673)"
|
||||
x1="429.84909"
|
||||
y1="815.45459"
|
||||
x2="480.12021"
|
||||
y2="643.30768" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient29545"
|
||||
id="radialGradient2326"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)"
|
||||
cx="375.21439"
|
||||
cy="783.16357"
|
||||
fx="375.21439"
|
||||
fy="783.16357"
|
||||
r="300.5752" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_22_"
|
||||
id="radialGradient5267"
|
||||
cx="663.91144"
|
||||
cy="649.22662"
|
||||
fx="663.91144"
|
||||
fy="649.22662"
|
||||
r="427.12018"
|
||||
gradientTransform="translate(0,-4.9999861e-6)"
|
||||
gradientUnits="userSpaceOnUse" /></defs>
|
||||
|
||||
<g
|
||||
id="g2305"
|
||||
inkscape:export-filename="/home/knome/Work/Amarok logo/oxygen-icon.png"
|
||||
inkscape:export-xdpi="421.87378"
|
||||
inkscape:export-ydpi="421.87378"><path
|
||||
id="circle22"
|
||||
d="M 840.16762,427.119 C 840.16762,655.12184 655.12184,840.16763 427.119,840.16763 C 199.11616,840.16763 14.070375,655.12184 14.070375,427.119 C 14.070375,199.11616 199.11616,14.070375 427.119,14.070375 C 655.12184,14.070375 840.16762,199.11616 840.16762,427.119 z "
|
||||
style="fill:url(#radialGradient5267);stroke:#0057ae;stroke-width:28.14313698;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1.0" /><path
|
||||
id="ellipse40"
|
||||
d="M 699.57098,390.89499 C 699.57098,553.04278 570.4108,684.64099 411.267,684.64099 C 252.1232,684.64099 122.96301,553.04278 122.96301,390.89499 C 122.96301,228.7472 252.1232,97.148987 411.267,97.148987 C 570.4108,97.148987 699.57098,228.7472 699.57098,390.89499 z "
|
||||
mask="url(#XMLID_23_)"
|
||||
style="opacity:0.86000001;fill:#eeeeee"
|
||||
transform="matrix(1.1256295,0,0,1.1256295,-41.873391,-39.54673)" /><path
|
||||
id="path43"
|
||||
d="M 654.69879,222.73733 C 637.51042,222.73733 604.13438,258.58412 591.62864,264.24379 C 579.11727,269.90345 480.08889,334.04295 470.70564,345.36228 C 461.3269,356.68048 448.81777,361.398 435.26745,360.45472 C 421.71824,359.51144 378.87904,359.12422 364.2875,366.67044 C 349.69259,374.21666 283.08009,435.91467 266.40051,443.46201 C 249.72318,451.00598 227.96364,454.87365 217.54031,455.8158 C 207.11698,456.7602 172.58492,491.56804 163.2028,498.17324 C 153.8218,504.7728 85.234943,531.21834 74.81274,536.87576 C 64.388285,542.53655 136.10214,632.11302 148.61126,633.99957 C 161.11813,635.88725 136.32389,645.13542 112.25793,645.13542 C 109.6082,645.13542 146.65154,742.275 272.95618,804.97144 C 382.14786,859.1705 470.12031,826.25709 513.14637,813.11199 C 543.56989,803.81767 549.0866,799.6731 550.13231,784.58066 C 551.17577,769.48934 553.06007,757.5633 555.14586,740.58543 C 557.23165,723.60981 564.52348,581.1749 591.62977,543.44605 C 618.72817,505.71608 696.19287,460.423 723.29352,455.70886 C 750.39643,450.99248 745.18589,441.56083 745.18589,433.07133 C 745.18589,424.58183 741.01543,405.71628 733.7191,402.88645 C 726.42165,400.05774 697.94997,417.05024 688.56898,418.9368 C 679.18686,420.82335 634.36542,423.65319 628.11029,414.22154 C 621.85629,404.78764 678.67695,308.57445 685.97328,297.25625 C 693.26736,285.93692 696.39548,270.84448 682.8474,254.80989 C 669.29145,238.77192 659.90933,222.73733 654.69879,222.73733 z "
|
||||
style="opacity:0.22000002;fill:#323232" /><path
|
||||
id="path58"
|
||||
d="M 618.12146,172.83479 C 601.44751,172.83479 569.07553,211.25928 556.94237,217.3253 C 544.80921,223.39244 448.75361,292.14477 439.65402,304.27905 C 430.55444,316.41109 418.42015,321.46741 405.2773,320.4566 C 392.13445,319.44691 350.58296,319.03043 336.42817,327.1192 C 322.27113,335.2091 257.65887,401.34434 241.48132,409.43423 C 225.3049,417.52076 204.19935,421.6642 194.08782,422.67614 C 183.97854,423.68583 150.48318,460.99707 141.38359,468.07615 C 132.28401,475.15524 60.378793,506.26989 50.268389,512.33366 C 40.156859,518.4008 124.03202,603.36669 136.16518,605.38719 C 148.29834,607.4122 127.8085,653.4482 104.46407,653.4482 C 101.89313,653.4482 125.32536,729.73323 247.83775,796.93894 C 353.75161,855.03831 466.12658,829.3143 507.85929,815.22592 C 537.37105,805.2596 516.65834,799.75189 517.67141,783.57547 C 518.67997,767.3968 519.52982,746.12465 521.55258,727.9266 C 523.57646,709.72742 530.65104,557.05041 556.94124,516.60767 C 583.22807,476.16718 658.36384,427.61653 684.65291,422.56133 C 710.94312,417.50612 705.88566,407.39459 705.88566,398.29613 C 705.88566,389.19767 701.8424,368.97461 694.76332,365.94104 C 687.68648,362.90859 660.07029,381.12353 650.9707,383.14516 C 641.87111,385.16679 598.39367,388.20149 592.32541,378.09108 C 586.25939,367.97843 641.37358,264.84713 648.45154,252.71396 C 655.53063,240.57968 658.56195,224.40101 645.41685,207.21489 C 632.27737,190.02316 623.17666,172.83479 618.12146,172.83479 z "
|
||||
style="fill:url(#radialGradient2326);fill-opacity:1" /><path
|
||||
id="path60"
|
||||
d="M 416.43229,363.42863 C 416.43229,363.42863 376.37564,357.26468 353.26309,380.37836 C 330.14941,403.49091 310.11546,454.33672 311.66095,469.74546 C 313.19968,485.15421 359.42591,417.35754 379.45423,412.73683 C 399.48706,408.11275 421.0575,374.21216 416.43229,363.42863 z "
|
||||
style="fill:#ffffff" /><path
|
||||
id="path116"
|
||||
d="M 517.5791,576.1107 C 517.5791,576.1107 481.73456,698.13344 480.82843,700.01887 C 475.70569,710.66507 466.25715,741.5152 469.51022,751.47814 C 473.34074,763.21508 487.69814,780.27963 494.39902,788.8119 C 501.09989,797.34755 503.97137,801.61368 502.05667,804.8161 C 500.1431,808.01626 475.25431,808.01626 475.25431,808.01626 C 475.25431,808.01626 456.11073,779.21366 452.27909,768.54606 C 448.45194,757.88073 446.53612,735.47957 450.36664,728.0144 C 454.19491,720.54585 517.5791,576.1107 517.5791,576.1107 z "
|
||||
style="opacity:0.18000004;fill:url(#linearGradient2322)" /><path
|
||||
id="polygon123"
|
||||
d="M 264.93381,598.84278 L 199.45032,655.53061 L 281.54923,606.66141 L 264.93381,598.84278 z "
|
||||
style="opacity:0.2;fill:url(#linearGradient2319)" /><path
|
||||
id="polygon130"
|
||||
d="M 329.44139,579.29735 L 218.01983,723.9475 L 346.05568,589.06894 L 329.44139,579.29735 z "
|
||||
style="opacity:0.2;fill:url(#linearGradient2316);fill-opacity:1.0" /><path
|
||||
id="polygon137"
|
||||
d="M 338.23818,629.14248 L 253.20588,764.01991 L 357.78474,637.93815 L 338.23818,629.14248 z "
|
||||
style="opacity:0.20132015;fill:url(#linearGradient2313);fill-opacity:1.0" /><path
|
||||
id="polygon144"
|
||||
d="M 388.08331,623.27682 L 316.73416,790.41029 L 411.5403,628.16543 L 388.08331,623.27682 z "
|
||||
style="opacity:0.2;fill:url(#linearGradient2310);fill-opacity:1.0" /><path
|
||||
id="polygon151"
|
||||
d="M 416.42779,667.25967 L 410.56213,819.73069 L 435.97322,669.21489 L 416.42779,667.25967 z "
|
||||
style="opacity:0.2;fill:url(#linearGradient2307);fill-opacity:1.0" /><path
|
||||
id="path2270"
|
||||
d="M 420.91732,729.36642 C 351.30018,698.39383 288.50975,655.88934 234.26482,603.01627 C 228.17499,597.08044 226.8144,595.4965 226.8144,594.34262 C 226.8144,593.13125 228.55133,591.40592 239.05626,582.1824 C 260.44809,563.40004 265.15448,558.38692 268.80041,550.49987 C 272.52283,542.44735 280.21466,532.95491 295.21739,517.89884 C 328.33946,484.65899 388.46538,434.98491 416.82689,417.42901 C 421.75597,414.37788 424.58874,412.17246 428.48767,408.35063 C 440.85841,396.22453 460.01914,371.72167 499.93884,316.97838 C 542.43234,258.70557 556.73716,239.87049 570.88047,223.57002 C 579.4268,213.72016 585.7114,207.8731 588.1486,207.5041 C 589.18431,207.34729 590.90434,207.06941 591.9709,206.88659 C 593.03746,206.70377 594.40047,206.78803 594.99981,207.07385 C 595.59916,207.35966 596.47603,207.71632 596.94842,207.86643 C 597.85387,208.15415 615.10032,227.66836 621.45221,235.59225 C 629.06069,245.08374 629.74587,247.72667 625.93867,252.8978 C 624.51775,254.82777 623.14916,257.60325 622.0958,260.69106 C 620.28646,265.995 610.96485,284.8373 596.62206,312.18261 C 585.34543,333.68211 570.08225,364.07457 565.31216,374.52776 C 555.24252,396.59436 550.331,411.79539 551.61625,416.91622 C 552.03701,418.59268 554.5804,419.79199 561.41213,421.53535 C 577.39273,425.61339 592.16664,424.99594 605.9335,419.67469 C 608.01588,418.8698 612.90001,416.3756 616.78711,414.13203 C 628.65388,407.28274 637.59912,403.45373 648.76876,400.44235 C 654.10472,399.00376 655.37311,398.8526 662.48236,398.8081 C 669.94112,398.76141 670.43639,398.82084 672.82712,400.04901 C 674.99738,401.16392 675.39512,401.60914 675.75849,403.33033 C 676.57722,407.20845 676.72083,409.70195 676.15791,410.26491 C 675.85023,410.57255 675.59852,411.32821 675.59852,411.94417 C 675.59852,414.47076 669.52221,416.51234 652.58246,419.67732 C 634.81328,422.99725 633.95536,423.35495 621.58956,432.59958 C 593.90887,453.29357 550.84044,490.78155 535.5622,507.4802 C 528.63101,515.05579 518.00575,529.71705 503.68433,551.46683 C 471.5521,600.26572 449.29204,642.4077 443.34539,665.69842 C 442.16377,670.32635 438.83962,691.2303 435.82204,713.00897 C 433.03687,733.11041 432.91259,733.71553 431.57904,733.67009 C 430.99045,733.65005 426.19268,731.71337 420.91732,729.36642 z "
|
||||
style="opacity:0.57999998;fill:url(#linearGradient2304);fill-opacity:1" /><path
|
||||
id="path2476"
|
||||
d="M 232.63545,457.72623 C 232.32648,456.61911 232.38894,446.89128 232.73423,442.33838 C 232.98128,439.08089 233.18774,438.00445 234.05625,435.44502 C 236.74093,427.53362 240.66616,423.12959 246.34405,421.65829 C 248.46188,421.1095 249.61118,420.54692 252.67377,418.55984 C 258.96449,414.47824 266.9936,407.70183 279.8434,395.62919 C 283.33012,392.35334 297.4753,378.44049 311.27713,364.71177 C 325.07896,350.98304 336.99177,339.3012 337.75003,338.75214 C 338.5083,338.20306 339.62503,337.62248 340.23165,337.46196 C 344.66331,336.28925 355.38062,335.72073 382.55689,335.21676 C 408.09255,334.74322 418.96719,334.25126 422.32093,333.41786 C 425.79448,332.5547 433.72051,327.86095 449.69823,317.2052 C 461.25088,309.50061 485.83784,292.50027 500.08576,282.36542 C 503.90907,279.64579 505.46448,278.68996 506.06672,278.68996 C 506.51435,278.68996 506.95729,278.56587 507.05101,278.41423 C 507.14472,278.26258 507.41122,278.13849 507.64324,278.13849 C 507.99016,278.13849 508.03868,278.42006 507.9166,279.72396 C 507.60339,283.0691 507.40571,283.75666 506.35404,285.15932 C 503.48868,288.98093 495.94139,295.14902 487.04407,300.94052 C 484.7598,302.4274 480.32374,305.63362 477.18606,308.06546 C 445.54219,332.59103 424.04481,347.10814 414.75017,350.22825 C 412.90728,350.8469 412.19408,350.93239 408.87631,350.93239 C 402.47717,350.93239 395.12723,352.3194 382.58568,355.89371 C 364.10099,361.16178 347.09763,368.07111 338.16364,373.94464 C 330.40581,379.04493 324.1723,388.83443 317.90944,405.75312 C 315.44537,412.40965 312.53953,422.24882 309.03897,435.78866 C 308.16672,439.16239 307.36897,442.05878 307.26619,442.22508 C 307.16342,442.39138 290.59105,446.05592 270.43873,450.36849 C 250.28639,454.68105 233.58513,458.27493 233.32479,458.35485 C 232.98198,458.4601 232.79187,458.28672 232.63545,457.72623 z "
|
||||
style="fill:url(#linearGradient2301);fill-opacity:1" /><path
|
||||
id="path5482"
|
||||
d="M 137.72559,580.45986 C 137.34282,580.37465 136.58716,580.30043 136.04635,580.29491 C 133.6773,580.27075 126.95272,576.87395 119.71787,572.04689 C 111.87019,566.81093 105.56261,561.80559 98.411879,555.13967 C 96.972365,553.79776 94.464264,551.48807 92.838314,550.00703 C 88.471835,546.02972 81.735123,539.26156 79.754779,536.86241 C 76.134794,532.47692 74.197025,529.24921 73.930598,527.16116 C 73.525521,523.98649 73.539647,523.23809 74.056146,520.50727 C 74.173258,519.88813 75.704,518.55644 77.786876,517.26169 C 81.684875,514.83862 89.97768,509.21429 119.19592,489.17727 C 163.65173,458.69075 182.38099,446.29601 192.25667,440.8268 C 194.75874,439.44115 195.44804,439.28657 199.14319,439.28264 C 202.68422,439.27886 205.66402,439.59679 207.78132,440.20429 C 212.01481,441.41899 218.55894,443.9768 224.32907,446.6721 C 227.2094,448.01756 227.41617,448.14556 227.41617,448.58327 C 227.41617,449.00581 227.31681,449.08032 226.41575,449.33347 C 224.34431,449.91544 218.81508,451.7359 214.28011,453.32905 C 186.7276,463.00831 159.15855,476.3578 134.50683,491.95688 C 128.66425,495.65393 127.98593,496.15089 125.80375,498.33306 C 119.60523,504.53153 114.02491,514.21693 112.46913,521.47709 C 112.25189,522.49083 112.15177,523.69473 112.15082,525.30481 C 112.14929,527.87219 112.45637,529.2153 113.42141,530.86199 C 117.23617,537.37141 136.60237,543.51816 161.6507,546.16976 C 168.95857,546.94337 172.32439,547.12227 179.74358,547.13138 L 186.96406,547.14026 L 188.87793,546.47918 C 193.99516,544.7116 200.99731,540.71142 216.19398,530.8741 C 229.3623,522.34981 233.42675,519.86654 238.11641,517.4801 C 242.50747,515.24563 244.72611,514.58169 246.61672,514.93637 C 247.33648,515.0714 247.46896,515.47588 247.47685,517.56237 C 247.48827,520.57957 247.15877,521.72825 245.6302,523.9999 C 241.21384,530.56322 230.3452,539.48309 215.0564,549.09176 C 202.20767,557.16691 187.57399,564.6544 179.78048,567.14111 C 179.04248,567.37658 177.06305,567.88388 175.38173,568.26843 C 166.39674,570.32344 157.42239,573.5234 145.55502,578.90368 C 143.87492,579.6654 142.39182,580.22135 141.8143,580.30598 C 140.1115,580.55547 138.43805,580.61845 137.72559,580.45986 z "
|
||||
style="opacity:0.7;fill:url(#linearGradient2298);fill-opacity:1" /><path
|
||||
id="path6524"
|
||||
d="M 168.63849,529.9315 C 168.4693,529.90931 166.27755,529.84827 163.76793,529.79586 C 159.24918,529.70149 156.41999,529.50691 152.38621,529.01309 C 143.03032,527.86773 136.79422,526.024 134.60723,523.75665 C 134.14337,523.27573 133.99029,522.70506 133.99765,521.4841 C 134.00721,519.89411 134.15346,519.274 134.8333,517.94054 C 137.71533,512.28764 146.00612,503.33611 155.76996,495.33536 C 157.91225,493.57991 161.46514,490.91334 163.30919,489.6769 L 164.6395,488.78491 L 194.83695,485.13213 L 225.03441,481.47934 L 227.0339,481.5935 C 228.89293,481.69963 230.48389,481.81725 234.5344,482.14805 C 236.40256,482.30062 236.54756,482.36826 236.3708,483.00474 C 236.31176,483.21731 236.26321,483.58448 236.26289,483.82069 C 236.26209,484.42647 235.31089,486.65231 233.98756,489.14512 C 226.84799,502.59401 212.42824,519.53378 202.83492,525.74201 C 200.0852,527.52146 198.15537,528.36324 195.67618,528.86463 C 193.14723,529.37607 189.91738,529.70056 186.3263,529.80398 C 182.79755,529.9056 169.18899,530.00371 168.63849,529.9315 z "
|
||||
style="fill:url(#linearGradient2295);fill-opacity:1" /></g></svg>
|
Before Width: | Height: | Size: 25 KiB |
|
@ -1,340 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="22"
|
||||
height="22"
|
||||
viewBox="0 0 854.238 854.238"
|
||||
overflow="visible"
|
||||
enable-background="new 0 0 854.238 854.238"
|
||||
xml:space="preserve"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
sodipodi:docname="amarok_icon_small.svg"
|
||||
sodipodi:docbase="/home/hydrogen/kde/src/amarok/src/images"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.0"
|
||||
inkscape:export-filename="/home/me/amarok22.png"
|
||||
inkscape:export-xdpi="12.643598"
|
||||
inkscape:export-ydpi="12.643598"><sodipodi:namedview
|
||||
inkscape:window-height="688"
|
||||
inkscape:window-width="1022"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:zoom="3.7930793"
|
||||
inkscape:cx="107.38014"
|
||||
inkscape:cy="19.259016"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:current-layer="svg2"
|
||||
width="22px"
|
||||
height="22px" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs217"><mask
|
||||
id="XMLID_26_"
|
||||
height="44.813"
|
||||
width="93.126"
|
||||
y="461.543"
|
||||
x="155.705"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g69">
|
||||
<linearGradient
|
||||
y2="466.75449"
|
||||
x2="200.0733"
|
||||
y1="562.85791"
|
||||
x1="211.7222"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_1_">
|
||||
<stop
|
||||
id="stop72"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop74"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_1_)"
|
||||
id="ellipse76"
|
||||
ry="59.682999"
|
||||
rx="80.542"
|
||||
cy="495.98801"
|
||||
cx="203.617"
|
||||
sodipodi:cx="203.617"
|
||||
sodipodi:cy="495.98801"
|
||||
sodipodi:rx="80.542"
|
||||
sodipodi:ry="59.682999" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_2_"
|
||||
height="127.553"
|
||||
width="156.907"
|
||||
y="425.034"
|
||||
x="101.57"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g86">
|
||||
<linearGradient
|
||||
y2="563.47321"
|
||||
x2="186.92191"
|
||||
y1="397.62061"
|
||||
x1="206.09081"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_3_">
|
||||
<stop
|
||||
id="stop89"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop91"
|
||||
style="stop-color:#CBCBCB"
|
||||
offset="0.1111" />
|
||||
<stop
|
||||
id="stop93"
|
||||
style="stop-color:#969696"
|
||||
offset="0.2396" />
|
||||
<stop
|
||||
id="stop95"
|
||||
style="stop-color:#686868"
|
||||
offset="0.3698" />
|
||||
<stop
|
||||
id="stop97"
|
||||
style="stop-color:#424242"
|
||||
offset="0.4991" />
|
||||
<stop
|
||||
id="stop99"
|
||||
style="stop-color:#252525"
|
||||
offset="0.6273" />
|
||||
<stop
|
||||
id="stop101"
|
||||
style="stop-color:#111111"
|
||||
offset="0.7542" />
|
||||
<stop
|
||||
id="stop103"
|
||||
style="stop-color:#040404"
|
||||
offset="0.8792" />
|
||||
<stop
|
||||
id="stop105"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_3_)"
|
||||
id="ellipse107"
|
||||
ry="123.604"
|
||||
rx="160.94"
|
||||
cy="495.62299"
|
||||
cx="194.76401"
|
||||
sodipodi:cx="194.76401"
|
||||
sodipodi:cy="495.62299"
|
||||
sodipodi:rx="160.94"
|
||||
sodipodi:ry="123.604" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_10_"
|
||||
height="527.73"
|
||||
width="447.197"
|
||||
y="217.631"
|
||||
x="191.541"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
id="g159">
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.931,0,0,0.9299,28.7459,21.6629)"
|
||||
fy="155.23289"
|
||||
fx="657.2124"
|
||||
r="606.95343"
|
||||
cy="155.23289"
|
||||
cx="657.2124"
|
||||
id="XMLID_11_">
|
||||
<stop
|
||||
id="stop162"
|
||||
style="stop-color:#C9C9C8"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop164"
|
||||
style="stop-color:#C4C4C4"
|
||||
offset="0.0881" />
|
||||
<stop
|
||||
id="stop166"
|
||||
style="stop-color:#B8B8B7"
|
||||
offset="0.2192" />
|
||||
<stop
|
||||
id="stop168"
|
||||
style="stop-color:#A1A0A0"
|
||||
offset="0.3769" />
|
||||
<stop
|
||||
id="stop170"
|
||||
style="stop-color:#7F7F7E"
|
||||
offset="0.5556" />
|
||||
<stop
|
||||
id="stop172"
|
||||
style="stop-color:#4F4F4E"
|
||||
offset="0.7517" />
|
||||
<stop
|
||||
id="stop174"
|
||||
style="stop-color:#121212"
|
||||
offset="0.9595" />
|
||||
<stop
|
||||
id="stop176"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<circle
|
||||
style="fill:url(#XMLID_11_)"
|
||||
id="circle178"
|
||||
r="302.95401"
|
||||
cy="444.22601"
|
||||
cx="408.427"
|
||||
sodipodi:cx="408.427"
|
||||
sodipodi:cy="444.22601"
|
||||
sodipodi:rx="302.95401"
|
||||
sodipodi:ry="302.95401" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_13_"
|
||||
height="187.183"
|
||||
width="252.506"
|
||||
y="279.317"
|
||||
x="243.061"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
style="filter:url(#Adobe_OpacityMaskFilter_4_)"
|
||||
id="g193">
|
||||
<linearGradient
|
||||
y2="417.81519"
|
||||
x2="372.38071"
|
||||
y1="266.93359"
|
||||
x1="340.0488"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="XMLID_14_">
|
||||
<stop
|
||||
id="stop196"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop198"
|
||||
style="stop-color:#F8F8F8"
|
||||
offset="0.0867" />
|
||||
<stop
|
||||
id="stop200"
|
||||
style="stop-color:#E4E4E4"
|
||||
offset="0.2156" />
|
||||
<stop
|
||||
id="stop202"
|
||||
style="stop-color:#C2C2C2"
|
||||
offset="0.3708" />
|
||||
<stop
|
||||
id="stop204"
|
||||
style="stop-color:#949494"
|
||||
offset="0.5465" />
|
||||
<stop
|
||||
id="stop206"
|
||||
style="stop-color:#595959"
|
||||
offset="0.7394" />
|
||||
<stop
|
||||
id="stop208"
|
||||
style="stop-color:#151515"
|
||||
offset="0.9438" />
|
||||
<stop
|
||||
id="stop210"
|
||||
style="stop-color:#000000"
|
||||
offset="0.9944" />
|
||||
</linearGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_14_)"
|
||||
id="ellipse212"
|
||||
ry="183.32201"
|
||||
rx="215.32401"
|
||||
cy="374.28201"
|
||||
cx="363.052"
|
||||
sodipodi:cx="363.052"
|
||||
sodipodi:cy="374.28201"
|
||||
sodipodi:rx="215.32401"
|
||||
sodipodi:ry="183.32201" />
|
||||
</g>
|
||||
</mask><mask
|
||||
id="XMLID_23_"
|
||||
height="587.491"
|
||||
width="576.609"
|
||||
y="97.149"
|
||||
x="122.963"
|
||||
maskUnits="userSpaceOnUse">
|
||||
<g
|
||||
style="filter:url(#Adobe_OpacityMaskFilter)"
|
||||
id="g31">
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="-20.899401"
|
||||
fx="88.977501"
|
||||
r="673.11609"
|
||||
cy="-20.899401"
|
||||
cx="88.977501"
|
||||
id="XMLID_24_">
|
||||
<stop
|
||||
id="stop34"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="0.309" />
|
||||
<stop
|
||||
id="stop36"
|
||||
style="stop-color:#000000"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<ellipse
|
||||
style="fill:url(#XMLID_24_)"
|
||||
id="ellipse38"
|
||||
ry="349.10599"
|
||||
rx="512.93402"
|
||||
cy="286.172"
|
||||
cx="295.89499"
|
||||
sodipodi:cx="295.89499"
|
||||
sodipodi:cy="286.172"
|
||||
sodipodi:rx="512.93402"
|
||||
sodipodi:ry="349.10599" />
|
||||
</g>
|
||||
</mask></defs>
|
||||
|
||||
<g
|
||||
id="g8826"
|
||||
transform="translate(-9.9999999e-7,-77.04248)"><path
|
||||
id="circle22"
|
||||
d="M 813.31393,504.16148 C 813.31393,717.34108 640.2986,890.35641 427.119,890.35641 C 213.9394,890.35641 40.924072,717.34108 40.924072,504.16148 C 40.924072,290.98188 213.9394,117.96655 427.119,117.96655 C 640.2986,117.96655 813.31393,290.98188 813.31393,504.16148 z "
|
||||
style="fill:#dddddd;fill-opacity:1;stroke:#0057ae;stroke-width:81.84814453;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><g
|
||||
transform="matrix(1.0007211,0,0,1.0007211,0,77.042475)"
|
||||
id="g7521"><path
|
||||
style="opacity:0.22000002;fill:#323232"
|
||||
d="M 642.57609,234.13404 C 627.10948,234.13404 597.07671,266.39006 585.82368,271.4828 C 574.56556,276.57553 485.45685,334.29019 477.01352,344.47566 C 468.57424,354.66011 457.31815,358.90508 445.12516,358.05629 C 432.93318,357.20749 394.38517,356.85907 381.25527,363.64938 C 368.12233,370.4397 308.1824,425.95743 293.17361,432.74876 C 278.16685,439.53704 258.58696,443.01729 249.20773,443.86506 C 239.8285,444.71487 208.75552,476.03601 200.3132,481.97956 C 191.87189,487.91805 130.15538,511.71454 120.77716,516.80526 C 111.39693,521.89901 175.92721,602.50261 187.1833,604.20019 C 198.43735,605.89878 176.12675,614.22056 154.47147,614.22056 C 152.08716,614.22056 185.41987,701.62968 299.0726,758.04583 C 397.32655,806.81577 476.48682,777.1993 515.20296,765.37094 C 542.57896,757.00763 547.54306,753.27822 548.48402,739.69759 C 549.42296,726.11797 551.11852,715.38655 552.99537,700.10935 C 554.87223,684.83418 561.43364,556.66695 585.82469,522.7174 C 610.20865,488.76684 679.91372,448.01076 704.29969,443.76883 C 728.68771,439.52489 723.99911,431.03801 723.99911,423.3989 C 723.99911,415.7598 720.2464,398.784 713.68095,396.23764 C 707.11449,393.69229 681.49481,408.98265 673.05351,410.68022 C 664.61119,412.3778 624.27951,414.92418 618.65097,406.4373 C 613.02342,397.94839 664.15237,311.37286 670.71782,301.18841 C 677.28126,291.00293 680.09603,277.4223 667.90506,262.99389 C 655.70701,248.56244 647.2647,234.13404 642.57609,234.13404 z "
|
||||
id="path43" /><path
|
||||
style="fill:#00316e;fill-opacity:1"
|
||||
d="M 609.66271,189.23022 C 594.65899,189.23022 565.52971,223.80574 554.61192,229.26413 C 543.69414,234.72353 457.26042,296.58894 449.07233,307.50773 C 440.88426,318.4245 429.96546,322.97434 418.13913,322.06477 C 406.31279,321.15623 368.92351,320.78146 356.18661,328.05999 C 343.44767,335.33952 285.30761,394.85 270.75057,402.12953 C 256.19454,409.40603 237.20313,413.13442 228.10447,414.045 C 219.00783,414.95354 188.8677,448.52733 180.67962,454.89729 C 172.49154,461.26727 107.78906,489.26517 98.691417,494.72154 C 89.592758,500.18093 165.06615,576.6358 175.98393,578.45391 C 186.90172,580.27607 168.46434,621.70065 147.45832,621.70065 C 145.14491,621.70065 166.22994,690.34422 276.47028,750.81794 C 371.77476,803.0975 472.89314,779.95027 510.44549,767.27311 C 537.00106,758.30512 518.36314,753.34912 519.27473,738.79309 C 520.18227,724.23503 520.94698,705.09371 522.76712,688.71856 C 524.58827,672.34238 530.95419,534.95901 554.6109,498.56742 C 578.26459,462.17785 645.87402,418.49051 669.52971,413.94169 C 693.18644,409.39286 688.63559,400.2942 688.63559,392.10713 C 688.63559,383.92006 684.99734,365.72275 678.62736,362.99304 C 672.25941,360.26436 647.40954,376.65471 639.22145,378.47383 C 631.03337,380.29296 591.91105,383.02367 586.45065,373.92602 C 580.99226,364.82635 630.58567,272.0257 636.95463,261.10791 C 643.32461,250.18912 646.05228,235.63107 634.22393,220.16647 C 622.40062,204.69684 614.21153,189.23022 609.66271,189.23022 z "
|
||||
id="path58" /><path
|
||||
style="fill:#ffffff"
|
||||
d="M 428.17672,360.73231 C 428.17672,360.73231 392.13254,355.1858 371.33517,375.98418 C 350.53679,396.78155 332.50963,442.53415 333.90031,456.39939 C 335.28491,470.26465 376.88066,409.25916 394.90275,405.10131 C 412.92889,400.94043 432.33862,370.43565 428.17672,360.73231 z "
|
||||
id="path60" /></g></g></svg>
|
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 466 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 561 KiB |
Before Width: | Height: | Size: 372 KiB |
Before Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 502 B |
Before Width: | Height: | Size: 585 B |
Before Width: | Height: | Size: 681 B |
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 517 B |
Before Width: | Height: | Size: 506 B |
Before Width: | Height: | Size: 908 B |
Before Width: | Height: | Size: 463 B |
Before Width: | Height: | Size: 526 B |
|
@ -1,212 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="hi-action-view-services-lastfm-amarok.svg"
|
||||
sodipodi:docbase="/home/hydrogen/kde/src/amarok/src/images/icons/svg"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2"
|
||||
height="437.00000px"
|
||||
width="434.00000px"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
id="filter3542">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.56"
|
||||
id="feGaussianBlur3544" />
|
||||
</filter>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 218.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="434 : 218.5 : 1"
|
||||
inkscape:persp3d-origin="217 : 145.66667 : 1"
|
||||
id="perspective8187" />
|
||||
<linearGradient
|
||||
id="linearGradient2222">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2224" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2226" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2214">
|
||||
<stop
|
||||
id="stop2216"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2218"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2204">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2206" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2208" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2182">
|
||||
<stop
|
||||
style="stop-color:#83aef7;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2184" />
|
||||
<stop
|
||||
style="stop-color:#378cdd;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2186" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2172">
|
||||
<stop
|
||||
id="stop2174"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#000000;stop-opacity:0.28571430;" />
|
||||
<stop
|
||||
id="stop2176"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c68de;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2116">
|
||||
<stop
|
||||
id="stop2118"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#c3d5fa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2120"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#a9c6ff;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2050">
|
||||
<stop
|
||||
id="stop2052"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#2ba3cf;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2054"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#245aad;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="816"
|
||||
inkscape:window-width="1272"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="213.2389"
|
||||
inkscape:cx="302.18257"
|
||||
inkscape:zoom="1.1203939"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
showgrid="false" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Calque 1">
|
||||
<g
|
||||
transform="matrix(6.4472134,0,0,6.3914294,-2554.7512,-2519.4588)"
|
||||
id="lastfm"
|
||||
inkscape:export-filename="/data/kdesvn/extragear/multimedia/amarok/src/images/icons/hi16-action-view-services-lastfm-amarok.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<g
|
||||
transform="matrix(0.5714284,0,0,0.6666667,401.91461,396.37974)"
|
||||
id="g2796"
|
||||
style="opacity:0.6;fill:#000000;fill-opacity:1;filter:url(#filter3542)">
|
||||
<radialGradient
|
||||
cx="52"
|
||||
cy="-31"
|
||||
r="136.00369"
|
||||
id="radialGradient2798"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
id="stop2800"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2802"
|
||||
style="stop-color:#eeeeee;stop-opacity:1"
|
||||
offset="0.30770001" />
|
||||
<stop
|
||||
id="stop2804"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1"
|
||||
offset="0.78109998" />
|
||||
<stop
|
||||
id="stop2806"
|
||||
style="stop-color:#dbdbdb;stop-opacity:1"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<path
|
||||
d="M -3.9999997,-6.2999997e-06 C -5.6499996,-6.2999997e-06 -6.9999996,1.3499937 -6.9999996,2.9999936 L -6.9999996,92.999994 C -6.9999996,94.649994 -5.6499996,95.999994 -3.9999997,95.999994 L 102,95.999994 C 103.65,95.999994 105,94.649994 105,92.999994 L 105,2.9999936 C 105,1.3499937 103.65,-6.2999997e-06 102,-6.2999997e-06 L -3.9999997,-6.2999997e-06 z"
|
||||
id="path2808"
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
d="M 399.62889,396.37974 C 398.68603,396.37974 397.9146,397.25401 397.9146,398.32258 L 397.9146,456.60833 C 397.9146,457.67687 398.68603,458.55113 399.62889,458.55113 L 460.20032,458.55113 C 461.14316,458.55113 461.9146,457.67687 461.9146,456.60833 L 461.9146,398.32258 C 461.9146,397.25401 461.14316,396.37974 460.20032,396.37974 L 399.62889,396.37974 z"
|
||||
id="path2810"
|
||||
style="fill:#9c0f0f;fill-opacity:1" />
|
||||
<path
|
||||
d="M 401.22288,398.20831 C 400.32965,398.20831 399.59882,399.03117 399.59882,400.03685 L 399.59882,454.89405 C 399.59882,455.89973 400.32965,456.72257 401.22288,456.72257 L 458.60635,456.72257 C 459.49956,456.72257 460.2304,455.89973 460.2304,454.89405 L 460.2304,400.03685 C 460.2304,399.03117 459.49956,398.20831 458.60635,398.20831 L 401.22288,398.20831 z"
|
||||
id="path2812"
|
||||
style="fill:#d11007;fill-opacity:1" />
|
||||
<g
|
||||
transform="matrix(2,0,0,2.0000002,215.46559,203.31906)"
|
||||
id="g54198">
|
||||
<rect
|
||||
width="23.999941"
|
||||
height="24"
|
||||
x="94.970718"
|
||||
y="100.06928"
|
||||
id="rect54306"
|
||||
style="fill:#969696;fill-opacity:0;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
d="M 101.93733,104.79645 C 99.645463,104.8868 97.428753,106.09666 96.140959,108.21782 C 94.089915,111.5962 95.202292,115.96302 98.466056,118.14981 C 101.17448,119.96453 106.22304,119.10331 107.16065,116.65504 L 107.01327,114.13052 C 105.52414,117.16059 101.92815,117.81677 99.563077,116.33947 C 98.676247,115.78548 98.028694,115.00455 97.630981,114.11391 C 97.555663,114.08106 97.179969,113.01007 97.188906,112.35339 C 97.123663,111.33788 97.356766,110.2843 97.925751,109.34722 C 99.382136,106.94828 102.45415,106.19244 104.81914,107.66975 C 105.55615,108.1301 105.86051,108.25062 106.60394,109.33061 C 107.35817,110.42635 107.74044,111.43181 108.22501,113.1506 C 108.61525,114.53491 109.2147,116.00418 110.15711,117.20312 C 111.09959,118.40206 112.4662,119.34564 114.16877,119.34564 C 115.67934,119.34565 116.89239,118.93363 117.67278,118.06677 C 118.45318,117.19992 118.83537,116.03416 118.83537,114.84469 C 118.83537,113.53299 118.11738,112.44217 117.27978,111.77208 C 116.44227,111.10201 115.43739,110.79478 114.41438,110.60948 C 113.59775,110.46157 113.03535,110.19367 112.71149,109.8787 C 112.38763,109.56373 112.2058,109.19998 112.20385,108.48357 C 112.20279,108.0761 112.68029,107.29501 113.39918,106.98879 C 114.11807,106.68257 114.93234,106.67485 115.88799,107.71957 L 117.34535,106.34105 C 116.27376,105.16965 114.94794,104.73794 113.75944,104.84627 C 113.36318,104.88239 112.97766,104.98034 112.62959,105.12861 C 111.23723,105.72172 110.20228,106.98478 110.20626,108.48357 C 110.20935,109.62163 110.60129,110.64159 111.3197,111.34026 C 112.03802,112.03894 112.99618,112.41088 114.05412,112.60251 C 114.90569,112.75677 115.62393,113.02424 116.05179,113.36651 C 116.47956,113.7088 116.83771,114.05121 116.83771,114.84469 C 116.83771,115.76039 116.51101,116.34182 116.19909,116.68826 C 115.88726,117.0347 115.34371,117.31938 114.16877,117.31938 C 113.15982,117.31938 112.40681,116.82391 111.71262,115.94087 C 111.01851,115.05782 110.48186,113.79579 110.14078,112.58591 C 109.60502,110.68553 109.05424,109.42741 108.2905,108.28427 C 107.52132,107.13307 106.89765,106.47239 105.91625,105.8594 C 104.69329,105.09549 103.32758,104.75391 101.98648,104.79645 C 101.96845,104.79702 101.95537,104.79573 101.93733,104.79645 z"
|
||||
id="path54308"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.27069333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
d="M 400.85081,398.17974 C 400.30932,398.4604 399.90284,398.74908 399.66454,399.78344 C 399.65255,399.83547 399.62067,399.8698 399.6021,399.91708 L 399.6021,427.0464 C 424.48524,409.11744 448.4215,404.90482 460.1646,403.99316 L 460.1646,399.38252 C 459.91484,398.67662 459.51052,398.42155 459.04076,398.17974 L 400.85081,398.17974 z"
|
||||
id="path2828"
|
||||
style="opacity:0.2;fill:#ffffff" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 497 B |
Before Width: | Height: | Size: 547 B |
Before Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 373 B |
Before Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 498 B |
Before Width: | Height: | Size: 278 B |
Before Width: | Height: | Size: 466 B |
Before Width: | Height: | Size: 350 B |
Before Width: | Height: | Size: 411 B |
Before Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 12 KiB |