├── NTifyShowStable.png ├── src ├── main │ ├── java │ │ └── com │ │ │ ├── github │ │ │ └── kwhat │ │ │ │ └── jnativehook │ │ │ │ ├── .DEPINFO │ │ │ │ ├── mouse │ │ │ │ ├── package-info.java │ │ │ │ ├── NativeMouseWheelAdapter.java │ │ │ │ ├── NativeMouseAdapter.java │ │ │ │ ├── NativeMouseMotionAdapter.java │ │ │ │ ├── NativeMouseInputAdapter.java │ │ │ │ └── NativeMouseInputListener.java │ │ │ │ ├── keyboard │ │ │ │ ├── package-info.java │ │ │ │ └── NativeKeyAdapter.java │ │ │ │ └── dispatcher │ │ │ │ └── package-info.java │ │ │ └── spotifyxp │ │ │ ├── deps │ │ │ ├── io │ │ │ │ └── .DEPINFO │ │ │ ├── mslinks │ │ │ │ ├── .DEPINFO │ │ │ │ ├── Serializable.java │ │ │ │ ├── ShellLinkException.java │ │ │ │ ├── UnsupportedItemIDException.java │ │ │ │ ├── UnsupportedCLSIDException.java │ │ │ │ ├── extra │ │ │ │ │ └── Stub.java │ │ │ │ └── data │ │ │ │ │ ├── BitSet32.java │ │ │ │ │ ├── Size.java │ │ │ │ │ ├── ItemIDUnknown.java │ │ │ │ │ ├── ItemIDRoot.java │ │ │ │ │ ├── CNRLinkFlags.java │ │ │ │ │ └── LinkInfoFlags.java │ │ │ ├── javazoom │ │ │ │ └── jl │ │ │ │ │ └── decoder │ │ │ │ │ ├── .DEPINFO │ │ │ │ │ └── FrameDecoder.java │ │ │ ├── com │ │ │ │ └── spotify │ │ │ │ │ └── .DEPINFO │ │ │ ├── xyz │ │ │ │ └── gianlu │ │ │ │ │ ├── .DEPINFO │ │ │ │ │ ├── README.md │ │ │ │ │ ├── zeroconf │ │ │ │ │ ├── PacketListener.java │ │ │ │ │ ├── RecordANY.java │ │ │ │ │ ├── RecordPTR.java │ │ │ │ │ ├── RecordA.java │ │ │ │ │ └── RecordAAAA.java │ │ │ │ │ └── librespot │ │ │ │ │ ├── player │ │ │ │ │ ├── crossfade │ │ │ │ │ │ ├── GainInterpolator.java │ │ │ │ │ │ ├── LinearIncreasingInterpolator.java │ │ │ │ │ │ └── LinearDecreasingInterpolator.java │ │ │ │ │ ├── mixing │ │ │ │ │ │ └── output │ │ │ │ │ │ │ ├── SinkException.java │ │ │ │ │ │ │ ├── StreamOutput.java │ │ │ │ │ │ │ └── SinkOutput.java │ │ │ │ │ ├── contexts │ │ │ │ │ │ ├── GeneralFiniteContext.java │ │ │ │ │ │ ├── GeneralInfiniteContext.java │ │ │ │ │ │ └── SearchContext.java │ │ │ │ │ ├── decoders │ │ │ │ │ │ └── SeekableInputStream.java │ │ │ │ │ └── metrics │ │ │ │ │ │ └── NewPlaybackIdEvent.java │ │ │ │ │ ├── audio │ │ │ │ │ ├── HaltListener.java │ │ │ │ │ ├── GeneralWritableStream.java │ │ │ │ │ ├── decrypt │ │ │ │ │ │ ├── AudioDecrypt.java │ │ │ │ │ │ └── NoopAudioDecrypt.java │ │ │ │ │ ├── format │ │ │ │ │ │ ├── AudioQualityPicker.java │ │ │ │ │ │ └── SuperAudioFormat.java │ │ │ │ │ ├── DecodedAudioStream.java │ │ │ │ │ └── storage │ │ │ │ │ │ └── AudioFile.java │ │ │ │ │ ├── mercury │ │ │ │ │ ├── SubListener.java │ │ │ │ │ └── ProtobufMercuryRequest.java │ │ │ │ │ ├── core │ │ │ │ │ └── PacketsReceiver.java │ │ │ │ │ ├── json │ │ │ │ │ ├── GenericJson.java │ │ │ │ │ ├── JsonWrapper.java │ │ │ │ │ └── StationsWrapper.java │ │ │ │ │ ├── common │ │ │ │ │ ├── Log4JUncaughtExceptionHandler.java │ │ │ │ │ └── NameThreadFactory.java │ │ │ │ │ ├── metadata │ │ │ │ │ ├── UnsupportedId.java │ │ │ │ │ └── PlaylistId.java │ │ │ │ │ ├── decoders │ │ │ │ │ └── SeekableInputStream.java │ │ │ │ │ ├── dealer │ │ │ │ │ └── MessageType.java │ │ │ │ │ └── cache │ │ │ │ │ └── JournalHeader.java │ │ │ ├── se │ │ │ │ └── michaelthelin │ │ │ │ │ └── spotify │ │ │ │ │ ├── .DEPINFO │ │ │ │ │ ├── model_objects │ │ │ │ │ ├── special │ │ │ │ │ │ └── README.md │ │ │ │ │ └── miscellaneous │ │ │ │ │ │ └── README.md │ │ │ │ │ ├── requests │ │ │ │ │ └── data │ │ │ │ │ │ ├── search │ │ │ │ │ │ └── interfaces │ │ │ │ │ │ │ └── ISearchModelObject.java │ │ │ │ │ │ ├── personalization │ │ │ │ │ │ └── interfaces │ │ │ │ │ │ │ └── IArtistTrackModelObject.java │ │ │ │ │ │ ├── IPagingRequestBuilder.java │ │ │ │ │ │ ├── IPagingCursorbasedRequestBuilder.java │ │ │ │ │ │ ├── AbstractDataRequest.java │ │ │ │ │ │ ├── AbstractDataPagingRequest.java │ │ │ │ │ │ ├── AbstractDataPagingCursorbasedRequest.java │ │ │ │ │ │ └── episodes │ │ │ │ │ │ └── SaveEpisodesRequest.java │ │ │ │ │ ├── exceptions │ │ │ │ │ └── detailed │ │ │ │ │ │ ├── ForbiddenException.java │ │ │ │ │ │ ├── BadRequestException.java │ │ │ │ │ │ ├── NotFoundException.java │ │ │ │ │ │ ├── BadGatewayException.java │ │ │ │ │ │ ├── UnauthorizedException.java │ │ │ │ │ │ ├── InternalServerErrorException.java │ │ │ │ │ │ ├── ServiceUnavailableException.java │ │ │ │ │ │ └── TooManyRequestsException.java │ │ │ │ │ ├── SpotifyApiThreading.java │ │ │ │ │ └── enums │ │ │ │ │ ├── AlbumType.java │ │ │ │ │ ├── Modality.java │ │ │ │ │ ├── AlbumGroup.java │ │ │ │ │ ├── ProductType.java │ │ │ │ │ ├── CopyrightType.java │ │ │ │ │ ├── CurrentlyPlayingType.java │ │ │ │ │ ├── ReleaseDatePrecision.java │ │ │ │ │ ├── ModelObjectType.java │ │ │ │ │ └── Action.java │ │ │ └── de │ │ │ │ └── werwolf2303 │ │ │ │ └── sql │ │ │ │ ├── SQLElement.java │ │ │ │ ├── SQLEntryTypes.java │ │ │ │ └── SQLInsert.java │ │ │ ├── testing │ │ │ └── Test.java │ │ │ ├── guielements │ │ │ ├── README.MD │ │ │ └── DefTable.java │ │ │ ├── panels │ │ │ ├── View.java │ │ │ └── Views.java │ │ │ ├── support │ │ │ ├── SupportModule.java │ │ │ └── SupportModuleLoader.java │ │ │ ├── events │ │ │ ├── EventSubscriber.java │ │ │ ├── LoggerEvent.java │ │ │ ├── HtmlDialogEvents.java │ │ │ └── LibraryChange.java │ │ │ ├── setup │ │ │ └── SetupState.java │ │ │ ├── theming │ │ │ ├── Theme.java │ │ │ └── themes │ │ │ │ ├── Ugly.java │ │ │ │ ├── MacOS.java │ │ │ │ └── DarkGreen.java │ │ │ ├── utils │ │ │ ├── SystemUtils.java │ │ │ ├── NameValuePair.java │ │ │ ├── ClipboardUtil.java │ │ │ ├── AsyncActionListener.java │ │ │ └── ArchitectureDetection.java │ │ │ ├── Flags.java │ │ │ ├── args │ │ │ ├── Argument.java │ │ │ ├── Debug.java │ │ │ ├── NoMediaControl.java │ │ │ ├── Language.java │ │ │ ├── Help.java │ │ │ ├── Development.java │ │ │ ├── SetupComplete.java │ │ │ └── CustomSaveDir.java │ │ │ ├── dialogs │ │ │ ├── CancelDialog.form │ │ │ ├── HTMLDialog.form │ │ │ └── LyricsDialog.form │ │ │ ├── configuration │ │ │ ├── ICustomConfigValue.java │ │ │ └── ConfigValueTypes.java │ │ │ ├── swingextension │ │ │ ├── PaintPanel.java │ │ │ ├── JDialog.java │ │ │ ├── SettingsTable.java │ │ │ └── EasyJLabelUI.java │ │ │ ├── stabilizer │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── api │ │ │ └── OAuthPKCE.java │ │ │ ├── injector │ │ │ ├── InjectorInterface.java │ │ │ └── InjectorStore.form │ │ │ ├── audio │ │ │ └── Quality.java │ │ │ └── video │ │ │ └── VLCPlayer.java │ ├── resources │ │ ├── sfd.ser │ │ ├── Application.json │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ ├── ntify.icns │ │ ├── ntify.ico │ │ ├── ntify.png │ │ ├── setup.png │ │ ├── com │ │ │ └── github │ │ │ │ └── kwhat │ │ │ │ └── jnativehook │ │ │ │ └── lib │ │ │ │ ├── linux │ │ │ │ ├── arm │ │ │ │ │ └── libJNativeHook.so │ │ │ │ ├── x86 │ │ │ │ │ └── libJNativeHook.so │ │ │ │ ├── arm64 │ │ │ │ │ └── libJNativeHook.so │ │ │ │ └── x86_64 │ │ │ │ │ └── libJNativeHook.so │ │ │ │ ├── windows │ │ │ │ ├── arm │ │ │ │ │ └── JNativeHook.dll │ │ │ │ ├── x86 │ │ │ │ │ └── JNativeHook.dll │ │ │ │ └── x86_64 │ │ │ │ │ └── JNativeHook.dll │ │ │ │ └── darwin │ │ │ │ ├── arm64 │ │ │ │ └── libJNativeHook.dylib │ │ │ │ └── x86_64 │ │ │ │ └── libJNativeHook.dylib │ │ ├── icons │ │ │ ├── playerplaydark.svg │ │ │ ├── playerplaywhite.svg │ │ │ ├── playerplaynextdark.svg │ │ │ ├── playerplaynextwhite.svg │ │ │ ├── heart.svg │ │ │ ├── historywhite.svg │ │ │ ├── historydark.svg │ │ │ ├── historyselected.svg │ │ │ ├── playerplaypreviousdark.svg │ │ │ ├── playerplaypreviouswhite.svg │ │ │ ├── heartfilled.svg │ │ │ ├── userwhite.svg │ │ │ ├── userdark.svg │ │ │ ├── repeatwhite.svg │ │ │ ├── repeatdark.svg │ │ │ ├── repeatselected.svg │ │ │ ├── microphonedark.svg │ │ │ ├── microphonewhite.svg │ │ │ ├── microphoneselected.svg │ │ │ ├── volumehalfwhite.svg │ │ │ ├── volumemutewhite.svg │ │ │ ├── dotswhite.svg │ │ │ ├── volumehalfdark.svg │ │ │ ├── dotsdark.svg │ │ │ ├── volumemutedark.svg │ │ │ ├── accountdark.svg │ │ │ ├── accountwhite.svg │ │ │ ├── playerpausedark.svg │ │ │ ├── playerpausewhite.svg │ │ │ ├── volumefullwhite.svg │ │ │ ├── volumefulldark.svg │ │ │ ├── shufflewhite.svg │ │ │ ├── shuffledark.svg │ │ │ ├── shuffleselected.svg │ │ │ ├── videodark.svg │ │ │ ├── videowhite.svg │ │ │ ├── videoselected.svg │ │ │ ├── closedark.svg │ │ │ ├── closewhite.svg │ │ │ ├── podcastwhite.svg │ │ │ ├── podcastdark.svg │ │ │ ├── mverticaldark.svg │ │ │ ├── mverticalwhite.svg │ │ │ ├── mverticalselectedwhite.svg │ │ │ ├── mverticalselecteddark.svg │ │ │ ├── settingswhite.svg │ │ │ ├── settingsdark.svg │ │ │ ├── albumwhite.svg │ │ │ ├── albumdark.svg │ │ │ ├── playlistdark.svg │ │ │ ├── playlistwhite.svg │ │ │ ├── refreshdark.svg │ │ │ ├── refreshwhite.svg │ │ │ ├── trackdark.svg │ │ │ └── trackwhite.svg │ │ └── about.html │ └── proto │ │ └── player_state.proto └── assembly │ └── jar-with-deps-with-exclude.xml ├── .gitmodules ├── .gitignore ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md └── available_svgs_viewer.py /NTifyShowStable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/NTifyShowStable.png -------------------------------------------------------------------------------- /src/main/java/com/github/kwhat/jnativehook/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/kwhat/jnativehook -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/io/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/BlackOverlord666/mslinks -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/mslinks/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/DmitriiShamrikov/mslinks -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/javazoom/jl/decoder/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/libgdx/jlayer-gdx -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/com/spotify/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/librespot-org/librespot-java -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/xyz/gianlu/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/librespot-org/librespot-java -------------------------------------------------------------------------------- /src/main/resources/sfd.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/sfd.ser -------------------------------------------------------------------------------- /src/main/resources/Application.json: -------------------------------------------------------------------------------- 1 | { 2 | "Name" : "NTify", 3 | "ReleaseCandidate" : "Public Beta" 4 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.spotifyxp.Initiator 3 | -------------------------------------------------------------------------------- /src/main/resources/ntify.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/ntify.icns -------------------------------------------------------------------------------- /src/main/resources/ntify.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/ntify.ico -------------------------------------------------------------------------------- /src/main/resources/ntify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/ntify.png -------------------------------------------------------------------------------- /src/main/resources/setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/setup.png -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/.DEPINFO: -------------------------------------------------------------------------------- 1 | https://github.com/spotify-web-api-java/spotify-web-api-java -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/model_objects/special/README.md: -------------------------------------------------------------------------------- 1 | # Special Objects 2 | 3 | Objects, that are nowhere defined, but returned by requests. -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/testing/Test.java: -------------------------------------------------------------------------------- 1 | package com.spotifyxp.testing; 2 | 3 | public class Test { 4 | public static void main(String[] args) throws Exception { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/linux/arm/libJNativeHook.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/linux/arm/libJNativeHook.so -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/linux/x86/libJNativeHook.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/linux/x86/libJNativeHook.so -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/windows/arm/JNativeHook.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/windows/arm/JNativeHook.dll -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/windows/x86/JNativeHook.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/windows/x86/JNativeHook.dll -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/linux/arm64/libJNativeHook.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/linux/arm64/libJNativeHook.so -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/linux/x86_64/libJNativeHook.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/linux/x86_64/libJNativeHook.so -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/windows/x86_64/JNativeHook.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/windows/x86_64/JNativeHook.dll -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/darwin/arm64/libJNativeHook.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/darwin/arm64/libJNativeHook.dylib -------------------------------------------------------------------------------- /src/main/resources/com/github/kwhat/jnativehook/lib/darwin/x86_64/libJNativeHook.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NTifyApp/NTify/HEAD/src/main/resources/com/github/kwhat/jnativehook/lib/darwin/x86_64/libJNativeHook.dylib -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/de/werwolf2303/sql/SQLElement.java: -------------------------------------------------------------------------------- 1 | package com.spotifyxp.deps.de.werwolf2303.sql; 2 | 3 | public interface SQLElement { 4 | void provideSession(SQLSession.SQLSessionPrivate sqlSession); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/xyz/gianlu/README.md: -------------------------------------------------------------------------------- 1 | Changes made: 2 | 3 | - Added an event to catch token refresh 4 | - Lyrics refresh tick inside Vorabis and MP3 decoder 5 | - AudioVisualizer refresh tick inside Vorabis and MP3 decoder 6 | - Fix connectionId update being ignored -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/model_objects/miscellaneous/README.md: -------------------------------------------------------------------------------- 1 | # Miscellaneous Objects 2 | 3 | Objects, that are defined on an API endpoint reference page, but not within 4 | the [main object model](https://developer.spotify.com/documentation/web-api/reference/object-model/). -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "deps/mpris-java"] 2 | path = deps/mpris-java 3 | url = https://github.com/NTifyApp/mpris-java 4 | [submodule "deps/JavaSetupTool"] 5 | path = deps/JavaSetupTool 6 | url = https://github.com/werwolf2303/JavaSetupTool 7 | [submodule "deps/vlcj"] 8 | path = deps/vlcj 9 | url = https://github.com/NTifyApp/vlcj -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/requests/data/search/interfaces/ISearchModelObject.java: -------------------------------------------------------------------------------- 1 | package com.spotifyxp.deps.se.michaelthelin.spotify.requests.data.search.interfaces; 2 | 3 | import com.spotifyxp.deps.se.michaelthelin.spotify.model_objects.IModelObject; 4 | 5 | public interface ISearchModelObject extends IModelObject { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaydark.svg: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaywhite.svg: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/requests/data/personalization/interfaces/IArtistTrackModelObject.java: -------------------------------------------------------------------------------- 1 | package com.spotifyxp.deps.se.michaelthelin.spotify.requests.data.personalization.interfaces; 2 | 3 | import com.spotifyxp.deps.se.michaelthelin.spotify.model_objects.IModelObject; 4 | 5 | public interface IArtistTrackModelObject extends IModelObject { 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaynextdark.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaynextwhite.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/heart.svg: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/icons/historywhite.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/historydark.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/historyselected.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaypreviousdark.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/playerplaypreviouswhite.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/icons/heartfilled.svg: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/icons/userwhite.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/java/com/spotifyxp/deps/xyz/gianlu/zeroconf/PacketListener.java: -------------------------------------------------------------------------------- 1 | package com.spotifyxp.deps.xyz.gianlu.zeroconf; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | 5 | /** 6 | * An interface that will be notified of a packet transmission 7 | * 8 | * @see Zeroconf#addReceiveListener 9 | * @see Zeroconf#addSendListener 10 | */ 11 | public interface PacketListener { 12 | void packetEvent(@NotNull Packet packet); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/resources/icons/userdark.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/about.html: -------------------------------------------------------------------------------- 1 | 2 |
{ 27 | final RawMercuryRequest request; 28 | final Parser
parser; 29 | 30 | ProtobufMercuryRequest(@NotNull RawMercuryRequest request, @NotNull Parser
parser) {
31 | this.request = request;
32 | this.parser = parser;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/xyz/gianlu/librespot/audio/storage/AudioFile.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 devgianlu
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.spotifyxp.deps.xyz.gianlu.librespot.audio.storage;
18 |
19 | import com.spotifyxp.deps.xyz.gianlu.librespot.audio.GeneralWritableStream;
20 |
21 | import java.io.Closeable;
22 | import java.io.IOException;
23 |
24 | /**
25 | * @author Gianlu
26 | */
27 | public interface AudioFile extends Closeable, GeneralWritableStream {
28 | void writeChunk(byte[] chunk, int chunkIndex, boolean cached) throws IOException;
29 |
30 | void writeHeader(int id, byte[] bytes, boolean cached) throws IOException;
31 |
32 | void streamError(int chunkIndex, short code);
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/stabilizer/GlobalExceptionHandler.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2023-2025] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.stabilizer;
17 |
18 | import com.spotifyxp.logging.ConsoleLogging;
19 | import com.spotifyxp.utils.GraphicalMessage;
20 |
21 | @SuppressWarnings("CallToPrintStackTrace")
22 | public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
23 | @Override
24 | public void uncaughtException(Thread thread, Throwable throwable) {
25 | ConsoleLogging.Throwable(throwable);
26 | throwable.printStackTrace();
27 | if (throwable instanceof OutOfMemoryError) {
28 | GraphicalMessage.sorryErrorExit("Out of memory");
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/available_svgs_viewer.py:
--------------------------------------------------------------------------------
1 | from tkinter import *
2 | import tkinter
3 | import os
4 | import tksvg
5 | from tkscrolledframe import ScrolledFrame
6 |
7 | gui = tkinter.Tk()
8 | gui.title("Available svgs viewer")
9 |
10 | width = 600
11 | height = 400
12 | images = []
13 |
14 | scroll_frame = ScrolledFrame(gui, width=width, height=height)
15 | scroll_frame.pack(side='top', expand=True, fill='both')
16 | scroll_frame.bind_scroll_wheel(gui)
17 |
18 | frame = scroll_frame.display_widget(Frame)
19 |
20 | width_of_image = width / 5
21 | x = 0
22 | y = 0
23 | for file in os.listdir("src/main/resources/icons"):
24 | if x == 5:
25 | y += 1
26 | x = 0
27 | filename = os.path.splitext(os.path.basename(file))[0]
28 | if filename.endswith("white"): continue
29 | iframe = tkinter.Frame(frame, width=width_of_image, height=width_of_image + (width_of_image / 100 * 20))
30 | iframe.grid(column=x, row=y)
31 | svg_image = tksvg.SvgImage(data=open("src/main/resources/icons/" + file, "r").read(), scaletoheight=width_of_image)
32 | images.append(svg_image)
33 | tkinter.Label(iframe, image=svg_image).grid(column=0, row=0)
34 | tkinter.Label(iframe, text=filename).grid(column=0, row=1)
35 | x += 1
36 |
37 | gui.wm_minsize(width + 110, height)
38 | try:
39 | gui.mainloop()
40 | except KeyboardInterrupt:
41 | pass
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/args/NoMediaControl.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2024] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.args;
17 |
18 | import com.spotifyxp.PublicValues;
19 |
20 | public class NoMediaControl implements Argument {
21 |
22 | @Override
23 | public Runnable runArgument(String commands) {
24 | return () -> PublicValues.enableMediaControl = false;
25 | }
26 |
27 | @Override
28 | public String getName() {
29 | return "disablemediacontrol";
30 | }
31 |
32 | @Override
33 | public String getDescription() {
34 | return "Disbles media control per media keys";
35 | }
36 |
37 | @Override
38 | public boolean hasParameter() {
39 | return false;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/args/Language.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2023-2024] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.args;
17 |
18 | import com.spotifyxp.PublicValues;
19 |
20 | public class Language implements Argument {
21 | @Override
22 | public Runnable runArgument(String parameter1) {
23 | return () -> PublicValues.language.setNoAutoFindLanguage(parameter1);
24 | }
25 |
26 | @Override
27 | public String getName() {
28 | return "language";
29 | }
30 |
31 | @Override
32 | public String getDescription() {
33 | return "Sets the language to use (Parameter z.b 'de' or 'en')";
34 | }
35 |
36 | @Override
37 | public boolean hasParameter() {
38 | return true;
39 | }
40 | }
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/mslinks/extra/Stub.java:
--------------------------------------------------------------------------------
1 | /*
2 | https://github.com/BlackOverlord666/mslinks
3 |
4 | Copyright (c) 2015 Dmitrii Shamrikov
5 |
6 | Licensed under the WTFPL
7 | You may obtain a copy of the License at
8 |
9 | http://www.wtfpl.net/about/
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | */
15 | package com.spotifyxp.deps.mslinks.extra;
16 |
17 | import com.spotifyxp.deps.io.ByteReader;
18 | import com.spotifyxp.deps.io.ByteWriter;
19 | import com.spotifyxp.deps.mslinks.Serializable;
20 |
21 | import java.io.IOException;
22 |
23 | public class Stub implements Serializable {
24 |
25 | private final int sign;
26 | private final byte[] data;
27 |
28 | public Stub(ByteReader br, int sz, int sgn) throws IOException {
29 | int len = sz - 8;
30 | sign = sgn;
31 | data = new byte[len];
32 | for (int i = 0; i < len; i++)
33 | data[i] = (byte) br.read();
34 | }
35 |
36 | @Override
37 | public void serialize(ByteWriter bw) throws IOException {
38 | bw.write4bytes(data.length + 8);
39 | bw.write4bytes(sign);
40 | bw.write(data);
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/args/Help.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2023] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.args;
17 |
18 | import com.spotifyxp.PublicValues;
19 |
20 | public class Help implements Argument {
21 | @Override
22 | public Runnable runArgument(String parameter1) {
23 | return () -> {
24 | PublicValues.argParser.printHelp();
25 | System.exit(0);
26 | };
27 | }
28 |
29 | @Override
30 | public String getName() {
31 | return "help";
32 | }
33 |
34 | @Override
35 | public String getDescription() {
36 | return "Prints this message";
37 | }
38 |
39 | @Override
40 | public boolean hasParameter() {
41 | return false;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/se/michaelthelin/spotify/enums/ModelObjectType.java:
--------------------------------------------------------------------------------
1 | package com.spotifyxp.deps.se.michaelthelin.spotify.enums;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | /**
7 | * An enumeration of all possible model object types.
8 | */
9 | public enum ModelObjectType {
10 |
11 | ALBUM("album"),
12 | ARTIST("artist"),
13 | AUDIO_FEATURES("audio_features"),
14 | EPISODE("episode"),
15 | GENRE("genre"),
16 | PLAYLIST("playlist"),
17 | SHOW("show"),
18 | TRACK("track"),
19 | USER("user");
20 |
21 | private static final Map
20 | * - Normal
21 | * - High
22 | * - Very high
23 | */
24 | public enum Quality {
25 | NORMAL("Normal", "NORMAL"),
26 | HIGH("High", "HIGH"),
27 | VERY_HIGH("VeryHigh", "VERYHIGH");
28 | private final String toselect;
29 | private final String configValue;
30 |
31 | Quality(String toselect, String configValue) {
32 | this.toselect = toselect;
33 | this.configValue = configValue;
34 | }
35 |
36 | /**
37 | * Returns the audio quality as a readable string
38 | *
39 | * @return String
40 | */
41 | public String getAsString() {
42 | return toselect;
43 | }
44 |
45 | /**
46 | * Returns the audio quality as a config value
47 | *
48 | * @return String
49 | */
50 | public String configValue() {
51 | return configValue;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/theming/themes/MacOS.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2023-2025] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.theming.themes;
17 |
18 | import ch.randelshofer.quaqua.QuaquaLookAndFeel;
19 | import com.spotifyxp.logging.ConsoleLogging;
20 | import com.spotifyxp.theming.Theme;
21 | import com.spotifyxp.utils.Utils;
22 |
23 | import javax.swing.*;
24 |
25 | public class MacOS implements Theme {
26 | public MacOS() {
27 | }
28 |
29 | public String getAuthor() {
30 | return "Werwolf2303";
31 | }
32 |
33 | public boolean isLight() {
34 | return true;
35 | }
36 |
37 | public void initTheme() {
38 |
39 | if(Utils.getJavaVersion() > 8) {
40 | ConsoleLogging.error("Quaqua doesn't support Java version 9 or higher");
41 | return;
42 | }
43 |
44 | try {
45 | UIManager.setLookAndFeel(new QuaquaLookAndFeel());
46 | } catch (UnsupportedLookAndFeelException var2) {
47 | ConsoleLogging.Throwable(var2);
48 | }
49 |
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/mslinks/data/ItemIDRoot.java:
--------------------------------------------------------------------------------
1 | /*
2 | https://github.com/DmitriiShamrikov/mslinks
3 |
4 | Copyright (c) 2022 Dmitrii Shamrikov
5 |
6 | Licensed under the WTFPL
7 | You may obtain a copy of the License at
8 |
9 | http://www.wtfpl.net/about/
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | */
15 | package com.spotifyxp.deps.mslinks.data;
16 |
17 | import com.spotifyxp.deps.io.ByteReader;
18 | import com.spotifyxp.deps.mslinks.ShellLinkException;
19 | import com.spotifyxp.deps.mslinks.UnsupportedItemIDException;
20 |
21 | import java.io.IOException;
22 |
23 | public class ItemIDRoot extends ItemIDRegItem {
24 |
25 | public ItemIDRoot() {
26 | super(GROUP_ROOT | TYPE_ROOT_REGITEM);
27 | }
28 |
29 | public ItemIDRoot(int flags) throws UnsupportedItemIDException {
30 | super(flags | GROUP_ROOT);
31 |
32 | int subType = typeFlags & ID_TYPE_INGROUPMASK;
33 | if (subType != TYPE_ROOT_REGITEM)
34 | throw new UnsupportedItemIDException(typeFlags);
35 | }
36 |
37 | @Override
38 | public void load(ByteReader br, int maxSize) throws IOException, ShellLinkException {
39 | int endPos = br.getPosition() + maxSize;
40 | super.load(br, maxSize);
41 | br.seekTo(endPos);
42 | }
43 |
44 | @Override
45 | public String toString() {
46 | if (clsid.equals(Registry.CLSID_COMPUTER))
47 | return "";
48 | return super.toString();
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/swingextension/SettingsTable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright [2024] [Gianluca Beil]
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.spotifyxp.swingextension;
17 |
18 | import com.spotifyxp.PublicValues;
19 |
20 | import javax.swing.*;
21 |
22 | public class SettingsTable extends JPanel {
23 | int ycache = 10;
24 |
25 | public SettingsTable() {
26 | setLayout(null);
27 | }
28 |
29 | public void addSetting(String name, JComponent component) {
30 | JTextField field = new JTextField(name);
31 | field.setHorizontalAlignment(SwingConstants.RIGHT);
32 | field.setEditable(false);
33 | field.setBorder(BorderFactory.createEmptyBorder());
34 | field.setForeground(PublicValues.globalFontColor);
35 | field.setBounds(10, ycache, getWidth() / 2 - 40, 30);
36 | component.setBounds(10 + field.getWidth(), ycache, getWidth() / 2, 30);
37 | component.setForeground(PublicValues.globalFontColor);
38 | add(component);
39 | add(field);
40 | ycache += component.getHeight() + 10;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/resources/icons/trackdark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/main/resources/icons/trackwhite.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/mslinks/data/CNRLinkFlags.java:
--------------------------------------------------------------------------------
1 | /*
2 | https://github.com/BlackOverlord666/mslinks
3 |
4 | Copyright (c) 2015 Dmitrii Shamrikov
5 |
6 | Licensed under the WTFPL
7 | You may obtain a copy of the License at
8 |
9 | http://www.wtfpl.net/about/
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | */
15 | package com.spotifyxp.deps.mslinks.data;
16 |
17 | import com.spotifyxp.deps.io.ByteReader;
18 |
19 | import java.io.IOException;
20 |
21 | public class CNRLinkFlags extends BitSet32 {
22 |
23 | public CNRLinkFlags(int n) {
24 | super(n);
25 | reset();
26 | }
27 |
28 | public CNRLinkFlags(ByteReader data) throws IOException {
29 | super(data);
30 | reset();
31 | }
32 |
33 | private void reset() {
34 | for (int i = 2; i < 32; i++)
35 | clear(i);
36 | }
37 |
38 | public boolean isValidDevice() {
39 | return get(0);
40 | }
41 |
42 | public boolean isValidNetType() {
43 | return get(1);
44 | }
45 |
46 | public CNRLinkFlags setValidDevice() {
47 | set(0);
48 | return this;
49 | }
50 |
51 | public CNRLinkFlags setValidNetType() {
52 | set(1);
53 | return this;
54 | }
55 |
56 | public CNRLinkFlags clearValidDevice() {
57 | clear(0);
58 | return this;
59 | }
60 |
61 | public CNRLinkFlags clearValidNetType() {
62 | clear(1);
63 | return this;
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/javazoom/jl/decoder/FrameDecoder.java:
--------------------------------------------------------------------------------
1 | /*
2 | * 09/26/08 throw exception on subbband alloc error: Christopher G. Jennings (cjennings@acm.org) 11/19/04 1.0 moved to LGPL.
3 | * 12/12/99 Initial version. mdm@techie.com----------------------------------------------------------------------- This program is
4 | * free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published
5 | * by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
6 | *
7 | * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
9 | *
10 | * You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free
11 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
12 | * ----------------------------------------------------------------------
13 | */
14 |
15 | package com.spotifyxp.deps.javazoom.jl.decoder;
16 |
17 | /**
18 | * Implementations of FrameDecoder are responsible for decoding an MPEG audio frame.
19 | */
20 | // REVIEW: the interface currently is too thin. There should be
21 | // methods to specify the output buffer, the synthesis filters and
22 | // possibly other objects used by the decoder.
23 | public interface FrameDecoder {
24 | /**
25 | * Decodes one frame of MPEG audio.
26 | */
27 | void decodeFrame() throws DecoderException;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/spotifyxp/deps/xyz/gianlu/librespot/cache/JournalHeader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 devgianlu
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.spotifyxp.deps.xyz.gianlu.librespot.cache;
18 |
19 | import com.spotifyxp.deps.xyz.gianlu.librespot.common.Utils;
20 | import org.jetbrains.annotations.NotNull;
21 | import org.jetbrains.annotations.Nullable;
22 |
23 | import java.util.List;
24 |
25 | /**
26 | * @author Gianlu
27 | */
28 | public final class JournalHeader {
29 | public final int id;
30 | public final byte[] value;
31 |
32 | JournalHeader(int id, @NotNull String value) {
33 | this.id = id;
34 | this.value = Utils.hexToBytes(value);
35 | }
36 |
37 | @Nullable
38 | public static JournalHeader find(List