├── .cmake ├── AddDarwinSystemLibs.cmake ├── AddLinuxSystemLibs.cmake ├── AddPlugin.cmake ├── CheckAtomic.cmake ├── Colors.cmake ├── ConfigureBsdPaths.cmake ├── ConfigureCompilerFlags.cmake ├── ConfigureCurses.cmake ├── ConfigureRpath.cmake ├── ConfigureStandalone.cmake ├── DependencyDetection.cmake ├── GeneratePackage.cmake ├── InstallFiles.cmake ├── RaspberryPiToolchain-armv6.cmake └── RaspberryPiToolchain-armv8.cmake ├── .gitignore ├── .gitmodules ├── CHANGELOG.txt ├── CMakeLists.txt ├── CONTRIBUTORS.txt ├── LICENSE.txt ├── README.md ├── doc ├── build-standalone-unix.md ├── crosscompile-rpi.md └── rpi-buster-chroot.md ├── musikcube.sln ├── musikcube.spec ├── script ├── .prettierrc ├── archive-standalone-nix.sh ├── archive-win.sh ├── build-vendor-libraries.sh ├── build-win.bat ├── clean-nix.sh ├── clean-win.bat ├── create-crosscompile-sysroot.js ├── install-crosscompile-toolkits.js ├── install-deps.sh ├── notarize-macos.sh ├── patch-rpath.sh ├── post-build.sh ├── relink-dynamic-libraries.js ├── scan-standalone.js ├── stage-vendor-libraries.sh ├── strip-nix.sh ├── update-locales.sh ├── update-version.sh └── windows-cmd.props └── src ├── 3rdparty ├── 3rdparty.sln ├── 3rdparty.vcproj ├── 3rdparty.vcxproj ├── 3rdparty.vcxproj.filters ├── include │ ├── _kiss_fft_guts.h │ ├── kiss_fft.h │ ├── kiss_fftr.h │ ├── md5.h │ ├── nlohmann │ │ └── json.hpp │ ├── sigslot │ │ └── sigslot.h │ ├── sqlean │ │ └── unicode │ │ │ └── extension.h │ ├── sqlite │ │ ├── sqlite3.h │ │ └── sqlite3ext.h │ ├── utf8 │ │ ├── utf8.h │ │ └── utf8 │ │ │ ├── checked.h │ │ │ ├── core.h │ │ │ └── unchecked.h │ ├── wcwidth.h │ └── websocketpp │ │ ├── CMakeLists.txt │ │ ├── COPYING │ │ ├── base64 │ │ └── base64.hpp │ │ ├── client.hpp │ │ ├── close.hpp │ │ ├── common │ │ ├── asio.hpp │ │ ├── asio_ssl.hpp │ │ ├── chrono.hpp │ │ ├── connection_hdl.hpp │ │ ├── cpp11.hpp │ │ ├── functional.hpp │ │ ├── md5.hpp │ │ ├── memory.hpp │ │ ├── network.hpp │ │ ├── platforms.hpp │ │ ├── random.hpp │ │ ├── regex.hpp │ │ ├── stdint.hpp │ │ ├── system_error.hpp │ │ ├── thread.hpp │ │ ├── time.hpp │ │ └── type_traits.hpp │ │ ├── concurrency │ │ ├── basic.hpp │ │ └── none.hpp │ │ ├── config │ │ ├── asio.hpp │ │ ├── asio_client.hpp │ │ ├── asio_no_tls.hpp │ │ ├── asio_no_tls_client.hpp │ │ ├── boost_config.hpp │ │ ├── core.hpp │ │ ├── core_client.hpp │ │ ├── debug.hpp │ │ ├── debug_asio.hpp │ │ ├── debug_asio_no_tls.hpp │ │ ├── minimal_client.hpp │ │ └── minimal_server.hpp │ │ ├── connection.hpp │ │ ├── connection_base.hpp │ │ ├── endpoint.hpp │ │ ├── endpoint_base.hpp │ │ ├── error.hpp │ │ ├── extensions │ │ ├── extension.hpp │ │ └── permessage_deflate │ │ │ ├── disabled.hpp │ │ │ └── enabled.hpp │ │ ├── frame.hpp │ │ ├── http │ │ ├── constants.hpp │ │ ├── impl │ │ │ ├── parser.hpp │ │ │ ├── request.hpp │ │ │ └── response.hpp │ │ ├── parser.hpp │ │ ├── request.hpp │ │ └── response.hpp │ │ ├── impl │ │ ├── connection_impl.hpp │ │ ├── endpoint_impl.hpp │ │ └── utilities_impl.hpp │ │ ├── logger │ │ ├── basic.hpp │ │ ├── levels.hpp │ │ ├── stub.hpp │ │ └── syslog.hpp │ │ ├── message_buffer │ │ ├── alloc.hpp │ │ ├── message.hpp │ │ └── pool.hpp │ │ ├── processors │ │ ├── base.hpp │ │ ├── hybi00.hpp │ │ ├── hybi07.hpp │ │ ├── hybi08.hpp │ │ ├── hybi13.hpp │ │ └── processor.hpp │ │ ├── random │ │ ├── none.hpp │ │ └── random_device.hpp │ │ ├── roles │ │ ├── client_endpoint.hpp │ │ └── server_endpoint.hpp │ │ ├── server.hpp │ │ ├── sha1 │ │ └── sha1.hpp │ │ ├── transport │ │ ├── asio │ │ │ ├── base.hpp │ │ │ ├── connection.hpp │ │ │ ├── endpoint.hpp │ │ │ └── security │ │ │ │ ├── base.hpp │ │ │ │ ├── none.hpp │ │ │ │ └── tls.hpp │ │ ├── base │ │ │ ├── connection.hpp │ │ │ └── endpoint.hpp │ │ ├── iostream │ │ │ ├── base.hpp │ │ │ ├── connection.hpp │ │ │ └── endpoint.hpp │ │ └── stub │ │ │ ├── base.hpp │ │ │ ├── connection.hpp │ │ │ └── endpoint.hpp │ │ ├── uri.hpp │ │ ├── utf8_validator.hpp │ │ ├── utilities.hpp │ │ └── version.hpp ├── src │ ├── kiss_fft.c │ ├── kiss_fftr.c │ ├── md5.c │ ├── sqlean │ │ └── unicode │ │ │ └── extension.c │ ├── sqlite │ │ └── sqlite3.c │ └── wcwidth.c ├── win32_include │ ├── acs_defs.h │ ├── curl │ │ ├── curl.h │ │ ├── curlver.h │ │ ├── easy.h │ │ ├── header.h │ │ ├── mprintf.h │ │ ├── multi.h │ │ ├── options.h │ │ ├── stdcheaders.h │ │ ├── system.h │ │ ├── typecheck-gcc.h │ │ ├── urlapi.h │ │ └── websockets.h │ ├── curses.h │ ├── curspriv.h │ ├── gme │ │ ├── blargg_source.h │ │ └── gme.h │ ├── lame │ │ └── lame.h │ ├── libavcodec │ │ ├── ac3_parser.h │ │ ├── adts_parser.h │ │ ├── avcodec.h │ │ ├── avdct.h │ │ ├── avfft.h │ │ ├── bsf.h │ │ ├── codec.h │ │ ├── codec_desc.h │ │ ├── codec_id.h │ │ ├── codec_par.h │ │ ├── d3d11va.h │ │ ├── defs.h │ │ ├── dirac.h │ │ ├── dv_profile.h │ │ ├── dxva2.h │ │ ├── jni.h │ │ ├── mediacodec.h │ │ ├── packet.h │ │ ├── qsv.h │ │ ├── vdpau.h │ │ ├── version.h │ │ ├── version_major.h │ │ ├── videotoolbox.h │ │ └── vorbis_parser.h │ ├── libavformat │ │ ├── avformat.h │ │ ├── avio.h │ │ ├── version.h │ │ └── version_major.h │ ├── libavutil │ │ ├── adler32.h │ │ ├── aes.h │ │ ├── aes_ctr.h │ │ ├── ambient_viewing_environment.h │ │ ├── attributes.h │ │ ├── audio_fifo.h │ │ ├── avassert.h │ │ ├── avconfig.h │ │ ├── avstring.h │ │ ├── avutil.h │ │ ├── base64.h │ │ ├── blowfish.h │ │ ├── bprint.h │ │ ├── bswap.h │ │ ├── buffer.h │ │ ├── camellia.h │ │ ├── cast5.h │ │ ├── channel_layout.h │ │ ├── common.h │ │ ├── cpu.h │ │ ├── crc.h │ │ ├── csp.h │ │ ├── des.h │ │ ├── detection_bbox.h │ │ ├── dict.h │ │ ├── display.h │ │ ├── dovi_meta.h │ │ ├── downmix_info.h │ │ ├── encryption_info.h │ │ ├── error.h │ │ ├── eval.h │ │ ├── executor.h │ │ ├── ffversion.h │ │ ├── fifo.h │ │ ├── file.h │ │ ├── film_grain_params.h │ │ ├── frame.h │ │ ├── hash.h │ │ ├── hdr_dynamic_metadata.h │ │ ├── hdr_dynamic_vivid_metadata.h │ │ ├── hmac.h │ │ ├── hwcontext.h │ │ ├── hwcontext_cuda.h │ │ ├── hwcontext_d3d11va.h │ │ ├── hwcontext_d3d12va.h │ │ ├── hwcontext_drm.h │ │ ├── hwcontext_dxva2.h │ │ ├── hwcontext_mediacodec.h │ │ ├── hwcontext_opencl.h │ │ ├── hwcontext_qsv.h │ │ ├── hwcontext_vaapi.h │ │ ├── hwcontext_vdpau.h │ │ ├── hwcontext_videotoolbox.h │ │ ├── hwcontext_vulkan.h │ │ ├── iamf.h │ │ ├── imgutils.h │ │ ├── intfloat.h │ │ ├── intreadwrite.h │ │ ├── lfg.h │ │ ├── log.h │ │ ├── lzo.h │ │ ├── macros.h │ │ ├── mastering_display_metadata.h │ │ ├── mathematics.h │ │ ├── md5.h │ │ ├── mem.h │ │ ├── motion_vector.h │ │ ├── murmur3.h │ │ ├── opt.h │ │ ├── parseutils.h │ │ ├── pixdesc.h │ │ ├── pixelutils.h │ │ ├── pixfmt.h │ │ ├── random_seed.h │ │ ├── rational.h │ │ ├── rc4.h │ │ ├── replaygain.h │ │ ├── ripemd.h │ │ ├── samplefmt.h │ │ ├── sha.h │ │ ├── sha512.h │ │ ├── spherical.h │ │ ├── stereo3d.h │ │ ├── tea.h │ │ ├── threadmessage.h │ │ ├── time.h │ │ ├── timecode.h │ │ ├── timestamp.h │ │ ├── tree.h │ │ ├── twofish.h │ │ ├── tx.h │ │ ├── uuid.h │ │ ├── version.h │ │ ├── video_enc_params.h │ │ ├── video_hint.h │ │ └── xtea.h │ ├── libopenmpt │ │ ├── libopenmpt.h │ │ ├── libopenmpt.hpp │ │ ├── libopenmpt_config.h │ │ ├── libopenmpt_ext.h │ │ ├── libopenmpt_ext.hpp │ │ ├── libopenmpt_stream_callbacks_buffer.h │ │ ├── libopenmpt_stream_callbacks_fd.h │ │ ├── libopenmpt_stream_callbacks_file.h │ │ └── libopenmpt_version.h │ ├── libswresample │ │ ├── swresample.h │ │ ├── version.h │ │ └── version_major.h │ ├── microhttpd.h │ ├── openssl │ │ ├── __DECC_INCLUDE_EPILOGUE.H │ │ ├── __DECC_INCLUDE_PROLOGUE.H │ │ ├── aes.h │ │ ├── applink.c │ │ ├── asn1.h │ │ ├── asn1_mac.h │ │ ├── asn1err.h │ │ ├── asn1t.h │ │ ├── async.h │ │ ├── asyncerr.h │ │ ├── bio.h │ │ ├── bioerr.h │ │ ├── blowfish.h │ │ ├── bn.h │ │ ├── bnerr.h │ │ ├── buffer.h │ │ ├── buffererr.h │ │ ├── camellia.h │ │ ├── cast.h │ │ ├── cmac.h │ │ ├── cmp.h │ │ ├── cmp_util.h │ │ ├── cmperr.h │ │ ├── cms.h │ │ ├── cmserr.h │ │ ├── comp.h │ │ ├── comperr.h │ │ ├── conf.h │ │ ├── conf_api.h │ │ ├── conferr.h │ │ ├── configuration.h │ │ ├── conftypes.h │ │ ├── core.h │ │ ├── core_dispatch.h │ │ ├── core_names.h │ │ ├── core_object.h │ │ ├── crmf.h │ │ ├── crmferr.h │ │ ├── crypto.h │ │ ├── cryptoerr.h │ │ ├── cryptoerr_legacy.h │ │ ├── ct.h │ │ ├── cterr.h │ │ ├── decoder.h │ │ ├── decodererr.h │ │ ├── des.h │ │ ├── dh.h │ │ ├── dherr.h │ │ ├── dsa.h │ │ ├── dsaerr.h │ │ ├── dtls1.h │ │ ├── e_os2.h │ │ ├── ebcdic.h │ │ ├── ec.h │ │ ├── ecdh.h │ │ ├── ecdsa.h │ │ ├── ecerr.h │ │ ├── encoder.h │ │ ├── encodererr.h │ │ ├── engine.h │ │ ├── engineerr.h │ │ ├── err.h │ │ ├── ess.h │ │ ├── esserr.h │ │ ├── evp.h │ │ ├── evperr.h │ │ ├── fips_names.h │ │ ├── fipskey.h │ │ ├── hmac.h │ │ ├── http.h │ │ ├── httperr.h │ │ ├── idea.h │ │ ├── kdf.h │ │ ├── kdferr.h │ │ ├── lhash.h │ │ ├── macros.h │ │ ├── md2.h │ │ ├── md4.h │ │ ├── md5.h │ │ ├── mdc2.h │ │ ├── modes.h │ │ ├── obj_mac.h │ │ ├── objects.h │ │ ├── objectserr.h │ │ ├── ocsp.h │ │ ├── ocsperr.h │ │ ├── opensslconf.h │ │ ├── opensslv.h │ │ ├── ossl_typ.h │ │ ├── param_build.h │ │ ├── params.h │ │ ├── pem.h │ │ ├── pem2.h │ │ ├── pemerr.h │ │ ├── pkcs12.h │ │ ├── pkcs12err.h │ │ ├── pkcs7.h │ │ ├── pkcs7err.h │ │ ├── prov_ssl.h │ │ ├── proverr.h │ │ ├── provider.h │ │ ├── rand.h │ │ ├── randerr.h │ │ ├── rc2.h │ │ ├── rc4.h │ │ ├── rc5.h │ │ ├── ripemd.h │ │ ├── rsa.h │ │ ├── rsaerr.h │ │ ├── safestack.h │ │ ├── seed.h │ │ ├── self_test.h │ │ ├── sha.h │ │ ├── srp.h │ │ ├── srtp.h │ │ ├── ssl.h │ │ ├── ssl2.h │ │ ├── ssl3.h │ │ ├── sslerr.h │ │ ├── sslerr_legacy.h │ │ ├── stack.h │ │ ├── store.h │ │ ├── storeerr.h │ │ ├── symhacks.h │ │ ├── tls1.h │ │ ├── trace.h │ │ ├── ts.h │ │ ├── tserr.h │ │ ├── txt_db.h │ │ ├── types.h │ │ ├── ui.h │ │ ├── uierr.h │ │ ├── whrlpool.h │ │ ├── x509.h │ │ ├── x509_vfy.h │ │ ├── x509err.h │ │ ├── x509v3.h │ │ └── x509v3err.h │ ├── panel.h │ ├── taglib │ │ ├── aifffile.h │ │ ├── aiffproperties.h │ │ ├── apefile.h │ │ ├── apefooter.h │ │ ├── apeitem.h │ │ ├── apeproperties.h │ │ ├── apetag.h │ │ ├── asfattribute.h │ │ ├── asffile.h │ │ ├── asfpicture.h │ │ ├── asfproperties.h │ │ ├── asftag.h │ │ ├── attachedpictureframe.h │ │ ├── audioproperties.h │ │ ├── chapterframe.h │ │ ├── commentsframe.h │ │ ├── eventtimingcodesframe.h │ │ ├── fileref.h │ │ ├── flacfile.h │ │ ├── flacmetadatablock.h │ │ ├── flacpicture.h │ │ ├── flacproperties.h │ │ ├── generalencapsulatedobjectframe.h │ │ ├── id3v1genres.h │ │ ├── id3v1tag.h │ │ ├── id3v2.h │ │ ├── id3v2extendedheader.h │ │ ├── id3v2footer.h │ │ ├── id3v2frame.h │ │ ├── id3v2framefactory.h │ │ ├── id3v2header.h │ │ ├── id3v2synchdata.h │ │ ├── id3v2tag.h │ │ ├── infotag.h │ │ ├── itfile.h │ │ ├── itproperties.h │ │ ├── modfile.h │ │ ├── modfilebase.h │ │ ├── modproperties.h │ │ ├── modtag.h │ │ ├── mp4atom.h │ │ ├── mp4coverart.h │ │ ├── mp4file.h │ │ ├── mp4item.h │ │ ├── mp4properties.h │ │ ├── mp4tag.h │ │ ├── mpcfile.h │ │ ├── mpcproperties.h │ │ ├── mpegfile.h │ │ ├── mpegheader.h │ │ ├── mpegproperties.h │ │ ├── oggfile.h │ │ ├── oggflacfile.h │ │ ├── oggpage.h │ │ ├── oggpageheader.h │ │ ├── opusfile.h │ │ ├── opusproperties.h │ │ ├── ownershipframe.h │ │ ├── podcastframe.h │ │ ├── popularimeterframe.h │ │ ├── privateframe.h │ │ ├── relativevolumeframe.h │ │ ├── rifffile.h │ │ ├── s3mfile.h │ │ ├── s3mproperties.h │ │ ├── speexfile.h │ │ ├── speexproperties.h │ │ ├── synchronizedlyricsframe.h │ │ ├── tableofcontentsframe.h │ │ ├── tag.h │ │ ├── tag_c.h │ │ ├── taglib.h │ │ ├── taglib_config.h │ │ ├── taglib_export.h │ │ ├── tbytevector.h │ │ ├── tbytevectorlist.h │ │ ├── tbytevectorstream.h │ │ ├── tdebuglistener.h │ │ ├── textidentificationframe.h │ │ ├── tfile.h │ │ ├── tfilestream.h │ │ ├── tiostream.h │ │ ├── tlist.h │ │ ├── tlist.tcc │ │ ├── tmap.h │ │ ├── tmap.tcc │ │ ├── tpropertymap.h │ │ ├── trefcounter.h │ │ ├── trueaudiofile.h │ │ ├── trueaudioproperties.h │ │ ├── tstring.h │ │ ├── tstringlist.h │ │ ├── uniquefileidentifierframe.h │ │ ├── unknownframe.h │ │ ├── unsynchronizedlyricsframe.h │ │ ├── urllinkframe.h │ │ ├── vorbisfile.h │ │ ├── vorbisproperties.h │ │ ├── wavfile.h │ │ ├── wavpackfile.h │ │ ├── wavpackproperties.h │ │ ├── wavproperties.h │ │ ├── xingheader.h │ │ ├── xiphcomment.h │ │ ├── xmfile.h │ │ └── xmproperties.h │ ├── term.h │ ├── tls.h │ ├── zconf.h │ └── zlib.h └── win32_src │ └── pdcurses │ ├── README.md │ ├── acs_defs.h │ ├── addch.c │ ├── addchstr.c │ ├── addstr.c │ ├── attr.c │ ├── beep.c │ ├── bkgd.c │ ├── border.c │ ├── clear.c │ ├── color.c │ ├── config_curses.c │ ├── debug.c │ ├── delch.c │ ├── deleteln.c │ ├── deprec.c │ ├── dosutil.c │ ├── font437.h │ ├── getch.c │ ├── getstr.c │ ├── getyx.c │ ├── iconbmp.h │ ├── inch.c │ ├── inchstr.c │ ├── initscr.c │ ├── inopts.c │ ├── insch.c │ ├── insstr.c │ ├── instr.c │ ├── kernel.c │ ├── keyname.c │ ├── mouse.c │ ├── move.c │ ├── outopts.c │ ├── overlay.c │ ├── pad.c │ ├── panel.c │ ├── pdcclip.c │ ├── pdccolor.c │ ├── pdccolor.h │ ├── pdcwincon.c │ ├── pdcwingui.c │ ├── printw.c │ ├── refresh.c │ ├── scanw.c │ ├── scr_dump.c │ ├── scroll.c │ ├── slk.c │ ├── termattr.c │ ├── terminfo.c │ ├── touch.c │ ├── util.c │ ├── winclip.c │ ├── wincon │ ├── pdcclip.c │ ├── pdcdisp.c │ ├── pdcgetsc.c │ ├── pdckbd.c │ ├── pdcscrn.c │ ├── pdcsetsc.c │ ├── pdcutil.c │ └── pdcwin.h │ ├── window.c │ └── wingui │ ├── pdcclip.c │ ├── pdcdisp.c │ ├── pdcgetsc.c │ ├── pdckbd.c │ ├── pdcscrn.c │ ├── pdcsetsc.c │ ├── pdcutil.c │ └── pdcwin.h ├── core_c_demo ├── CMakeLists.txt ├── core_c_demo.rc ├── core_c_demo.vcxproj ├── core_c_demo.vcxproj.filters ├── icon.ico ├── main.c └── resource.h ├── musikcore ├── CMakeLists.txt ├── audio │ ├── Buffer.cpp │ ├── Buffer.h │ ├── CrossfadeTransport.cpp │ ├── CrossfadeTransport.h │ ├── Crossfader.cpp │ ├── Crossfader.h │ ├── GaplessTransport.cpp │ ├── GaplessTransport.h │ ├── IStream.h │ ├── ITransport.h │ ├── MasterTransport.cpp │ ├── MasterTransport.h │ ├── Outputs.cpp │ ├── Outputs.h │ ├── PlaybackService.cpp │ ├── PlaybackService.h │ ├── Player.cpp │ ├── Player.h │ ├── Stream.cpp │ ├── Stream.h │ ├── Streams.cpp │ ├── Streams.h │ ├── Visualizer.cpp │ └── Visualizer.h ├── c_context.cpp ├── c_context.h ├── c_interface_wrappers.cpp ├── config.h ├── db │ ├── Connection.cpp │ ├── Connection.h │ ├── ScopedTransaction.cpp │ ├── ScopedTransaction.h │ ├── SqliteExtensions.cpp │ ├── SqliteExtensions.h │ ├── Statement.cpp │ └── Statement.h ├── debug.cpp ├── debug.h ├── i18n │ ├── Locale.cpp │ └── Locale.h ├── io │ ├── DataStreamFactory.cpp │ ├── DataStreamFactory.h │ ├── LocalFileStream.cpp │ └── LocalFileStream.h ├── library │ ├── IIndexer.h │ ├── ILibrary.h │ ├── IQuery.h │ ├── Indexer.cpp │ ├── Indexer.h │ ├── LibraryFactory.cpp │ ├── LibraryFactory.h │ ├── LocalLibrary.cpp │ ├── LocalLibrary.h │ ├── LocalLibraryConstants.h │ ├── LocalMetadataProxy.cpp │ ├── LocalMetadataProxy.h │ ├── MasterLibrary.cpp │ ├── MasterLibrary.h │ ├── QueryBase.h │ ├── QueryRegistry.cpp │ ├── QueryRegistry.h │ ├── RemoteLibrary.cpp │ ├── RemoteLibrary.h │ ├── metadata │ │ ├── MetadataMap.cpp │ │ ├── MetadataMap.h │ │ ├── MetadataMapList.cpp │ │ └── MetadataMapList.h │ ├── query │ │ ├── AlbumListQuery.cpp │ │ ├── AlbumListQuery.h │ │ ├── AllCategoriesQuery.cpp │ │ ├── AllCategoriesQuery.h │ │ ├── AppendPlaylistQuery.cpp │ │ ├── AppendPlaylistQuery.h │ │ ├── CategoryListQuery.cpp │ │ ├── CategoryListQuery.h │ │ ├── CategoryTrackListQuery.cpp │ │ ├── CategoryTrackListQuery.h │ │ ├── DeletePlaylistQuery.cpp │ │ ├── DeletePlaylistQuery.h │ │ ├── DirectoryTrackListQuery.cpp │ │ ├── DirectoryTrackListQuery.h │ │ ├── GetPlaylistQuery.cpp │ │ ├── GetPlaylistQuery.h │ │ ├── LyricsQuery.cpp │ │ ├── LyricsQuery.h │ │ ├── MarkTrackPlayedQuery.cpp │ │ ├── MarkTrackPlayedQuery.h │ │ ├── NowPlayingTrackListQuery.cpp │ │ ├── NowPlayingTrackListQuery.h │ │ ├── PersistedPlayQueueQuery.cpp │ │ ├── PersistedPlayQueueQuery.h │ │ ├── SavePlaylistQuery.cpp │ │ ├── SavePlaylistQuery.h │ │ ├── SearchTrackListQuery.cpp │ │ ├── SearchTrackListQuery.h │ │ ├── SetTrackRatingQuery.cpp │ │ ├── SetTrackRatingQuery.h │ │ ├── TrackListQueryBase.h │ │ ├── TrackMetadataBatchQuery.cpp │ │ ├── TrackMetadataBatchQuery.h │ │ ├── TrackMetadataQuery.cpp │ │ ├── TrackMetadataQuery.h │ │ └── util │ │ │ ├── CategoryQueryUtil.cpp │ │ │ ├── CategoryQueryUtil.h │ │ │ ├── SdkWrappers.h │ │ │ ├── Serialization.cpp │ │ │ ├── Serialization.h │ │ │ ├── TrackQueryFragments.h │ │ │ └── TrackSort.h │ └── track │ │ ├── IndexerTrack.cpp │ │ ├── IndexerTrack.h │ │ ├── LibraryTrack.cpp │ │ ├── LibraryTrack.h │ │ ├── Track.cpp │ │ ├── Track.h │ │ ├── TrackList.cpp │ │ └── TrackList.h ├── musikcore.sln ├── musikcore.vcproj ├── musikcore.vcxproj ├── musikcore.vcxproj.filters ├── musikcore_c.h ├── net │ ├── PiggyWebSocketClient.cpp │ ├── PiggyWebSocketClient.h │ ├── RawWebSocketClient.cpp │ ├── RawWebSocketClient.h │ ├── WebSocketClient.cpp │ └── WebSocketClient.h ├── pch.cmake ├── pch.cpp ├── pch.hpp ├── plugin │ ├── PluginFactory.cpp │ ├── PluginFactory.h │ ├── Plugins.cpp │ └── Plugins.h ├── runtime │ ├── IMessage.h │ ├── IMessageQueue.h │ ├── IMessageTarget.h │ ├── Message.cpp │ ├── Message.h │ ├── MessageQueue.cpp │ └── MessageQueue.h ├── sdk │ ├── DataBuffer.h │ ├── Filesystem.h │ ├── HttpClient.h │ ├── IAllocator.h │ ├── IAnalyzer.h │ ├── IBlockingEncoder.h │ ├── IBuffer.h │ ├── IBufferProvider.h │ ├── IDSP.h │ ├── IDataStream.h │ ├── IDataStreamFactory.h │ ├── IDebug.h │ ├── IDecoder.h │ ├── IDecoderFactory.h │ ├── IDevice.h │ ├── IEncoder.h │ ├── IEncoderFactory.h │ ├── IEnvironment.h │ ├── IIndexerNotifier.h │ ├── IIndexerSource.h │ ├── IIndexerWriter.h │ ├── IMap.h │ ├── IMapList.h │ ├── IMetadataProxy.h │ ├── IOutput.h │ ├── IPcmVisualizer.h │ ├── IPlaybackRemote.h │ ├── IPlaybackService.h │ ├── IPlugin.h │ ├── IPreferences.h │ ├── IResource.h │ ├── ISchema.h │ ├── ISpectrumVisualizer.h │ ├── IStreamingEncoder.h │ ├── ITagReader.h │ ├── ITagStore.h │ ├── ITrack.h │ ├── ITrackList.h │ ├── ITrackListEditor.h │ ├── IValue.h │ ├── IValueList.h │ ├── IVisualizer.h │ ├── ReplayGain.h │ ├── String.h │ ├── constants.h │ └── version.h ├── support │ ├── Auddio.cpp │ ├── Auddio.h │ ├── Common.cpp │ ├── Common.h │ ├── DeleteDefaults.h │ ├── Duration.cpp │ ├── Duration.h │ ├── LastFm.cpp │ ├── LastFm.h │ ├── Messages.h │ ├── NarrowCast.h │ ├── PiggyDebugBackend.cpp │ ├── PiggyDebugBackend.h │ ├── Playback.cpp │ ├── Playback.h │ ├── PreferenceKeys.cpp │ ├── PreferenceKeys.h │ ├── Preferences.cpp │ ├── Preferences.h │ └── ThreadGroup.h └── utfutil.h ├── musikcube ├── CMakeLists.txt ├── Main.cpp ├── app │ ├── layout │ │ ├── BrowseLayout.cpp │ │ ├── BrowseLayout.h │ │ ├── CategorySearchLayout.cpp │ │ ├── CategorySearchLayout.h │ │ ├── ConsoleLayout.cpp │ │ ├── ConsoleLayout.h │ │ ├── DirectoryLayout.cpp │ │ ├── DirectoryLayout.h │ │ ├── HotkeysLayout.cpp │ │ ├── HotkeysLayout.h │ │ ├── LibraryLayout.cpp │ │ ├── LibraryLayout.h │ │ ├── LibraryNotConnectedLayout.cpp │ │ ├── LibraryNotConnectedLayout.h │ │ ├── LocalLibrarySettingsLayout.cpp │ │ ├── LocalLibrarySettingsLayout.h │ │ ├── LyricsLayout.cpp │ │ ├── LyricsLayout.h │ │ ├── MainLayout.cpp │ │ ├── MainLayout.h │ │ ├── NowPlayingLayout.cpp │ │ ├── NowPlayingLayout.h │ │ ├── RemoteLibrarySettingsLayout.cpp │ │ ├── RemoteLibrarySettingsLayout.h │ │ ├── SettingsLayout.cpp │ │ ├── SettingsLayout.h │ │ ├── TrackSearchLayout.cpp │ │ └── TrackSearchLayout.h │ ├── model │ │ ├── DirectoryAdapter.cpp │ │ ├── DirectoryAdapter.h │ │ ├── HotkeysAdapter.cpp │ │ └── HotkeysAdapter.h │ ├── overlay │ │ ├── BrowseOverlays.cpp │ │ ├── BrowseOverlays.h │ │ ├── ColorThemeOverlay.cpp │ │ ├── ColorThemeOverlay.h │ │ ├── EqualizerOverlay.cpp │ │ ├── EqualizerOverlay.h │ │ ├── LastFmOverlay.cpp │ │ ├── LastFmOverlay.h │ │ ├── PlayQueueOverlays.cpp │ │ ├── PlayQueueOverlays.h │ │ ├── PlaybackOverlays.cpp │ │ ├── PlaybackOverlays.h │ │ ├── PluginOverlay.cpp │ │ ├── PluginOverlay.h │ │ ├── PreampOverlay.cpp │ │ ├── PreampOverlay.h │ │ ├── ReassignHotkeyOverlay.cpp │ │ ├── ReassignHotkeyOverlay.h │ │ ├── ServerOverlay.cpp │ │ ├── ServerOverlay.h │ │ ├── SettingsOverlays.cpp │ │ ├── SettingsOverlays.h │ │ ├── TrackOverlays.cpp │ │ ├── TrackOverlays.h │ │ ├── VisualizerOverlay.cpp │ │ └── VisualizerOverlay.h │ ├── util │ │ ├── ConsoleLogger.cpp │ │ ├── ConsoleLogger.h │ │ ├── GlobalHotkeys.cpp │ │ ├── GlobalHotkeys.h │ │ ├── Hotkeys.cpp │ │ ├── Hotkeys.h │ │ ├── MagicConstants.cpp │ │ ├── MagicConstants.h │ │ ├── Messages.h │ │ ├── Playback.cpp │ │ ├── Playback.h │ │ ├── PreferenceKeys.cpp │ │ ├── PreferenceKeys.h │ │ ├── Rating.cpp │ │ ├── Rating.h │ │ ├── TrackRowRenderers.cpp │ │ ├── TrackRowRenderers.h │ │ ├── UpdateCheck.cpp │ │ ├── UpdateCheck.h │ │ ├── WindowUtil.cpp │ │ └── WindowUtil.h │ └── window │ │ ├── CategoryListView.cpp │ │ ├── CategoryListView.h │ │ ├── TrackListView.cpp │ │ ├── TrackListView.h │ │ ├── TransportWindow.cpp │ │ └── TransportWindow.h ├── cursespp │ ├── App.cpp │ ├── AppLayout.cpp │ ├── Checkbox.cpp │ ├── Colors.cpp │ ├── DialogOverlay.cpp │ ├── IMouseHandler.cpp │ ├── InputOverlay.cpp │ ├── LayoutBase.cpp │ ├── ListOverlay.cpp │ ├── ListWindow.cpp │ ├── MultiLineEntry.cpp │ ├── OverlayStack.cpp │ ├── SchemaOverlay.cpp │ ├── Screen.cpp │ ├── ScrollAdapterBase.cpp │ ├── ScrollableWindow.cpp │ ├── Scrollbar.cpp │ ├── ShortcutsWindow.cpp │ ├── SimpleScrollAdapter.cpp │ ├── SingleLineEntry.cpp │ ├── Text.cpp │ ├── TextInput.cpp │ ├── TextLabel.cpp │ ├── ToastOverlay.cpp │ ├── Win32Util.cpp │ ├── Window.cpp │ └── cursespp │ │ ├── App.h │ │ ├── AppLayout.h │ │ ├── Checkbox.h │ │ ├── Colors.h │ │ ├── DialogOverlay.h │ │ ├── IDisplayable.h │ │ ├── IInput.h │ │ ├── IKeyHandler.h │ │ ├── ILayout.h │ │ ├── IMouseHandler.h │ │ ├── INavigationKeys.h │ │ ├── IOrderable.h │ │ ├── IOverlay.h │ │ ├── IScrollAdapter.h │ │ ├── IScrollable.h │ │ ├── ITopLevelLayout.h │ │ ├── IWindow.h │ │ ├── IWindowGroup.h │ │ ├── InputOverlay.h │ │ ├── LayoutBase.h │ │ ├── ListOverlay.h │ │ ├── ListWindow.h │ │ ├── MultiLineEntry.h │ │ ├── NumberValidator.h │ │ ├── OverlayBase.h │ │ ├── OverlayStack.h │ │ ├── SchemaOverlay.h │ │ ├── Screen.h │ │ ├── ScrollAdapterBase.h │ │ ├── ScrollableWindow.h │ │ ├── Scrollbar.h │ │ ├── ShortcutsWindow.h │ │ ├── SimpleScrollAdapter.h │ │ ├── SingleLineEntry.h │ │ ├── Text.h │ │ ├── TextInput.h │ │ ├── TextLabel.h │ │ ├── ToastOverlay.h │ │ ├── Win32Util.h │ │ ├── Window.h │ │ └── curses_config.h ├── data │ ├── linux │ │ └── share │ │ │ ├── applications │ │ │ ├── musikcube.desktop │ │ │ └── musikcube.snap.desktop │ │ │ └── icons │ │ │ └── hicolor │ │ │ ├── 128x128 │ │ │ └── apps │ │ │ │ └── musikcube.png │ │ │ ├── 48x48 │ │ │ └── apps │ │ │ │ └── musikcube.png │ │ │ └── 64x64 │ │ │ └── apps │ │ │ └── musikcube.png │ ├── locales │ │ ├── cs_CZ.json │ │ ├── de_DE.json │ │ ├── en_US.json │ │ ├── es_ES.json │ │ ├── fr_FR.json │ │ ├── it_IT.json │ │ ├── ja_JP.json │ │ ├── ru_RU.json │ │ ├── uk_UA.json │ │ └── zh_CN.json │ ├── logo_android.psd │ ├── logo_large.psd │ ├── logo_small.psd │ └── themes │ │ ├── gruvbox_dark.json │ │ ├── solarized_dark.json │ │ └── solarized_light.json ├── icon.ico ├── musikcube.in ├── musikcube.rc ├── musikcube.vcproj ├── musikcube.vcxproj ├── musikcube.vcxproj.filters ├── pch.cmake ├── resource.h ├── stdafx.cpp ├── stdafx.h └── win32api.manifest ├── musikcubed ├── CMakeLists.txt ├── main.cpp └── musikcubed.in ├── musikdroid ├── .gitignore ├── README.md ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── io │ │ │ └── casey │ │ │ └── musikcube │ │ │ └── remote │ │ │ ├── Application.kt │ │ │ ├── framework │ │ │ ├── IMixin.kt │ │ │ ├── MixinBase.kt │ │ │ ├── MixinSet.kt │ │ │ └── ViewModel.kt │ │ │ ├── injection │ │ │ ├── AppComponent.kt │ │ │ ├── AppModule.kt │ │ │ ├── DataComponent.kt │ │ │ ├── DataModule.kt │ │ │ ├── GlideModule.kt │ │ │ ├── PlaybackComponent.kt │ │ │ ├── Scopes.kt │ │ │ ├── ServiceComponent.kt │ │ │ ├── ServiceModule.kt │ │ │ └── ViewComponent.kt │ │ │ ├── service │ │ │ ├── gapless │ │ │ │ ├── GaplessHeaderService.kt │ │ │ │ └── db │ │ │ │ │ ├── GaplessDao.java │ │ │ │ │ ├── GaplessDb.kt │ │ │ │ │ └── GaplessTrack.kt │ │ │ ├── playback │ │ │ │ ├── IPlaybackService.kt │ │ │ │ ├── Playback.kt │ │ │ │ ├── PlaybackServiceFactory.kt │ │ │ │ ├── PlaybackState.kt │ │ │ │ ├── PlayerWrapper.kt │ │ │ │ ├── QueryContext.kt │ │ │ │ ├── RepeatMode.kt │ │ │ │ └── impl │ │ │ │ │ ├── player │ │ │ │ │ └── GaplessExoPlayerWrapper.kt │ │ │ │ │ ├── remote │ │ │ │ │ ├── Metadata.kt │ │ │ │ │ └── RemotePlaybackService.kt │ │ │ │ │ └── streaming │ │ │ │ │ ├── StreamProxy.kt │ │ │ │ │ ├── StreamingPlaybackService.kt │ │ │ │ │ └── db │ │ │ │ │ ├── OfflineDb.kt │ │ │ │ │ ├── OfflineTrack.kt │ │ │ │ │ └── OfflineTrackDao.java │ │ │ ├── system │ │ │ │ ├── MediaButtonReceiver.kt │ │ │ │ └── SystemService.kt │ │ │ └── websocket │ │ │ │ ├── Messages.kt │ │ │ │ ├── SocketMessage.kt │ │ │ │ ├── WebSocketService.kt │ │ │ │ └── model │ │ │ │ ├── IAlbum.kt │ │ │ │ ├── IAlbumArtist.kt │ │ │ │ ├── IArtist.kt │ │ │ │ ├── ICategoryValue.kt │ │ │ │ ├── IDevice.kt │ │ │ │ ├── IEnvironment.kt │ │ │ │ ├── IEqualizerSettings.kt │ │ │ │ ├── IGainSettings.kt │ │ │ │ ├── IGenre.kt │ │ │ │ ├── IMetadataProxy.kt │ │ │ │ ├── IOutput.kt │ │ │ │ ├── IOutputs.kt │ │ │ │ ├── IPlaylist.kt │ │ │ │ ├── ITrack.kt │ │ │ │ ├── ITrackListQueryFactory.kt │ │ │ │ ├── PlayQueueType.kt │ │ │ │ ├── ReplayGainMode.kt │ │ │ │ ├── TransportType.kt │ │ │ │ └── impl │ │ │ │ └── remote │ │ │ │ ├── IdListTrackListQueryFactory.kt │ │ │ │ ├── RemoteAlbum.kt │ │ │ │ ├── RemoteAlbumArtist.kt │ │ │ │ ├── RemoteCategoryValue.kt │ │ │ │ ├── RemoteDevice.kt │ │ │ │ ├── RemoteEnvironment.kt │ │ │ │ ├── RemoteEqualizerSettings.kt │ │ │ │ ├── RemoteGainSettings.kt │ │ │ │ ├── RemoteMetadataProxy.kt │ │ │ │ ├── RemoteOutput.kt │ │ │ │ ├── RemoteOutputs.kt │ │ │ │ ├── RemotePlaylist.kt │ │ │ │ └── RemoteTrack.kt │ │ │ ├── ui │ │ │ ├── albums │ │ │ │ ├── activity │ │ │ │ │ └── AlbumBrowseActivity.kt │ │ │ │ ├── adapter │ │ │ │ │ └── AlbumBrowseAdapter.kt │ │ │ │ ├── constant │ │ │ │ │ └── Album.kt │ │ │ │ └── fragment │ │ │ │ │ └── AlbumBrowseFragment.kt │ │ │ ├── browse │ │ │ │ ├── activity │ │ │ │ │ └── BrowseActivity.kt │ │ │ │ ├── adapter │ │ │ │ │ └── BrowseFragmentAdapter.kt │ │ │ │ ├── constant │ │ │ │ │ └── Browse.kt │ │ │ │ └── fragment │ │ │ │ │ └── BrowseFragment.kt │ │ │ ├── category │ │ │ │ ├── activity │ │ │ │ │ ├── AllCategoriesActivity.kt │ │ │ │ │ └── CategoryBrowseActivity.kt │ │ │ │ ├── adapter │ │ │ │ │ ├── AllCategoriesAdapter.kt │ │ │ │ │ └── CategoryBrowseAdapter.kt │ │ │ │ ├── constant │ │ │ │ │ ├── Category.kt │ │ │ │ │ └── NavigationType.kt │ │ │ │ └── fragment │ │ │ │ │ ├── AllCategoriesFragment.kt │ │ │ │ │ └── CategoryBrowseFragment.kt │ │ │ ├── download │ │ │ │ └── activity │ │ │ │ │ └── TrackDownloadActivity.kt │ │ │ ├── home │ │ │ │ ├── activity │ │ │ │ │ └── MainActivity.kt │ │ │ │ ├── fragment │ │ │ │ │ └── InvalidPasswordDialogFragment.kt │ │ │ │ └── view │ │ │ │ │ └── MainMetadataView.kt │ │ │ ├── navigation │ │ │ │ ├── Navigate.kt │ │ │ │ └── Transition.kt │ │ │ ├── playqueue │ │ │ │ ├── activity │ │ │ │ │ └── PlayQueueActivity.kt │ │ │ │ ├── adapter │ │ │ │ │ └── PlayQueueAdapter.kt │ │ │ │ ├── constant │ │ │ │ │ └── PlayQueue.kt │ │ │ │ └── fragment │ │ │ │ │ └── PlayQueueFragment.kt │ │ │ ├── settings │ │ │ │ ├── activity │ │ │ │ │ ├── ConnectionsActivity.kt │ │ │ │ │ ├── DiagnosticsActivity.kt │ │ │ │ │ ├── RemoteEqActivity.kt │ │ │ │ │ ├── RemoteSettingsActivity.kt │ │ │ │ │ └── SettingsActivity.kt │ │ │ │ ├── constants │ │ │ │ │ └── Prefs.kt │ │ │ │ ├── model │ │ │ │ │ ├── Connection.kt │ │ │ │ │ ├── ConnectionsDao.java │ │ │ │ │ └── ConnectionsDb.kt │ │ │ │ └── viewmodel │ │ │ │ │ ├── BaseRemoteViewModel.kt │ │ │ │ │ ├── RemoteEqViewModel.kt │ │ │ │ │ └── RemoteSettingsViewModel.kt │ │ │ ├── shared │ │ │ │ ├── activity │ │ │ │ │ ├── BaseActivity.kt │ │ │ │ │ ├── FragmentActivityWithTransport.kt │ │ │ │ │ ├── IBackHandler.kt │ │ │ │ │ ├── IFabConsumer.kt │ │ │ │ │ ├── IFilterable.kt │ │ │ │ │ ├── IMenuProvider.kt │ │ │ │ │ ├── ITitleProvider.kt │ │ │ │ │ └── ITransportObserver.kt │ │ │ │ ├── constant │ │ │ │ │ └── Shared.kt │ │ │ │ ├── extension │ │ │ │ │ ├── Compat.kt │ │ │ │ │ └── Extensions.kt │ │ │ │ ├── fragment │ │ │ │ │ ├── BaseDialogFragment.kt │ │ │ │ │ ├── BaseFragment.kt │ │ │ │ │ └── TransportFragment.kt │ │ │ │ ├── mixin │ │ │ │ │ ├── ItemContextMenuMixin.kt │ │ │ │ │ ├── MetadataProxyMixin.kt │ │ │ │ │ ├── PlaybackMixin.kt │ │ │ │ │ ├── RunnerMixin.kt │ │ │ │ │ └── ViewModelMixin.kt │ │ │ │ ├── model │ │ │ │ │ ├── BaseSlidingWindow.kt │ │ │ │ │ ├── DefaultSlidingWindow.kt │ │ │ │ │ └── ITrackListSlidingWindow.kt │ │ │ │ ├── util │ │ │ │ │ ├── AlbumArtLookup.kt │ │ │ │ │ ├── Duration.kt │ │ │ │ │ ├── NetworkUtil.kt │ │ │ │ │ └── UpdateCheck.kt │ │ │ │ └── view │ │ │ │ │ ├── EmptyListView.kt │ │ │ │ │ └── TouchInterceptFrameLayout.kt │ │ │ └── tracks │ │ │ │ ├── activity │ │ │ │ ├── EditPlaylistActivity.kt │ │ │ │ └── TrackListActivity.kt │ │ │ │ ├── adapter │ │ │ │ ├── EditPlaylistAdapter.kt │ │ │ │ └── TrackListAdapter.kt │ │ │ │ ├── constant │ │ │ │ └── Track.kt │ │ │ │ ├── fragment │ │ │ │ └── TrackListFragment.kt │ │ │ │ └── model │ │ │ │ └── EditPlaylistViewModel.kt │ │ │ └── util │ │ │ ├── Debouncer.kt │ │ │ └── Preconditions.kt │ │ └── res │ │ ├── anim │ │ ├── slide_down.xml │ │ ├── slide_left.xml │ │ ├── slide_left_bg.xml │ │ ├── slide_right.xml │ │ ├── slide_right_bg.xml │ │ ├── slide_up.xml │ │ ├── stay_put_250.xml │ │ └── stay_put_350.xml │ │ ├── drawable-v21 │ │ ├── category_button.xml │ │ ├── ic_art_placeholder.xml │ │ ├── ic_back.xml │ │ ├── ic_fab_add.xml │ │ ├── ic_leftarrow.xml │ │ ├── ic_menu.xml │ │ ├── ic_overflow.xml │ │ ├── ic_reorder.xml │ │ ├── ic_trashcan.xml │ │ ├── not_playing_button.xml │ │ ├── opaque_row_background.xml │ │ ├── overflow_button.xml │ │ ├── playback_button.xml │ │ ├── playback_checkbox.xml │ │ └── playback_checkbox_text.xml │ │ ├── drawable-xxhdpi │ │ └── ic_notification.png │ │ ├── drawable-xxxhdpi │ │ ├── ic_launcher_background.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_toolbar_remote.png │ │ └── ic_toolbar_streaming.png │ │ ├── layout │ │ ├── browse_activity.xml │ │ ├── browse_fragment.xml │ │ ├── connection_row.xml │ │ ├── connections_activity.xml │ │ ├── diagnostics_activity.xml │ │ ├── dialog_checkbox.xml │ │ ├── dialog_edit.xml │ │ ├── disconnected_view.xml │ │ ├── edit_playlist_activity.xml │ │ ├── edit_playlist_track_row.xml │ │ ├── empty_list_view.xml │ │ ├── eq_band_row.xml │ │ ├── fragment_with_transport_activity.xml │ │ ├── main_activity.xml │ │ ├── main_metadata.xml │ │ ├── playlist_track_row.xml │ │ ├── recycler_view_activity.xml │ │ ├── recycler_view_with_empty_state.xml │ │ ├── recycler_view_with_empty_state_and_toolbar_and_fab.xml │ │ ├── remote_eq_activity.xml │ │ ├── remote_settings_activity.xml │ │ ├── remote_toggle.xml │ │ ├── settings_activity.xml │ │ ├── simple_list_item.xml │ │ ├── toolbar.xml │ │ ├── track_download_activity.xml │ │ └── transport_fragment.xml │ │ ├── menu │ │ ├── album_item_context_menu.xml │ │ ├── artist_item_context_menu.xml │ │ ├── edit_playlist_menu.xml │ │ ├── genre_item_context_menu.xml │ │ ├── left_menu.xml │ │ ├── main_menu.xml │ │ ├── playlist_item_context_menu.xml │ │ ├── remote_settings_menu.xml │ │ ├── search_menu.xml │ │ ├── settings_menu.xml │ │ ├── track_item_context_menu.xml │ │ ├── transfer_from_server_menu.xml │ │ ├── transfer_to_server_menu.xml │ │ └── view_playlist_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher_square.png │ │ ├── transition │ │ ├── transition_enter.xml │ │ └── transition_exit.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── disk_cache.xml │ │ ├── replaygain_mode.xml │ │ ├── streaming_mode.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── title_ellipsis_mode.xml │ │ ├── transcode_bitrates.xml │ │ ├── transcode_format.xml │ │ └── transport_type_array.xml │ │ └── xml │ │ └── searchable.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── musikwin ├── Main.cpp ├── app │ ├── controller │ │ ├── MainController.cpp │ │ └── MainController.h │ └── view │ │ ├── MainWindow.cpp │ │ └── MainWindow.h ├── musikwin.vcxproj ├── musikwin.vcxproj.filters ├── pch.cpp ├── pch.h └── win32cpp │ ├── Application.cpp │ ├── Application.hpp │ ├── ApplicationThread.cpp │ ├── ApplicationThread.hpp │ ├── Button.cpp │ ├── Button.hpp │ ├── CheckBox.cpp │ ├── CheckBox.hpp │ ├── Color.cpp │ ├── Color.hpp │ ├── ComboBox.cpp │ ├── ComboBox.hpp │ ├── Config.cpp │ ├── Config.hpp │ ├── Container.cpp │ ├── Container.hpp │ ├── DateTime.cpp │ ├── DateTime.hpp │ ├── DeviceContext.cpp │ ├── DeviceContext.hpp │ ├── EditView.cpp │ ├── EditView.hpp │ ├── Exception.cpp │ ├── Exception.hpp │ ├── FolderBrowseDialog.cpp │ ├── FolderBrowseDialog.hpp │ ├── Font.cpp │ ├── Font.hpp │ ├── Frame.cpp │ ├── Frame.hpp │ ├── GroupBox.cpp │ ├── GroupBox.hpp │ ├── ILayout.hpp │ ├── Image.cpp │ ├── Image.hpp │ ├── ImageList.cpp │ ├── ImageList.hpp │ ├── Label.cpp │ ├── Label.hpp │ ├── LinearLayout.cpp │ ├── LinearLayout.hpp │ ├── ListView.cpp │ ├── ListView.hpp │ ├── Locale.cpp │ ├── Locale.hpp │ ├── MemoryDC.cpp │ ├── MemoryDC.hpp │ ├── Menu.cpp │ ├── Menu.hpp │ ├── Panel.cpp │ ├── Panel.hpp │ ├── ProgressBar.cpp │ ├── ProgressBar.hpp │ ├── RadioButton.cpp │ ├── RadioButton.hpp │ ├── RedrawLock.cpp │ ├── RedrawLock.hpp │ ├── Splitter.cpp │ ├── Splitter.hpp │ ├── TabView.cpp │ ├── TabView.hpp │ ├── Theme.cpp │ ├── Theme.hpp │ ├── Timer.cpp │ ├── Timer.hpp │ ├── TopLevelWindow.cpp │ ├── TopLevelWindow.hpp │ ├── Trackbar.cpp │ ├── Trackbar.hpp │ ├── TrayIconManager.cpp │ ├── TrayIconManager.hpp │ ├── Types.hpp │ ├── Utility.cpp │ ├── Utility.hpp │ ├── VirtualWindow.cpp │ ├── VirtualWindow.hpp │ ├── Win32Config.hpp │ ├── Win32Exception.hpp │ ├── Window.cpp │ ├── Window.hpp │ ├── WindowGeometry.cpp │ ├── WindowGeometry.hpp │ ├── WindowPadding.hpp │ ├── pch.cpp │ ├── pch.hpp │ ├── win32cpp.hpp │ ├── win32cpp.sln │ └── win32cpp.vcproj └── plugins ├── alsaout ├── AlsaOut.cpp ├── AlsaOut.h ├── CMakeLists.txt ├── alsaout_plugin.cpp └── pch.h ├── cddadecoder ├── CddaDataModel.cpp ├── CddaDataModel.h ├── CddaDataStream.cpp ├── CddaDataStream.h ├── CddaDataStreamFactory.cpp ├── CddaDataStreamFactory.h ├── CddaDecoder.cpp ├── CddaDecoder.h ├── CddaDecoderFactory.cpp ├── CddaDecoderFactory.h ├── CddaIndexerSource.cpp ├── CddaIndexerSource.h ├── cddadecoder.vcproj ├── cddadecoder.vcxproj ├── cddadecoder.vcxproj.filters ├── cddadecoder_plugin.cpp ├── config.h ├── devioctl.h ├── ntddcdrm.h └── ntddstor.h ├── coreaudioout ├── CMakeLists.txt ├── CoreAudioOut.cpp ├── CoreAudioOut.h └── coreaudioout_plugin.cpp ├── directsoundout ├── DirectSoundOut.cpp ├── DirectSoundOut.h ├── directsoundout.vcxproj ├── directsoundout.vcxproj.filters └── directsoundout_plugin.cpp ├── ffmpegdecoder ├── CMakeLists.txt ├── FfmpegDecoder.cpp ├── FfmpegDecoder.h ├── ffmpegdecoder.filters ├── ffmpegdecoder.vcxproj └── plugin.cpp ├── gmedecoder ├── CMakeLists.txt ├── Constants.h ├── GmeDataStream.cpp ├── GmeDataStream.h ├── GmeDecoder.cpp ├── GmeDecoder.h ├── GmeIndexerSource.cpp ├── GmeIndexerSource.h ├── gmedecoder.vcxproj ├── gmedecoder.vcxproj.filters └── plugin.cpp ├── httpdatastream ├── CMakeLists.txt ├── HttpDataStream.cpp ├── HttpDataStream.h ├── HttpDataStreamFactory.cpp ├── HttpDataStreamFactory.h ├── LruDiskCache.cpp ├── LruDiskCache.h ├── RingBuffer.h ├── config.h ├── httpdatastream.vcproj ├── httpdatastream.vcxproj ├── httpdatastream.vcxproj.filters └── httpdatastream_plugin.cpp ├── libopenmptdecoder ├── CMakeLists.txt ├── OpenMptDataStream.cpp ├── OpenMptDataStream.h ├── OpenMptDecoder.cpp ├── OpenMptDecoder.h ├── OpenMptIndexerSource.cpp ├── OpenMptIndexerSource.h ├── Utility.cpp ├── Utility.h ├── libopenmptdecoder.filters ├── libopenmptdecoder.vcxproj └── plugin.cpp ├── macosmediakeys ├── CMakeLists.txt ├── NSObject+SPInvocationGrabbing.h ├── NSObject+SPInvocationGrabbing.m ├── SPMediaKeyTap.h ├── SPMediaKeyTap.m └── plugin.mm ├── mpris ├── CMakeLists.txt ├── README.md ├── dbus.cpp ├── dbus.h ├── mpris.cpp └── mpris.h ├── nullout ├── CMakeLists.txt ├── NullOut.cpp ├── NullOut.h ├── config.h ├── nullout.vcxproj ├── nullout.vcxproj.filters └── nullout_plugin.cpp ├── pipewireout ├── CMakeLists.txt ├── PipeWireOut.cpp ├── PipeWireOut.h └── pipewireout_plugin.cpp ├── portaudioout ├── CMakeLists.txt ├── PortAudioOut.cpp ├── PortAudioOut.h ├── config.h └── portaudioout_plugin.cpp ├── pulseout ├── CMakeLists.txt ├── PulseOut.cpp ├── PulseOut.h ├── pch.h ├── pulse_blocking_stream.c ├── pulse_blocking_stream.h └── pulseout_plugin.cpp ├── server ├── .gitignore ├── BlockingTranscoder.cpp ├── BlockingTranscoder.h ├── CMakeLists.txt ├── Constants.h ├── Context.h ├── HttpServer.cpp ├── HttpServer.h ├── README.md ├── Snapshots.cpp ├── Snapshots.h ├── Transcoder.cpp ├── Transcoder.h ├── TranscodingAudioDataStream.cpp ├── TranscodingAudioDataStream.h ├── Util.cpp ├── Util.h ├── WebSocketServer.cpp ├── WebSocketServer.h ├── main.cpp ├── server.vcxproj ├── server.vcxproj.filters └── websocket_remote.sln ├── sndioout ├── CMakeLists.txt ├── SndioOut.cpp ├── SndioOut.h └── plugin.cpp ├── stockencoders ├── .gitignore ├── CMakeLists.txt ├── FfmpegEncoder.cpp ├── FfmpegEncoder.h ├── LameEncoder.cpp ├── LameEncoder.h ├── main.cpp ├── shared.h ├── stockencoders.vcxproj └── stockencoders.vcxproj.filters ├── supereqdsp ├── CMakeLists.txt ├── SuperEqDsp.cpp ├── SuperEqDsp.h ├── constants.h ├── supereq │ ├── COPYING │ ├── Equ.cpp │ ├── Equ.h │ ├── Fftsg_fl.c │ ├── dsp_superequ.txt │ └── paramlist.hpp ├── supereqdsp.filters ├── supereqdsp.vcxproj ├── supereqdsp.vcxproj.filters └── supereqdsp_plugin.cpp ├── taglib_plugin ├── CMakeLists.txt ├── TaglibMetadataReader.cpp ├── TaglibMetadataReader.h ├── config.h ├── taglib_plugin.cpp ├── taglib_plugin.vcproj ├── taglib_plugin.vcxproj └── taglib_plugin.vcxproj.filters ├── wasapiout ├── WasapiOut.cpp ├── WasapiOut.h ├── wasapiout.vcproj ├── wasapiout.vcxproj ├── wasapiout.vcxproj.filters └── wasapiout_plugin.cpp ├── waveout ├── WaveOut.cpp ├── WaveOut.h ├── WaveOutBuffer.cpp ├── WaveOutBuffer.h ├── config.h ├── waveout.vcproj ├── waveout.vcxproj ├── waveout.vcxproj.filters └── waveout_plugin.cpp ├── win32gdivis ├── GdiVis-musikcube.vcxproj ├── GdiVis-musikcube.vcxproj.filters ├── GdiVis.cpp ├── MemoryDC.cpp └── MemoryDC.h └── win32globalhotkeys ├── config.h ├── win32globalhotkeys.filters ├── win32globalhotkeys.vcproj ├── win32globalhotkeys.vcxproj └── win32globalhotkeys_plugin.cpp /.cmake/AddDarwinSystemLibs.cmake: -------------------------------------------------------------------------------- 1 | if (APPLE) 2 | find_library(CORE_FOUNDATION_LIBRARY CoreFoundation) 3 | find_library(SYSTEM_CONFIGURATION_LIBRARY SystemConfiguration) 4 | list( 5 | APPEND 6 | DEFAULT_OS_SYSTEM_LIBS 7 | ${CORE_FOUNDATION_LIBRARY} 8 | ${SYSTEM_CONFIGURATION_LIBRARY}) 9 | endif() -------------------------------------------------------------------------------- /.cmake/AddLinuxSystemLibs.cmake: -------------------------------------------------------------------------------- 1 | if (CMAKE_SYSTEM_NAME MATCHES "Linux") 2 | find_library(LIBDL NAMES dl) 3 | list(APPEND DEFAULT_OS_SYSTEM_LIBS ${LIBDL}) 4 | endif() 5 | 6 | -------------------------------------------------------------------------------- /.cmake/AddPlugin.cmake: -------------------------------------------------------------------------------- 1 | macro(add_plugin plugin_dir plugin_name) 2 | add_subdirectory(${plugin_dir}) 3 | get_property(PLUGIN_DISABLED GLOBAL PROPERTY "DISABLE_${plugin_name}") 4 | if (NOT PLUGIN_DISABLED STREQUAL "true") 5 | message(STATUS "[add-plugin] ${BoldGreen}added ${plugin_name}${ColorReset}") 6 | add_dependencies(musikcube ${plugin_name}) 7 | add_dependencies(musikcubed ${plugin_name}) 8 | add_dependencies(core_c_demo ${plugin_name}) 9 | else() 10 | message(STATUS "[add-plugin] ${BoldRed}skipped ${plugin_name}${ColorReset}") 11 | endif() 12 | endmacro(add_plugin) 13 | 14 | macro(disable_plugin plugin_name) 15 | set(PROPERTY_NAME "DISABLE_${plugin_name}") 16 | set_property(GLOBAL PROPERTY ${PROPERTY_NAME} "true") 17 | get_property(PLUGIN_DISABLED GLOBAL PROPERTY "DISABLE_${plugin_name}") 18 | endmacro(disable_plugin) 19 | -------------------------------------------------------------------------------- /.cmake/Colors.cmake: -------------------------------------------------------------------------------- 1 | # https://stackoverflow.com/a/19578320 2 | if (NOT WIN32) 3 | string(ASCII 27 Esc) 4 | set(ColorReset "${Esc}[m") 5 | set(ColorBold "${Esc}[1m") 6 | set(Red "${Esc}[31m") 7 | set(Green "${Esc}[32m") 8 | set(Yellow "${Esc}[33m") 9 | set(Blue "${Esc}[34m") 10 | set(Magenta "${Esc}[35m") 11 | set(Cyan "${Esc}[36m") 12 | set(White "${Esc}[37m") 13 | set(BoldRed "${Esc}[1;31m") 14 | set(BoldGreen "${Esc}[1;32m") 15 | set(BoldYellow "${Esc}[1;33m") 16 | set(BoldBlue "${Esc}[1;34m") 17 | set(BoldMagenta "${Esc}[1;35m") 18 | set(BoldCyan "${Esc}[1;36m") 19 | set(BoldWhite "${Esc}[1;37m") 20 | endif() 21 | -------------------------------------------------------------------------------- /.cmake/ConfigureBsdPaths.cmake: -------------------------------------------------------------------------------- 1 | if (CMAKE_SYSTEM_NAME MATCHES "Darwin" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "OpenBSD") 2 | set(BSD_PATH_PREFIX "/usr/local") 3 | if (CMAKE_SYSTEM_NAME MATCHES "Darwin") 4 | execute_process( 5 | COMMAND brew config 6 | COMMAND grep -i HOMEBREW_PREFIX 7 | COMMAND awk "{print $2}" 8 | OUTPUT_STRIP_TRAILING_WHITESPACE 9 | OUTPUT_VARIABLE BSD_PATH_PREFIX) 10 | else() 11 | include_directories("${BSD_PATH_PREFIX}/include") 12 | link_directories("${BSD_PATH_PREFIX}/lib") 13 | endif() 14 | 15 | message(STATUS "[configure-bsd-paths] resolved BSD_PATH_PREFIX to: '${BSD_PATH_PREFIX}'") 16 | 17 | if (CMAKE_SYSTEM_NAME MATCHES "Darwin" AND NOT(${BUILD_STANDALONE} MATCHES "true")) 18 | message(STATUS "[configure-bsd-paths] standalone *not* detected, adding Homebrew ${BSD_PATH_PREFIX} to include/lib dirs") 19 | include_directories("${BSD_PATH_PREFIX}/include") 20 | link_directories("${BSD_PATH_PREFIX}/lib") 21 | endif() 22 | 23 | list( 24 | APPEND 25 | VENDOR_INCLUDE_DIRECTORIES 26 | "${BSD_PATH_PREFIX}/include" 27 | "${BSD_PATH_PREFIX}/opt/openssl/include" 28 | "${BSD_PATH_PREFIX}/opt/ncurses/include") 29 | 30 | list( 31 | APPEND 32 | VENDOR_LINK_DIRECTORIES 33 | "${BSD_PATH_PREFIX}/lib" 34 | "${BSD_PATH_PREFIX}/opt/openssl/lib" 35 | "${BSD_PATH_PREFIX}/opt/ncurses/lib") 36 | endif() 37 | -------------------------------------------------------------------------------- /.cmake/ConfigureCompilerFlags.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wno-unused-result -Wno-deprecated-declarations") 2 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++17 -DDEBUG -g -frtti -fexceptions -fsanitize=address,undefined") 3 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG") 4 | 5 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++17 -O2 -frtti -fexceptions -Wno-psabi") 6 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2 -Wno-psabi") 7 | -------------------------------------------------------------------------------- /.cmake/ConfigureCurses.cmake: -------------------------------------------------------------------------------- 1 | if( 2 | NO_NCURSESW OR 3 | EXISTS "/etc/arch-release" OR 4 | EXISTS "/etc/manjaro-release" OR 5 | CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR 6 | CMAKE_SYSTEM_NAME MATCHES "OpenBSD" OR 7 | CMAKE_SYSTEM_NAME MATCHES "DragonFly" OR 8 | CMAKE_SYSTEM_NAME MATCHES "Haiku" 9 | ) 10 | add_definitions (-DNO_NCURSESW) 11 | endif() -------------------------------------------------------------------------------- /.cmake/ConfigureRpath.cmake: -------------------------------------------------------------------------------- 1 | # ensure the binaries can find libmusikcore.so, which lives in the same directory. 2 | if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin") 3 | # in Linux/BSD distributions we can specify the magic "$ORIGIN" value for 4 | # the rpath for the dymamic linker to search the executable's directory 5 | set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib/") 6 | set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) 7 | # note: macOS does not use $ORIGIN, and uses @executable_path/ instead. we 8 | # add a custom post build step at the bottom of this file to add this value 9 | # to macOS binaries. 10 | endif() 11 | -------------------------------------------------------------------------------- /.cmake/ConfigureStandalone.cmake: -------------------------------------------------------------------------------- 1 | if (${BUILD_STANDALONE} MATCHES "true") 2 | message(STATUS "${BoldGreen}[standalone-build] ENABLED!${ColorReset}") 3 | 4 | list( 5 | APPEND 6 | VENDOR_INCLUDE_DIRECTORIES 7 | "${CMAKE_CURRENT_SOURCE_DIR}/vendor/bin/include") 8 | 9 | list( 10 | APPEND 11 | VENDOR_LINK_DIRECTORIES 12 | "${CMAKE_CURRENT_SOURCE_DIR}/vendor/bin/lib") 13 | 14 | else() 15 | message(STATUS "${BoldGreen}[standalone-build] *NOT* enabled!${ColorReset}") 16 | endif() 17 | -------------------------------------------------------------------------------- /.cmake/DependencyDetection.cmake: -------------------------------------------------------------------------------- 1 | macro(find_vendor_library target_var library_name) 2 | find_library(${target_var} NAMES ${library_name} PATHS ${VENDOR_LINK_DIRECTORIES} NO_DEFAULT_PATH NO_CACHE) 3 | message(STATUS "[dependency-detection] ${BoldBlue}'${library_name}' library resolved to '${${target_var}}'${ColorReset}") 4 | endmacro(find_vendor_library) 5 | 6 | macro(find_header header_name) 7 | set(TEMP "") 8 | find_path(TEMP ${header_name} HINTS ${PROJECT_INCLUDE_DIRECTORIES} REQUIRED NO_CACHE) 9 | if (${TEMP} MATCHES "TEMP-NOTFOUND") 10 | message(STATUS "[dependency-detection] ${BoldRed}'${header_name}' COULD NOT BE FOUND!${ColorReset}") 11 | else() 12 | message(STATUS "[dependency-detection] ${BoldBlue}'${header_name}' resolved to '${TEMP}'${ColorReset}") 13 | endif() 14 | unset(TEMP) 15 | endmacro(find_header) 16 | 17 | macro(find_library_and_header target_var library_name header_name) 18 | find_library(${target_var} NAMES ${library_name} NO_CACHE) 19 | message(STATUS "[dependency-detection] ${BoldBlue}'${library_name}' library resolved to '${${target_var}}'${ColorReset}") 20 | find_header(${header_name}) 21 | endmacro(find_library_and_header) 22 | -------------------------------------------------------------------------------- /.cmake/RaspberryPiToolchain-armv6.cmake: -------------------------------------------------------------------------------- 1 | include("/build/x-tools/armv6-rpi-linux-gnueabihf/armv6-rpi-linux-gnueabihf.toolchain.cmake") 2 | set(CROSS_COMPILE_SYSROOT /build/x-tools/armv6-rpi-linux-gnueabihf/armv6-rpi-linux-gnueabihf/sysroot) 3 | set(CROSS_COMPILE_PKG_CONFIG_PATH "${CROSS_COMPILE_SYSROOT}/usr/lib/arm-linux-gnueabi/pkgconfig") 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++") 5 | -------------------------------------------------------------------------------- /.cmake/RaspberryPiToolchain-armv8.cmake: -------------------------------------------------------------------------------- 1 | include("/build/x-tools/armv8-rpi3-linux-gnueabihf/armv8-rpi3-linux-gnueabihf.toolchain.cmake") 2 | set(CROSS_COMPILE_SYSROOT /build/x-tools/armv8-rpi3-linux-gnueabihf/armv8-rpi3-linux-gnueabihf/sysroot) 3 | set(CROSS_COMPILE_PKG_CONFIG_PATH "${CROSS_COMPILE_SYSROOT}/usr/lib/arm-linux-gnueabi/pkgconfig") 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++") 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/*.vcxproj.user 2 | **/*.VC.db 3 | **/*.VC.opendb 4 | **/*.suo 5 | **/CMakeCache.txt 6 | **/CMakeFiles 7 | **/Makefile 8 | **/cmake_install.cmake 9 | **/install_manifest.txt 10 | **/Release 11 | **/Debug 12 | **/*.deb 13 | **/*.aps 14 | **/.DS_Store 15 | **/obj32 16 | **/obj64 17 | .vs 18 | .vscode 19 | dist 20 | bin 21 | bin32 22 | bin64 23 | compile_commands.json 24 | ipch 25 | build 26 | local-circle-ci.yml 27 | CPack* 28 | _CPack* 29 | *.snap 30 | prime 31 | musikcube.core 32 | src/3rdparty/bin 33 | src/3rdparty/obj 34 | src/contrib 35 | src/musikcore/obj 36 | src/plugins/oggdecoder/obj 37 | src/plugins/server/libmicrohttpd-prefix 38 | src/plugins/server/microhttpd 39 | src/plugins/waveout/obj 40 | src/plugins/taglib_plugin/obj 41 | src/plugins/taglib_plugin/taglib-1.11/stage/ 42 | src/musikbox/musikbox 43 | src/musikcube/musikcube 44 | src/musikcubed/musikcubed 45 | taglib-prefix 46 | vendor 47 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/3rdparty/bin"] 2 | path = src/3rdparty/bin 3 | url = https://github.com/clangen/musikcube-bin 4 | [submodule "src/3rdparty/asio"] 5 | path = src/3rdparty/asio 6 | url = https://github.com/chriskohlhoff/asio/ 7 | -------------------------------------------------------------------------------- /CONTRIBUTORS.txt: -------------------------------------------------------------------------------- 1 | the musikcube team is: 2 | 3 | * Casey Langen 4 | * Daniel Önnerby 5 | * Gunnar Roth 6 | * Rajiv Makhijani 7 | * Björn Olievier 8 | * Julian Cromarty 9 | * André Wösten 10 | -------------------------------------------------------------------------------- /script/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /script/archive-win.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VERSION=$1 4 | 5 | if [ -z "$VERSION" ]; then 6 | echo "usage: archive-win.sh " 7 | exit 8 | fi 9 | 10 | function archive { 11 | ARCH=$1 12 | FILENAME="musikcube_${VERSION}_win${ARCH}" 13 | echo "Processing $FILENAME..." 14 | SRC_DIR="bin$ARCH" 15 | DST_DIR="dist/$VERSION/$FILENAME" 16 | rm -rf "$DST_DIR" 17 | mkdir -p "$DST_DIR/plugins" 18 | mkdir -p "$DST_DIR/themes" 19 | mkdir -p "$DST_DIR/locales" 20 | mkdir -p "$DST_DIR/fonts" 21 | cp $SRC_DIR/release/musikcube.exe $DST_DIR 22 | cp $SRC_DIR/release/musikcube-cmd.exe $DST_DIR 23 | cp $SRC_DIR/release/*.dll $DST_DIR 24 | cp $SRC_DIR/release/plugins/*.dll $DST_DIR/plugins 25 | cp $SRC_DIR/release/themes/*.json $DST_DIR/themes 26 | cp $SRC_DIR/release/locales/*.json $DST_DIR/locales 27 | cp $SRC_DIR/release/fonts/*.ttf $DST_DIR/fonts 28 | cp -rfp $SRC_DIR/release/plugins/Milkdrop2 $DST_DIR/plugins 29 | rm $DST_DIR/musikcore.dll 2> /dev/null 30 | pushd $DST_DIR 31 | 7z a -tzip "$FILENAME.zip" ./* -mx=9 32 | mv "$FILENAME.zip" .. 33 | popd 34 | } 35 | 36 | archive "32" 37 | archive "64" 38 | -------------------------------------------------------------------------------- /script/clean-nix.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | make clean 2> /dev/null 3 | rm -rf bin 2> /dev/null 4 | rm -rf build 2> /dev/null 5 | find . -name CMakeCache.txt -delete 6 | find . -name CMakeFiles -type d -exec rm -rf "{}" \; 2> /dev/null 7 | rm -f Makefile 8 | rm -f *.cmake 9 | rm -rf _CPack_Packages 2> /dev/null 10 | rm CPack* 2> /dev/null 11 | rm install_manifest.txt 2> /dev/null 12 | -------------------------------------------------------------------------------- /script/clean-win.bat: -------------------------------------------------------------------------------- 1 | echo "*** REMOVING BUILD ARTIFACTS ***" 2 | rd /s /q bin32 3 | rd /s /q bin64 4 | 5 | echo "*** CLEANING ALL BUILD FILES ***" 6 | MSBuild.exe ../milkdrop2-musikcube/milkdrop2-musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Release /p:Platform=Win32 7 | MSBuild.exe ../milkdrop2-musikcube/milkdrop2-musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Debug /p:Platform=Win32 8 | MSBuild.exe musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Release /p:Platform=Win32 9 | MSBuild.exe musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Debug /p:Platform=Win32 10 | MSBuild.exe musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Release /p:Platform=x64 11 | MSBuild.exe musikcube.sln /m /t:Clean /nologo /verbosity:minimal /p:Configuration=Debug /p:Platform=x64 12 | -------------------------------------------------------------------------------- /script/patch-rpath.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | PLATFORM=$(uname) 4 | 5 | if [ "$PLATFORM" = 'Linux' ]; then 6 | echo "[patch-rpath] patching Linux .so files..." 7 | 8 | chmod -x ./bin/lib/* 9 | chmod -x ./bin/plugins/* 10 | chmod -x ./bin/*.so 11 | 12 | # update the RPATH so libraries in libs/ can discover each other, 13 | # and plugins can discover themselves, and libs/ (but not the 14 | # other way around) 15 | 16 | FILES="./bin/lib/*" 17 | for f in $FILES 18 | do 19 | patchelf --set-rpath "\$ORIGIN" "$f" 20 | done 21 | 22 | FILES="./bin/plugins/*.so" 23 | for f in $FILES 24 | do 25 | patchelf --set-rpath "\$ORIGIN:\$ORIGIN/../lib" "$f" 26 | done 27 | 28 | patchelf --set-rpath "\$ORIGIN:\$ORIGIN/lib" bin/musikcube 29 | patchelf --set-rpath "\$ORIGIN:\$ORIGIN/lib" bin/musikcubed 30 | fi 31 | 32 | if [ "$PLATFORM" = 'Darwin' ]; then 33 | echo "[patch-rpath] patching macOS binaries..." 34 | SOURCE_DIR=$1 35 | install_name_tool -add_rpath "@executable_path/" $SOURCE_DIR/bin/musikcube 36 | install_name_tool -add_rpath "@executable_path/lib" $SOURCE_DIR/bin/musikcube 37 | install_name_tool -add_rpath "@executable_path/" $SOURCE_DIR/bin/musikcubed 38 | install_name_tool -add_rpath "@executable_path/lib" $SOURCE_DIR/bin/musikcubed 39 | fi 40 | 41 | exit 0 42 | -------------------------------------------------------------------------------- /script/post-build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | CMAKE_CURRENT_SOURCE_DIR=$1 4 | CMAKE_SYSTEM_NAME=$2 5 | CMAKE_BUILD_TYPE=$3 6 | BUILD_STANDALONE=$4 7 | DISABLE_STRIP=$5 8 | 9 | echo "[post-build] started..." 10 | 11 | if [ "$CMAKE_BUILD_TYPE" = 'Release' ]; then 12 | echo "[post-build] BUILD_TYPE=${CMAKE_BUILD_TYPE}, stripping binaries" 13 | $CMAKE_CURRENT_SOURCE_DIR/script/strip-nix.sh $CMAKE_CURRENT_SOURCE_DIR 14 | else 15 | echo "[post-build] BUILD_TYPE=${CMAKE_BUILD_TYPE}, not stripping" 16 | fi 17 | 18 | echo "[post-build] patching library rpath entries..." 19 | $CMAKE_CURRENT_SOURCE_DIR/script/patch-rpath.sh $CMAKE_CURRENT_SOURCE_DIR 20 | 21 | echo "[post-build] staging static assets..." 22 | mkdir -p "$CMAKE_CURRENT_SOURCE_DIR/bin/themes" 23 | cp -rfp "$CMAKE_CURRENT_SOURCE_DIR/src/musikcube/data/themes/"*.json "$CMAKE_CURRENT_SOURCE_DIR/bin/themes" 24 | 25 | mkdir -p "$CMAKE_CURRENT_SOURCE_DIR/bin/locales" 26 | cp -rfp "$CMAKE_CURRENT_SOURCE_DIR/src/musikcube/data/locales/"*.json "$CMAKE_CURRENT_SOURCE_DIR/bin/locales" 27 | 28 | echo "[post-build] re-running 'cmake .' to re-index compiled artifacts" 29 | cmake . 30 | 31 | echo "[post-build] finished" 32 | -------------------------------------------------------------------------------- /script/strip-nix.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | DIR=$1 3 | if [ -z "$DIR" ]; then 4 | echo "[strip-nix] directory not specified, using current working directory" 5 | DIR=`pwd` 6 | fi 7 | echo "[strip-nix] using directory: ${DIR}/bin/" 8 | strip "$DIR/bin/*" 2> /dev/null 9 | strip "$DIR/bin/lib/*" 2> /dev/null 10 | strip "$DIR/bin/plugin/*" 2> /dev/null 11 | echo "[strip-nix] finished" 12 | -------------------------------------------------------------------------------- /script/windows-cmd.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Console 6 | $(TargetDir)\musikcube-cmd.exe 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/3rdparty/3rdparty.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 9.00 3 | # Visual Studio 2005 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3rdparty", "3rdparty.vcproj", "{B2165720-B4B2-4F4B-8888-8C390C3CB4DB}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Release|Win32 = Release|Win32 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {B2165720-B4B2-4F4B-8888-8C390C3CB4DB}.Debug|Win32.ActiveCfg = Debug|Win32 13 | {B2165720-B4B2-4F4B-8888-8C390C3CB4DB}.Debug|Win32.Build.0 = Debug|Win32 14 | {B2165720-B4B2-4F4B-8888-8C390C3CB4DB}.Release|Win32.ActiveCfg = Release|Win32 15 | {B2165720-B4B2-4F4B-8888-8C390C3CB4DB}.Release|Win32.Build.0 = Release|Win32 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /src/3rdparty/include/kiss_fftr.h: -------------------------------------------------------------------------------- 1 | #ifndef KISS_FTR_H 2 | #define KISS_FTR_H 3 | 4 | #include "kiss_fft.h" 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | 10 | /* 11 | 12 | Real optimized version can save about 45% cpu time vs. complex fft of a real seq. 13 | 14 | 15 | 16 | */ 17 | 18 | typedef struct kiss_fftr_state *kiss_fftr_cfg; 19 | 20 | 21 | kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void * mem, size_t * lenmem); 22 | /* 23 | nfft must be even 24 | 25 | If you don't care to allocate space, use mem = lenmem = NULL 26 | */ 27 | 28 | 29 | void kiss_fftr(kiss_fftr_cfg cfg, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata); 30 | /* 31 | input timedata has nfft scalar points 32 | output freqdata has nfft/2+1 complex points 33 | */ 34 | 35 | void kiss_fftri(kiss_fftr_cfg cfg, const kiss_fft_cpx *freqdata, kiss_fft_scalar *timedata); 36 | /* 37 | input freqdata has nfft/2+1 complex points 38 | output timedata has nfft scalar points 39 | */ 40 | 41 | #define kiss_fftr_free free 42 | 43 | #ifdef __cplusplus 44 | } 45 | #endif 46 | #endif -------------------------------------------------------------------------------- /src/3rdparty/include/sqlean/unicode/extension.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 Anton Zhiyanov, MIT License 2 | // https://github.com/nalgeon/sqlean 3 | 4 | // Unicode support for SQLite. 5 | 6 | #ifndef UNICODE_EXTENSION_H 7 | #define UNICODE_EXTENSION_H 8 | 9 | #include 10 | 11 | extern int unicode_init(sqlite3* db); 12 | 13 | #endif /* UNICODE_EXTENSION_H */ 14 | -------------------------------------------------------------------------------- /src/3rdparty/include/websocketpp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | init_target("websocketpp") 2 | final_target () 3 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/libavcodec/ac3_parser.h: -------------------------------------------------------------------------------- 1 | /* 2 | * AC-3 parser prototypes 3 | * Copyright (c) 2003 Fabrice Bellard 4 | * Copyright (c) 2003 Michael Niedermayer 5 | * 6 | * This file is part of FFmpeg. 7 | * 8 | * FFmpeg is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * FFmpeg is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FFmpeg; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef AVCODEC_AC3_PARSER_H 24 | #define AVCODEC_AC3_PARSER_H 25 | 26 | #include 27 | #include 28 | 29 | /** 30 | * Extract the bitstream ID and the frame size from AC-3 data. 31 | */ 32 | int av_ac3_parse_header(const uint8_t *buf, size_t size, 33 | uint8_t *bitstream_id, uint16_t *frame_size); 34 | 35 | 36 | #endif /* AVCODEC_AC3_PARSER_H */ 37 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/libavutil/avconfig.h: -------------------------------------------------------------------------------- 1 | /* Generated by ffmpeg configure */ 2 | #ifndef AVUTIL_AVCONFIG_H 3 | #define AVUTIL_AVCONFIG_H 4 | #define AV_HAVE_BIGENDIAN 0 5 | #define AV_HAVE_FAST_UNALIGNED 0 6 | #endif /* AVUTIL_AVCONFIG_H */ 7 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/libavutil/ffversion.h: -------------------------------------------------------------------------------- 1 | /* Automatically generated by version.sh, do not manually edit! */ 2 | #ifndef AVUTIL_FFVERSION_H 3 | #define AVUTIL_FFVERSION_H 4 | #define FFMPEG_VERSION "7.0.1" 5 | #endif /* AVUTIL_FFVERSION_H */ 6 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/libswresample/version_major.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Version macros. 3 | * 4 | * This file is part of libswresample 5 | * 6 | * libswresample is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU Lesser General Public 8 | * License as published by the Free Software Foundation; either 9 | * version 2.1 of the License, or (at your option) any later version. 10 | * 11 | * libswresample is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * Lesser General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public 17 | * License along with libswresample; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | */ 20 | 21 | #ifndef SWRESAMPLE_VERSION_MAJOR_H 22 | #define SWRESAMPLE_VERSION_MAJOR_H 23 | 24 | /** 25 | * @file 26 | * Libswresample version macros 27 | */ 28 | 29 | #define LIBSWRESAMPLE_VERSION_MAJOR 5 30 | 31 | #endif /* SWRESAMPLE_VERSION_MAJOR_H */ 32 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/__DECC_INCLUDE_EPILOGUE.H: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * This file is only used by HP C/C++ on VMS, and is included automatically 12 | * after each header file from this directory 13 | */ 14 | 15 | /* 16 | * The C++ compiler doesn't understand these pragmas, even though it 17 | * understands the corresponding command line qualifier. 18 | */ 19 | #ifndef __cplusplus 20 | /* restore state. Must correspond to the save in __decc_include_prologue.h */ 21 | # pragma names restore 22 | #endif 23 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/__DECC_INCLUDE_PROLOGUE.H: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * This file is only used by HP C/C++ on VMS, and is included automatically 12 | * after each header file from this directory 13 | */ 14 | 15 | /* 16 | * The C++ compiler doesn't understand these pragmas, even though it 17 | * understands the corresponding command line qualifier. 18 | */ 19 | #ifndef __cplusplus 20 | /* save state */ 21 | # pragma names save 22 | /* have the compiler shorten symbols larger than 31 chars to 23 chars 23 | * followed by a 8 hex char CRC 24 | */ 25 | # pragma names as_is,shortened 26 | #endif 27 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/asn1_mac.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #error "This file is obsolete; please update your software." 11 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/asyncerr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_ASYNCERR_H 12 | # define OPENSSL_ASYNCERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | 21 | /* 22 | * ASYNC reason codes. 23 | */ 24 | # define ASYNC_R_FAILED_TO_SET_POOL 101 25 | # define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 26 | # define ASYNC_R_INIT_FAILED 105 27 | # define ASYNC_R_INVALID_POOL_SIZE 103 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/buffererr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_BUFFERERR_H 12 | # define OPENSSL_BUFFERERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | 21 | /* 22 | * BUF reason codes. 23 | */ 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/comperr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_COMPERR_H 12 | # define OPENSSL_COMPERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | # ifndef OPENSSL_NO_COMP 21 | 22 | 23 | /* 24 | * COMP reason codes. 25 | */ 26 | # define COMP_R_ZLIB_DEFLATE_ERROR 99 27 | # define COMP_R_ZLIB_INFLATE_ERROR 100 28 | # define COMP_R_ZLIB_NOT_SUPPORTED 101 29 | 30 | # endif 31 | #endif 32 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/conftypes.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_CONFTYPES_H 11 | # define OPENSSL_CONFTYPES_H 12 | # pragma once 13 | 14 | #ifndef OPENSSL_CONF_H 15 | # include 16 | #endif 17 | 18 | /* 19 | * The contents of this file are deprecated and will be made opaque 20 | */ 21 | struct conf_method_st { 22 | const char *name; 23 | CONF *(*create) (CONF_METHOD *meth); 24 | int (*init) (CONF *conf); 25 | int (*destroy) (CONF *conf); 26 | int (*destroy_data) (CONF *conf); 27 | int (*load_bio) (CONF *conf, BIO *bp, long *eline); 28 | int (*dump) (const CONF *conf, BIO *bp); 29 | int (*is_number) (const CONF *conf, char c); 30 | int (*to_int) (const CONF *conf, char c); 31 | int (*load) (CONF *conf, const char *name, long *eline); 32 | }; 33 | 34 | struct conf_st { 35 | CONF_METHOD *meth; 36 | void *meth_data; 37 | LHASH_OF(CONF_VALUE) *data; 38 | int flag_dollarid; 39 | int flag_abspath; 40 | char *includedir; 41 | OSSL_LIB_CTX *libctx; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/core_object.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_CORE_OBJECT_H 11 | # define OPENSSL_CORE_OBJECT_H 12 | # pragma once 13 | 14 | # ifdef __cplusplus 15 | extern "C" { 16 | # endif 17 | 18 | /*- 19 | * Known object types 20 | * 21 | * These numbers are used as values for the OSSL_PARAM parameter 22 | * OSSL_OBJECT_PARAM_TYPE. 23 | * 24 | * For most of these types, there's a corresponding libcrypto object type. 25 | * The corresponding type is indicated with a comment after the number. 26 | */ 27 | # define OSSL_OBJECT_UNKNOWN 0 28 | # define OSSL_OBJECT_NAME 1 /* char * */ 29 | # define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ 30 | # define OSSL_OBJECT_CERT 3 /* X509 * */ 31 | # define OSSL_OBJECT_CRL 4 /* X509_CRL * */ 32 | 33 | /* 34 | * The rest of the associated OSSL_PARAM elements is described in core_names.h 35 | */ 36 | 37 | # ifdef __cplusplus 38 | } 39 | # endif 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/decodererr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_DECODERERR_H 12 | # define OPENSSL_DECODERERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | 21 | /* 22 | * OSSL_DECODER reason codes. 23 | */ 24 | # define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 25 | # define OSSL_DECODER_R_DECODER_NOT_FOUND 102 26 | # define OSSL_DECODER_R_MISSING_GET_PARAMS 100 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/ebcdic.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_EBCDIC_H 11 | # define OPENSSL_EBCDIC_H 12 | # pragma once 13 | 14 | # include 15 | # ifndef OPENSSL_NO_DEPRECATED_3_0 16 | # define HEADER_EBCDIC_H 17 | # endif 18 | 19 | # include 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | /* Avoid name clashes with other applications */ 26 | # define os_toascii _openssl_os_toascii 27 | # define os_toebcdic _openssl_os_toebcdic 28 | # define ebcdic2ascii _openssl_ebcdic2ascii 29 | # define ascii2ebcdic _openssl_ascii2ebcdic 30 | 31 | extern const unsigned char os_toascii[256]; 32 | extern const unsigned char os_toebcdic[256]; 33 | void *ebcdic2ascii(void *dest, const void *srce, size_t count); 34 | void *ascii2ebcdic(void *dest, const void *srce, size_t count); 35 | 36 | #ifdef __cplusplus 37 | } 38 | #endif 39 | #endif 40 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/ecdh.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/ecdsa.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/encodererr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_ENCODERERR_H 12 | # define OPENSSL_ENCODERERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | 21 | /* 22 | * OSSL_ENCODER reason codes. 23 | */ 24 | # define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 25 | # define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 26 | # define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/esserr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_ESSERR_H 12 | # define OPENSSL_ESSERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | /* 20 | * ESS reason codes. 21 | */ 22 | # define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 23 | # define ESS_R_ESS_CERT_DIGEST_ERROR 103 24 | # define ESS_R_ESS_CERT_ID_NOT_FOUND 104 25 | # define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 26 | # define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 27 | # define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 28 | # define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 29 | # define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 30 | # define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/fipskey.h: -------------------------------------------------------------------------------- 1 | /* 2 | * WARNING: do not edit! 3 | * Generated by makefile from include\openssl\fipskey.h.in 4 | * 5 | * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 6 | * 7 | * Licensed under the Apache License 2.0 (the "License"). You may not use 8 | * this file except in compliance with the License. You can obtain a copy 9 | * in the file LICENSE in the source distribution or at 10 | * https://www.openssl.org/source/license.html 11 | */ 12 | 13 | #ifndef OPENSSL_FIPSKEY_H 14 | # define OPENSSL_FIPSKEY_H 15 | # pragma once 16 | 17 | # ifdef __cplusplus 18 | extern "C" { 19 | # endif 20 | 21 | /* 22 | * The FIPS validation HMAC key, usable as an array initializer. 23 | */ 24 | #define FIPS_KEY_ELEMENTS \ 25 | 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 26 | 27 | /* 28 | * The FIPS validation key, as a string. 29 | */ 30 | #define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" 31 | 32 | # ifdef __cplusplus 33 | } 34 | # endif 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/kdferr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_KDFERR_H 11 | # define OPENSSL_KDFERR_H 12 | # pragma once 13 | 14 | #include 15 | 16 | #endif /* !defined(OPENSSL_KDFERR_H) */ 17 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/objectserr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the Apache License 2.0 (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef OPENSSL_OBJECTSERR_H 12 | # define OPENSSL_OBJECTSERR_H 13 | # pragma once 14 | 15 | # include 16 | # include 17 | # include 18 | 19 | 20 | 21 | /* 22 | * OBJ reason codes. 23 | */ 24 | # define OBJ_R_OID_EXISTS 102 25 | # define OBJ_R_UNKNOWN_NID 101 26 | # define OBJ_R_UNKNOWN_OBJECT_NAME 103 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/opensslconf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_OPENSSLCONF_H 11 | # define OPENSSL_OPENSSLCONF_H 12 | # pragma once 13 | 14 | # include 15 | # include 16 | 17 | #endif /* OPENSSL_OPENSSLCONF_H */ 18 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/ossl_typ.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * The original was renamed to 12 | * 13 | * This header file only exists for compatibility reasons with older 14 | * applications which #include . 15 | */ 16 | # include 17 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/pem2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_PEM2_H 11 | # define OPENSSL_PEM2_H 12 | # pragma once 13 | 14 | # include 15 | # ifndef OPENSSL_NO_DEPRECATED_3_0 16 | # define HEADER_PEM2_H 17 | # endif 18 | # include 19 | #endif 20 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/prov_ssl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_PROV_SSL_H 11 | # define OPENSSL_PROV_SSL_H 12 | # pragma once 13 | 14 | # ifdef __cplusplus 15 | extern "C" { 16 | # endif 17 | 18 | /* SSL/TLS related defines useful to providers */ 19 | 20 | # define SSL_MAX_MASTER_KEY_LENGTH 48 21 | 22 | # define SSL3_VERSION 0x0300 23 | # define TLS1_VERSION 0x0301 24 | # define TLS1_1_VERSION 0x0302 25 | # define TLS1_2_VERSION 0x0303 26 | # define TLS1_3_VERSION 0x0304 27 | # define DTLS1_VERSION 0xFEFF 28 | # define DTLS1_2_VERSION 0xFEFD 29 | # define DTLS1_BAD_VER 0x0100 30 | 31 | # ifdef __cplusplus 32 | } 33 | # endif 34 | #endif /* OPENSSL_PROV_SSL_H */ 35 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/rc4.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_RC4_H 11 | # define OPENSSL_RC4_H 12 | # pragma once 13 | 14 | # include 15 | # ifndef OPENSSL_NO_DEPRECATED_3_0 16 | # define HEADER_RC4_H 17 | # endif 18 | 19 | # include 20 | 21 | # ifndef OPENSSL_NO_RC4 22 | # include 23 | # ifdef __cplusplus 24 | extern "C" { 25 | # endif 26 | 27 | # ifndef OPENSSL_NO_DEPRECATED_3_0 28 | typedef struct rc4_key_st { 29 | RC4_INT x, y; 30 | RC4_INT data[256]; 31 | } RC4_KEY; 32 | # endif 33 | # ifndef OPENSSL_NO_DEPRECATED_3_0 34 | OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); 35 | OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, 36 | const unsigned char *data); 37 | OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, 38 | const unsigned char *indata, 39 | unsigned char *outdata); 40 | # endif 41 | 42 | # ifdef __cplusplus 43 | } 44 | # endif 45 | # endif 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/openssl/ssl2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef OPENSSL_SSL2_H 11 | # define OPENSSL_SSL2_H 12 | # pragma once 13 | 14 | # include 15 | # ifndef OPENSSL_NO_DEPRECATED_3_0 16 | # define HEADER_SSL2_H 17 | # endif 18 | 19 | #ifdef __cplusplus 20 | extern "C" { 21 | #endif 22 | 23 | # define SSL2_VERSION 0x0002 24 | 25 | # define SSL2_MT_CLIENT_HELLO 1 26 | 27 | #ifdef __cplusplus 28 | } 29 | #endif 30 | #endif 31 | -------------------------------------------------------------------------------- /src/3rdparty/win32_include/taglib/id3v2.h: -------------------------------------------------------------------------------- 1 | #ifndef TAGLIB_ID3V2_H 2 | #define TAGLIB_ID3V2_H 3 | 4 | namespace TagLib { 5 | //! An ID3v2 implementation 6 | 7 | /*! 8 | * This is a relatively complete and flexible framework for working with ID3v2 9 | * tags. 10 | * 11 | * \see ID3v2::Tag 12 | */ 13 | namespace ID3v2 { 14 | /*! 15 | * Used to specify which version of the ID3 standard to use when saving tags. 16 | */ 17 | enum Version { 18 | v3 = 3, // 4 | 5 | /* Deprecated functions. These should not be used, and will eventually 6 | be removed. They're here solely for the benefit of applications that 7 | linked to them in older versions of PDCurses. */ 8 | 9 | bool PDC_check_bios_key(void) 10 | { 11 | return PDC_check_key(); 12 | } 13 | 14 | int PDC_get_bios_key(void) 15 | { 16 | return PDC_get_key(); 17 | } 18 | 19 | bool PDC_get_ctrl_break(void) 20 | { 21 | return !SP->raw_inp; 22 | } 23 | 24 | int PDC_set_ctrl_break(bool setting) 25 | { 26 | return setting ? noraw() : raw(); 27 | } 28 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/iconbmp.h: -------------------------------------------------------------------------------- 1 | /* The PDCurses logo as #include'able BMP (from icon32.xpm), 2 | for use by SDL. */ 3 | 4 | unsigned char iconbmp[] = 5 | { 6 | 0x42, 0x4d, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 7 | 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 8 | 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 10 | 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 12 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x6f, 0x9c, 13 | 0xe7, 0xb5, 0xaf, 0x6b, 0x5b, 0xbd, 0xaf, 0xeb, 0xfb, 0xbd, 0xaf, 14 | 0x98, 0xe7, 0xbd, 0xaf, 0x7b, 0x5f, 0xb5, 0xa5, 0x6b, 0x5b, 0xcd, 15 | 0xab, 0x9c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 16 | 0xff, 0xcf, 0x03, 0xff, 0xff, 0xce, 0x03, 0xff, 0xff, 0xcc, 0x73, 17 | 0xff, 0xff, 0xcc, 0xf3, 0xff, 0xff, 0xcc, 0xf3, 0xff, 0xff, 0xcc, 18 | 0x73, 0xff, 0xff, 0xc6, 0x33, 0xff, 0xff, 0xc3, 0x13, 0xff, 0xff, 19 | 0xc1, 0x83, 0xff, 0xff, 0xc8, 0xc3, 0xff, 0xff, 0xcc, 0x63, 0xff, 20 | 0xff, 0xce, 0x33, 0xff, 0xff, 0xcf, 0x33, 0xff, 0xff, 0xcf, 0x33, 21 | 0xff, 0xff, 0xce, 0x33, 0xff, 0xff, 0xc0, 0x73, 0xff, 0xff, 0xc0, 22 | 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 23 | 0xff, 0xff, 0xff 24 | }; 25 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/pdccolor.h: -------------------------------------------------------------------------------- 1 | #ifndef PDCCOLOR_H 2 | 3 | #define PDCCOLOR_H 4 | extern int PDC_blink_state; 5 | 6 | typedef uint32_t PACKED_RGB; 7 | 8 | #define Get_BValue( rgb) ((int)( (rgb) >> 16)) 9 | #define Get_GValue( rgb) ((int)( (rgb) >> 8) & 0xff) 10 | #define Get_RValue( rgb) ((int)((rgb) & 0xff)) 11 | 12 | int PDC_init_palette( void); 13 | void PDC_get_rgb_values( const chtype srcp, 14 | PACKED_RGB *foreground_rgb, PACKED_RGB *background_rgb); 15 | int PDC_set_palette_entry( const int idx, const PACKED_RGB rgb); 16 | PACKED_RGB PDC_get_palette_entry( const int idx); 17 | void PDC_free_palette( void); 18 | #endif 19 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/pdcwincon.c: -------------------------------------------------------------------------------- 1 | #if defined PDCURSES_WINCON 2 | #include "wincon/pdcclip.c" 3 | #include "wincon/pdcdisp.c" 4 | #include "wincon/pdcgetsc.c" 5 | #include "wincon/pdckbd.c" 6 | #include "wincon/pdcscrn.c" 7 | #include "wincon/pdcsetsc.c" 8 | #include "wincon/pdcutil.c" 9 | #endif -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/pdcwingui.c: -------------------------------------------------------------------------------- 1 | #if !defined PDCURSES_WINCON 2 | #include "wingui/pdcclip.c" 3 | #include "wingui/pdcdisp.c" 4 | #include "wingui/pdcgetsc.c" 5 | #include "wingui/pdckbd.c" 6 | #include "wingui/pdcscrn.c" 7 | #include "wingui/pdcsetsc.c" 8 | #include "wingui/pdcutil.c" 9 | #endif -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wincon/pdcclip.c: -------------------------------------------------------------------------------- 1 | /* PDCurses */ 2 | 3 | #include "pdcwin.h" 4 | #include 5 | 6 | #include "winclip.c" 7 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wincon/pdcgetsc.c: -------------------------------------------------------------------------------- 1 | /* PDCurses */ 2 | 3 | #include "pdcwin.h" 4 | 5 | /* get the cursor size/shape */ 6 | 7 | int PDC_get_cursor_mode(void) 8 | { 9 | CONSOLE_CURSOR_INFO ci; 10 | 11 | PDC_LOG(("PDC_get_cursor_mode() - called\n")); 12 | 13 | GetConsoleCursorInfo(pdc_con_out, &ci); 14 | 15 | return ci.dwSize; 16 | } 17 | 18 | /* return number of screen rows */ 19 | 20 | int PDC_get_rows(void) 21 | { 22 | CONSOLE_SCREEN_BUFFER_INFO scr; 23 | 24 | PDC_LOG(("PDC_get_rows() - called\n")); 25 | 26 | GetConsoleScreenBufferInfo(pdc_con_out, &scr); 27 | 28 | return scr.srWindow.Bottom - scr.srWindow.Top + 1; 29 | } 30 | 31 | /* return width of screen/viewport */ 32 | 33 | int PDC_get_columns(void) 34 | { 35 | CONSOLE_SCREEN_BUFFER_INFO scr; 36 | 37 | PDC_LOG(("PDC_get_columns() - called\n")); 38 | 39 | GetConsoleScreenBufferInfo(pdc_con_out, &scr); 40 | 41 | return scr.srWindow.Right - scr.srWindow.Left + 1; 42 | } 43 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wincon/pdcutil.c: -------------------------------------------------------------------------------- 1 | /* PDCurses */ 2 | 3 | #include "pdcwin.h" 4 | #ifdef WIN32_LEAN_AND_MEAN 5 | #include 6 | #include 7 | #endif 8 | 9 | static volatile int _beep_count = 0; 10 | 11 | static void beep_thread(LPVOID lpParameter) 12 | { 13 | INTENTIONALLY_UNUSED_PARAMETER( lpParameter); 14 | while( _beep_count) 15 | { 16 | if (!PlaySound((LPCTSTR) SND_ALIAS_SYSTEMDEFAULT, NULL, SND_ALIAS_ID)) 17 | Beep(800, 200); 18 | _beep_count--; 19 | } 20 | } 21 | 22 | void PDC_beep(void) 23 | { 24 | PDC_LOG(("PDC_beep() - called\n")); 25 | 26 | _beep_count++; 27 | if( _beep_count == 1) 28 | _beginthread( beep_thread, 0, NULL); 29 | } 30 | 31 | void PDC_napms(int ms) 32 | { 33 | PDC_LOG(("PDC_napms() - called: ms=%d\n", ms)); 34 | 35 | if ((SP->termattrs & A_BLINK) && (GetTickCount() >= pdc_last_blink + 500)) 36 | PDC_blink_text(); 37 | 38 | if( ms) 39 | Sleep(ms); 40 | } 41 | 42 | const char *PDC_sysname(void) 43 | { 44 | return "Windows"; 45 | } 46 | 47 | enum PDC_port PDC_port_val = PDC_PORT_WINCON; 48 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wincon/pdcwin.h: -------------------------------------------------------------------------------- 1 | /* PDCurses */ 2 | 3 | #ifndef __PDC_WIN_H__ 4 | #define __PDC_WIN_H__ 5 | 6 | #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) 7 | # define _CRT_SECURE_NO_DEPRECATE 1 /* kill nonsense warnings */ 8 | #endif 9 | 10 | #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) 11 | # define _CRT_SECURE_NO_DEPRECATE 1 /* kill nonsense warnings */ 12 | #endif 13 | 14 | #if defined( PDC_FORCE_UTF8) && !defined( PDC_WIDE) 15 | #define PDC_WIDE 16 | #endif 17 | 18 | #if defined(PDC_WIDE) && !defined(UNICODE) 19 | # define UNICODE 20 | #endif 21 | 22 | #define WIN32_LEAN_AND_MEAN 23 | #include 24 | #undef MOUSE_MOVED 25 | #include 26 | 27 | typedef struct {short r, g, b; bool mapped;} PDCCOLOR; 28 | 29 | extern PDCCOLOR pdc_color[PDC_MAXCOL]; 30 | 31 | extern HANDLE pdc_con_out, pdc_con_in; 32 | extern DWORD pdc_quick_edit; 33 | extern DWORD pdc_last_blink; 34 | extern short pdc_curstoreal[16], pdc_curstoansi[16]; 35 | extern short pdc_oldf, pdc_oldb, pdc_oldu; 36 | extern bool pdc_conemu, pdc_wt, pdc_ansi; 37 | 38 | extern void PDC_blink_text(void); 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wingui/pdcclip.c: -------------------------------------------------------------------------------- 1 | /* PDCurses */ 2 | 3 | #include "pdcwin.h" 4 | #include 5 | 6 | #include "winclip.c" 7 | -------------------------------------------------------------------------------- /src/3rdparty/win32_src/pdcurses/wingui/pdcgetsc.c: -------------------------------------------------------------------------------- 1 | /* Public Domain Curses */ 2 | 3 | #include "pdcwin.h" 4 | 5 | /* get the cursor size/shape */ 6 | 7 | int PDC_get_cursor_mode(void) 8 | { 9 | PDC_LOG(("PDC_get_cursor_mode() - called\n")); 10 | 11 | return SP->visibility; 12 | } 13 | 14 | /* return number of screen rows */ 15 | 16 | int PDC_get_rows(void) 17 | { 18 | extern int PDC_n_rows; 19 | 20 | PDC_LOG(("PDC_get_rows() - called\n")); 21 | return( PDC_n_rows); 22 | } 23 | 24 | int PDC_get_columns(void) 25 | { 26 | extern int PDC_n_cols; 27 | 28 | PDC_LOG(("PDC_get_columns() - called\n")); 29 | return( PDC_n_cols); 30 | } 31 | -------------------------------------------------------------------------------- /src/core_c_demo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (CORE_C_DEMO_SRCS 2 | ./main.c 3 | ) 4 | 5 | set(musikcube_INSTALL_DIR ${HOMEBREW_PREFIX}) 6 | if (NOT DEFINED musikcube_INSTALL_DIR) 7 | set(musikcube_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) 8 | endif() 9 | 10 | add_executable(core_c_demo ${CORE_C_DEMO_SRCS}) 11 | 12 | target_include_directories(core_c_demo BEFORE PRIVATE ${VENDOR_INCLUDE_DIRECTORIES}) 13 | target_link_libraries(core_c_demo ${musikcube_LINK_LIBS} musikcore) 14 | -------------------------------------------------------------------------------- /src/core_c_demo/core_c_demo.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/core_c_demo/core_c_demo.rc -------------------------------------------------------------------------------- /src/core_c_demo/core_c_demo.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {2c3b4873-a5d1-4aad-9902-8d403857cca3} 6 | 7 | 8 | {f520399d-3c2e-4ede-8497-d1518fddbbab} 9 | 10 | 11 | 12 | 13 | src 14 | 15 | 16 | 17 | 18 | res 19 | 20 | 21 | 22 | 23 | res 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/core_c_demo/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/core_c_demo/icon.ico -------------------------------------------------------------------------------- /src/core_c_demo/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/core_c_demo/resource.h -------------------------------------------------------------------------------- /src/musikcore/musikcore.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 9.00 3 | # Visual Studio 2005 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "core.vcproj", "{B2165720-B4B2-4F4B-9634-8C390C3CB4DB}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Release|Win32 = Release|Win32 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {B2165720-B4B2-4F4B-9634-8C390C3CB4DB}.Debug|Win32.ActiveCfg = Debug|Win32 13 | {B2165720-B4B2-4F4B-9634-8C390C3CB4DB}.Debug|Win32.Build.0 = Debug|Win32 14 | {B2165720-B4B2-4F4B-9634-8C390C3CB4DB}.Release|Win32.ActiveCfg = Release|Win32 15 | {B2165720-B4B2-4F4B-9634-8C390C3CB4DB}.Release|Win32.Build.0 = Release|Win32 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /src/musikcube/data/linux/share/applications/musikcube.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Type=Application 4 | Name=musikcube 5 | GenericName=musikcube 6 | Comment=terminal-based music player 7 | Comment[ru]=консольный аудиоплеер 8 | Exec=musikcube %U 9 | TryExec=musikcube 10 | Icon=musikcube 11 | Terminal=true 12 | Categories=AudioVideo;Player;Audio; 13 | StartupNotify=false 14 | StartupWMClass=musikcube 15 | -------------------------------------------------------------------------------- /src/musikcube/data/linux/share/applications/musikcube.snap.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Type=Application 4 | Name=musikcube 5 | GenericName=musikcube 6 | Comment=terminal-based music player 7 | Comment[ru]=консольный аудиоплеер 8 | Exec=musikcube.app %U 9 | TryExec=/snap/bin/musikcube.app 10 | Icon=${SNAP}/usr/share/icons/hicolor/128x128/apps/musikcube.png 11 | Terminal=true 12 | Categories=AudioVideo;Player;Audio; 13 | StartupNotify=false 14 | StartupWMClass=musikcube 15 | -------------------------------------------------------------------------------- /src/musikcube/data/linux/share/icons/hicolor/128x128/apps/musikcube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/linux/share/icons/hicolor/128x128/apps/musikcube.png -------------------------------------------------------------------------------- /src/musikcube/data/linux/share/icons/hicolor/48x48/apps/musikcube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/linux/share/icons/hicolor/48x48/apps/musikcube.png -------------------------------------------------------------------------------- /src/musikcube/data/linux/share/icons/hicolor/64x64/apps/musikcube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/linux/share/icons/hicolor/64x64/apps/musikcube.png -------------------------------------------------------------------------------- /src/musikcube/data/logo_android.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/logo_android.psd -------------------------------------------------------------------------------- /src/musikcube/data/logo_large.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/logo_large.psd -------------------------------------------------------------------------------- /src/musikcube/data/logo_small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/data/logo_small.psd -------------------------------------------------------------------------------- /src/musikcube/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/icon.ico -------------------------------------------------------------------------------- /src/musikcube/musikcube.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | cd "@musikcube_INSTALL_DIR@"/share/musikcube/ 6 | exec ./musikcube "$@" 7 | -------------------------------------------------------------------------------- /src/musikcube/musikcube.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/musikcube.rc -------------------------------------------------------------------------------- /src/musikcube/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikcube/resource.h -------------------------------------------------------------------------------- /src/musikcube/win32api.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/musikcubed/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (DAEMON_SRCS 2 | ./main.cpp 3 | ) 4 | 5 | set(musikcube_INSTALL_DIR ${HOMEBREW_PREFIX}) 6 | if (NOT DEFINED musikcube_INSTALL_DIR) 7 | set(musikcube_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) 8 | endif() 9 | 10 | configure_file("musikcubed.in" "musikcubed" @ONLY) 11 | add_executable(musikcubed ${DAEMON_SRCS}) 12 | 13 | target_include_directories(musikcubed BEFORE PRIVATE ${VENDOR_INCLUDE_DIRECTORIES}) 14 | 15 | if (${BUILD_STANDALONE} MATCHES "true") 16 | find_library(EVLIB NAMES libev.a ev) 17 | else() 18 | find_library(EVLIB NAMES ev) 19 | endif() 20 | 21 | target_link_libraries(musikcubed ${musikcube_LINK_LIBS} ${EVLIB} musikcore) -------------------------------------------------------------------------------- /src/musikcubed/musikcubed.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | cd "@musikcube_INSTALL_DIR@"/share/musikcube/ 6 | exec ./musikcubed "$@" 7 | -------------------------------------------------------------------------------- /src/musikdroid/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .idea 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | -------------------------------------------------------------------------------- /src/musikdroid/README.md: -------------------------------------------------------------------------------- 1 | # musikdroid 2 | 3 | `musikdroid` is an android app that is used to stream music from, or remote control, existing `musikcube` installations (windows, macos, or linux clients). it is written in `kotlin`. 4 | 5 | # building 6 | 7 | because `musikdroid` is not available in the Google Play store, it uses [fabric.io](https://fabric.io) for crash reporting. this makes it slightly difficult to build out of the box, because the project's API keys are not checked in. if you are not a member of the dev team, but still want to play around with the code, you can do the following: 8 | 9 | 1. remove `Fabric.with(this, Crashlytics())` from `Application.kt` 10 | 2. remove `apply plugin: 'io.fabric'` from `app/build.gradle` 11 | 12 | this should allow you to build and test locally without special keys. 13 | 14 | the project is currently built using `Android Studio 3` 15 | 16 | # attribution 17 | 18 | the following icons were taken from [the noun project](https://thenounproject.com) under the [creative commons 3.0 license](https://creativecommons.org/licenses/by/3.0/) 19 | - https://thenounproject.com/search/?q=remote&i=658529 20 | - https://thenounproject.com/iconsguru/collection/audio/?oq=audio&cidx=0&i=1052418 21 | -------------------------------------------------------------------------------- /src/musikdroid/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | fabric.properties 3 | google-services.json 4 | -------------------------------------------------------------------------------- /src/musikdroid/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/clangen/src/android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | -dontobfuscate 20 | 21 | -keep public class io.casey.musikcube.** { *; } 22 | 23 | -keep public class * implements com.bumptech.glide.module.GlideModule 24 | -keep public class * extends com.bumptech.glide.AppGlideModule 25 | -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { 26 | **[] $VALUES; 27 | public *; 28 | } 29 | 30 | -keep class androidx.appcompat.widget.SearchView { *; } 31 | 32 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 33 | -dontwarn android.arch.util.paging.CountedDataSource 34 | -dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource 35 | -dontwarn com.google.errorprone.annotations.* -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/framework/IMixin.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.framework 2 | 3 | import android.os.Bundle 4 | 5 | interface IMixin { 6 | fun onCreate(bundle: Bundle) 7 | fun onStart() 8 | fun onResume() 9 | fun onPause() 10 | fun onStop() 11 | fun onSaveInstanceState(bundle: Bundle) 12 | fun onDestroy() 13 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/framework/MixinBase.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.framework 2 | 3 | import android.os.Bundle 4 | 5 | abstract class MixinBase: IMixin { 6 | enum class State { 7 | Unknown, Created, Started, Resumed, Paused, Stopped, Destroyed 8 | } 9 | 10 | protected var state = State.Unknown 11 | private set 12 | 13 | protected val active 14 | get() = state == State.Resumed 15 | 16 | override fun onCreate(bundle: Bundle) { 17 | state = State.Created 18 | } 19 | 20 | override fun onStart() { 21 | state = State.Started 22 | } 23 | 24 | override fun onResume() { 25 | state = State.Resumed 26 | } 27 | 28 | override fun onPause() { 29 | state = State.Paused 30 | } 31 | 32 | override fun onStop() { 33 | state = State.Stopped 34 | } 35 | 36 | override fun onSaveInstanceState(bundle: Bundle) { 37 | } 38 | 39 | override fun onDestroy() { 40 | state = State.Destroyed 41 | } 42 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/AppModule.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import android.content.Context 4 | import dagger.Module 5 | import dagger.Provides 6 | import io.casey.musikcube.remote.Application 7 | 8 | @Module 9 | class AppModule { 10 | @Provides 11 | @ApplicationScope 12 | fun providesContext(): Context { 13 | return Application.instance 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/DataComponent.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import android.content.Context 4 | import dagger.Component 5 | import io.casey.musikcube.remote.service.playback.impl.streaming.db.OfflineDb 6 | import io.casey.musikcube.remote.service.websocket.model.impl.remote.IdListTrackListQueryFactory 7 | 8 | @DataScope 9 | @Component(dependencies = [AppComponent::class]) 10 | interface DataComponent { 11 | fun inject(db: OfflineDb) 12 | fun inject(slidingWindow: IdListTrackListQueryFactory) 13 | fun context(): Context /* via AppComponent */ 14 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/PlaybackComponent.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import dagger.Component 4 | import io.casey.musikcube.remote.service.playback.PlayerWrapper 5 | 6 | @PlaybackScope 7 | @Component(dependencies = [AppComponent::class]) 8 | interface PlaybackComponent { 9 | fun inject(playerWrapper: PlayerWrapper) 10 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/Scopes.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import javax.inject.Scope 4 | 5 | @Scope 6 | @Retention(AnnotationRetention.RUNTIME) 7 | annotation class ApplicationScope 8 | 9 | @Scope 10 | @Retention(AnnotationRetention.RUNTIME) 11 | annotation class ViewScope 12 | 13 | @Scope 14 | @Retention(AnnotationRetention.RUNTIME) 15 | annotation class ServiceScope 16 | 17 | @Scope 18 | @Retention(AnnotationRetention.RUNTIME) 19 | annotation class DataScope 20 | 21 | @Scope 22 | @Retention(AnnotationRetention.RUNTIME) 23 | annotation class PlaybackScope -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/ServiceComponent.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import dagger.Component 4 | import io.casey.musikcube.remote.service.gapless.GaplessHeaderService 5 | import io.casey.musikcube.remote.service.playback.impl.remote.RemotePlaybackService 6 | import io.casey.musikcube.remote.service.playback.impl.streaming.StreamProxy 7 | import io.casey.musikcube.remote.service.playback.impl.streaming.StreamingPlaybackService 8 | 9 | @ServiceScope 10 | @Component(dependencies = [AppComponent::class]) 11 | interface ServiceComponent { 12 | fun inject(service: StreamingPlaybackService) 13 | fun inject(service: RemotePlaybackService) 14 | fun inject(service: GaplessHeaderService) 15 | fun inject(service: StreamProxy) 16 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/injection/ServiceModule.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.injection 2 | 3 | import android.content.Context 4 | import dagger.Module 5 | import dagger.Provides 6 | import io.casey.musikcube.remote.service.gapless.GaplessHeaderService 7 | import io.casey.musikcube.remote.service.playback.impl.streaming.StreamProxy 8 | import io.casey.musikcube.remote.service.websocket.WebSocketService 9 | 10 | @Module 11 | class ServiceModule { 12 | @ApplicationScope 13 | @Provides 14 | fun providesWebSocketService(context: Context): WebSocketService { 15 | return WebSocketService(context) 16 | } 17 | 18 | @ApplicationScope 19 | @Provides 20 | fun providesGaplessHeaderService(): GaplessHeaderService { 21 | return GaplessHeaderService() 22 | } 23 | 24 | @ApplicationScope 25 | @Provides 26 | fun providesStreamProxy(context: Context): StreamProxy { 27 | return StreamProxy(context) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/gapless/db/GaplessDao.java: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.gapless.db; 2 | 3 | import androidx.room.Dao; 4 | import androidx.room.Insert; 5 | import androidx.room.OnConflictStrategy; 6 | import androidx.room.Query; 7 | 8 | import java.util.List; 9 | 10 | @Dao 11 | public interface GaplessDao { 12 | @Insert(onConflict = OnConflictStrategy.REPLACE) 13 | void insert(GaplessTrack... track); 14 | 15 | @Query("UPDATE GaplessTrack " + 16 | "SET state=:state " + 17 | "WHERE url=:url ") 18 | void update(int state, String url); 19 | 20 | @Query("DELETE FROM GaplessTrack WHERE state=:state") 21 | void deleteByState(int state); 22 | 23 | @Query("DELETE FROM GaplessTrack WHERE url=:url") 24 | void deleteByUrl(String url); 25 | 26 | @Query("SELECT * FROM GaplessTrack WHERE state=:state") 27 | List queryByState(int state); 28 | 29 | @Query("SELECT * FROM GaplessTrack WHERE url=:url") 30 | List queryByUrl(String url); 31 | } 32 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/gapless/db/GaplessDb.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.gapless.db 2 | 3 | import androidx.room.Database 4 | import androidx.room.RoomDatabase 5 | import io.reactivex.Single 6 | import io.reactivex.android.schedulers.AndroidSchedulers 7 | import io.reactivex.schedulers.Schedulers 8 | 9 | @Database(entities = [GaplessTrack::class], exportSchema = false, version = 1) 10 | abstract class GaplessDb: RoomDatabase() { 11 | abstract fun dao(): GaplessDao 12 | 13 | fun prune() { 14 | @Suppress("unused") 15 | Single.fromCallable { 16 | dao().deleteByState(GaplessTrack.DOWNLOADING) 17 | true 18 | } 19 | .subscribeOn(Schedulers.io()) 20 | .observeOn(AndroidSchedulers.mainThread()) 21 | .subscribe({ }, { }) 22 | } 23 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/gapless/db/GaplessTrack.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.gapless.db 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class GaplessTrack(@PrimaryKey val id: Long?, val url: String, val state: Int) { 8 | companion object { 9 | const val DOWNLOADING = 1 10 | const val DOWNLOADED = 2 11 | const val UPDATED = 3 12 | const val ERROR = 4 13 | } 14 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/playback/PlaybackState.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.playback 2 | 3 | enum class PlaybackState constructor(private val rawValue: String) { 4 | Stopped("stopped"), 5 | Buffering("buffering"), /* streaming only */ 6 | Playing("playing"), 7 | Paused("paused"); 8 | 9 | override fun toString(): String = rawValue 10 | 11 | companion object { 12 | internal fun from(rawValue: String): PlaybackState { 13 | if (Stopped.rawValue == rawValue || "unknown" == rawValue) { 14 | return Stopped 15 | } 16 | else if (Playing.rawValue == rawValue) { 17 | return Playing 18 | } 19 | else if (Paused.rawValue == rawValue || "prepared" == rawValue) { 20 | return Paused 21 | } 22 | 23 | throw IllegalArgumentException("rawValue '$rawValue' is unknown") 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/playback/QueryContext.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.playback 2 | 3 | import io.casey.musikcube.remote.service.websocket.Messages 4 | 5 | class QueryContext { 6 | val category: String? 7 | val categoryId: Long 8 | val filter: String 9 | val type: Messages.Request? 10 | 11 | constructor(type: Messages.Request? = null) 12 | : this("", type) 13 | 14 | constructor(filter: String, type: Messages.Request? = null) 15 | : this("", -1L, filter, type) 16 | 17 | constructor(category: String, categoryId: Long, filter: String, type: Messages.Request? = null) { 18 | this.category = category 19 | this.categoryId = categoryId 20 | this.filter = filter 21 | this.type = type 22 | } 23 | 24 | fun hasCategory(): Boolean = (category?.isNotBlank() ?: false && (categoryId >= 0)) 25 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/playback/RepeatMode.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.playback 2 | 3 | enum class RepeatMode constructor(private val rawValue: String) { 4 | None("none"), 5 | List("list"), 6 | Track("track"); 7 | 8 | override fun toString(): String = rawValue 9 | 10 | companion object { 11 | fun from(rawValue: String): RepeatMode { 12 | return when (rawValue) { 13 | None.rawValue -> None 14 | List.rawValue -> List 15 | Track.rawValue -> Track 16 | else -> throw IllegalArgumentException("rawValue matches invalid") 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/system/MediaButtonReceiver.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.system 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | import android.view.KeyEvent 7 | import androidx.core.content.ContextCompat 8 | import io.casey.musikcube.remote.ui.shared.extension.getParcelableExtraCompat 9 | 10 | class MediaButtonReceiver : BroadcastReceiver() { 11 | override fun onReceive(context: Context, intent: Intent) { 12 | val action = intent.action 13 | if (Intent.ACTION_MEDIA_BUTTON == action) { 14 | val event = intent.getParcelableExtraCompat(Intent.EXTRA_KEY_EVENT) 15 | 16 | if (event != null && event.action == KeyEvent.ACTION_DOWN) { 17 | when (event.keyCode) { 18 | KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> 19 | ContextCompat.startForegroundService(context, Intent(context, SystemService::class.java)) 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IAlbum.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IAlbum : ICategoryValue { 4 | val artist: String 5 | val artistId: Long 6 | val albumArtist: String 7 | val albumArtistId: Long 8 | val name: String 9 | val thumbnailId: Long 10 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IAlbumArtist.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IAlbumArtist : ICategoryValue -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IArtist.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IArtist -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/ICategoryValue.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface ICategoryValue { 4 | val id: Long 5 | val value: String 6 | val type: String 7 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IDevice.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IDevice { 4 | val name: String 5 | val id: String 6 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IEnvironment.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IEnvironment { 4 | val apiVersion: Int 5 | val sdkVersion: Int 6 | val serverVersion: String 7 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IEqualizerSettings.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IEqualizerSettings { 4 | val enabled: Boolean 5 | val bands: MutableMap 6 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IGainSettings.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IGainSettings { 4 | val replayGainMode: ReplayGainMode 5 | val preampGain: Float 6 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IGenre.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IGenre : ICategoryValue -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IOutput.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IOutput { 4 | val name: String 5 | val devices: List 6 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IOutputs.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IOutputs { 4 | val outputs: List 5 | val selectedDriverName: String 6 | val selectedDeviceId: String 7 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/IPlaylist.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | interface IPlaylist : ICategoryValue -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/ITrack.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | import org.json.JSONObject 4 | 5 | interface ITrack { 6 | val id: Long 7 | val externalId: String 8 | val uri: String 9 | val title: String 10 | val album: String 11 | val albumId: Long 12 | val albumArtist: String 13 | val albumArtistId: Long 14 | val genre: String 15 | val trackNum: Int 16 | val genreId: Long 17 | val artist: String 18 | val artistId: Long 19 | val thumbnailId: Long 20 | 21 | fun getCategoryId(categoryType: String): Long 22 | fun toJson(): JSONObject 23 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/ITrackListQueryFactory.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | import io.reactivex.Observable 4 | 5 | interface ITrackListQueryFactory { 6 | fun count(): Observable? 7 | fun page(offset: Int, limit: Int): Observable>? 8 | fun offline(): Boolean 9 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/PlayQueueType.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | enum class PlayQueueType(val rawValue: String) { 4 | Live("live"), 5 | Snapshot("snapshot"); 6 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/ReplayGainMode.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | enum class ReplayGainMode(val rawValue: String) { 4 | Disabled("disabled"), 5 | Album("album"), 6 | Track("track"); 7 | 8 | companion object { 9 | fun find(raw: String): ReplayGainMode { 10 | values().forEach { 11 | if (it.rawValue == raw) { 12 | return it 13 | } 14 | } 15 | return Disabled 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/TransportType.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model 2 | 3 | enum class TransportType(val rawValue: String) { 4 | Gapless("gapless"), 5 | Crossfade("crossfade"); 6 | 7 | companion object { 8 | fun find(raw: String): TransportType { 9 | values().forEach { 10 | if (it.rawValue == raw) { 11 | return it 12 | } 13 | } 14 | return Gapless 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteAlbum.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.model.IAlbum 5 | import org.json.JSONObject 6 | 7 | class RemoteAlbum(val json: JSONObject) : IAlbum { 8 | override val id: Long get() = json.optLong(Metadata.Album.ID, -1) 9 | override val value: String get() = json.optString(Metadata.Album.TITLE, "") 10 | override val name: String get() = value 11 | override val artist: String get() = json.optString(Metadata.Album.ARTIST, "") 12 | override val artistId: Long get() =json.optLong(Metadata.Album.ARTIST_ID, -1) 13 | override val albumArtist: String get() = json.optString(Metadata.Album.ALBUM_ARTIST, "") 14 | override val albumArtistId: Long get() = json.optLong(Metadata.Album.ALBUM_ARTIST_ID, -1) 15 | override val thumbnailId: Long get() = json.optLong(Metadata.Album.THUMBNAIL_ID, -1) 16 | override val type: String get() = Metadata.Category.ALBUM 17 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteAlbumArtist.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.Messages 5 | import io.casey.musikcube.remote.service.websocket.model.IAlbumArtist 6 | import org.json.JSONObject 7 | 8 | class RemoteAlbumArtist(private val json: JSONObject) : IAlbumArtist { 9 | override val id: Long 10 | get() = json.optLong(Messages.Key.ID, -1) 11 | override val value: String 12 | get() = json.optString(Messages.Key.VALUE, "") 13 | override val type: String 14 | get() = Metadata.Category.ALBUM_ARTIST 15 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteCategoryValue.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.websocket.Messages 4 | import io.casey.musikcube.remote.service.websocket.model.ICategoryValue 5 | import org.json.JSONObject 6 | 7 | class RemoteCategoryValue(private val categoryType: String, 8 | private val json: JSONObject) : ICategoryValue 9 | { 10 | override val id: Long 11 | get() = json.optLong(Messages.Key.ID, -1) 12 | override val value: String 13 | get() = json.optString(Messages.Key.VALUE, "") 14 | override val type: String 15 | get() = categoryType 16 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteDevice.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.model.IDevice 5 | import org.json.JSONObject 6 | 7 | class RemoteDevice(val json: JSONObject): IDevice { 8 | override val name: String 9 | get() = json.optString(Metadata.Device.DEVICE_NAME, "") 10 | override val id: String 11 | get() = json.optString(Metadata.Device.DEVICE_ID, "") 12 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteEnvironment.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.model.IEnvironment 5 | import org.json.JSONObject 6 | 7 | class RemoteEnvironment(val json: JSONObject = JSONObject()): IEnvironment { 8 | override val apiVersion: Int 9 | get() = json.optInt(Metadata.Environment.API_VERSION, -1) 10 | override val sdkVersion: Int 11 | get() = json.optInt(Metadata.Environment.SDK_VERSION, -1) 12 | override val serverVersion: String 13 | get() = json.optString(Metadata.Environment.APP_VERSION, "0.0.0") 14 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteEqualizerSettings.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.websocket.Messages 4 | import io.casey.musikcube.remote.service.websocket.model.IEqualizerSettings 5 | import org.json.JSONObject 6 | 7 | class RemoteEqualizerSettings(private val json: JSONObject): IEqualizerSettings { 8 | private val bandToFreqMap: Map 9 | 10 | init { 11 | bandToFreqMap = mutableMapOf() 12 | 13 | json.optJSONObject(Messages.Key.BANDS)?.let { bands -> 14 | bands.keys().forEach { freq -> 15 | try { 16 | bandToFreqMap[freq.toInt()] = bands.getDouble(freq) 17 | } 18 | catch (ex: NumberFormatException) { 19 | /* ugh... */ 20 | } 21 | } 22 | } 23 | } 24 | 25 | override val enabled: Boolean 26 | get() = json.optBoolean(Messages.Key.ENABLED, false) 27 | 28 | override val bands: MutableMap 29 | get() = mutableMapOf().apply { putAll(bandToFreqMap ) } 30 | } 31 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteGainSettings.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.websocket.Messages 4 | import io.casey.musikcube.remote.service.websocket.model.IGainSettings 5 | import io.casey.musikcube.remote.service.websocket.model.ReplayGainMode 6 | import org.json.JSONObject 7 | 8 | class RemoteGainSettings(val json: JSONObject): IGainSettings { 9 | override val replayGainMode: ReplayGainMode 10 | get() = ReplayGainMode.find(json.optString(Messages.Key.REPLAYGAIN_MODE, "disabled")) 11 | override val preampGain: Float 12 | get() = json.optDouble(Messages.Key.PREAMP_GAIN, 0.0).toFloat() 13 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteOutput.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.model.IDevice 5 | import io.casey.musikcube.remote.service.websocket.model.IOutput 6 | import org.json.JSONArray 7 | import org.json.JSONObject 8 | 9 | class RemoteOutput(val json: JSONObject): IOutput { 10 | private val deviceList: List 11 | 12 | init { 13 | val all = mutableListOf() 14 | val arr = json.optJSONArray(Metadata.Output.DEVICES) ?: JSONArray() 15 | for (i in 0 until arr.length()) { 16 | all.add(RemoteDevice(arr.getJSONObject(i))) 17 | } 18 | deviceList = all 19 | } 20 | 21 | override val name: String 22 | get() = json.optString(Metadata.Output.DRIVER_NAME, "") 23 | 24 | override val devices: List 25 | get() = deviceList 26 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemoteOutputs.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.websocket.model.IOutput 4 | import io.casey.musikcube.remote.service.websocket.model.IOutputs 5 | 6 | class RemoteOutputs(private val driverName: String, 7 | private val deviceId: String, 8 | private val allOutputs: List): IOutputs 9 | { 10 | override val outputs: List 11 | get() = allOutputs 12 | override val selectedDriverName: String 13 | get() = driverName 14 | override val selectedDeviceId: String 15 | get() = deviceId 16 | } 17 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/service/websocket/model/impl/remote/RemotePlaylist.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.service.websocket.model.impl.remote 2 | 3 | import io.casey.musikcube.remote.service.playback.impl.remote.Metadata 4 | import io.casey.musikcube.remote.service.websocket.Messages 5 | import io.casey.musikcube.remote.service.websocket.model.IPlaylist 6 | import org.json.JSONObject 7 | 8 | class RemotePlaylist(private val json: JSONObject) : IPlaylist { 9 | override val id: Long 10 | get() = json.optLong(Messages.Key.ID, -1) 11 | override val value: String 12 | get() = json.optString(Messages.Key.VALUE, "") 13 | override val type: String 14 | get() = Metadata.Category.PLAYLISTS 15 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/albums/constant/Album.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.albums.constant 2 | 3 | object Album { 4 | object Extra { 5 | const val CATEGORY_NAME = "extra_category_name" 6 | const val CATEGORY_ID = "extra_category_id" 7 | } 8 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/browse/constant/Browse.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.browse.constant 2 | 3 | object Browse { 4 | object Extras { 5 | const val INITIAL_CATEGORY_TYPE = "extra_initial_category_type" 6 | } 7 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/category/activity/AllCategoriesActivity.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.category.activity 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import io.casey.musikcube.remote.ui.category.fragment.AllCategoriesFragment 6 | import io.casey.musikcube.remote.ui.shared.activity.FragmentActivityWithTransport 7 | import io.casey.musikcube.remote.ui.shared.extension.withToolbar 8 | import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment 9 | 10 | class AllCategoriesActivity: FragmentActivityWithTransport() { 11 | override fun createContentFragment(): BaseFragment = 12 | AllCategoriesFragment().withToolbar() 13 | 14 | override val contentFragmentTag: String = 15 | AllCategoriesFragment.TAG 16 | 17 | companion object { 18 | fun getStartIntent(context: Context): Intent { 19 | return Intent(context, AllCategoriesActivity::class.java) 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/category/constant/NavigationType.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.category.constant 2 | 3 | enum class NavigationType { 4 | Tracks, Albums, Select; 5 | 6 | companion object { 7 | fun get(ordinal: Int) = values()[ordinal] 8 | } 9 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/home/fragment/InvalidPasswordDialogFragment.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.home.fragment 2 | 3 | import android.app.Dialog 4 | import android.os.Bundle 5 | import androidx.appcompat.app.AlertDialog 6 | import androidx.fragment.app.DialogFragment 7 | 8 | import io.casey.musikcube.remote.R 9 | import io.casey.musikcube.remote.ui.settings.activity.SettingsActivity 10 | 11 | class InvalidPasswordDialogFragment : DialogFragment() { 12 | override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 13 | val activity = this.activity!! 14 | return AlertDialog.Builder(activity) 15 | .setTitle(R.string.invalid_password_dialog_title) 16 | .setMessage(R.string.invalid_password_dialog_message) 17 | .setPositiveButton(R.string.button_settings) { _, _ -> 18 | startActivity(SettingsActivity.getStartIntent(activity)) 19 | } 20 | .setNegativeButton(R.string.button_close, null) 21 | .create() 22 | } 23 | 24 | companion object { 25 | const val TAG = "InvalidPasswordDialogFragment" 26 | 27 | fun newInstance(): InvalidPasswordDialogFragment { 28 | return InvalidPasswordDialogFragment() 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/navigation/Transition.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.navigation 2 | 3 | enum class Transition { 4 | Horizontal, Vertical; 5 | companion object { 6 | fun from(name: String, fallback: Transition = Horizontal): Transition = 7 | values().firstOrNull { it.name == name } ?: fallback 8 | } 9 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/activity/PlayQueueActivity.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.playqueue.activity 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import io.casey.musikcube.remote.ui.navigation.Transition 6 | import io.casey.musikcube.remote.ui.playqueue.constant.PlayQueue 7 | import io.casey.musikcube.remote.ui.playqueue.fragment.PlayQueueFragment 8 | import io.casey.musikcube.remote.ui.shared.activity.FragmentActivityWithTransport 9 | import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment 10 | 11 | class PlayQueueActivity : FragmentActivityWithTransport() { 12 | override fun createContentFragment(): BaseFragment = 13 | PlayQueueFragment.create(extras.getInt( 14 | PlayQueue.Extra.PLAYING_INDEX, 0)) 15 | 16 | override val contentFragmentTag: String = 17 | PlayQueueFragment.TAG 18 | 19 | override val transitionType: Transition 20 | get() = Transition.Vertical 21 | 22 | companion object { 23 | fun getStartIntent(context: Context, playingIndex: Int): Intent { 24 | return Intent(context, PlayQueueActivity::class.java) 25 | .putExtra(PlayQueue.Extra.PLAYING_INDEX, playingIndex) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/constant/PlayQueue.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.playqueue.constant 2 | 3 | object PlayQueue { 4 | object Extra { 5 | const val PLAYING_INDEX = "extra_playing_index" 6 | } 7 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/model/ConnectionsDao.java: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.settings.model; 2 | 3 | import androidx.room.Dao; 4 | import androidx.room.Insert; 5 | import androidx.room.OnConflictStrategy; 6 | import androidx.room.Query; 7 | 8 | import java.util.List; 9 | 10 | @Dao 11 | public interface ConnectionsDao { 12 | @Insert(onConflict = OnConflictStrategy.REPLACE) 13 | void insert(Connection... connections); 14 | 15 | @Query("SELECT * FROM Connection ORDER BY LOWER(name)") 16 | List query(); 17 | 18 | @Query("SELECT * FROM Connection WHERE name=:name") 19 | Connection query(String name); 20 | 21 | @Query("DELETE FROM Connection WHERE name=:name") 22 | void delete(String name); 23 | 24 | @Query("UPDATE Connection SET name=:newName WHERE name=:oldName") 25 | void rename(String oldName, String newName); 26 | } 27 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/model/ConnectionsDb.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.settings.model 2 | 3 | import androidx.room.Database 4 | import androidx.room.RoomDatabase 5 | 6 | @Database(entities = [Connection::class], exportSchema = false, version = 1) 7 | abstract class ConnectionsDb : RoomDatabase() { 8 | abstract fun connectionsDao(): ConnectionsDao 9 | } 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/IBackHandler.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | interface IBackHandler { 4 | fun onInterceptBackButton(): Boolean 5 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/IFabConsumer.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | import com.google.android.material.floatingactionbutton.FloatingActionButton 4 | 5 | interface IFabConsumer { 6 | val fabVisible: Boolean 7 | fun onFabPress(fab: FloatingActionButton) 8 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/IFilterable.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | interface IFilterable { 4 | val addFilterToToolbar: Boolean 5 | fun setFilter(filter: String) 6 | } 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/IMenuProvider.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | import android.view.Menu 4 | import android.view.MenuItem 5 | 6 | interface IMenuProvider { 7 | fun createOptionsMenu(menu: Menu): Boolean 8 | fun optionsItemSelected(menuItem: MenuItem): Boolean 9 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/ITitleProvider.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | interface ITitleProvider { 4 | val title: String 5 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/ITransportObserver.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.activity 2 | 3 | interface ITransportObserver { 4 | fun onTransportChanged() 5 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/constant/Shared.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.constant 2 | 3 | object Shared { 4 | object Extra { 5 | const val ELEVATION = "extra_elevation" 6 | const val PUSH_CONTAINER_ID = "extra_push_container_id" 7 | const val TITLE_OVERRIDE = "extra_title_override" 8 | const val TRANSITION_TYPE = "extra_transition_type" 9 | const val WITH_TOOLBAR = "extra_with_toolbar" 10 | const val WITHOUT_TRANSPORT = "extra_without_transport" 11 | } 12 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/mixin/MetadataProxyMixin.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.mixin 2 | 3 | import android.os.Bundle 4 | import io.casey.musikcube.remote.Application 5 | import io.casey.musikcube.remote.framework.MixinBase 6 | import io.casey.musikcube.remote.injection.DaggerViewComponent 7 | import io.casey.musikcube.remote.service.websocket.WebSocketService 8 | import io.casey.musikcube.remote.service.websocket.model.IMetadataProxy 9 | import javax.inject.Inject 10 | 11 | class MetadataProxyMixin : MixinBase() { 12 | @Inject lateinit var wss: WebSocketService 13 | @Inject lateinit var provider: IMetadataProxy 14 | 15 | override fun onCreate(bundle: Bundle) { 16 | super.onCreate(bundle) 17 | 18 | DaggerViewComponent.builder() 19 | .appComponent(Application.appComponent) 20 | .build().inject(this) 21 | 22 | provider.attach() 23 | } 24 | 25 | override fun onDestroy() { 26 | super.onDestroy() 27 | provider.destroy() 28 | } 29 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/mixin/RunnerMixin.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.mixin 2 | 3 | import android.os.Bundle 4 | import com.uacf.taskrunner.Runner 5 | import io.casey.musikcube.remote.Application 6 | import io.casey.musikcube.remote.framework.MixinBase 7 | 8 | class RunnerMixin(private val callbacks: Runner.TaskCallbacks, 9 | private val callingType: Class): MixinBase() 10 | { 11 | lateinit var runner: Runner 12 | private set 13 | 14 | override fun onCreate(bundle: Bundle) { 15 | super.onCreate(bundle) 16 | this.runner = Runner.attach(Application.instance, callingType, callbacks, bundle, null) 17 | } 18 | 19 | override fun onResume() { 20 | super.onResume() 21 | runner.resume() 22 | } 23 | 24 | override fun onPause() { 25 | super.onPause() 26 | runner.pause() 27 | } 28 | 29 | override fun onSaveInstanceState(bundle: Bundle) { 30 | super.onSaveInstanceState(bundle) 31 | runner.saveState(bundle) 32 | } 33 | 34 | override fun onDestroy() { 35 | super.onDestroy() 36 | runner.detach(callbacks) 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/model/ITrackListSlidingWindow.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.model 2 | 3 | import io.casey.musikcube.remote.service.websocket.model.ITrack 4 | 5 | interface ITrackListSlidingWindow { 6 | interface OnMetadataLoadedListener { 7 | fun onMetadataLoaded(offset: Int, count: Int) 8 | fun onReloaded(count: Int) 9 | } 10 | 11 | val count: Int 12 | fun requery() 13 | fun pause() 14 | fun resume() 15 | fun getTrack(index: Int): ITrack? 16 | fun setOnMetadataLoadedListener(loadedListener: OnMetadataLoadedListener) 17 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/util/Duration.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.shared.util 2 | 3 | import java.util.* 4 | 5 | object Duration { 6 | fun format(seconds: Double): String { 7 | val mins = seconds.toInt() / 60 8 | val secs = seconds.toInt() - mins * 60 9 | return String.format(Locale.getDefault(), "%d:%02d", mins, secs) 10 | } 11 | 12 | fun formatWithHours(seconds: Double): String { 13 | return when(val hours = seconds.toInt() / 3600) { 14 | 0 -> format(seconds) 15 | else -> { 16 | val mins = (seconds.toInt() % 3600) / 60 17 | val secs = (seconds.toInt() % 60) 18 | String.format(Locale.getDefault(), "%d:%02d:%02d", hours, mins, secs) 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/constant/Track.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.ui.tracks.constant 2 | 3 | object Track { 4 | object Extra { 5 | const val CATEGORY_TYPE = "extra_category_type" 6 | const val SELECTED_ID = "extra_selected_id" 7 | const val TITLE_ID = "extra_title_id" 8 | const val CATEGORY_VALUE = "extra_category_value" 9 | const val FRAGMENT_ARGUMENTS = "extra_fragment_arguments" 10 | } 11 | 12 | object RequestCode { 13 | const val EDIT_PLAYLIST = 72 14 | } 15 | } -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/util/Debouncer.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.util 2 | 3 | import android.os.Handler 4 | import android.os.Looper 5 | 6 | abstract class Debouncer(private val delay: Long) { 7 | private val handler = Handler(Looper.getMainLooper()) 8 | private var last: T? = null 9 | 10 | fun call() { 11 | handler.removeCallbacks(deferred) 12 | handler.postDelayed(deferred, delay) 13 | } 14 | 15 | fun call(context: T) { 16 | last = context 17 | handler.removeCallbacks(deferred) 18 | handler.postDelayed(deferred, delay) 19 | } 20 | 21 | fun cancel() { 22 | handler.removeCallbacks(deferred) 23 | } 24 | 25 | protected abstract fun onDebounced(last: T?) 26 | 27 | private val deferred:Runnable = object : Runnable { 28 | override fun run() { 29 | onDebounced(last) 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/java/io/casey/musikcube/remote/util/Preconditions.kt: -------------------------------------------------------------------------------- 1 | package io.casey.musikcube.remote.util 2 | 3 | import android.os.Looper 4 | 5 | object Preconditions { 6 | fun throwIfNotOnMainThread() { 7 | if (Thread.currentThread() !== Looper.getMainLooper().thread) { 8 | throw IllegalStateException("not on main thread") 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_left_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_right_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/slide_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/stay_put_250.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/anim/stay_put_350.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/category_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_art_placeholder.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_back.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_fab_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_leftarrow.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_menu.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_overflow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_reorder.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/ic_trashcan.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/not_playing_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/opaque_row_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/overflow_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/playback_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/playback_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-v21/playback_checkbox_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_toolbar_remote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_toolbar_remote.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_toolbar_streaming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/drawable-xxxhdpi/ic_toolbar_streaming.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/browse_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/connections_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/dialog_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/dialog_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/disconnected_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 16 | 17 | 24 | 25 | 32 | 33 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/empty_list_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/eq_band_row.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 25 | 26 | 33 | 34 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/fragment_with_transport_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/recycler_view_with_empty_state.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 22 | 23 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/remote_toggle.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/album_item_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/artist_item_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/edit_playlist_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/genre_item_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/left_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | 16 | 20 | 21 | 25 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/main_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/playlist_item_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/remote_settings_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/search_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/settings_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/track_item_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/transfer_from_server_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/transfer_to_server_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/menu/view_playlist_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_square.png -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/transition/transition_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/transition/transition_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #44661f 4 | #2c4214 5 | #d1ff9f 6 | #DC5256 7 | #A6E22E 8 | #E6DC74 9 | #FF9620 10 | #66D9EE 11 | #808080 12 | #606060 13 | #E6E6E6 14 | #424238 15 | #303030 16 | #CF000000 17 | #202020 18 | #bb000000 19 | 20 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 24sp 3 | 20sp 4 | 16sp 5 | 12sp 6 | 40dp 7 | 8dp 8 | 56dp 9 | 24dp 10 | 8dp 11 | 12 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/disk_cache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | disabled 5 | 0.5 gb 6 | 1 gb 7 | 2 gb 8 | 3 gb 9 | 4 gb 10 | 11 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/replaygain_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @string/replaygain_mode_disabled 5 | @string/replaygain_mode_track 6 | @string/replaygain_mode_album 7 | 8 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/streaming_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | remote 5 | streaming 6 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/title_ellipsis_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @string/ellipsis_mode_beginning 5 | @string/ellipsis_mode_middle 6 | @string/ellipsis_mode_end 7 | 8 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/transcode_bitrates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | disabled 5 | 64 6 | 96 7 | 128 8 | 196 9 | 256 10 | 320 11 | 12 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/transcode_format.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mp3 5 | opus 6 | ogg 7 | flac 8 | aac 9 | 10 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/values/transport_type_array.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @string/transport_type_gapless 5 | @string/transport_type_crossfade 6 | 7 | -------------------------------------------------------------------------------- /src/musikdroid/app/src/main/res/xml/searchable.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /src/musikdroid/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.0' 3 | 4 | repositories { 5 | google() 6 | mavenCentral() 7 | } 8 | 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:8.5.0' 11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 | classpath 'com.google.gms:google-services:4.4.2' 13 | classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2' 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | mavenCentral() 21 | } 22 | } 23 | 24 | task clean(type: Delete) { 25 | delete rootProject.buildDir 26 | } 27 | -------------------------------------------------------------------------------- /src/musikdroid/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536m 2 | org.gradle.caching=true 3 | org.gradle.parallel=true 4 | android.useAndroidX=true 5 | android.enableJetifier=true 6 | android.suppressUnsupportedCompileSdk=33 7 | android.nonTransitiveRClass=false 8 | android.nonFinalResIds=false -------------------------------------------------------------------------------- /src/musikdroid/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikdroid/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/musikdroid/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Oct 23 11:25:12 PDT 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip 7 | -------------------------------------------------------------------------------- /src/musikdroid/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /src/musikwin/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" -------------------------------------------------------------------------------- /src/musikwin/pch.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Application.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Application.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Application.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Application.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ApplicationThread.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ApplicationThread.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ApplicationThread.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ApplicationThread.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Button.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Button.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Button.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Button.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/CheckBox.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/CheckBox.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/CheckBox.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/CheckBox.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Color.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Color.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Color.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Color.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ComboBox.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ComboBox.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ComboBox.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ComboBox.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Config.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Config.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Config.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Config.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Container.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Container.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Container.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Container.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/DateTime.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/DateTime.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/DateTime.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/DateTime.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/DeviceContext.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/DeviceContext.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/DeviceContext.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/DeviceContext.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/EditView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/EditView.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/EditView.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/EditView.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Exception.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Exception.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Exception.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Exception.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/FolderBrowseDialog.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/FolderBrowseDialog.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/FolderBrowseDialog.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/FolderBrowseDialog.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Font.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Font.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Font.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Font.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Frame.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Frame.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Frame.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Frame.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/GroupBox.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/GroupBox.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/GroupBox.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/GroupBox.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ILayout.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ILayout.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Image.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Image.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Image.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Image.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ImageList.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ImageList.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ImageList.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ImageList.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Label.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Label.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Label.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Label.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/LinearLayout.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/LinearLayout.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/LinearLayout.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/LinearLayout.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ListView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ListView.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ListView.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ListView.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Locale.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Locale.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Locale.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Locale.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/MemoryDC.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/MemoryDC.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/MemoryDC.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/MemoryDC.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Menu.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Menu.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Menu.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Menu.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Panel.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Panel.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Panel.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Panel.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ProgressBar.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ProgressBar.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/ProgressBar.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/ProgressBar.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/RadioButton.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/RadioButton.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/RadioButton.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/RadioButton.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/RedrawLock.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/RedrawLock.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/RedrawLock.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/RedrawLock.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Splitter.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Splitter.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Splitter.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Splitter.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TabView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TabView.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TabView.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TabView.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Theme.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Theme.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Theme.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Theme.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Timer.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Timer.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Timer.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Timer.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TopLevelWindow.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TopLevelWindow.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TopLevelWindow.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TopLevelWindow.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Trackbar.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Trackbar.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Trackbar.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Trackbar.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TrayIconManager.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TrayIconManager.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/TrayIconManager.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/TrayIconManager.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Types.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Types.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Utility.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Utility.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Utility.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Utility.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/VirtualWindow.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/VirtualWindow.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/VirtualWindow.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/VirtualWindow.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Win32Config.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Win32Config.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Win32Exception.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Win32Exception.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Window.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Window.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/Window.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/Window.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/WindowGeometry.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/WindowGeometry.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/WindowGeometry.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/WindowGeometry.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/WindowPadding.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/WindowPadding.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/pch.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/pch.cpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/pch.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/pch.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/win32cpp.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clangen/musikcube/009e9620bd9d7f47db15294a93e7524ae7b83138/src/musikwin/win32cpp/win32cpp.hpp -------------------------------------------------------------------------------- /src/musikwin/win32cpp/win32cpp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 9.00 3 | # Visual Studio 2005 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win32cpp", "win32cpp.vcproj", "{E618F29F-BF28-441A-B039-9E10A631D881}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Release|Win32 = Release|Win32 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {E618F29F-BF28-441A-B039-9E10A631D881}.Debug|Win32.ActiveCfg = Debug|Win32 13 | {E618F29F-BF28-441A-B039-9E10A631D881}.Debug|Win32.Build.0 = Debug|Win32 14 | {E618F29F-BF28-441A-B039-9E10A631D881}.Release|Win32.ActiveCfg = Release|Win32 15 | {E618F29F-BF28-441A-B039-9E10A631D881}.Release|Win32.Build.0 = Release|Win32 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /src/plugins/alsaout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (alsaout_SOURCES 2 | alsaout_plugin.cpp 3 | AlsaOut.cpp 4 | ) 5 | 6 | find_library(LIBASOUND asound) 7 | 8 | if ("${LIBASOUND}" STREQUAL "LIBASOUND-NOTFOUND") 9 | disable_plugin(alsaout) 10 | else() 11 | add_library(alsaout SHARED ${alsaout_SOURCES}) 12 | target_link_libraries(alsaout ${LIBASOUND}) 13 | endif() 14 | -------------------------------------------------------------------------------- /src/plugins/coreaudioout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (coreaudioout_SOURCES 2 | coreaudioout_plugin.cpp 3 | CoreAudioOut.cpp 4 | ) 5 | 6 | if (APPLE) 7 | find_library(CORE_FOUNDATION_LIBRARY CoreFoundation) 8 | find_library(CORE_AUDIO_LIBRARY CoreAudio) 9 | find_library(AUDIO_TOOLBOX_LIBRARY AudioToolbox) 10 | mark_as_advanced(CORE_FOUNDATION_LIBRARY 11 | CORE_AUDIO_LIBRARY 12 | AUDIO_TOOLBOX_LIBRARY) 13 | set(FRAMEWORK_LIBS ${CORE_FOUNDATION_LIBRARY} ${CORE_AUDIO_LIBRARY} ${AUDIO_TOOLBOX_LIBRARY}) 14 | 15 | add_library(coreaudioout SHARED ${coreaudioout_SOURCES}) 16 | target_link_libraries(coreaudioout ${FRAMEWORK_LIBS}) 17 | else() 18 | disable_plugin(coreaudioout) 19 | endif() 20 | -------------------------------------------------------------------------------- /src/plugins/directsoundout/directsoundout.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {aaeaedc0-8213-46c7-8e9d-2c56ce4b6325} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {ce86be01-a456-4ff6-b915-9a7c062f57b1} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | 22 | 23 | plugin 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/plugins/ffmpegdecoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (ffmpegdecoder_SOURCES 2 | plugin.cpp 3 | FfmpegDecoder.cpp) 4 | 5 | add_library(ffmpegdecoder SHARED ${ffmpegdecoder_SOURCES}) 6 | 7 | if (${BUILD_STANDALONE} MATCHES "true") 8 | include_directories(AFTER ${VENDOR_INCLUDE_DIRECTORIES}) 9 | message(STATUS "[ffmpegdecoder] using include dirs: ${VENDOR_INCLUDE_DIRECTORIES}") 10 | find_vendor_library(AVCODEC avcodec-musikcube) 11 | find_vendor_library(AVUTIL avutil-musikcube) 12 | find_vendor_library(AVFORMAT avformat-musikcube) 13 | find_vendor_library(SWRESAMPLE swresample-musikcube) 14 | else() 15 | # fedora (and probably other RPM-based distros) put ffmpeg includes here... 16 | include_directories("/usr/include/ffmpeg") 17 | include_directories("/usr/local/include/ffmpeg") 18 | find_library(AVCODEC NAMES avcodec) 19 | find_library(AVUTIL NAMES avutil) 20 | find_library(AVFORMAT NAMES avformat) 21 | find_library(SWRESAMPLE NAMES swresample) 22 | endif() 23 | 24 | target_link_libraries(ffmpegdecoder ${AVCODEC} ${AVUTIL} ${AVFORMAT} ${SWRESAMPLE}) 25 | -------------------------------------------------------------------------------- /src/plugins/ffmpegdecoder/ffmpegdecoder.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | 10 | 11 | src 12 | 13 | 14 | src 15 | 16 | 17 | 18 | 19 | src 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/plugins/gmedecoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (gmedecoder_SOURCES 2 | plugin.cpp 3 | GmeDataStream.cpp 4 | GmeDecoder.cpp 5 | GmeIndexerSource.cpp 6 | ) 7 | 8 | add_definitions(-DHAVE_STDINT_H) 9 | 10 | if (${BUILD_STANDALONE} MATCHES "true") 11 | add_library(gmedecoder SHARED ${gmedecoder_SOURCES}) 12 | include_directories(BEFORE ${VENDOR_INCLUDE_DIRECTORIES}) 13 | find_vendor_library(GME gme) 14 | target_link_libraries(gmedecoder ${GME}) 15 | else() 16 | find_library(GME NAMES gme) 17 | if ("${GME}" STREQUAL "GME-NOTFOUND") 18 | disable_plugin(gmedecoder) 19 | else() 20 | add_library(gmedecoder SHARED ${gmedecoder_SOURCES}) 21 | target_link_libraries(gmedecoder ${GME}) 22 | endif() 23 | endif() 24 | 25 | message(STATUS "[gmedecoder] using ${GME}") 26 | -------------------------------------------------------------------------------- /src/plugins/httpdatastream/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (httpdatastream_SOURCES 2 | httpdatastream_plugin.cpp 3 | HttpDataStream.cpp 4 | HttpDataStreamFactory.cpp 5 | LruDiskCache.cpp) 6 | 7 | add_library(httpdatastream SHARED ${httpdatastream_SOURCES}) 8 | 9 | if (${BUILD_STANDALONE} MATCHES "true") 10 | include_directories(BEFORE ${VENDOR_INCLUDE_DIRECTORIES}) 11 | endif() 12 | 13 | target_include_directories(httpdatastream BEFORE PUBLIC) 14 | target_link_libraries(httpdatastream ${LIBCURL}) 15 | -------------------------------------------------------------------------------- /src/plugins/libopenmptdecoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (openmptdecoder_SOURCES 2 | plugin.cpp 3 | OpenMptDataStream.cpp 4 | OpenMptDecoder.cpp 5 | OpenMptIndexerSource.cpp 6 | Utility.cpp) 7 | 8 | if (${BUILD_STANDALONE} MATCHES "true") 9 | add_library(openmptdecoder SHARED ${openmptdecoder_SOURCES}) 10 | target_include_directories(openmptdecoder BEFORE PRIVATE ${VENDOR_INCLUDE_DIRECTORIES}) 11 | find_vendor_library(LIBOPENMPT openmpt) 12 | target_link_libraries(openmptdecoder ${LIBOPENMPT}) 13 | else() 14 | find_library(LIBOPENMPT NAMES openmpt) 15 | find_library(LIBMPG123 NAMES mpg123) 16 | find_library(LIBZ NAMES z) 17 | if ("${LIBOPENMPT}" STREQUAL "LIBOPENMPT-NOTFOUND") 18 | disable_plugin(openmptdecoder) 19 | else() 20 | add_library(openmptdecoder SHARED ${openmptdecoder_SOURCES}) 21 | target_link_libraries(openmptdecoder ${LIBOPENMPT} ${LIBMPG123} ${LIBZ}) 22 | endif() 23 | endif() 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/plugins/libopenmptdecoder/libopenmptdecoder.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {7a89a1d3-bd14-40b2-b57f-cffad48da575} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | 10 | 11 | src 12 | 13 | 14 | src 15 | 16 | 17 | 18 | 19 | src 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/plugins/macosmediakeys/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (macosmediakeys_SOURCES 2 | plugin.mm 3 | NSObject+SPInvocationGrabbing.m 4 | SPMediaKeyTap.m 5 | ) 6 | 7 | if (APPLE) 8 | FIND_LIBRARY(APP_KIT_LIBRARY AppKit) 9 | FIND_LIBRARY(CARBON_LIBRARY Carbon) 10 | MARK_AS_ADVANCED (APP_KIT_LIBRARY CARBON_LIBRARY) 11 | add_library(macosmediakeys SHARED ${macosmediakeys_SOURCES}) 12 | target_link_libraries(macosmediakeys ${APP_KIT_LIBRARY} ${CARBON_LIBRARY}) 13 | else() 14 | disable_plugin(macosmediakeys) 15 | endif() -------------------------------------------------------------------------------- /src/plugins/macosmediakeys/NSObject+SPInvocationGrabbing.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface SPInvocationGrabber : NSObject { 4 | id _object; 5 | NSInvocation *_invocation; 6 | int frameCount; 7 | char **frameStrings; 8 | BOOL backgroundAfterForward; 9 | BOOL onMainAfterForward; 10 | BOOL waitUntilDone; 11 | } 12 | -(id)initWithObject:(id)obj; 13 | -(id)initWithObject:(id)obj stacktraceSaving:(BOOL)saveStack; 14 | @property (readonly, retain, nonatomic) id object; 15 | @property (readonly, retain, nonatomic) NSInvocation *invocation; 16 | @property BOOL backgroundAfterForward; 17 | @property BOOL onMainAfterForward; 18 | @property BOOL waitUntilDone; 19 | -(void)invoke; // will release object and invocation 20 | -(void)printBacktrace; 21 | -(void)saveBacktrace; 22 | @end 23 | 24 | @interface NSObject (SPInvocationGrabbing) 25 | -(id)grab; 26 | -(id)invokeAfter:(NSTimeInterval)delta; 27 | -(id)nextRunloop; 28 | -(id)inBackground; 29 | -(id)onMainAsync:(BOOL)async; 30 | @end 31 | -------------------------------------------------------------------------------- /src/plugins/macosmediakeys/SPMediaKeyTap.h: -------------------------------------------------------------------------------- 1 | #include 2 | #import 3 | #import 4 | 5 | // http://overooped.com/post/2593597587/mediakeys 6 | 7 | #define SPSystemDefinedEventMediaKeys 8 8 | 9 | @interface SPMediaKeyTap : NSObject { 10 | EventHandlerRef _app_switching_ref; 11 | EventHandlerRef _app_terminating_ref; 12 | CFMachPortRef _eventPort; 13 | CFRunLoopSourceRef _eventPortSource; 14 | CFRunLoopRef _tapThreadRL; 15 | BOOL _shouldInterceptMediaKeyEvents; 16 | id _delegate; 17 | // The app that is frontmost in this list owns media keys 18 | NSMutableArray *_mediaKeyAppList; 19 | } 20 | + (NSArray*)defaultMediaKeyUserBundleIdentifiers; 21 | 22 | -(id)initWithDelegate:(id)delegate; 23 | 24 | +(BOOL)usesGlobalMediaKeyTap; 25 | -(BOOL)startWatchingMediaKeys; 26 | -(void)stopWatchingMediaKeys; 27 | -(void)handleAndReleaseMediaKeyEvent:(NSEvent *)event; 28 | @end 29 | 30 | @interface NSObject (SPMediaKeyTapDelegate) 31 | -(void)mediaKeyTap:(SPMediaKeyTap*)keyTap receivedMediaKeyEvent:(NSEvent*)event; 32 | @end 33 | 34 | #ifdef __cplusplus 35 | extern "C" { 36 | #endif 37 | 38 | extern NSString *kMediaKeyUsingBundleIdentifiersDefaultsKey; 39 | extern NSString *kIgnoreMediaKeysDefaultsKey; 40 | 41 | #ifdef __cplusplus 42 | } 43 | #endif -------------------------------------------------------------------------------- /src/plugins/mpris/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (mpris_SOURCES 2 | mpris.cpp 3 | dbus.cpp) 4 | 5 | if (USE_ELOGIND) 6 | set(SDBUS "libelogind >= 239.3") 7 | set(SDBUS_HEADER "") 8 | elseif (USE_BASU) 9 | set(SDBUS "basu") 10 | set(SDBUS_HEADER "") 11 | else() 12 | set(SDBUS "libsystemd") 13 | set(SDBUS_HEADER "") 14 | endif() 15 | 16 | find_package(PkgConfig) 17 | pkg_check_modules(SDBUS IMPORTED_TARGET ${SDBUS}) 18 | 19 | if (NOT DEFINED SDBUS_LINK_LIBRARIES) 20 | disable_plugin(mpris) 21 | else() 22 | message(STATUS "[mpris] plugin enabled. using " ${SDBUS_LINK_LIBRARIES}) 23 | add_library(mpris SHARED ${mpris_SOURCES}) 24 | target_compile_definitions(mpris PUBLIC SDBUS_HEADER=${SDBUS_HEADER}) 25 | target_link_libraries(mpris PkgConfig::SDBUS) 26 | endif() 27 | -------------------------------------------------------------------------------- /src/plugins/mpris/README.md: -------------------------------------------------------------------------------- 1 | # MPRIS support plugin 2 | 3 | enables a MPRIS dbus interface for `musikcube` on Linux. The dbus client requires systemd to available in the system (and thus libsystemd) 4 | -------------------------------------------------------------------------------- /src/plugins/mpris/dbus.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | extern "C" { 4 | #include SDBUS_HEADER 5 | } 6 | 7 | extern const sd_bus_vtable musikcube_mp_table[]; 8 | extern const sd_bus_vtable musikcube_mpp_table[]; 9 | -------------------------------------------------------------------------------- /src/plugins/nullout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (nullout_SOURCES 2 | nullout_plugin.cpp 3 | NullOut.cpp 4 | ) 5 | 6 | add_library(nullout SHARED ${nullout_SOURCES}) 7 | target_link_libraries(nullout) 8 | -------------------------------------------------------------------------------- /src/plugins/nullout/nullout.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | 22 | 23 | plugin 24 | 25 | 26 | plugin 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/plugins/pipewireout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (pipewireout_SOURCES 2 | pipewireout_plugin.cpp 3 | PipeWireOut.cpp 4 | ) 5 | 6 | if (${ENABLE_PIPEWIRE} MATCHES "false") 7 | disable_plugin(pipewireout) 8 | else() 9 | find_package(PkgConfig) 10 | pkg_check_modules(PIPEWIRE IMPORTED_TARGET libpipewire-0.3) 11 | if (NOT DEFINED PIPEWIRE_LINK_LIBRARIES) 12 | disable_plugin(pipewireout) 13 | else() 14 | add_library(pipewireout SHARED ${pipewireout_SOURCES}) 15 | target_link_libraries(pipewireout PkgConfig::PIPEWIRE) 16 | endif() 17 | endif() 18 | 19 | -------------------------------------------------------------------------------- /src/plugins/portaudioout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (portaudioout_SOURCES 2 | portaudioout_plugin.cpp 3 | PortAudioOut.cpp 4 | ) 5 | 6 | find_library(LIBPORTAUDIO "portaudio") 7 | 8 | if ("${LIBPORTAUDIO}" STREQUAL "LIBPORTAUDIO-NOTFOUND") 9 | disable_plugin(portaudioout) 10 | else() 11 | add_library(portaudioout SHARED ${portaudioout_SOURCES}) 12 | include_directories("${BSD_PATH_PREFIX}/include") 13 | target_link_libraries(portaudioout ${LIBPORTAUDIO}) 14 | message(STATUS "[portaudioout] using libportaudio at: ${LIBPORTAUDIO}") 15 | endif() -------------------------------------------------------------------------------- /src/plugins/pulseout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (pulseout_SOURCES 2 | pulseout_plugin.cpp 3 | pulse_blocking_stream.c 4 | PulseOut.cpp 5 | ) 6 | 7 | find_library(LIBPULSE pulse) 8 | 9 | if ("${LIBPULSE}" STREQUAL "LIBPULSE-NOTFOUND") 10 | disable_plugin(pulseout) 11 | else() 12 | add_library(pulseout SHARED ${pulseout_SOURCES}) 13 | target_link_libraries(pulseout ${LIBPULSE}) 14 | endif() 15 | -------------------------------------------------------------------------------- /src/plugins/server/.gitignore: -------------------------------------------------------------------------------- 1 | **/Debug 2 | **/Release 3 | **/.vs 4 | **/*.opendb 5 | **/*.aps 6 | **/*.suo 7 | **/*.db 8 | **/CMakeCache.txt 9 | **/CMakeFiles 10 | Makefile 11 | cmake_install.cmake 12 | install_manifest.txt 13 | bin 14 | -------------------------------------------------------------------------------- /src/plugins/server/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (server_SOURCES 2 | BlockingTranscoder.cpp 3 | HttpServer.cpp 4 | main.cpp 5 | Snapshots.cpp 6 | Transcoder.cpp 7 | TranscodingAudioDataStream.cpp 8 | Util.cpp 9 | WebSocketServer.cpp) 10 | 11 | add_library(server SHARED ${server_SOURCES}) 12 | 13 | target_include_directories(server BEFORE PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/include") 14 | target_include_directories(server BEFORE PRIVATE ${VENDOR_INCLUDE_DIRECTORIES}) 15 | 16 | if (${BUILD_STANDALONE} MATCHES "true") 17 | find_vendor_library(LIBMICROHTTPD microhttpd) 18 | else() 19 | if (APPLE) 20 | find_library(LIBGNUTLS NAMES gnutls) 21 | set(EXTRA_LIBS "${LIBGNUTLS}") 22 | endif() 23 | find_library_and_header(LIBMICROHTTPD microhttpd microhttpd.h) 24 | endif() 25 | 26 | find_library(LIBZ NAMES z) 27 | message(STATUS "[server] using " ${LIBMICROHTTPD} ", " ${LIBZ}) 28 | 29 | target_link_libraries(server ${LIBZ} ${LIBMICROHTTPD} ${EXTRA_LIBS}) 30 | -------------------------------------------------------------------------------- /src/plugins/server/README.md: -------------------------------------------------------------------------------- 1 | # musikcube server plugin 2 | 3 | a playback remote and streaming audio server for `musikcube` using web sockets and vanilla http. 4 | 5 | * [`musikcube`](https://github.com/clangen/musikcube) for windows, macOS, linux and freebsd are all supported. 6 | * [`musikdroid`](https://github.com/clangen/musikcube/tree/master/src/musikdroid) is a client implementation written for android. 7 | * [api documentation can be found here](https://github.com/clangen/musikcube/wiki/remote-api-documentation). 8 | 9 | the code is somewhat ugly, but it works pretty well. i currently have it running 24/7 on a raspberry pi with an [iqaudio dac+](http://iqaudio.co.uk/audio/8-pi-dac-0712411999643.html), paired with a first generation moto g as a remote. 10 | 11 | the backend plugin uses [`websocketpp`](https://github.com/zaphoyd/websocketpp) and [`libmicrohttpd`](https://www.gnu.org/software/libmicrohttpd/). the android client uses [`nv-websocket-client`](https://github.com/TakahikoKawasaki/nv-websocket-client) and [`exoplayer`](https://github.com/google/ExoPlayer). 12 | -------------------------------------------------------------------------------- /src/plugins/server/websocket_remote.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server", "server.vcxproj", "{43A78C57-C9A3-4852-B0BE-05335C5C077D}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Debug|x64.ActiveCfg = Debug|x64 17 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Debug|x64.Build.0 = Debug|x64 18 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Debug|x86.ActiveCfg = Debug|Win32 19 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Debug|x86.Build.0 = Debug|Win32 20 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Release|x64.ActiveCfg = Release|x64 21 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Release|x64.Build.0 = Release|x64 22 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Release|x86.ActiveCfg = Release|Win32 23 | {43A78C57-C9A3-4852-B0BE-05335C5C077D}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /src/plugins/sndioout/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (sndioout_SOURCES 2 | plugin.cpp 3 | SndioOut.cpp 4 | ) 5 | 6 | find_library(LIBSNDIO sndio) 7 | 8 | if ("${LIBSNDIO}" STREQUAL "LIBSNDIO-NOTFOUND") 9 | disable_plugin(sndioout) 10 | else() 11 | add_library(sndioout SHARED ${sndioout_SOURCES}) 12 | target_link_libraries(sndioout ${LIBSNDIO}) 13 | endif() 14 | -------------------------------------------------------------------------------- /src/plugins/stockencoders/.gitignore: -------------------------------------------------------------------------------- 1 | **/Debug 2 | **/Release 3 | **/.vs 4 | **/*.opendb 5 | **/*.aps 6 | **/*.suo 7 | **/*.db 8 | **/CMakeCache.txt 9 | **/CMakeFiles 10 | Makefile 11 | cmake_install.cmake 12 | install_manifest.txt 13 | bin 14 | -------------------------------------------------------------------------------- /src/plugins/stockencoders/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (stockencoders_SOURCES 2 | main.cpp 3 | LameEncoder.cpp 4 | FfmpegEncoder.cpp) 5 | 6 | add_library(stockencoders SHARED ${stockencoders_SOURCES}) 7 | 8 | if (${BUILD_STANDALONE} MATCHES "true") 9 | include_directories(BEFORE ${VENDOR_INCLUDE_DIRECTORIES}) 10 | find_vendor_library(AVCODEC avcodec-musikcube) 11 | find_vendor_library(AVUTIL avutil-musikcube) 12 | find_vendor_library(AVFORMAT avformat-musikcube) 13 | find_vendor_library(SWRESAMPLE swresample-musikcube) 14 | find_vendor_library(MP3LAME mp3lame) 15 | else() 16 | # fedora (and probably other RPM-based distros) put ffmpeg includes here... 17 | include_directories("/usr/include/ffmpeg") 18 | include_directories("/usr/local/include/ffmpeg") 19 | find_library(AVCODEC NAMES avcodec) 20 | find_library(AVUTIL NAMES avutil) 21 | find_library(AVFORMAT NAMES avformat) 22 | find_library(SWRESAMPLE NAMES swresample) 23 | find_library(MP3LAME NAMES mp3lame) 24 | endif() 25 | 26 | target_link_libraries(stockencoders ${AVCODEC} ${AVUTIL} ${AVFORMAT} ${SWRESAMPLE} ${MP3LAME}) 27 | -------------------------------------------------------------------------------- /src/plugins/stockencoders/stockencoders.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | 10 | 11 | src 12 | 13 | 14 | src 15 | 16 | 17 | src 18 | 19 | 20 | 21 | 22 | src 23 | 24 | 25 | src 26 | 27 | 28 | src 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/plugins/supereqdsp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (nullout_SOURCES 2 | supereq/Equ.cpp 3 | supereq/Fftsg_fl.c 4 | supereqdsp_plugin.cpp 5 | SuperEqDsp.cpp 6 | ) 7 | 8 | add_library(supereqdsp SHARED ${nullout_SOURCES}) 9 | target_link_libraries(supereqdsp) 10 | -------------------------------------------------------------------------------- /src/plugins/supereqdsp/supereq/COPYING: -------------------------------------------------------------------------------- 1 | SuperEQ DSP plugin for DeaDBeeF Player 2 | Copyright (C) 2009-2014 Alexey Yakovenko 3 | 4 | This program is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License 6 | as published by the Free Software Foundation; either version 2 7 | of the License, or (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program; if not, write to the Free Software 16 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | 18 | 19 | The original SuperEQ code: 20 | 21 | Shibatch Super Equalizer ver 0.03 for winamp 22 | written by Naoki Shibata shibatch@users.sourceforge.net 23 | This program(except FFT part) is distributed under LGPL. See LGPL.txt for 24 | details. 25 | 26 | 27 | Ooura FFT implementation 28 | 29 | Copyright Takuya OOURA, 1996-2001 30 | http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html 31 | 32 | You may use, copy, modify and distribute this code for any purpose (include commercial use) and without fee. 33 | Please refer to this package when you modify this code. 34 | -------------------------------------------------------------------------------- /src/plugins/supereqdsp/supereq/dsp_superequ.txt: -------------------------------------------------------------------------------- 1 | 2 | Shibatch Super Equalizer ver 0.03 for winamp 3 | written by Naoki Shibata shibatch@users.sourceforge.net 4 | 5 | Shibatch Super Equalizer is a graphic and parametric equalizer plugin 6 | for winamp. This plugin uses 16383th order FIR filter with FFT algorithm. 7 | It's equalization is very precise. Equalization setting can be done 8 | for each channel separately. 9 | 10 | Processes of internal equalizer in winamp are actually done by each 11 | input plugin, so the results may differ for each input plugin. 12 | With this plugin, this problem can be avoided. 13 | 14 | This plugin is optimized for processors which have cache equal to or 15 | greater than 128k bytes(16383*2*sizeof(float) = 128k). This plugin 16 | won't work efficiently with K6 series processors(buy Athlon!!!). 17 | 18 | Do not forget pressing "preview" button after changing setting. 19 | 20 | http://shibatch.sourceforge.net/ 21 | 22 | *** 23 | 24 | This program(except FFT part) is distributed under LGPL. See LGPL.txt for 25 | details. 26 | 27 | FFT part is a routine made by Mr.Ooura. This routine is a freeware. Contact 28 | Mr.Ooura for details of distributing licenses. 29 | 30 | http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html 31 | -------------------------------------------------------------------------------- /src/plugins/supereqdsp/supereqdsp.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | plugin 22 | 23 | 24 | 25 | 26 | plugin 27 | 28 | 29 | plugin 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/plugins/supereqdsp/supereqdsp.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {8a763391-5af9-4f77-a19e-c7c432539c50} 6 | 7 | 8 | {ecc766df-beda-4169-af03-e4cb58ee1335} 9 | 10 | 11 | 12 | 13 | plugin\supereq 14 | 15 | 16 | plugin\supereq 17 | 18 | 19 | plugin 20 | 21 | 22 | plugin 23 | 24 | 25 | 26 | 27 | plugin\supereq 28 | 29 | 30 | plugin\supereq 31 | 32 | 33 | plugin 34 | 35 | 36 | plugin 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/plugins/taglib_plugin/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set (taglibreader_SOURCES 2 | taglib_plugin.cpp 3 | TaglibMetadataReader.cpp 4 | ) 5 | 6 | add_library(taglibreader SHARED ${taglibreader_SOURCES}) 7 | 8 | find_library(LIBZ z) 9 | 10 | if (${BUILD_STANDALONE} MATCHES "true") 11 | find_vendor_library(LIBTAG tag) 12 | include_directories(BEFORE ${VENDOR_INCLUDE_DIRECTORIES}) 13 | else() 14 | find_library(LIBTAG tag) 15 | endif() 16 | 17 | message(STATUS "[taglibmetadatareader] using ${LIBTAG}") 18 | target_link_libraries(taglibreader ${LIBTAG} ${LIBZ}) 19 | -------------------------------------------------------------------------------- /src/plugins/taglib_plugin/taglib_plugin.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | 10 | 11 | plugin 12 | 13 | 14 | plugin 15 | 16 | 17 | 18 | 19 | plugin 20 | 21 | 22 | plugin 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/plugins/wasapiout/wasapiout.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | 22 | 23 | plugin 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/plugins/waveout/waveout.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | plugin 22 | 23 | 24 | 25 | 26 | plugin 27 | 28 | 29 | plugin 30 | 31 | 32 | plugin 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/plugins/win32gdivis/GdiVis-musikcube.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4af6aad0-9c71-4dc2-8343-19c467346884} 6 | cpp;c;cxx;rc;def;r;odl;idl;hpj;bat 7 | 8 | 9 | 10 | 11 | Source Files 12 | 13 | 14 | Source Files 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/plugins/win32globalhotkeys/win32globalhotkeys.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {803aac08-5b94-432d-8333-c6feb1c0484b} 6 | h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {9b4fd5cc-1eb5-4194-b8af-a813d01a73c0} 10 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 11 | 12 | 13 | 14 | 15 | plugin 16 | 17 | 18 | plugin 19 | 20 | 21 | 22 | 23 | plugin 24 | 25 | 26 | --------------------------------------------------------------------------------