├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ └── feature-request.yml ├── dependabot.yml └── workflows │ ├── autoformat.yml │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── design │ └── api_database.md └── resources │ └── images │ ├── android.png │ ├── logo.png │ ├── logo.svg │ ├── windows_discover.png │ └── windows_playing.png └── src ├── ListenTogether.Api ├── Authorization │ ├── AllowAnonymousAttribute.cs │ ├── AuthorizeAttribute.cs │ ├── JwtMiddleware.cs │ └── JwtUtils.cs ├── Controllers │ ├── ApiBaseController.cs │ ├── MusicController.cs │ ├── MyFavoriteController.cs │ └── UserController.cs ├── DbContext │ └── DataContext.cs ├── Entities │ ├── MusicEntity.cs │ ├── MyFavoriteDetailEntity.cs │ ├── MyFavoriteEntity.cs │ ├── RefreshTokenEntity.cs │ └── UserEntity.cs ├── Enums │ └── ConfigTypeEnum.cs ├── ErrorHandler │ ├── AppException.cs │ └── ErrorHandlerMiddleware.cs ├── Interfaces │ ├── IMusicService.cs │ ├── IMyFavoriteService.cs │ └── IUserService.cs ├── ListenTogether.Api.csproj ├── Models │ └── AppSettings.cs ├── Program.cs ├── Properties │ └── launchSettings.json ├── Services │ ├── MusicService.cs │ ├── MyFavoriteService.cs │ └── UserService.cs ├── appsettings.Development.json └── appsettings.json ├── ListenTogether.Model ├── Api │ ├── Request │ │ ├── AuthenticateRequest.cs │ │ ├── MusicRequest.cs │ │ ├── MyFavoriteDetailRequest.cs │ │ ├── MyFavoriteRequest.cs │ │ ├── PlaylistRequest.cs │ │ ├── UserEditRequest.cs │ │ ├── UserRegisterRequest.cs │ │ └── UserRequest.cs │ ├── Response │ │ ├── MusicResponse.cs │ │ ├── MyFavoriteDetailResponse.cs │ │ ├── MyFavoriteResponse.cs │ │ ├── PlaylistResponse.cs │ │ └── UserResponse.cs │ └── Result.cs ├── Enums │ ├── FeeEnum.cs │ ├── PlatformEnum.cs │ ├── PlayModeEnum.cs │ └── SongMenuEnum.cs ├── EnvironmentSetting.cs ├── ListenTogether.Model.csproj ├── LocalMusic.cs ├── Log.cs ├── MusicBase.cs ├── MusicCacheMetadata.cs ├── MusicMetadata.cs ├── MusicPosition.cs ├── MusicResultShow.cs ├── MusicSearchResult.cs ├── MyFavorite.cs ├── MyFavoriteDetail.cs ├── Playlist.cs ├── TokenInfo.cs ├── User.cs ├── UserEdit.cs └── UserRegister.cs ├── ListenTogether.Pages ├── AutoCloseJob.cs ├── Components │ ├── DesktopTitleBar.razor │ ├── DesktopTitleBar.razor.css │ ├── Dialog.razor │ ├── Discover │ │ ├── ChooseTag.razor │ │ ├── ChooseTag.razor.css │ │ ├── Discover.razor │ │ ├── Discover.razor.css │ │ ├── Tags.razor │ │ └── Tags.razor.css │ ├── EditText.razor │ ├── Empty.razor │ ├── EndLine.razor │ ├── EndLine.razor.css │ ├── Loading.razor │ ├── Loading.razor.css │ ├── MouseDiv.razor │ ├── MusicResultView.razor │ ├── MusicResultView.razor.css │ ├── NavBeforeNext.razor │ ├── Player │ │ ├── DesktopPlayingView.razor │ │ ├── DesktopPlayingView.razor.css │ │ ├── DesktopView.razor │ │ ├── DesktopView.razor.css │ │ ├── PhonePlayingView.razor │ │ ├── PhonePlayingView.razor.css │ │ ├── PhoneView.razor │ │ ├── PhoneView.razor.css │ │ └── PlayerBar.razor │ ├── RouteAnimation.razor │ ├── SearchBar.razor │ ├── SearchLabel.razor │ ├── SearchLabel.razor.css │ └── Switch.razor ├── CustomTheme.cs ├── DialogBuilder.cs ├── Filters │ └── MusicSearchFilter │ │ ├── IMusicSearchFilter.cs │ │ ├── SearchKeyFilter.cs │ │ ├── ShortMusicFilter.cs │ │ └── VipMusicFilter.cs ├── GlobalPath.cs ├── GlobalUsings.cs ├── IAppClose.cs ├── IAppVersion.cs ├── IAutoUpgrade.cs ├── IDeviceManage.cs ├── IKeyValueStorage.cs ├── IMusicCacheStorage.cs ├── IMusicShare.cs ├── INativeTheme.cs ├── IPlayHistoryStorage.cs ├── IPlayerService.cs ├── IWifiOptionsService.cs ├── IWindowMoving.cs ├── IWindowTitleBar.cs ├── ListenTogether.Pages.csproj ├── Lyric.cs ├── MyComponentBase.cs ├── NetConfig.cs ├── Pages │ ├── AddToMyFavorite.razor │ ├── AutoClosePage.razor │ ├── AutoClosePage.razor.css │ ├── CachePage.razor │ ├── CachePage.razor.css │ ├── DiscoverPage.razor │ ├── DiscoverPage.razor.css │ ├── LogPage.razor │ ├── LogPage.razor.css │ ├── LoginPage.razor │ ├── LoginPage.razor.css │ ├── MyFavoriteAdd.razor │ ├── MyFavoriteDetailPage.razor │ ├── MyFavoriteDetailPage.razor.css │ ├── MyFavoritePage.razor │ ├── MyFavoritePage.razor.css │ ├── MyFavoriteRename.razor │ ├── PlayingPage.razor │ ├── PlayingPage.razor.css │ ├── PlaylistPage.razor │ ├── PlaylistPage.razor.css │ ├── RegisterPage.razor │ ├── RegisterPage.razor.css │ ├── SearchPage.razor │ ├── SearchPage.razor.css │ ├── SearchResultPage.razor │ ├── SettingsPage.razor │ ├── SettingsPage.razor.css │ ├── SongMenuPage.razor │ ├── UserInfoEditPage.razor │ └── UserInfoEditPage.razor.css ├── Services │ ├── MusicPlayerService.cs │ ├── MusicResultService.cs │ └── MusicSwitchServer │ │ ├── IMusicSwitchServer.cs │ │ ├── IMusicSwitchServerFactory.cs │ │ ├── MusicSwitchRepeatListServer.cs │ │ ├── MusicSwitchRepeatOneServer.cs │ │ ├── MusicSwitchServerFactory.cs │ │ └── MusicSwitchShuffleServer.cs ├── Settings.cs ├── Shared │ ├── EmptyLayout.razor │ ├── MainLayout.razor │ ├── MainLayout.razor.css │ ├── NavMenu.razor │ └── NavMenu.razor.css ├── Temp.cs ├── _Imports.razor └── wwwroot │ ├── background.png │ ├── css │ ├── dialog.css │ └── route-animation.css │ ├── exampleJsInterop.js │ ├── fontawesome-free-6.4.0-web │ ├── LICENSE.txt │ ├── css │ │ ├── all.css │ │ ├── all.min.css │ │ ├── brands.css │ │ ├── brands.min.css │ │ ├── fontawesome.css │ │ ├── fontawesome.min.css │ │ ├── regular.css │ │ ├── regular.min.css │ │ ├── solid.css │ │ ├── solid.min.css │ │ ├── svg-with-js.css │ │ ├── svg-with-js.min.css │ │ ├── v4-font-face.css │ │ ├── v4-font-face.min.css │ │ ├── v4-shims.css │ │ ├── v4-shims.min.css │ │ ├── v5-font-face.css │ │ └── v5-font-face.min.css │ ├── js │ │ ├── all.js │ │ ├── all.min.js │ │ ├── brands.js │ │ ├── brands.min.js │ │ ├── conflict-detection.js │ │ ├── conflict-detection.min.js │ │ ├── fontawesome.js │ │ ├── fontawesome.min.js │ │ ├── regular.js │ │ ├── regular.min.js │ │ ├── solid.js │ │ ├── solid.min.js │ │ ├── v4-shims.js │ │ └── v4-shims.min.js │ ├── less │ │ ├── _animated.less │ │ ├── _bordered-pulled.less │ │ ├── _core.less │ │ ├── _fixed-width.less │ │ ├── _icons.less │ │ ├── _list.less │ │ ├── _mixins.less │ │ ├── _rotated-flipped.less │ │ ├── _screen-reader.less │ │ ├── _shims.less │ │ ├── _sizing.less │ │ ├── _stacked.less │ │ ├── _variables.less │ │ ├── brands.less │ │ ├── fontawesome.less │ │ ├── regular.less │ │ ├── solid.less │ │ └── v4-shims.less │ ├── metadata │ │ ├── categories.yml │ │ ├── icon-families.json │ │ ├── icon-families.yml │ │ ├── icons.json │ │ ├── icons.yml │ │ ├── shims.json │ │ ├── shims.yml │ │ └── sponsors.yml │ ├── scss │ │ ├── _animated.scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _functions.scss │ │ ├── _icons.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _rotated-flipped.scss │ │ ├── _screen-reader.scss │ │ ├── _shims.scss │ │ ├── _sizing.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ ├── brands.scss │ │ ├── fontawesome.scss │ │ ├── regular.scss │ │ ├── solid.scss │ │ └── v4-shims.scss │ ├── sprites │ │ ├── brands.svg │ │ ├── regular.svg │ │ └── solid.svg │ ├── svgs │ │ ├── brands │ │ │ ├── 42-group.svg │ │ │ ├── 500px.svg │ │ │ ├── accessible-icon.svg │ │ │ ├── accusoft.svg │ │ │ ├── adn.svg │ │ │ ├── adversal.svg │ │ │ ├── affiliatetheme.svg │ │ │ ├── airbnb.svg │ │ │ ├── algolia.svg │ │ │ ├── alipay.svg │ │ │ ├── amazon-pay.svg │ │ │ ├── amazon.svg │ │ │ ├── amilia.svg │ │ │ ├── android.svg │ │ │ ├── angellist.svg │ │ │ ├── angrycreative.svg │ │ │ ├── angular.svg │ │ │ ├── app-store-ios.svg │ │ │ ├── app-store.svg │ │ │ ├── apper.svg │ │ │ ├── apple-pay.svg │ │ │ ├── apple.svg │ │ │ ├── artstation.svg │ │ │ ├── asymmetrik.svg │ │ │ ├── atlassian.svg │ │ │ ├── audible.svg │ │ │ ├── autoprefixer.svg │ │ │ ├── avianex.svg │ │ │ ├── aviato.svg │ │ │ ├── aws.svg │ │ │ ├── bandcamp.svg │ │ │ ├── battle-net.svg │ │ │ ├── behance.svg │ │ │ ├── bilibili.svg │ │ │ ├── bimobject.svg │ │ │ ├── bitbucket.svg │ │ │ ├── bitcoin.svg │ │ │ ├── bity.svg │ │ │ ├── black-tie.svg │ │ │ ├── blackberry.svg │ │ │ ├── blogger-b.svg │ │ │ ├── blogger.svg │ │ │ ├── bluetooth-b.svg │ │ │ ├── bluetooth.svg │ │ │ ├── bootstrap.svg │ │ │ ├── bots.svg │ │ │ ├── btc.svg │ │ │ ├── buffer.svg │ │ │ ├── buromobelexperte.svg │ │ │ ├── buy-n-large.svg │ │ │ ├── buysellads.svg │ │ │ ├── canadian-maple-leaf.svg │ │ │ ├── cc-amazon-pay.svg │ │ │ ├── cc-amex.svg │ │ │ ├── cc-apple-pay.svg │ │ │ ├── cc-diners-club.svg │ │ │ ├── cc-discover.svg │ │ │ ├── cc-jcb.svg │ │ │ ├── cc-mastercard.svg │ │ │ ├── cc-paypal.svg │ │ │ ├── cc-stripe.svg │ │ │ ├── cc-visa.svg │ │ │ ├── centercode.svg │ │ │ ├── centos.svg │ │ │ ├── chrome.svg │ │ │ ├── chromecast.svg │ │ │ ├── cloudflare.svg │ │ │ ├── cloudscale.svg │ │ │ ├── cloudsmith.svg │ │ │ ├── cloudversify.svg │ │ │ ├── cmplid.svg │ │ │ ├── codepen.svg │ │ │ ├── codiepie.svg │ │ │ ├── confluence.svg │ │ │ ├── connectdevelop.svg │ │ │ ├── contao.svg │ │ │ ├── cotton-bureau.svg │ │ │ ├── cpanel.svg │ │ │ ├── creative-commons-by.svg │ │ │ ├── creative-commons-nc-eu.svg │ │ │ ├── creative-commons-nc-jp.svg │ │ │ ├── creative-commons-nc.svg │ │ │ ├── creative-commons-nd.svg │ │ │ ├── creative-commons-pd-alt.svg │ │ │ ├── creative-commons-pd.svg │ │ │ ├── creative-commons-remix.svg │ │ │ ├── creative-commons-sa.svg │ │ │ ├── creative-commons-sampling-plus.svg │ │ │ ├── creative-commons-sampling.svg │ │ │ ├── creative-commons-share.svg │ │ │ ├── creative-commons-zero.svg │ │ │ ├── creative-commons.svg │ │ │ ├── critical-role.svg │ │ │ ├── css3-alt.svg │ │ │ ├── css3.svg │ │ │ ├── cuttlefish.svg │ │ │ ├── d-and-d-beyond.svg │ │ │ ├── d-and-d.svg │ │ │ ├── dailymotion.svg │ │ │ ├── dashcube.svg │ │ │ ├── deezer.svg │ │ │ ├── delicious.svg │ │ │ ├── deploydog.svg │ │ │ ├── deskpro.svg │ │ │ ├── dev.svg │ │ │ ├── deviantart.svg │ │ │ ├── dhl.svg │ │ │ ├── diaspora.svg │ │ │ ├── digg.svg │ │ │ ├── digital-ocean.svg │ │ │ ├── discord.svg │ │ │ ├── discourse.svg │ │ │ ├── dochub.svg │ │ │ ├── docker.svg │ │ │ ├── draft2digital.svg │ │ │ ├── dribbble.svg │ │ │ ├── dropbox.svg │ │ │ ├── drupal.svg │ │ │ ├── dyalog.svg │ │ │ ├── earlybirds.svg │ │ │ ├── ebay.svg │ │ │ ├── edge-legacy.svg │ │ │ ├── edge.svg │ │ │ ├── elementor.svg │ │ │ ├── ello.svg │ │ │ ├── ember.svg │ │ │ ├── empire.svg │ │ │ ├── envira.svg │ │ │ ├── erlang.svg │ │ │ ├── ethereum.svg │ │ │ ├── etsy.svg │ │ │ ├── evernote.svg │ │ │ ├── expeditedssl.svg │ │ │ ├── facebook-f.svg │ │ │ ├── facebook-messenger.svg │ │ │ ├── facebook.svg │ │ │ ├── fantasy-flight-games.svg │ │ │ ├── fedex.svg │ │ │ ├── fedora.svg │ │ │ ├── figma.svg │ │ │ ├── firefox-browser.svg │ │ │ ├── firefox.svg │ │ │ ├── first-order-alt.svg │ │ │ ├── first-order.svg │ │ │ ├── firstdraft.svg │ │ │ ├── flickr.svg │ │ │ ├── flipboard.svg │ │ │ ├── fly.svg │ │ │ ├── font-awesome.svg │ │ │ ├── fonticons-fi.svg │ │ │ ├── fonticons.svg │ │ │ ├── fort-awesome-alt.svg │ │ │ ├── fort-awesome.svg │ │ │ ├── forumbee.svg │ │ │ ├── foursquare.svg │ │ │ ├── free-code-camp.svg │ │ │ ├── freebsd.svg │ │ │ ├── fulcrum.svg │ │ │ ├── galactic-republic.svg │ │ │ ├── galactic-senate.svg │ │ │ ├── get-pocket.svg │ │ │ ├── gg-circle.svg │ │ │ ├── gg.svg │ │ │ ├── git-alt.svg │ │ │ ├── git.svg │ │ │ ├── github-alt.svg │ │ │ ├── github.svg │ │ │ ├── gitkraken.svg │ │ │ ├── gitlab.svg │ │ │ ├── gitter.svg │ │ │ ├── glide-g.svg │ │ │ ├── glide.svg │ │ │ ├── gofore.svg │ │ │ ├── golang.svg │ │ │ ├── goodreads-g.svg │ │ │ ├── goodreads.svg │ │ │ ├── google-drive.svg │ │ │ ├── google-pay.svg │ │ │ ├── google-play.svg │ │ │ ├── google-plus-g.svg │ │ │ ├── google-plus.svg │ │ │ ├── google-wallet.svg │ │ │ ├── google.svg │ │ │ ├── gratipay.svg │ │ │ ├── grav.svg │ │ │ ├── gripfire.svg │ │ │ ├── grunt.svg │ │ │ ├── guilded.svg │ │ │ ├── gulp.svg │ │ │ ├── hacker-news.svg │ │ │ ├── hackerrank.svg │ │ │ ├── hashnode.svg │ │ │ ├── hips.svg │ │ │ ├── hire-a-helper.svg │ │ │ ├── hive.svg │ │ │ ├── hooli.svg │ │ │ ├── hornbill.svg │ │ │ ├── hotjar.svg │ │ │ ├── houzz.svg │ │ │ ├── html5.svg │ │ │ ├── hubspot.svg │ │ │ ├── ideal.svg │ │ │ ├── imdb.svg │ │ │ ├── instagram.svg │ │ │ ├── instalod.svg │ │ │ ├── intercom.svg │ │ │ ├── internet-explorer.svg │ │ │ ├── invision.svg │ │ │ ├── ioxhost.svg │ │ │ ├── itch-io.svg │ │ │ ├── itunes-note.svg │ │ │ ├── itunes.svg │ │ │ ├── java.svg │ │ │ ├── jedi-order.svg │ │ │ ├── jenkins.svg │ │ │ ├── jira.svg │ │ │ ├── joget.svg │ │ │ ├── joomla.svg │ │ │ ├── js.svg │ │ │ ├── jsfiddle.svg │ │ │ ├── kaggle.svg │ │ │ ├── keybase.svg │ │ │ ├── keycdn.svg │ │ │ ├── kickstarter-k.svg │ │ │ ├── kickstarter.svg │ │ │ ├── korvue.svg │ │ │ ├── laravel.svg │ │ │ ├── lastfm.svg │ │ │ ├── leanpub.svg │ │ │ ├── less.svg │ │ │ ├── line.svg │ │ │ ├── linkedin-in.svg │ │ │ ├── linkedin.svg │ │ │ ├── linode.svg │ │ │ ├── linux.svg │ │ │ ├── lyft.svg │ │ │ ├── magento.svg │ │ │ ├── mailchimp.svg │ │ │ ├── mandalorian.svg │ │ │ ├── markdown.svg │ │ │ ├── mastodon.svg │ │ │ ├── maxcdn.svg │ │ │ ├── mdb.svg │ │ │ ├── medapps.svg │ │ │ ├── medium.svg │ │ │ ├── medrt.svg │ │ │ ├── meetup.svg │ │ │ ├── megaport.svg │ │ │ ├── mendeley.svg │ │ │ ├── meta.svg │ │ │ ├── microblog.svg │ │ │ ├── microsoft.svg │ │ │ ├── mix.svg │ │ │ ├── mixcloud.svg │ │ │ ├── mixer.svg │ │ │ ├── mizuni.svg │ │ │ ├── modx.svg │ │ │ ├── monero.svg │ │ │ ├── napster.svg │ │ │ ├── neos.svg │ │ │ ├── nfc-directional.svg │ │ │ ├── nfc-symbol.svg │ │ │ ├── nimblr.svg │ │ │ ├── node-js.svg │ │ │ ├── node.svg │ │ │ ├── npm.svg │ │ │ ├── ns8.svg │ │ │ ├── nutritionix.svg │ │ │ ├── octopus-deploy.svg │ │ │ ├── odnoklassniki.svg │ │ │ ├── odysee.svg │ │ │ ├── old-republic.svg │ │ │ ├── opencart.svg │ │ │ ├── openid.svg │ │ │ ├── opera.svg │ │ │ ├── optin-monster.svg │ │ │ ├── orcid.svg │ │ │ ├── osi.svg │ │ │ ├── padlet.svg │ │ │ ├── page4.svg │ │ │ ├── pagelines.svg │ │ │ ├── palfed.svg │ │ │ ├── patreon.svg │ │ │ ├── paypal.svg │ │ │ ├── perbyte.svg │ │ │ ├── periscope.svg │ │ │ ├── phabricator.svg │ │ │ ├── phoenix-framework.svg │ │ │ ├── phoenix-squadron.svg │ │ │ ├── php.svg │ │ │ ├── pied-piper-alt.svg │ │ │ ├── pied-piper-hat.svg │ │ │ ├── pied-piper-pp.svg │ │ │ ├── pied-piper.svg │ │ │ ├── pinterest-p.svg │ │ │ ├── pinterest.svg │ │ │ ├── pix.svg │ │ │ ├── playstation.svg │ │ │ ├── product-hunt.svg │ │ │ ├── pushed.svg │ │ │ ├── python.svg │ │ │ ├── qq.svg │ │ │ ├── quinscape.svg │ │ │ ├── quora.svg │ │ │ ├── r-project.svg │ │ │ ├── raspberry-pi.svg │ │ │ ├── ravelry.svg │ │ │ ├── react.svg │ │ │ ├── reacteurope.svg │ │ │ ├── readme.svg │ │ │ ├── rebel.svg │ │ │ ├── red-river.svg │ │ │ ├── reddit-alien.svg │ │ │ ├── reddit.svg │ │ │ ├── redhat.svg │ │ │ ├── renren.svg │ │ │ ├── replyd.svg │ │ │ ├── researchgate.svg │ │ │ ├── resolving.svg │ │ │ ├── rev.svg │ │ │ ├── rocketchat.svg │ │ │ ├── rockrms.svg │ │ │ ├── rust.svg │ │ │ ├── safari.svg │ │ │ ├── salesforce.svg │ │ │ ├── sass.svg │ │ │ ├── schlix.svg │ │ │ ├── screenpal.svg │ │ │ ├── scribd.svg │ │ │ ├── searchengin.svg │ │ │ ├── sellcast.svg │ │ │ ├── sellsy.svg │ │ │ ├── servicestack.svg │ │ │ ├── shirtsinbulk.svg │ │ │ ├── shopify.svg │ │ │ ├── shopware.svg │ │ │ ├── simplybuilt.svg │ │ │ ├── sistrix.svg │ │ │ ├── sith.svg │ │ │ ├── sitrox.svg │ │ │ ├── sketch.svg │ │ │ ├── skyatlas.svg │ │ │ ├── skype.svg │ │ │ ├── slack.svg │ │ │ ├── slideshare.svg │ │ │ ├── snapchat.svg │ │ │ ├── soundcloud.svg │ │ │ ├── sourcetree.svg │ │ │ ├── space-awesome.svg │ │ │ ├── speakap.svg │ │ │ ├── speaker-deck.svg │ │ │ ├── spotify.svg │ │ │ ├── square-behance.svg │ │ │ ├── square-dribbble.svg │ │ │ ├── square-facebook.svg │ │ │ ├── square-font-awesome-stroke.svg │ │ │ ├── square-font-awesome.svg │ │ │ ├── square-git.svg │ │ │ ├── square-github.svg │ │ │ ├── square-gitlab.svg │ │ │ ├── square-google-plus.svg │ │ │ ├── square-hacker-news.svg │ │ │ ├── square-instagram.svg │ │ │ ├── square-js.svg │ │ │ ├── square-lastfm.svg │ │ │ ├── square-odnoklassniki.svg │ │ │ ├── square-pied-piper.svg │ │ │ ├── square-pinterest.svg │ │ │ ├── square-reddit.svg │ │ │ ├── square-snapchat.svg │ │ │ ├── square-steam.svg │ │ │ ├── square-tumblr.svg │ │ │ ├── square-twitter.svg │ │ │ ├── square-viadeo.svg │ │ │ ├── square-vimeo.svg │ │ │ ├── square-whatsapp.svg │ │ │ ├── square-xing.svg │ │ │ ├── square-youtube.svg │ │ │ ├── squarespace.svg │ │ │ ├── stack-exchange.svg │ │ │ ├── stack-overflow.svg │ │ │ ├── stackpath.svg │ │ │ ├── staylinked.svg │ │ │ ├── steam-symbol.svg │ │ │ ├── steam.svg │ │ │ ├── sticker-mule.svg │ │ │ ├── strava.svg │ │ │ ├── stripe-s.svg │ │ │ ├── stripe.svg │ │ │ ├── stubber.svg │ │ │ ├── studiovinari.svg │ │ │ ├── stumbleupon-circle.svg │ │ │ ├── stumbleupon.svg │ │ │ ├── superpowers.svg │ │ │ ├── supple.svg │ │ │ ├── suse.svg │ │ │ ├── swift.svg │ │ │ ├── symfony.svg │ │ │ ├── teamspeak.svg │ │ │ ├── telegram.svg │ │ │ ├── tencent-weibo.svg │ │ │ ├── the-red-yeti.svg │ │ │ ├── themeco.svg │ │ │ ├── themeisle.svg │ │ │ ├── think-peaks.svg │ │ │ ├── tiktok.svg │ │ │ ├── trade-federation.svg │ │ │ ├── trello.svg │ │ │ ├── tumblr.svg │ │ │ ├── twitch.svg │ │ │ ├── twitter.svg │ │ │ ├── typo3.svg │ │ │ ├── uber.svg │ │ │ ├── ubuntu.svg │ │ │ ├── uikit.svg │ │ │ ├── umbraco.svg │ │ │ ├── uncharted.svg │ │ │ ├── uniregistry.svg │ │ │ ├── unity.svg │ │ │ ├── unsplash.svg │ │ │ ├── untappd.svg │ │ │ ├── ups.svg │ │ │ ├── usb.svg │ │ │ ├── usps.svg │ │ │ ├── ussunnah.svg │ │ │ ├── vaadin.svg │ │ │ ├── viacoin.svg │ │ │ ├── viadeo.svg │ │ │ ├── viber.svg │ │ │ ├── vimeo-v.svg │ │ │ ├── vimeo.svg │ │ │ ├── vine.svg │ │ │ ├── vk.svg │ │ │ ├── vnv.svg │ │ │ ├── vuejs.svg │ │ │ ├── watchman-monitoring.svg │ │ │ ├── waze.svg │ │ │ ├── weebly.svg │ │ │ ├── weibo.svg │ │ │ ├── weixin.svg │ │ │ ├── whatsapp.svg │ │ │ ├── whmcs.svg │ │ │ ├── wikipedia-w.svg │ │ │ ├── windows.svg │ │ │ ├── wirsindhandwerk.svg │ │ │ ├── wix.svg │ │ │ ├── wizards-of-the-coast.svg │ │ │ ├── wodu.svg │ │ │ ├── wolf-pack-battalion.svg │ │ │ ├── wordpress-simple.svg │ │ │ ├── wordpress.svg │ │ │ ├── wpbeginner.svg │ │ │ ├── wpexplorer.svg │ │ │ ├── wpforms.svg │ │ │ ├── wpressr.svg │ │ │ ├── xbox.svg │ │ │ ├── xing.svg │ │ │ ├── y-combinator.svg │ │ │ ├── yahoo.svg │ │ │ ├── yammer.svg │ │ │ ├── yandex-international.svg │ │ │ ├── yandex.svg │ │ │ ├── yarn.svg │ │ │ ├── yelp.svg │ │ │ ├── yoast.svg │ │ │ ├── youtube.svg │ │ │ └── zhihu.svg │ │ ├── regular │ │ │ ├── address-book.svg │ │ │ ├── address-card.svg │ │ │ ├── bell-slash.svg │ │ │ ├── bell.svg │ │ │ ├── bookmark.svg │ │ │ ├── building.svg │ │ │ ├── calendar-check.svg │ │ │ ├── calendar-days.svg │ │ │ ├── calendar-minus.svg │ │ │ ├── calendar-plus.svg │ │ │ ├── calendar-xmark.svg │ │ │ ├── calendar.svg │ │ │ ├── chart-bar.svg │ │ │ ├── chess-bishop.svg │ │ │ ├── chess-king.svg │ │ │ ├── chess-knight.svg │ │ │ ├── chess-pawn.svg │ │ │ ├── chess-queen.svg │ │ │ ├── chess-rook.svg │ │ │ ├── circle-check.svg │ │ │ ├── circle-dot.svg │ │ │ ├── circle-down.svg │ │ │ ├── circle-left.svg │ │ │ ├── circle-pause.svg │ │ │ ├── circle-play.svg │ │ │ ├── circle-question.svg │ │ │ ├── circle-right.svg │ │ │ ├── circle-stop.svg │ │ │ ├── circle-up.svg │ │ │ ├── circle-user.svg │ │ │ ├── circle-xmark.svg │ │ │ ├── circle.svg │ │ │ ├── clipboard.svg │ │ │ ├── clock.svg │ │ │ ├── clone.svg │ │ │ ├── closed-captioning.svg │ │ │ ├── comment-dots.svg │ │ │ ├── comment.svg │ │ │ ├── comments.svg │ │ │ ├── compass.svg │ │ │ ├── copy.svg │ │ │ ├── copyright.svg │ │ │ ├── credit-card.svg │ │ │ ├── envelope-open.svg │ │ │ ├── envelope.svg │ │ │ ├── eye-slash.svg │ │ │ ├── eye.svg │ │ │ ├── face-angry.svg │ │ │ ├── face-dizzy.svg │ │ │ ├── face-flushed.svg │ │ │ ├── face-frown-open.svg │ │ │ ├── face-frown.svg │ │ │ ├── face-grimace.svg │ │ │ ├── face-grin-beam-sweat.svg │ │ │ ├── face-grin-beam.svg │ │ │ ├── face-grin-hearts.svg │ │ │ ├── face-grin-squint-tears.svg │ │ │ ├── face-grin-squint.svg │ │ │ ├── face-grin-stars.svg │ │ │ ├── face-grin-tears.svg │ │ │ ├── face-grin-tongue-squint.svg │ │ │ ├── face-grin-tongue-wink.svg │ │ │ ├── face-grin-tongue.svg │ │ │ ├── face-grin-wide.svg │ │ │ ├── face-grin-wink.svg │ │ │ ├── face-grin.svg │ │ │ ├── face-kiss-beam.svg │ │ │ ├── face-kiss-wink-heart.svg │ │ │ ├── face-kiss.svg │ │ │ ├── face-laugh-beam.svg │ │ │ ├── face-laugh-squint.svg │ │ │ ├── face-laugh-wink.svg │ │ │ ├── face-laugh.svg │ │ │ ├── face-meh-blank.svg │ │ │ ├── face-meh.svg │ │ │ ├── face-rolling-eyes.svg │ │ │ ├── face-sad-cry.svg │ │ │ ├── face-sad-tear.svg │ │ │ ├── face-smile-beam.svg │ │ │ ├── face-smile-wink.svg │ │ │ ├── face-smile.svg │ │ │ ├── face-surprise.svg │ │ │ ├── face-tired.svg │ │ │ ├── file-audio.svg │ │ │ ├── file-code.svg │ │ │ ├── file-excel.svg │ │ │ ├── file-image.svg │ │ │ ├── file-lines.svg │ │ │ ├── file-pdf.svg │ │ │ ├── file-powerpoint.svg │ │ │ ├── file-video.svg │ │ │ ├── file-word.svg │ │ │ ├── file-zipper.svg │ │ │ ├── file.svg │ │ │ ├── flag.svg │ │ │ ├── floppy-disk.svg │ │ │ ├── folder-closed.svg │ │ │ ├── folder-open.svg │ │ │ ├── folder.svg │ │ │ ├── font-awesome.svg │ │ │ ├── futbol.svg │ │ │ ├── gem.svg │ │ │ ├── hand-back-fist.svg │ │ │ ├── hand-lizard.svg │ │ │ ├── hand-peace.svg │ │ │ ├── hand-point-down.svg │ │ │ ├── hand-point-left.svg │ │ │ ├── hand-point-right.svg │ │ │ ├── hand-point-up.svg │ │ │ ├── hand-pointer.svg │ │ │ ├── hand-scissors.svg │ │ │ ├── hand-spock.svg │ │ │ ├── hand.svg │ │ │ ├── handshake.svg │ │ │ ├── hard-drive.svg │ │ │ ├── heart.svg │ │ │ ├── hospital.svg │ │ │ ├── hourglass-half.svg │ │ │ ├── hourglass.svg │ │ │ ├── id-badge.svg │ │ │ ├── id-card.svg │ │ │ ├── image.svg │ │ │ ├── images.svg │ │ │ ├── keyboard.svg │ │ │ ├── lemon.svg │ │ │ ├── life-ring.svg │ │ │ ├── lightbulb.svg │ │ │ ├── map.svg │ │ │ ├── message.svg │ │ │ ├── money-bill-1.svg │ │ │ ├── moon.svg │ │ │ ├── newspaper.svg │ │ │ ├── note-sticky.svg │ │ │ ├── object-group.svg │ │ │ ├── object-ungroup.svg │ │ │ ├── paper-plane.svg │ │ │ ├── paste.svg │ │ │ ├── pen-to-square.svg │ │ │ ├── rectangle-list.svg │ │ │ ├── rectangle-xmark.svg │ │ │ ├── registered.svg │ │ │ ├── share-from-square.svg │ │ │ ├── snowflake.svg │ │ │ ├── square-caret-down.svg │ │ │ ├── square-caret-left.svg │ │ │ ├── square-caret-right.svg │ │ │ ├── square-caret-up.svg │ │ │ ├── square-check.svg │ │ │ ├── square-full.svg │ │ │ ├── square-minus.svg │ │ │ ├── square-plus.svg │ │ │ ├── square.svg │ │ │ ├── star-half-stroke.svg │ │ │ ├── star-half.svg │ │ │ ├── star.svg │ │ │ ├── sun.svg │ │ │ ├── thumbs-down.svg │ │ │ ├── thumbs-up.svg │ │ │ ├── trash-can.svg │ │ │ ├── user.svg │ │ │ ├── window-maximize.svg │ │ │ ├── window-minimize.svg │ │ │ └── window-restore.svg │ │ └── solid │ │ │ ├── 0.svg │ │ │ ├── 1.svg │ │ │ ├── 2.svg │ │ │ ├── 3.svg │ │ │ ├── 4.svg │ │ │ ├── 5.svg │ │ │ ├── 6.svg │ │ │ ├── 7.svg │ │ │ ├── 8.svg │ │ │ ├── 9.svg │ │ │ ├── a.svg │ │ │ ├── address-book.svg │ │ │ ├── address-card.svg │ │ │ ├── align-center.svg │ │ │ ├── align-justify.svg │ │ │ ├── align-left.svg │ │ │ ├── align-right.svg │ │ │ ├── anchor-circle-check.svg │ │ │ ├── anchor-circle-exclamation.svg │ │ │ ├── anchor-circle-xmark.svg │ │ │ ├── anchor-lock.svg │ │ │ ├── anchor.svg │ │ │ ├── angle-down.svg │ │ │ ├── angle-left.svg │ │ │ ├── angle-right.svg │ │ │ ├── angle-up.svg │ │ │ ├── angles-down.svg │ │ │ ├── angles-left.svg │ │ │ ├── angles-right.svg │ │ │ ├── angles-up.svg │ │ │ ├── ankh.svg │ │ │ ├── apple-whole.svg │ │ │ ├── archway.svg │ │ │ ├── arrow-down-1-9.svg │ │ │ ├── arrow-down-9-1.svg │ │ │ ├── arrow-down-a-z.svg │ │ │ ├── arrow-down-long.svg │ │ │ ├── arrow-down-short-wide.svg │ │ │ ├── arrow-down-up-across-line.svg │ │ │ ├── arrow-down-up-lock.svg │ │ │ ├── arrow-down-wide-short.svg │ │ │ ├── arrow-down-z-a.svg │ │ │ ├── arrow-down.svg │ │ │ ├── arrow-left-long.svg │ │ │ ├── arrow-left.svg │ │ │ ├── arrow-pointer.svg │ │ │ ├── arrow-right-arrow-left.svg │ │ │ ├── arrow-right-from-bracket.svg │ │ │ ├── arrow-right-long.svg │ │ │ ├── arrow-right-to-bracket.svg │ │ │ ├── arrow-right-to-city.svg │ │ │ ├── arrow-right.svg │ │ │ ├── arrow-rotate-left.svg │ │ │ ├── arrow-rotate-right.svg │ │ │ ├── arrow-trend-down.svg │ │ │ ├── arrow-trend-up.svg │ │ │ ├── arrow-turn-down.svg │ │ │ ├── arrow-turn-up.svg │ │ │ ├── arrow-up-1-9.svg │ │ │ ├── arrow-up-9-1.svg │ │ │ ├── arrow-up-a-z.svg │ │ │ ├── arrow-up-from-bracket.svg │ │ │ ├── arrow-up-from-ground-water.svg │ │ │ ├── arrow-up-from-water-pump.svg │ │ │ ├── arrow-up-long.svg │ │ │ ├── arrow-up-right-dots.svg │ │ │ ├── arrow-up-right-from-square.svg │ │ │ ├── arrow-up-short-wide.svg │ │ │ ├── arrow-up-wide-short.svg │ │ │ ├── arrow-up-z-a.svg │ │ │ ├── arrow-up.svg │ │ │ ├── arrows-down-to-line.svg │ │ │ ├── arrows-down-to-people.svg │ │ │ ├── arrows-left-right-to-line.svg │ │ │ ├── arrows-left-right.svg │ │ │ ├── arrows-rotate.svg │ │ │ ├── arrows-spin.svg │ │ │ ├── arrows-split-up-and-left.svg │ │ │ ├── arrows-to-circle.svg │ │ │ ├── arrows-to-dot.svg │ │ │ ├── arrows-to-eye.svg │ │ │ ├── arrows-turn-right.svg │ │ │ ├── arrows-turn-to-dots.svg │ │ │ ├── arrows-up-down-left-right.svg │ │ │ ├── arrows-up-down.svg │ │ │ ├── arrows-up-to-line.svg │ │ │ ├── asterisk.svg │ │ │ ├── at.svg │ │ │ ├── atom.svg │ │ │ ├── audio-description.svg │ │ │ ├── austral-sign.svg │ │ │ ├── award.svg │ │ │ ├── b.svg │ │ │ ├── baby-carriage.svg │ │ │ ├── baby.svg │ │ │ ├── backward-fast.svg │ │ │ ├── backward-step.svg │ │ │ ├── backward.svg │ │ │ ├── bacon.svg │ │ │ ├── bacteria.svg │ │ │ ├── bacterium.svg │ │ │ ├── bag-shopping.svg │ │ │ ├── bahai.svg │ │ │ ├── baht-sign.svg │ │ │ ├── ban-smoking.svg │ │ │ ├── ban.svg │ │ │ ├── bandage.svg │ │ │ ├── bangladeshi-taka-sign.svg │ │ │ ├── barcode.svg │ │ │ ├── bars-progress.svg │ │ │ ├── bars-staggered.svg │ │ │ ├── bars.svg │ │ │ ├── baseball-bat-ball.svg │ │ │ ├── baseball.svg │ │ │ ├── basket-shopping.svg │ │ │ ├── basketball.svg │ │ │ ├── bath.svg │ │ │ ├── battery-empty.svg │ │ │ ├── battery-full.svg │ │ │ ├── battery-half.svg │ │ │ ├── battery-quarter.svg │ │ │ ├── battery-three-quarters.svg │ │ │ ├── bed-pulse.svg │ │ │ ├── bed.svg │ │ │ ├── beer-mug-empty.svg │ │ │ ├── bell-concierge.svg │ │ │ ├── bell-slash.svg │ │ │ ├── bell.svg │ │ │ ├── bezier-curve.svg │ │ │ ├── bicycle.svg │ │ │ ├── binoculars.svg │ │ │ ├── biohazard.svg │ │ │ ├── bitcoin-sign.svg │ │ │ ├── blender-phone.svg │ │ │ ├── blender.svg │ │ │ ├── blog.svg │ │ │ ├── bold.svg │ │ │ ├── bolt-lightning.svg │ │ │ ├── bolt.svg │ │ │ ├── bomb.svg │ │ │ ├── bone.svg │ │ │ ├── bong.svg │ │ │ ├── book-atlas.svg │ │ │ ├── book-bible.svg │ │ │ ├── book-bookmark.svg │ │ │ ├── book-journal-whills.svg │ │ │ ├── book-medical.svg │ │ │ ├── book-open-reader.svg │ │ │ ├── book-open.svg │ │ │ ├── book-quran.svg │ │ │ ├── book-skull.svg │ │ │ ├── book-tanakh.svg │ │ │ ├── book.svg │ │ │ ├── bookmark.svg │ │ │ ├── border-all.svg │ │ │ ├── border-none.svg │ │ │ ├── border-top-left.svg │ │ │ ├── bore-hole.svg │ │ │ ├── bottle-droplet.svg │ │ │ ├── bottle-water.svg │ │ │ ├── bowl-food.svg │ │ │ ├── bowl-rice.svg │ │ │ ├── bowling-ball.svg │ │ │ ├── box-archive.svg │ │ │ ├── box-open.svg │ │ │ ├── box-tissue.svg │ │ │ ├── box.svg │ │ │ ├── boxes-packing.svg │ │ │ ├── boxes-stacked.svg │ │ │ ├── braille.svg │ │ │ ├── brain.svg │ │ │ ├── brazilian-real-sign.svg │ │ │ ├── bread-slice.svg │ │ │ ├── bridge-circle-check.svg │ │ │ ├── bridge-circle-exclamation.svg │ │ │ ├── bridge-circle-xmark.svg │ │ │ ├── bridge-lock.svg │ │ │ ├── bridge-water.svg │ │ │ ├── bridge.svg │ │ │ ├── briefcase-medical.svg │ │ │ ├── briefcase.svg │ │ │ ├── broom-ball.svg │ │ │ ├── broom.svg │ │ │ ├── brush.svg │ │ │ ├── bucket.svg │ │ │ ├── bug-slash.svg │ │ │ ├── bug.svg │ │ │ ├── bugs.svg │ │ │ ├── building-circle-arrow-right.svg │ │ │ ├── building-circle-check.svg │ │ │ ├── building-circle-exclamation.svg │ │ │ ├── building-circle-xmark.svg │ │ │ ├── building-columns.svg │ │ │ ├── building-flag.svg │ │ │ ├── building-lock.svg │ │ │ ├── building-ngo.svg │ │ │ ├── building-shield.svg │ │ │ ├── building-un.svg │ │ │ ├── building-user.svg │ │ │ ├── building-wheat.svg │ │ │ ├── building.svg │ │ │ ├── bullhorn.svg │ │ │ ├── bullseye.svg │ │ │ ├── burger.svg │ │ │ ├── burst.svg │ │ │ ├── bus-simple.svg │ │ │ ├── bus.svg │ │ │ ├── business-time.svg │ │ │ ├── c.svg │ │ │ ├── cable-car.svg │ │ │ ├── cake-candles.svg │ │ │ ├── calculator.svg │ │ │ ├── calendar-check.svg │ │ │ ├── calendar-day.svg │ │ │ ├── calendar-days.svg │ │ │ ├── calendar-minus.svg │ │ │ ├── calendar-plus.svg │ │ │ ├── calendar-week.svg │ │ │ ├── calendar-xmark.svg │ │ │ ├── calendar.svg │ │ │ ├── camera-retro.svg │ │ │ ├── camera-rotate.svg │ │ │ ├── camera.svg │ │ │ ├── campground.svg │ │ │ ├── candy-cane.svg │ │ │ ├── cannabis.svg │ │ │ ├── capsules.svg │ │ │ ├── car-battery.svg │ │ │ ├── car-burst.svg │ │ │ ├── car-on.svg │ │ │ ├── car-rear.svg │ │ │ ├── car-side.svg │ │ │ ├── car-tunnel.svg │ │ │ ├── car.svg │ │ │ ├── caravan.svg │ │ │ ├── caret-down.svg │ │ │ ├── caret-left.svg │ │ │ ├── caret-right.svg │ │ │ ├── caret-up.svg │ │ │ ├── carrot.svg │ │ │ ├── cart-arrow-down.svg │ │ │ ├── cart-flatbed-suitcase.svg │ │ │ ├── cart-flatbed.svg │ │ │ ├── cart-plus.svg │ │ │ ├── cart-shopping.svg │ │ │ ├── cash-register.svg │ │ │ ├── cat.svg │ │ │ ├── cedi-sign.svg │ │ │ ├── cent-sign.svg │ │ │ ├── certificate.svg │ │ │ ├── chair.svg │ │ │ ├── chalkboard-user.svg │ │ │ ├── chalkboard.svg │ │ │ ├── champagne-glasses.svg │ │ │ ├── charging-station.svg │ │ │ ├── chart-area.svg │ │ │ ├── chart-bar.svg │ │ │ ├── chart-column.svg │ │ │ ├── chart-gantt.svg │ │ │ ├── chart-line.svg │ │ │ ├── chart-pie.svg │ │ │ ├── chart-simple.svg │ │ │ ├── check-double.svg │ │ │ ├── check-to-slot.svg │ │ │ ├── check.svg │ │ │ ├── cheese.svg │ │ │ ├── chess-bishop.svg │ │ │ ├── chess-board.svg │ │ │ ├── chess-king.svg │ │ │ ├── chess-knight.svg │ │ │ ├── chess-pawn.svg │ │ │ ├── chess-queen.svg │ │ │ ├── chess-rook.svg │ │ │ ├── chess.svg │ │ │ ├── chevron-down.svg │ │ │ ├── chevron-left.svg │ │ │ ├── chevron-right.svg │ │ │ ├── chevron-up.svg │ │ │ ├── child-combatant.svg │ │ │ ├── child-dress.svg │ │ │ ├── child-reaching.svg │ │ │ ├── child.svg │ │ │ ├── children.svg │ │ │ ├── church.svg │ │ │ ├── circle-arrow-down.svg │ │ │ ├── circle-arrow-left.svg │ │ │ ├── circle-arrow-right.svg │ │ │ ├── circle-arrow-up.svg │ │ │ ├── circle-check.svg │ │ │ ├── circle-chevron-down.svg │ │ │ ├── circle-chevron-left.svg │ │ │ ├── circle-chevron-right.svg │ │ │ ├── circle-chevron-up.svg │ │ │ ├── circle-dollar-to-slot.svg │ │ │ ├── circle-dot.svg │ │ │ ├── circle-down.svg │ │ │ ├── circle-exclamation.svg │ │ │ ├── circle-h.svg │ │ │ ├── circle-half-stroke.svg │ │ │ ├── circle-info.svg │ │ │ ├── circle-left.svg │ │ │ ├── circle-minus.svg │ │ │ ├── circle-nodes.svg │ │ │ ├── circle-notch.svg │ │ │ ├── circle-pause.svg │ │ │ ├── circle-play.svg │ │ │ ├── circle-plus.svg │ │ │ ├── circle-question.svg │ │ │ ├── circle-radiation.svg │ │ │ ├── circle-right.svg │ │ │ ├── circle-stop.svg │ │ │ ├── circle-up.svg │ │ │ ├── circle-user.svg │ │ │ ├── circle-xmark.svg │ │ │ ├── circle.svg │ │ │ ├── city.svg │ │ │ ├── clapperboard.svg │ │ │ ├── clipboard-check.svg │ │ │ ├── clipboard-list.svg │ │ │ ├── clipboard-question.svg │ │ │ ├── clipboard-user.svg │ │ │ ├── clipboard.svg │ │ │ ├── clock-rotate-left.svg │ │ │ ├── clock.svg │ │ │ ├── clone.svg │ │ │ ├── closed-captioning.svg │ │ │ ├── cloud-arrow-down.svg │ │ │ ├── cloud-arrow-up.svg │ │ │ ├── cloud-bolt.svg │ │ │ ├── cloud-meatball.svg │ │ │ ├── cloud-moon-rain.svg │ │ │ ├── cloud-moon.svg │ │ │ ├── cloud-rain.svg │ │ │ ├── cloud-showers-heavy.svg │ │ │ ├── cloud-showers-water.svg │ │ │ ├── cloud-sun-rain.svg │ │ │ ├── cloud-sun.svg │ │ │ ├── cloud.svg │ │ │ ├── clover.svg │ │ │ ├── code-branch.svg │ │ │ ├── code-commit.svg │ │ │ ├── code-compare.svg │ │ │ ├── code-fork.svg │ │ │ ├── code-merge.svg │ │ │ ├── code-pull-request.svg │ │ │ ├── code.svg │ │ │ ├── coins.svg │ │ │ ├── colon-sign.svg │ │ │ ├── comment-dollar.svg │ │ │ ├── comment-dots.svg │ │ │ ├── comment-medical.svg │ │ │ ├── comment-slash.svg │ │ │ ├── comment-sms.svg │ │ │ ├── comment.svg │ │ │ ├── comments-dollar.svg │ │ │ ├── comments.svg │ │ │ ├── compact-disc.svg │ │ │ ├── compass-drafting.svg │ │ │ ├── compass.svg │ │ │ ├── compress.svg │ │ │ ├── computer-mouse.svg │ │ │ ├── computer.svg │ │ │ ├── cookie-bite.svg │ │ │ ├── cookie.svg │ │ │ ├── copy.svg │ │ │ ├── copyright.svg │ │ │ ├── couch.svg │ │ │ ├── cow.svg │ │ │ ├── credit-card.svg │ │ │ ├── crop-simple.svg │ │ │ ├── crop.svg │ │ │ ├── cross.svg │ │ │ ├── crosshairs.svg │ │ │ ├── crow.svg │ │ │ ├── crown.svg │ │ │ ├── crutch.svg │ │ │ ├── cruzeiro-sign.svg │ │ │ ├── cube.svg │ │ │ ├── cubes-stacked.svg │ │ │ ├── cubes.svg │ │ │ ├── d.svg │ │ │ ├── database.svg │ │ │ ├── delete-left.svg │ │ │ ├── democrat.svg │ │ │ ├── desktop.svg │ │ │ ├── dharmachakra.svg │ │ │ ├── diagram-next.svg │ │ │ ├── diagram-predecessor.svg │ │ │ ├── diagram-project.svg │ │ │ ├── diagram-successor.svg │ │ │ ├── diamond-turn-right.svg │ │ │ ├── diamond.svg │ │ │ ├── dice-d20.svg │ │ │ ├── dice-d6.svg │ │ │ ├── dice-five.svg │ │ │ ├── dice-four.svg │ │ │ ├── dice-one.svg │ │ │ ├── dice-six.svg │ │ │ ├── dice-three.svg │ │ │ ├── dice-two.svg │ │ │ ├── dice.svg │ │ │ ├── disease.svg │ │ │ ├── display.svg │ │ │ ├── divide.svg │ │ │ ├── dna.svg │ │ │ ├── dog.svg │ │ │ ├── dollar-sign.svg │ │ │ ├── dolly.svg │ │ │ ├── dong-sign.svg │ │ │ ├── door-closed.svg │ │ │ ├── door-open.svg │ │ │ ├── dove.svg │ │ │ ├── down-left-and-up-right-to-center.svg │ │ │ ├── down-long.svg │ │ │ ├── download.svg │ │ │ ├── dragon.svg │ │ │ ├── draw-polygon.svg │ │ │ ├── droplet-slash.svg │ │ │ ├── droplet.svg │ │ │ ├── drum-steelpan.svg │ │ │ ├── drum.svg │ │ │ ├── drumstick-bite.svg │ │ │ ├── dumbbell.svg │ │ │ ├── dumpster-fire.svg │ │ │ ├── dumpster.svg │ │ │ ├── dungeon.svg │ │ │ ├── e.svg │ │ │ ├── ear-deaf.svg │ │ │ ├── ear-listen.svg │ │ │ ├── earth-africa.svg │ │ │ ├── earth-americas.svg │ │ │ ├── earth-asia.svg │ │ │ ├── earth-europe.svg │ │ │ ├── earth-oceania.svg │ │ │ ├── egg.svg │ │ │ ├── eject.svg │ │ │ ├── elevator.svg │ │ │ ├── ellipsis-vertical.svg │ │ │ ├── ellipsis.svg │ │ │ ├── envelope-circle-check.svg │ │ │ ├── envelope-open-text.svg │ │ │ ├── envelope-open.svg │ │ │ ├── envelope.svg │ │ │ ├── envelopes-bulk.svg │ │ │ ├── equals.svg │ │ │ ├── eraser.svg │ │ │ ├── ethernet.svg │ │ │ ├── euro-sign.svg │ │ │ ├── exclamation.svg │ │ │ ├── expand.svg │ │ │ ├── explosion.svg │ │ │ ├── eye-dropper.svg │ │ │ ├── eye-low-vision.svg │ │ │ ├── eye-slash.svg │ │ │ ├── eye.svg │ │ │ ├── f.svg │ │ │ ├── face-angry.svg │ │ │ ├── face-dizzy.svg │ │ │ ├── face-flushed.svg │ │ │ ├── face-frown-open.svg │ │ │ ├── face-frown.svg │ │ │ ├── face-grimace.svg │ │ │ ├── face-grin-beam-sweat.svg │ │ │ ├── face-grin-beam.svg │ │ │ ├── face-grin-hearts.svg │ │ │ ├── face-grin-squint-tears.svg │ │ │ ├── face-grin-squint.svg │ │ │ ├── face-grin-stars.svg │ │ │ ├── face-grin-tears.svg │ │ │ ├── face-grin-tongue-squint.svg │ │ │ ├── face-grin-tongue-wink.svg │ │ │ ├── face-grin-tongue.svg │ │ │ ├── face-grin-wide.svg │ │ │ ├── face-grin-wink.svg │ │ │ ├── face-grin.svg │ │ │ ├── face-kiss-beam.svg │ │ │ ├── face-kiss-wink-heart.svg │ │ │ ├── face-kiss.svg │ │ │ ├── face-laugh-beam.svg │ │ │ ├── face-laugh-squint.svg │ │ │ ├── face-laugh-wink.svg │ │ │ ├── face-laugh.svg │ │ │ ├── face-meh-blank.svg │ │ │ ├── face-meh.svg │ │ │ ├── face-rolling-eyes.svg │ │ │ ├── face-sad-cry.svg │ │ │ ├── face-sad-tear.svg │ │ │ ├── face-smile-beam.svg │ │ │ ├── face-smile-wink.svg │ │ │ ├── face-smile.svg │ │ │ ├── face-surprise.svg │ │ │ ├── face-tired.svg │ │ │ ├── fan.svg │ │ │ ├── faucet-drip.svg │ │ │ ├── faucet.svg │ │ │ ├── fax.svg │ │ │ ├── feather-pointed.svg │ │ │ ├── feather.svg │ │ │ ├── ferry.svg │ │ │ ├── file-arrow-down.svg │ │ │ ├── file-arrow-up.svg │ │ │ ├── file-audio.svg │ │ │ ├── file-circle-check.svg │ │ │ ├── file-circle-exclamation.svg │ │ │ ├── file-circle-minus.svg │ │ │ ├── file-circle-plus.svg │ │ │ ├── file-circle-question.svg │ │ │ ├── file-circle-xmark.svg │ │ │ ├── file-code.svg │ │ │ ├── file-contract.svg │ │ │ ├── file-csv.svg │ │ │ ├── file-excel.svg │ │ │ ├── file-export.svg │ │ │ ├── file-image.svg │ │ │ ├── file-import.svg │ │ │ ├── file-invoice-dollar.svg │ │ │ ├── file-invoice.svg │ │ │ ├── file-lines.svg │ │ │ ├── file-medical.svg │ │ │ ├── file-pdf.svg │ │ │ ├── file-pen.svg │ │ │ ├── file-powerpoint.svg │ │ │ ├── file-prescription.svg │ │ │ ├── file-shield.svg │ │ │ ├── file-signature.svg │ │ │ ├── file-video.svg │ │ │ ├── file-waveform.svg │ │ │ ├── file-word.svg │ │ │ ├── file-zipper.svg │ │ │ ├── file.svg │ │ │ ├── fill-drip.svg │ │ │ ├── fill.svg │ │ │ ├── film.svg │ │ │ ├── filter-circle-dollar.svg │ │ │ ├── filter-circle-xmark.svg │ │ │ ├── filter.svg │ │ │ ├── fingerprint.svg │ │ │ ├── fire-burner.svg │ │ │ ├── fire-extinguisher.svg │ │ │ ├── fire-flame-curved.svg │ │ │ ├── fire-flame-simple.svg │ │ │ ├── fire.svg │ │ │ ├── fish-fins.svg │ │ │ ├── fish.svg │ │ │ ├── flag-checkered.svg │ │ │ ├── flag-usa.svg │ │ │ ├── flag.svg │ │ │ ├── flask-vial.svg │ │ │ ├── flask.svg │ │ │ ├── floppy-disk.svg │ │ │ ├── florin-sign.svg │ │ │ ├── folder-closed.svg │ │ │ ├── folder-minus.svg │ │ │ ├── folder-open.svg │ │ │ ├── folder-plus.svg │ │ │ ├── folder-tree.svg │ │ │ ├── folder.svg │ │ │ ├── font-awesome.svg │ │ │ ├── font.svg │ │ │ ├── football.svg │ │ │ ├── forward-fast.svg │ │ │ ├── forward-step.svg │ │ │ ├── forward.svg │ │ │ ├── franc-sign.svg │ │ │ ├── frog.svg │ │ │ ├── futbol.svg │ │ │ ├── g.svg │ │ │ ├── gamepad.svg │ │ │ ├── gas-pump.svg │ │ │ ├── gauge-high.svg │ │ │ ├── gauge-simple-high.svg │ │ │ ├── gauge-simple.svg │ │ │ ├── gauge.svg │ │ │ ├── gavel.svg │ │ │ ├── gear.svg │ │ │ ├── gears.svg │ │ │ ├── gem.svg │ │ │ ├── genderless.svg │ │ │ ├── ghost.svg │ │ │ ├── gift.svg │ │ │ ├── gifts.svg │ │ │ ├── glass-water-droplet.svg │ │ │ ├── glass-water.svg │ │ │ ├── glasses.svg │ │ │ ├── globe.svg │ │ │ ├── golf-ball-tee.svg │ │ │ ├── gopuram.svg │ │ │ ├── graduation-cap.svg │ │ │ ├── greater-than-equal.svg │ │ │ ├── greater-than.svg │ │ │ ├── grip-lines-vertical.svg │ │ │ ├── grip-lines.svg │ │ │ ├── grip-vertical.svg │ │ │ ├── grip.svg │ │ │ ├── group-arrows-rotate.svg │ │ │ ├── guarani-sign.svg │ │ │ ├── guitar.svg │ │ │ ├── gun.svg │ │ │ ├── h.svg │ │ │ ├── hammer.svg │ │ │ ├── hamsa.svg │ │ │ ├── hand-back-fist.svg │ │ │ ├── hand-dots.svg │ │ │ ├── hand-fist.svg │ │ │ ├── hand-holding-dollar.svg │ │ │ ├── hand-holding-droplet.svg │ │ │ ├── hand-holding-hand.svg │ │ │ ├── hand-holding-heart.svg │ │ │ ├── hand-holding-medical.svg │ │ │ ├── hand-holding.svg │ │ │ ├── hand-lizard.svg │ │ │ ├── hand-middle-finger.svg │ │ │ ├── hand-peace.svg │ │ │ ├── hand-point-down.svg │ │ │ ├── hand-point-left.svg │ │ │ ├── hand-point-right.svg │ │ │ ├── hand-point-up.svg │ │ │ ├── hand-pointer.svg │ │ │ ├── hand-scissors.svg │ │ │ ├── hand-sparkles.svg │ │ │ ├── hand-spock.svg │ │ │ ├── hand.svg │ │ │ ├── handcuffs.svg │ │ │ ├── hands-asl-interpreting.svg │ │ │ ├── hands-bound.svg │ │ │ ├── hands-bubbles.svg │ │ │ ├── hands-clapping.svg │ │ │ ├── hands-holding-child.svg │ │ │ ├── hands-holding-circle.svg │ │ │ ├── hands-holding.svg │ │ │ ├── hands-praying.svg │ │ │ ├── hands.svg │ │ │ ├── handshake-angle.svg │ │ │ ├── handshake-simple-slash.svg │ │ │ ├── handshake-simple.svg │ │ │ ├── handshake-slash.svg │ │ │ ├── handshake.svg │ │ │ ├── hanukiah.svg │ │ │ ├── hard-drive.svg │ │ │ ├── hashtag.svg │ │ │ ├── hat-cowboy-side.svg │ │ │ ├── hat-cowboy.svg │ │ │ ├── hat-wizard.svg │ │ │ ├── head-side-cough-slash.svg │ │ │ ├── head-side-cough.svg │ │ │ ├── head-side-mask.svg │ │ │ ├── head-side-virus.svg │ │ │ ├── heading.svg │ │ │ ├── headphones-simple.svg │ │ │ ├── headphones.svg │ │ │ ├── headset.svg │ │ │ ├── heart-circle-bolt.svg │ │ │ ├── heart-circle-check.svg │ │ │ ├── heart-circle-exclamation.svg │ │ │ ├── heart-circle-minus.svg │ │ │ ├── heart-circle-plus.svg │ │ │ ├── heart-circle-xmark.svg │ │ │ ├── heart-crack.svg │ │ │ ├── heart-pulse.svg │ │ │ ├── heart.svg │ │ │ ├── helicopter-symbol.svg │ │ │ ├── helicopter.svg │ │ │ ├── helmet-safety.svg │ │ │ ├── helmet-un.svg │ │ │ ├── highlighter.svg │ │ │ ├── hill-avalanche.svg │ │ │ ├── hill-rockslide.svg │ │ │ ├── hippo.svg │ │ │ ├── hockey-puck.svg │ │ │ ├── holly-berry.svg │ │ │ ├── horse-head.svg │ │ │ ├── horse.svg │ │ │ ├── hospital-user.svg │ │ │ ├── hospital.svg │ │ │ ├── hot-tub-person.svg │ │ │ ├── hotdog.svg │ │ │ ├── hotel.svg │ │ │ ├── hourglass-end.svg │ │ │ ├── hourglass-half.svg │ │ │ ├── hourglass-start.svg │ │ │ ├── hourglass.svg │ │ │ ├── house-chimney-crack.svg │ │ │ ├── house-chimney-medical.svg │ │ │ ├── house-chimney-user.svg │ │ │ ├── house-chimney-window.svg │ │ │ ├── house-chimney.svg │ │ │ ├── house-circle-check.svg │ │ │ ├── house-circle-exclamation.svg │ │ │ ├── house-circle-xmark.svg │ │ │ ├── house-crack.svg │ │ │ ├── house-fire.svg │ │ │ ├── house-flag.svg │ │ │ ├── house-flood-water-circle-arrow-right.svg │ │ │ ├── house-flood-water.svg │ │ │ ├── house-laptop.svg │ │ │ ├── house-lock.svg │ │ │ ├── house-medical-circle-check.svg │ │ │ ├── house-medical-circle-exclamation.svg │ │ │ ├── house-medical-circle-xmark.svg │ │ │ ├── house-medical-flag.svg │ │ │ ├── house-medical.svg │ │ │ ├── house-signal.svg │ │ │ ├── house-tsunami.svg │ │ │ ├── house-user.svg │ │ │ ├── house.svg │ │ │ ├── hryvnia-sign.svg │ │ │ ├── hurricane.svg │ │ │ ├── i-cursor.svg │ │ │ ├── i.svg │ │ │ ├── ice-cream.svg │ │ │ ├── icicles.svg │ │ │ ├── icons.svg │ │ │ ├── id-badge.svg │ │ │ ├── id-card-clip.svg │ │ │ ├── id-card.svg │ │ │ ├── igloo.svg │ │ │ ├── image-portrait.svg │ │ │ ├── image.svg │ │ │ ├── images.svg │ │ │ ├── inbox.svg │ │ │ ├── indent.svg │ │ │ ├── indian-rupee-sign.svg │ │ │ ├── industry.svg │ │ │ ├── infinity.svg │ │ │ ├── info.svg │ │ │ ├── italic.svg │ │ │ ├── j.svg │ │ │ ├── jar-wheat.svg │ │ │ ├── jar.svg │ │ │ ├── jedi.svg │ │ │ ├── jet-fighter-up.svg │ │ │ ├── jet-fighter.svg │ │ │ ├── joint.svg │ │ │ ├── jug-detergent.svg │ │ │ ├── k.svg │ │ │ ├── kaaba.svg │ │ │ ├── key.svg │ │ │ ├── keyboard.svg │ │ │ ├── khanda.svg │ │ │ ├── kip-sign.svg │ │ │ ├── kit-medical.svg │ │ │ ├── kitchen-set.svg │ │ │ ├── kiwi-bird.svg │ │ │ ├── l.svg │ │ │ ├── land-mine-on.svg │ │ │ ├── landmark-dome.svg │ │ │ ├── landmark-flag.svg │ │ │ ├── landmark.svg │ │ │ ├── language.svg │ │ │ ├── laptop-code.svg │ │ │ ├── laptop-file.svg │ │ │ ├── laptop-medical.svg │ │ │ ├── laptop.svg │ │ │ ├── lari-sign.svg │ │ │ ├── layer-group.svg │ │ │ ├── leaf.svg │ │ │ ├── left-long.svg │ │ │ ├── left-right.svg │ │ │ ├── lemon.svg │ │ │ ├── less-than-equal.svg │ │ │ ├── less-than.svg │ │ │ ├── life-ring.svg │ │ │ ├── lightbulb.svg │ │ │ ├── lines-leaning.svg │ │ │ ├── link-slash.svg │ │ │ ├── link.svg │ │ │ ├── lira-sign.svg │ │ │ ├── list-check.svg │ │ │ ├── list-ol.svg │ │ │ ├── list-ul.svg │ │ │ ├── list.svg │ │ │ ├── litecoin-sign.svg │ │ │ ├── location-arrow.svg │ │ │ ├── location-crosshairs.svg │ │ │ ├── location-dot.svg │ │ │ ├── location-pin-lock.svg │ │ │ ├── location-pin.svg │ │ │ ├── lock-open.svg │ │ │ ├── lock.svg │ │ │ ├── locust.svg │ │ │ ├── lungs-virus.svg │ │ │ ├── lungs.svg │ │ │ ├── m.svg │ │ │ ├── magnet.svg │ │ │ ├── magnifying-glass-arrow-right.svg │ │ │ ├── magnifying-glass-chart.svg │ │ │ ├── magnifying-glass-dollar.svg │ │ │ ├── magnifying-glass-location.svg │ │ │ ├── magnifying-glass-minus.svg │ │ │ ├── magnifying-glass-plus.svg │ │ │ ├── magnifying-glass.svg │ │ │ ├── manat-sign.svg │ │ │ ├── map-location-dot.svg │ │ │ ├── map-location.svg │ │ │ ├── map-pin.svg │ │ │ ├── map.svg │ │ │ ├── marker.svg │ │ │ ├── mars-and-venus-burst.svg │ │ │ ├── mars-and-venus.svg │ │ │ ├── mars-double.svg │ │ │ ├── mars-stroke-right.svg │ │ │ ├── mars-stroke-up.svg │ │ │ ├── mars-stroke.svg │ │ │ ├── mars.svg │ │ │ ├── martini-glass-citrus.svg │ │ │ ├── martini-glass-empty.svg │ │ │ ├── martini-glass.svg │ │ │ ├── mask-face.svg │ │ │ ├── mask-ventilator.svg │ │ │ ├── mask.svg │ │ │ ├── masks-theater.svg │ │ │ ├── mattress-pillow.svg │ │ │ ├── maximize.svg │ │ │ ├── medal.svg │ │ │ ├── memory.svg │ │ │ ├── menorah.svg │ │ │ ├── mercury.svg │ │ │ ├── message.svg │ │ │ ├── meteor.svg │ │ │ ├── microchip.svg │ │ │ ├── microphone-lines-slash.svg │ │ │ ├── microphone-lines.svg │ │ │ ├── microphone-slash.svg │ │ │ ├── microphone.svg │ │ │ ├── microscope.svg │ │ │ ├── mill-sign.svg │ │ │ ├── minimize.svg │ │ │ ├── minus.svg │ │ │ ├── mitten.svg │ │ │ ├── mobile-button.svg │ │ │ ├── mobile-retro.svg │ │ │ ├── mobile-screen-button.svg │ │ │ ├── mobile-screen.svg │ │ │ ├── mobile.svg │ │ │ ├── money-bill-1-wave.svg │ │ │ ├── money-bill-1.svg │ │ │ ├── money-bill-transfer.svg │ │ │ ├── money-bill-trend-up.svg │ │ │ ├── money-bill-wave.svg │ │ │ ├── money-bill-wheat.svg │ │ │ ├── money-bill.svg │ │ │ ├── money-bills.svg │ │ │ ├── money-check-dollar.svg │ │ │ ├── money-check.svg │ │ │ ├── monument.svg │ │ │ ├── moon.svg │ │ │ ├── mortar-pestle.svg │ │ │ ├── mosque.svg │ │ │ ├── mosquito-net.svg │ │ │ ├── mosquito.svg │ │ │ ├── motorcycle.svg │ │ │ ├── mound.svg │ │ │ ├── mountain-city.svg │ │ │ ├── mountain-sun.svg │ │ │ ├── mountain.svg │ │ │ ├── mug-hot.svg │ │ │ ├── mug-saucer.svg │ │ │ ├── music.svg │ │ │ ├── n.svg │ │ │ ├── naira-sign.svg │ │ │ ├── network-wired.svg │ │ │ ├── neuter.svg │ │ │ ├── newspaper.svg │ │ │ ├── not-equal.svg │ │ │ ├── notdef.svg │ │ │ ├── note-sticky.svg │ │ │ ├── notes-medical.svg │ │ │ ├── o.svg │ │ │ ├── object-group.svg │ │ │ ├── object-ungroup.svg │ │ │ ├── oil-can.svg │ │ │ ├── oil-well.svg │ │ │ ├── om.svg │ │ │ ├── otter.svg │ │ │ ├── outdent.svg │ │ │ ├── p.svg │ │ │ ├── pager.svg │ │ │ ├── paint-roller.svg │ │ │ ├── paintbrush.svg │ │ │ ├── palette.svg │ │ │ ├── pallet.svg │ │ │ ├── panorama.svg │ │ │ ├── paper-plane.svg │ │ │ ├── paperclip.svg │ │ │ ├── parachute-box.svg │ │ │ ├── paragraph.svg │ │ │ ├── passport.svg │ │ │ ├── paste.svg │ │ │ ├── pause.svg │ │ │ ├── paw.svg │ │ │ ├── peace.svg │ │ │ ├── pen-clip.svg │ │ │ ├── pen-fancy.svg │ │ │ ├── pen-nib.svg │ │ │ ├── pen-ruler.svg │ │ │ ├── pen-to-square.svg │ │ │ ├── pen.svg │ │ │ ├── pencil.svg │ │ │ ├── people-arrows.svg │ │ │ ├── people-carry-box.svg │ │ │ ├── people-group.svg │ │ │ ├── people-line.svg │ │ │ ├── people-pulling.svg │ │ │ ├── people-robbery.svg │ │ │ ├── people-roof.svg │ │ │ ├── pepper-hot.svg │ │ │ ├── percent.svg │ │ │ ├── person-arrow-down-to-line.svg │ │ │ ├── person-arrow-up-from-line.svg │ │ │ ├── person-biking.svg │ │ │ ├── person-booth.svg │ │ │ ├── person-breastfeeding.svg │ │ │ ├── person-burst.svg │ │ │ ├── person-cane.svg │ │ │ ├── person-chalkboard.svg │ │ │ ├── person-circle-check.svg │ │ │ ├── person-circle-exclamation.svg │ │ │ ├── person-circle-minus.svg │ │ │ ├── person-circle-plus.svg │ │ │ ├── person-circle-question.svg │ │ │ ├── person-circle-xmark.svg │ │ │ ├── person-digging.svg │ │ │ ├── person-dots-from-line.svg │ │ │ ├── person-dress-burst.svg │ │ │ ├── person-dress.svg │ │ │ ├── person-drowning.svg │ │ │ ├── person-falling-burst.svg │ │ │ ├── person-falling.svg │ │ │ ├── person-half-dress.svg │ │ │ ├── person-harassing.svg │ │ │ ├── person-hiking.svg │ │ │ ├── person-military-pointing.svg │ │ │ ├── person-military-rifle.svg │ │ │ ├── person-military-to-person.svg │ │ │ ├── person-praying.svg │ │ │ ├── person-pregnant.svg │ │ │ ├── person-rays.svg │ │ │ ├── person-rifle.svg │ │ │ ├── person-running.svg │ │ │ ├── person-shelter.svg │ │ │ ├── person-skating.svg │ │ │ ├── person-skiing-nordic.svg │ │ │ ├── person-skiing.svg │ │ │ ├── person-snowboarding.svg │ │ │ ├── person-swimming.svg │ │ │ ├── person-through-window.svg │ │ │ ├── person-walking-arrow-loop-left.svg │ │ │ ├── person-walking-arrow-right.svg │ │ │ ├── person-walking-dashed-line-arrow-right.svg │ │ │ ├── person-walking-luggage.svg │ │ │ ├── person-walking-with-cane.svg │ │ │ ├── person-walking.svg │ │ │ ├── person.svg │ │ │ ├── peseta-sign.svg │ │ │ ├── peso-sign.svg │ │ │ ├── phone-flip.svg │ │ │ ├── phone-slash.svg │ │ │ ├── phone-volume.svg │ │ │ ├── phone.svg │ │ │ ├── photo-film.svg │ │ │ ├── piggy-bank.svg │ │ │ ├── pills.svg │ │ │ ├── pizza-slice.svg │ │ │ ├── place-of-worship.svg │ │ │ ├── plane-arrival.svg │ │ │ ├── plane-circle-check.svg │ │ │ ├── plane-circle-exclamation.svg │ │ │ ├── plane-circle-xmark.svg │ │ │ ├── plane-departure.svg │ │ │ ├── plane-lock.svg │ │ │ ├── plane-slash.svg │ │ │ ├── plane-up.svg │ │ │ ├── plane.svg │ │ │ ├── plant-wilt.svg │ │ │ ├── plate-wheat.svg │ │ │ ├── play.svg │ │ │ ├── plug-circle-bolt.svg │ │ │ ├── plug-circle-check.svg │ │ │ ├── plug-circle-exclamation.svg │ │ │ ├── plug-circle-minus.svg │ │ │ ├── plug-circle-plus.svg │ │ │ ├── plug-circle-xmark.svg │ │ │ ├── plug.svg │ │ │ ├── plus-minus.svg │ │ │ ├── plus.svg │ │ │ ├── podcast.svg │ │ │ ├── poo-storm.svg │ │ │ ├── poo.svg │ │ │ ├── poop.svg │ │ │ ├── power-off.svg │ │ │ ├── prescription-bottle-medical.svg │ │ │ ├── prescription-bottle.svg │ │ │ ├── prescription.svg │ │ │ ├── print.svg │ │ │ ├── pump-medical.svg │ │ │ ├── pump-soap.svg │ │ │ ├── puzzle-piece.svg │ │ │ ├── q.svg │ │ │ ├── qrcode.svg │ │ │ ├── question.svg │ │ │ ├── quote-left.svg │ │ │ ├── quote-right.svg │ │ │ ├── r.svg │ │ │ ├── radiation.svg │ │ │ ├── radio.svg │ │ │ ├── rainbow.svg │ │ │ ├── ranking-star.svg │ │ │ ├── receipt.svg │ │ │ ├── record-vinyl.svg │ │ │ ├── rectangle-ad.svg │ │ │ ├── rectangle-list.svg │ │ │ ├── rectangle-xmark.svg │ │ │ ├── recycle.svg │ │ │ ├── registered.svg │ │ │ ├── repeat.svg │ │ │ ├── reply-all.svg │ │ │ ├── reply.svg │ │ │ ├── republican.svg │ │ │ ├── restroom.svg │ │ │ ├── retweet.svg │ │ │ ├── ribbon.svg │ │ │ ├── right-from-bracket.svg │ │ │ ├── right-left.svg │ │ │ ├── right-long.svg │ │ │ ├── right-to-bracket.svg │ │ │ ├── ring.svg │ │ │ ├── road-barrier.svg │ │ │ ├── road-bridge.svg │ │ │ ├── road-circle-check.svg │ │ │ ├── road-circle-exclamation.svg │ │ │ ├── road-circle-xmark.svg │ │ │ ├── road-lock.svg │ │ │ ├── road-spikes.svg │ │ │ ├── road.svg │ │ │ ├── robot.svg │ │ │ ├── rocket.svg │ │ │ ├── rotate-left.svg │ │ │ ├── rotate-right.svg │ │ │ ├── rotate.svg │ │ │ ├── route.svg │ │ │ ├── rss.svg │ │ │ ├── ruble-sign.svg │ │ │ ├── rug.svg │ │ │ ├── ruler-combined.svg │ │ │ ├── ruler-horizontal.svg │ │ │ ├── ruler-vertical.svg │ │ │ ├── ruler.svg │ │ │ ├── rupee-sign.svg │ │ │ ├── rupiah-sign.svg │ │ │ ├── s.svg │ │ │ ├── sack-dollar.svg │ │ │ ├── sack-xmark.svg │ │ │ ├── sailboat.svg │ │ │ ├── satellite-dish.svg │ │ │ ├── satellite.svg │ │ │ ├── scale-balanced.svg │ │ │ ├── scale-unbalanced-flip.svg │ │ │ ├── scale-unbalanced.svg │ │ │ ├── school-circle-check.svg │ │ │ ├── school-circle-exclamation.svg │ │ │ ├── school-circle-xmark.svg │ │ │ ├── school-flag.svg │ │ │ ├── school-lock.svg │ │ │ ├── school.svg │ │ │ ├── scissors.svg │ │ │ ├── screwdriver-wrench.svg │ │ │ ├── screwdriver.svg │ │ │ ├── scroll-torah.svg │ │ │ ├── scroll.svg │ │ │ ├── sd-card.svg │ │ │ ├── section.svg │ │ │ ├── seedling.svg │ │ │ ├── server.svg │ │ │ ├── shapes.svg │ │ │ ├── share-from-square.svg │ │ │ ├── share-nodes.svg │ │ │ ├── share.svg │ │ │ ├── sheet-plastic.svg │ │ │ ├── shekel-sign.svg │ │ │ ├── shield-cat.svg │ │ │ ├── shield-dog.svg │ │ │ ├── shield-halved.svg │ │ │ ├── shield-heart.svg │ │ │ ├── shield-virus.svg │ │ │ ├── shield.svg │ │ │ ├── ship.svg │ │ │ ├── shirt.svg │ │ │ ├── shoe-prints.svg │ │ │ ├── shop-lock.svg │ │ │ ├── shop-slash.svg │ │ │ ├── shop.svg │ │ │ ├── shower.svg │ │ │ ├── shrimp.svg │ │ │ ├── shuffle.svg │ │ │ ├── shuttle-space.svg │ │ │ ├── sign-hanging.svg │ │ │ ├── signal.svg │ │ │ ├── signature.svg │ │ │ ├── signs-post.svg │ │ │ ├── sim-card.svg │ │ │ ├── sink.svg │ │ │ ├── sitemap.svg │ │ │ ├── skull-crossbones.svg │ │ │ ├── skull.svg │ │ │ ├── slash.svg │ │ │ ├── sleigh.svg │ │ │ ├── sliders.svg │ │ │ ├── smog.svg │ │ │ ├── smoking.svg │ │ │ ├── snowflake.svg │ │ │ ├── snowman.svg │ │ │ ├── snowplow.svg │ │ │ ├── soap.svg │ │ │ ├── socks.svg │ │ │ ├── solar-panel.svg │ │ │ ├── sort-down.svg │ │ │ ├── sort-up.svg │ │ │ ├── sort.svg │ │ │ ├── spa.svg │ │ │ ├── spaghetti-monster-flying.svg │ │ │ ├── spell-check.svg │ │ │ ├── spider.svg │ │ │ ├── spinner.svg │ │ │ ├── splotch.svg │ │ │ ├── spoon.svg │ │ │ ├── spray-can-sparkles.svg │ │ │ ├── spray-can.svg │ │ │ ├── square-arrow-up-right.svg │ │ │ ├── square-caret-down.svg │ │ │ ├── square-caret-left.svg │ │ │ ├── square-caret-right.svg │ │ │ ├── square-caret-up.svg │ │ │ ├── square-check.svg │ │ │ ├── square-envelope.svg │ │ │ ├── square-full.svg │ │ │ ├── square-h.svg │ │ │ ├── square-minus.svg │ │ │ ├── square-nfi.svg │ │ │ ├── square-parking.svg │ │ │ ├── square-pen.svg │ │ │ ├── square-person-confined.svg │ │ │ ├── square-phone-flip.svg │ │ │ ├── square-phone.svg │ │ │ ├── square-plus.svg │ │ │ ├── square-poll-horizontal.svg │ │ │ ├── square-poll-vertical.svg │ │ │ ├── square-root-variable.svg │ │ │ ├── square-rss.svg │ │ │ ├── square-share-nodes.svg │ │ │ ├── square-up-right.svg │ │ │ ├── square-virus.svg │ │ │ ├── square-xmark.svg │ │ │ ├── square.svg │ │ │ ├── staff-snake.svg │ │ │ ├── stairs.svg │ │ │ ├── stamp.svg │ │ │ ├── stapler.svg │ │ │ ├── star-and-crescent.svg │ │ │ ├── star-half-stroke.svg │ │ │ ├── star-half.svg │ │ │ ├── star-of-david.svg │ │ │ ├── star-of-life.svg │ │ │ ├── star.svg │ │ │ ├── sterling-sign.svg │ │ │ ├── stethoscope.svg │ │ │ ├── stop.svg │ │ │ ├── stopwatch-20.svg │ │ │ ├── stopwatch.svg │ │ │ ├── store-slash.svg │ │ │ ├── store.svg │ │ │ ├── street-view.svg │ │ │ ├── strikethrough.svg │ │ │ ├── stroopwafel.svg │ │ │ ├── subscript.svg │ │ │ ├── suitcase-medical.svg │ │ │ ├── suitcase-rolling.svg │ │ │ ├── suitcase.svg │ │ │ ├── sun-plant-wilt.svg │ │ │ ├── sun.svg │ │ │ ├── superscript.svg │ │ │ ├── swatchbook.svg │ │ │ ├── synagogue.svg │ │ │ ├── syringe.svg │ │ │ ├── t.svg │ │ │ ├── table-cells-large.svg │ │ │ ├── table-cells.svg │ │ │ ├── table-columns.svg │ │ │ ├── table-list.svg │ │ │ ├── table-tennis-paddle-ball.svg │ │ │ ├── table.svg │ │ │ ├── tablet-button.svg │ │ │ ├── tablet-screen-button.svg │ │ │ ├── tablet.svg │ │ │ ├── tablets.svg │ │ │ ├── tachograph-digital.svg │ │ │ ├── tag.svg │ │ │ ├── tags.svg │ │ │ ├── tape.svg │ │ │ ├── tarp-droplet.svg │ │ │ ├── tarp.svg │ │ │ ├── taxi.svg │ │ │ ├── teeth-open.svg │ │ │ ├── teeth.svg │ │ │ ├── temperature-arrow-down.svg │ │ │ ├── temperature-arrow-up.svg │ │ │ ├── temperature-empty.svg │ │ │ ├── temperature-full.svg │ │ │ ├── temperature-half.svg │ │ │ ├── temperature-high.svg │ │ │ ├── temperature-low.svg │ │ │ ├── temperature-quarter.svg │ │ │ ├── temperature-three-quarters.svg │ │ │ ├── tenge-sign.svg │ │ │ ├── tent-arrow-down-to-line.svg │ │ │ ├── tent-arrow-left-right.svg │ │ │ ├── tent-arrow-turn-left.svg │ │ │ ├── tent-arrows-down.svg │ │ │ ├── tent.svg │ │ │ ├── tents.svg │ │ │ ├── terminal.svg │ │ │ ├── text-height.svg │ │ │ ├── text-slash.svg │ │ │ ├── text-width.svg │ │ │ ├── thermometer.svg │ │ │ ├── thumbs-down.svg │ │ │ ├── thumbs-up.svg │ │ │ ├── thumbtack.svg │ │ │ ├── ticket-simple.svg │ │ │ ├── ticket.svg │ │ │ ├── timeline.svg │ │ │ ├── toggle-off.svg │ │ │ ├── toggle-on.svg │ │ │ ├── toilet-paper-slash.svg │ │ │ ├── toilet-paper.svg │ │ │ ├── toilet-portable.svg │ │ │ ├── toilet.svg │ │ │ ├── toilets-portable.svg │ │ │ ├── toolbox.svg │ │ │ ├── tooth.svg │ │ │ ├── torii-gate.svg │ │ │ ├── tornado.svg │ │ │ ├── tower-broadcast.svg │ │ │ ├── tower-cell.svg │ │ │ ├── tower-observation.svg │ │ │ ├── tractor.svg │ │ │ ├── trademark.svg │ │ │ ├── traffic-light.svg │ │ │ ├── trailer.svg │ │ │ ├── train-subway.svg │ │ │ ├── train-tram.svg │ │ │ ├── train.svg │ │ │ ├── transgender.svg │ │ │ ├── trash-arrow-up.svg │ │ │ ├── trash-can-arrow-up.svg │ │ │ ├── trash-can.svg │ │ │ ├── trash.svg │ │ │ ├── tree-city.svg │ │ │ ├── tree.svg │ │ │ ├── triangle-exclamation.svg │ │ │ ├── trophy.svg │ │ │ ├── trowel-bricks.svg │ │ │ ├── trowel.svg │ │ │ ├── truck-arrow-right.svg │ │ │ ├── truck-droplet.svg │ │ │ ├── truck-fast.svg │ │ │ ├── truck-field-un.svg │ │ │ ├── truck-field.svg │ │ │ ├── truck-front.svg │ │ │ ├── truck-medical.svg │ │ │ ├── truck-monster.svg │ │ │ ├── truck-moving.svg │ │ │ ├── truck-pickup.svg │ │ │ ├── truck-plane.svg │ │ │ ├── truck-ramp-box.svg │ │ │ ├── truck.svg │ │ │ ├── tty.svg │ │ │ ├── turkish-lira-sign.svg │ │ │ ├── turn-down.svg │ │ │ ├── turn-up.svg │ │ │ ├── tv.svg │ │ │ ├── u.svg │ │ │ ├── umbrella-beach.svg │ │ │ ├── umbrella.svg │ │ │ ├── underline.svg │ │ │ ├── universal-access.svg │ │ │ ├── unlock-keyhole.svg │ │ │ ├── unlock.svg │ │ │ ├── up-down-left-right.svg │ │ │ ├── up-down.svg │ │ │ ├── up-long.svg │ │ │ ├── up-right-and-down-left-from-center.svg │ │ │ ├── up-right-from-square.svg │ │ │ ├── upload.svg │ │ │ ├── user-astronaut.svg │ │ │ ├── user-check.svg │ │ │ ├── user-clock.svg │ │ │ ├── user-doctor.svg │ │ │ ├── user-gear.svg │ │ │ ├── user-graduate.svg │ │ │ ├── user-group.svg │ │ │ ├── user-injured.svg │ │ │ ├── user-large-slash.svg │ │ │ ├── user-large.svg │ │ │ ├── user-lock.svg │ │ │ ├── user-minus.svg │ │ │ ├── user-ninja.svg │ │ │ ├── user-nurse.svg │ │ │ ├── user-pen.svg │ │ │ ├── user-plus.svg │ │ │ ├── user-secret.svg │ │ │ ├── user-shield.svg │ │ │ ├── user-slash.svg │ │ │ ├── user-tag.svg │ │ │ ├── user-tie.svg │ │ │ ├── user-xmark.svg │ │ │ ├── user.svg │ │ │ ├── users-between-lines.svg │ │ │ ├── users-gear.svg │ │ │ ├── users-line.svg │ │ │ ├── users-rays.svg │ │ │ ├── users-rectangle.svg │ │ │ ├── users-slash.svg │ │ │ ├── users-viewfinder.svg │ │ │ ├── users.svg │ │ │ ├── utensils.svg │ │ │ ├── v.svg │ │ │ ├── van-shuttle.svg │ │ │ ├── vault.svg │ │ │ ├── vector-square.svg │ │ │ ├── venus-double.svg │ │ │ ├── venus-mars.svg │ │ │ ├── venus.svg │ │ │ ├── vest-patches.svg │ │ │ ├── vest.svg │ │ │ ├── vial-circle-check.svg │ │ │ ├── vial-virus.svg │ │ │ ├── vial.svg │ │ │ ├── vials.svg │ │ │ ├── video-slash.svg │ │ │ ├── video.svg │ │ │ ├── vihara.svg │ │ │ ├── virus-covid-slash.svg │ │ │ ├── virus-covid.svg │ │ │ ├── virus-slash.svg │ │ │ ├── virus.svg │ │ │ ├── viruses.svg │ │ │ ├── voicemail.svg │ │ │ ├── volcano.svg │ │ │ ├── volleyball.svg │ │ │ ├── volume-high.svg │ │ │ ├── volume-low.svg │ │ │ ├── volume-off.svg │ │ │ ├── volume-xmark.svg │ │ │ ├── vr-cardboard.svg │ │ │ ├── w.svg │ │ │ ├── walkie-talkie.svg │ │ │ ├── wallet.svg │ │ │ ├── wand-magic-sparkles.svg │ │ │ ├── wand-magic.svg │ │ │ ├── wand-sparkles.svg │ │ │ ├── warehouse.svg │ │ │ ├── water-ladder.svg │ │ │ ├── water.svg │ │ │ ├── wave-square.svg │ │ │ ├── weight-hanging.svg │ │ │ ├── weight-scale.svg │ │ │ ├── wheat-awn-circle-exclamation.svg │ │ │ ├── wheat-awn.svg │ │ │ ├── wheelchair-move.svg │ │ │ ├── wheelchair.svg │ │ │ ├── whiskey-glass.svg │ │ │ ├── wifi.svg │ │ │ ├── wind.svg │ │ │ ├── window-maximize.svg │ │ │ ├── window-minimize.svg │ │ │ ├── window-restore.svg │ │ │ ├── wine-bottle.svg │ │ │ ├── wine-glass-empty.svg │ │ │ ├── wine-glass.svg │ │ │ ├── won-sign.svg │ │ │ ├── worm.svg │ │ │ ├── wrench.svg │ │ │ ├── x-ray.svg │ │ │ ├── x.svg │ │ │ ├── xmark.svg │ │ │ ├── xmarks-lines.svg │ │ │ ├── y.svg │ │ │ ├── yen-sign.svg │ │ │ ├── yin-yang.svg │ │ │ └── z.svg │ └── webfonts │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff2 │ │ ├── fa-v4compatibility.ttf │ │ └── fa-v4compatibility.woff2 │ └── js │ └── playing.js ├── ListenTogether.Service.Common ├── ApiHttpMessageHandler.cs ├── ApiSettings.cs ├── DataConfig.cs ├── Enums │ ├── ConfigTypeEnum.cs │ └── LogTypeEnum.cs ├── GlobalUsings.cs ├── ListenTogether.Service.Common.csproj ├── MusicService.cs ├── MyFavoriteService.cs └── UserService.cs ├── ListenTogether.Service.Interface ├── IEnvironmentConfigService.cs ├── ILogManage.cs ├── ILoginDataStorage.cs ├── IMusicService.cs ├── IMyFavoriteService.cs ├── IPlaylistService.cs ├── ISearchHistoryStorage.cs ├── IUserService.cs └── ListenTogether.Service.Interface.csproj ├── ListenTogether.Service.Maui ├── DatabaseProvide.cs ├── Entities │ ├── EnvironmentConfigEntity.cs │ ├── MusicCacheEntity.cs │ ├── MusicEntity.cs │ ├── MyFavoriteDetailEntity.cs │ ├── MyFavoriteEntity.cs │ ├── PlaylistEntity.cs │ └── UserEntity.cs ├── EnvironmentConfigService.cs ├── ListenTogether.Service.Maui.csproj └── PlaylistService.cs ├── ListenTogether ├── App.xaml ├── App.xaml.cs ├── AutoCloseJob.cs ├── BusinessAppBuilderExtensions.cs ├── Config.cs ├── Controls │ ├── FavoriteView.xaml │ ├── FavoriteView.xaml.cs │ ├── Loading.xaml │ ├── Loading.xaml.cs │ ├── MessageDialog.xaml │ ├── MessageDialog.xaml.cs │ ├── MusicResultView.xaml │ ├── MusicResultView.xaml.cs │ ├── Player.xaml │ └── Player.xaml.cs ├── Extensions │ └── MusicModelConvertExtension.cs ├── Filters │ └── MusicSearchFilter │ │ ├── IMusicSearchFilter.cs │ │ ├── SearchKeyFilter.cs │ │ ├── ShortMusicFilter.cs │ │ └── VipMusicFilter.cs ├── GlobalConfig.cs ├── GlobalUsings.cs ├── HandCursorControls │ ├── HandCursor.cs │ ├── HandCursorBorder.cs │ ├── HandCursorButton.cs │ ├── HandCursorImage.cs │ ├── HandCursorLabel.cs │ └── HandCursorStackLayout.cs ├── Handlers │ └── GaussianImage │ │ ├── GaussianImage.cs │ │ ├── GaussianImageHandler.cs │ │ └── IGaussianImage.cs ├── ListenTogether.csproj ├── MauiProgram.cs ├── Models │ └── AppSection.cs ├── NetConfig.cs ├── Pages │ ├── AutoClosePage.xaml │ ├── AutoClosePage.xaml.cs │ ├── CacheCleanPage.xaml │ ├── CacheCleanPage.xaml.cs │ ├── ChooseMyFavoritePage.xaml │ ├── ChooseMyFavoritePage.xaml.cs │ ├── ChooseTagPage.xaml │ ├── ChooseTagPage.xaml.cs │ ├── DesktopShell.xaml │ ├── DesktopShell.xaml.cs │ ├── DiscoverPage.xaml │ ├── DiscoverPage.xaml.cs │ ├── LogPage.xaml │ ├── LogPage.xaml.cs │ ├── LoginPage.xaml │ ├── LoginPage.xaml.cs │ ├── MobileShell.xaml │ ├── MobileShell.xaml.cs │ ├── MyFavoriteDetailPage.xaml │ ├── MyFavoriteDetailPage.xaml.cs │ ├── MyFavoritePage.xaml │ ├── MyFavoritePage.xaml.cs │ ├── PagesExtensions.cs │ ├── PlayingPage.xaml │ ├── PlayingPage.xaml.cs │ ├── PlaylistPage.xaml │ ├── PlaylistPage.xaml.cs │ ├── RegisterPage.xaml │ ├── RegisterPage.xaml.cs │ ├── SearchPage.xaml │ ├── SearchPage.xaml.cs │ ├── SearchResultPage.xaml │ ├── SearchResultPage.xaml.cs │ ├── SettingsPage.xaml │ ├── SettingsPage.xaml.cs │ ├── SongMenuPage.xaml │ └── SongMenuPage.xaml.cs ├── Platforms │ ├── Android │ │ ├── AndroidManifest.xml │ │ ├── GaussianImageHandler.cs │ │ ├── MainActivity.cs │ │ ├── MainApplication.cs │ │ └── Resources │ │ │ └── values │ │ │ └── colors.xml │ ├── MacCatalyst │ │ ├── AppDelegate.cs │ │ ├── Info.plist │ │ └── Program.cs │ ├── Windows │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── CursorExtension.cs │ │ ├── GaussianBlur.cs │ │ ├── GaussianImageHandler.cs │ │ ├── Package.appxmanifest │ │ └── app.manifest │ └── iOS │ │ ├── AppDelegate.cs │ │ ├── GaussianImageHandler.cs │ │ ├── Info.plist │ │ └── Program.cs ├── Properties │ └── launchSettings.json ├── Resources │ ├── AppIcon │ │ ├── appicon.svg │ │ └── appiconfg.svg │ ├── Fonts │ │ ├── OpenSans-Regular.ttf │ │ └── OpenSans-Semibold.ttf │ ├── Images │ │ ├── add_to_favorite.png │ │ ├── add_to_favorite_dark.png │ │ ├── back.png │ │ ├── back_dark.png │ │ ├── discover.png │ │ ├── discover_dark.png │ │ ├── edit.png │ │ ├── edit_dark.png │ │ ├── heart.png │ │ ├── heart_dark.png │ │ ├── logo.png │ │ ├── logo_dark.png │ │ ├── music.png │ │ ├── music_dark.png │ │ ├── my.png │ │ ├── my_dark.png │ │ ├── my_favorite_default.png │ │ ├── my_favorite_default_dark.png │ │ ├── next.png │ │ ├── next_dark.png │ │ ├── pause.png │ │ ├── pause_dark.png │ │ ├── play.png │ │ ├── play_dark.png │ │ ├── playlist.png │ │ ├── playlist_dark.png │ │ ├── plus.png │ │ ├── plus_dark.png │ │ ├── remove.png │ │ ├── remove_dark.png │ │ ├── repeat_list.png │ │ ├── repeat_list_dark.png │ │ ├── repeat_one.png │ │ ├── repeat_one_dark.png │ │ ├── search.png │ │ ├── search_dark.png │ │ ├── shuffle.png │ │ ├── shuffle_dark.png │ │ ├── sound_off.png │ │ ├── sound_off_dark.png │ │ ├── sound_on.png │ │ └── sound_on_dark.png │ ├── Raw │ │ ├── AboutAssets.txt │ │ └── appicon.png │ ├── Splash │ │ └── splash.svg │ └── Styles │ │ ├── Colors.xaml │ │ └── Styles.xaml ├── Services │ ├── MusicPlayerService.cs │ ├── MusicResultService.cs │ ├── MusicSwitchServer │ │ ├── IMusicSwitchServer.cs │ │ ├── IMusicSwitchServerFactory.cs │ │ ├── MusicSwitchRepeatListServer.cs │ │ ├── MusicSwitchRepeatOneServer.cs │ │ ├── MusicSwitchServerFactory.cs │ │ └── MusicSwitchShuffleServer.cs │ ├── PlayerService.cs │ ├── ServicesExtensions.cs │ └── WifiOptionsService.cs ├── Storages │ ├── IMusicCacheStorage.cs │ ├── LoginDataStorage.cs │ ├── MusicCacheStorage.cs │ └── SearchHistoryStorage.cs ├── UpdateCheck.cs ├── Utils │ ├── ImageCacheUtils.cs │ ├── LoadingService.cs │ └── ToastService.cs └── ViewModels │ ├── AutoClosePageViewModel.cs │ ├── CacheCleanViewModel.cs │ ├── DiscoverPageViewModel.cs │ ├── DiscoverTabViewModel.cs │ ├── DiscoverTagViewModel.cs │ ├── LogDetailViewModel.cs │ ├── LogPageViewModel.cs │ ├── LoginPageViewModel.cs │ ├── LyricViewModel.cs │ ├── MusicFileViewModel.cs │ ├── MusicResultShowViewModel.cs │ ├── MusicTypeTagViewModel.cs │ ├── MusicViewModel.cs │ ├── MyFavoriteDetailPageViewModel.cs │ ├── MyFavoriteDetailViewModel.cs │ ├── MyFavoritePageViewModel.cs │ ├── MyFavoriteViewModel.cs │ ├── ObservableCollectionEx.cs │ ├── PlayingPageViewModel.cs │ ├── PlaylistPageViewModel.cs │ ├── PlaylistViewModel.cs │ ├── RegisterPageViewModel.cs │ ├── SearchPageViewModel.cs │ ├── SearchResultPageViewModel.cs │ ├── SettingPageViewModel.cs │ ├── ShellViewModel.cs │ ├── SongMenuPageViewModel.cs │ ├── SongMenuViewModel.cs │ ├── UserInfoViewModel.cs │ ├── ViewModelBase.cs │ └── ViewModelExtensions.cs ├── ListenTogetherApi.sln ├── ListenTogetherMaui.sln ├── ListenTogetherMauiBlazor.sln └── ListenTogetherMauiBlazor ├── App.xaml ├── App.xaml.cs ├── AppClose.cs ├── AppVersion.cs ├── AutoUpgrade.cs ├── BusinessServicesExtensions.cs ├── Config.cs ├── DeviceManage.cs ├── GlobalConfig.cs ├── ListenTogetherMauiBlazor.csproj ├── Logger ├── LogDatabaseProvide.cs ├── LogEntity.cs ├── LogManage.cs ├── MyLogger.cs └── MyLoggerProvider.cs ├── Main.razor ├── MainPage.xaml ├── MainPage.xaml.cs ├── MauiProgram.cs ├── MusicShare.cs ├── NativeMethods.txt ├── NativeTheme.cs ├── Platforms ├── Android │ ├── AndroidManifest.xml │ ├── MainActivity.cs │ ├── MainApplication.cs │ └── Resources │ │ └── values │ │ └── colors.xml ├── MacCatalyst │ ├── AppDelegate.cs │ ├── Info.plist │ └── Program.cs ├── Tizen │ ├── Main.cs │ └── tizen-manifest.xml ├── Windows │ ├── App.xaml │ ├── App.xaml.cs │ ├── Package.appxmanifest │ └── app.manifest └── iOS │ ├── AppDelegate.cs │ ├── Info.plist │ └── Program.cs ├── PlayerService.cs ├── Properties └── launchSettings.json ├── Resources ├── AppIcon │ ├── appicon.svg │ └── appiconfg.svg ├── Fonts │ └── OpenSans-Regular.ttf ├── Images │ └── dotnet_bot.svg ├── Raw │ └── AboutAssets.txt └── Splash │ └── splash.svg ├── Storages ├── KeyValueStorage.cs ├── LoginDataStorage.cs ├── MusicCacheStorage.cs ├── PlayHistoryStorage.cs └── SearchHistoryStorage.cs ├── WifiOptionsService.cs ├── WindowMoving.cs ├── WindowTitleBar.cs ├── _Imports.razor └── wwwroot ├── css ├── app.css └── open-iconic │ ├── FONT-LICENSE │ ├── ICON-LICENSE │ ├── README.md │ └── font │ ├── css │ └── open-iconic-bootstrap.min.css │ └── fonts │ ├── open-iconic.eot │ ├── open-iconic.otf │ ├── open-iconic.svg │ ├── open-iconic.ttf │ └── open-iconic.woff ├── favicon.ico └── index.html /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "nuget" 4 | directory: "/" 5 | target-branch: "main" 6 | schedule: 7 | interval: "monthly" 8 | ignore: 9 | - dependency-name: "JiuLing.Controls.Maui" # 该包最新版本中的图片高斯模糊有点小问题 -------------------------------------------------------------------------------- /docs/resources/images/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/docs/resources/images/android.png -------------------------------------------------------------------------------- /docs/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/docs/resources/images/logo.png -------------------------------------------------------------------------------- /docs/resources/images/windows_discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/docs/resources/images/windows_discover.png -------------------------------------------------------------------------------- /docs/resources/images/windows_playing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/docs/resources/images/windows_playing.png -------------------------------------------------------------------------------- /src/ListenTogether.Api/Authorization/AllowAnonymousAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Api.Authorization; 2 | 3 | [AttributeUsage(AttributeTargets.Method)] 4 | public class AllowAnonymousAttribute : Attribute 5 | { 6 | 7 | } -------------------------------------------------------------------------------- /src/ListenTogether.Api/Enums/ConfigTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Api.Enums 2 | { 3 | public enum ConfigTypeEnum 4 | { 5 | General, 6 | Search, 7 | Play, 8 | Player 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ListenTogether.Api/Interfaces/IMusicService.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model.Api; 2 | using ListenTogether.Model.Api.Request; 3 | using ListenTogether.Model.Api.Response; 4 | 5 | namespace ListenTogether.Api.Interfaces; 6 | public interface IMusicService 7 | { 8 | Task> GetOneAsync(string id); 9 | Task AddOrUpdateAsync(MusicRequest music); 10 | } -------------------------------------------------------------------------------- /src/ListenTogether.Api/Models/AppSettings.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Api.Models 2 | { 3 | public class AppSettings 4 | { 5 | public string Secret { get; set; } = null!; 6 | public int RefreshTokenTTL { get; set; } 7 | public int TokenExpireDay { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Api/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/ListenTogether.Api/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "DbConnection": "" 11 | }, 12 | "AppSettings": { 13 | "Secret": "", 14 | "RefreshTokenTTL": 2, 15 | "TokenExpireDay": 30 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Request/AuthenticateRequest.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace ListenTogether.Model.Api.Request; 4 | public class AuthenticateRequest 5 | { 6 | [Required] 7 | public string RefreshToken { get; set; } = null!; 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Request/MusicRequest.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model.Api.Request; 2 | public class MusicRequest : LocalMusic 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Request/UserEditRequest.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace ListenTogether.Model.Api.Request; 4 | public class UserEditRequest 5 | { 6 | [MinLength(4, ErrorMessage = "用户名长度至少4位")] 7 | [MaxLength(20, ErrorMessage = "用户名长度最多20位")] 8 | public string? Username { get; set; } 9 | 10 | [MinLength(4, ErrorMessage = "用户名长度至少4位")] 11 | [MaxLength(20, ErrorMessage = "用户名长度最多20位")] 12 | public string? Nickname { get; set; } 13 | 14 | public string? AvatarUrl { get; set; } 15 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Response/MusicResponse.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model.Api.Response 2 | { 3 | public class MusicResponse : LocalMusic 4 | { 5 | /// 6 | /// 平台名称 7 | /// 8 | public string PlatformName { get; set; } = null!; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Response/MyFavoriteDetailResponse.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model.Api.Response 2 | { 3 | /// 4 | /// 收藏的明细 5 | /// 6 | public class MyFavoriteDetailResponse 7 | { 8 | public int Id { get; set; } 9 | public int MyFavoriteId { get; set; } 10 | public LocalMusic Music { get; set; } = null!; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Api/Response/UserResponse.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model.Api.Response 2 | { 3 | public class UserResponse 4 | { 5 | public string Username { get; set; } = null!; 6 | public string Nickname { get; set; } = null!; 7 | public string Avatar { get; set; } = null!; 8 | public string Token { get; set; } = null!; 9 | public string RefreshToken { get; set; } = null!; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Enums/FeeEnum.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace ListenTogether.Model.Enums; 4 | 5 | public enum FeeEnum 6 | { 7 | [Description("免费")] 8 | Free, 9 | [Description("VIP")] 10 | Vip, 11 | [Description("试听")] 12 | Demo 13 | } 14 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Enums/PlatformEnum.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace ListenTogether.Model.Enums 4 | { 5 | [Flags] 6 | public enum PlatformEnum 7 | { 8 | [Description("网易")] 9 | NetEase = 1, 10 | [Description("酷狗")] 11 | KuGou = 2, 12 | [Description("咪咕")] 13 | MiGu = 4, 14 | [Description("酷我")] 15 | KuWo = 8, 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Enums/PlayModeEnum.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace ListenTogether.Model.Enums 4 | { 5 | public enum PlayModeEnum 6 | { 7 | [Description("单曲循环")] 8 | RepeatOne, 9 | [Description("列表循环")] 10 | RepeatList, 11 | [Description("随机播放")] 12 | Shuffle 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Enums/SongMenuEnum.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace ListenTogether.Model.Enums; 4 | 5 | /// 6 | /// 歌单类型 7 | /// 8 | public enum SongMenuEnum 9 | { 10 | /// 11 | /// 标签歌单 12 | /// 13 | [Description("标签歌单")] 14 | Tag, 15 | 16 | /// 17 | /// 排行榜歌单 18 | /// 19 | [Description("排行榜歌单")] 20 | Top, 21 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/ListenTogether.Model.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net7.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/LocalMusic.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | public class LocalMusic : MusicBase 3 | { 4 | public string Id { get; set; } = null!; 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/Log.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | 3 | public class Log 4 | { 5 | public Int64 Timestamp { get; set; } 6 | public int LogType { get; set; } 7 | public string Message { get; set; } = null!; 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/MusicCacheMetadata.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | public class MusicCacheMetadata 3 | { 4 | public string FileExtension { get; set; } 5 | public byte[] Buffer { get; set; } 6 | public MusicCacheMetadata(string fileExtension, byte[] buffer) 7 | { 8 | FileExtension = fileExtension; 9 | Buffer = buffer; 10 | } 11 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/MusicPosition.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | 3 | public class MusicPosition 4 | { 5 | /// 6 | /// 当前进度 7 | /// 8 | public TimeSpan position { get; set; } 9 | /// 10 | /// 总进度 11 | /// 12 | public TimeSpan Duration { get; set; } 13 | public double PlayProgress { get; set; } 14 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/MusicResultShow.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | 3 | /// 4 | /// 音乐结果展示 5 | /// 6 | public class MusicResultShow22 : LocalMusic 7 | { 8 | 9 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/MusicSearchResult.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model.Enums; 2 | 3 | namespace ListenTogether.Model; 4 | /// 5 | /// 搜索到的结果 6 | /// 7 | public class MusicSearchResult : MusicBase 8 | { 9 | /// 10 | /// 对应平台的ID 11 | /// 12 | public string PlatformInnerId { get; set; } = null!; 13 | 14 | /// 15 | /// 平台特有数据 16 | /// 17 | public object PlatformData { get; set; } = null!; 18 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/MyFavoriteDetail.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model.Enums; 2 | 3 | namespace ListenTogether.Model 4 | { 5 | public class MyFavoriteDetail 6 | { 7 | public int Id { get; set; } 8 | public int MyFavoriteId { get; set; } 9 | public LocalMusic Music { get; set; } = null!; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/Playlist.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model 2 | { 3 | public class Playlist : LocalMusic 4 | { 5 | public DateTime EditTime { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/TokenInfo.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | public class TokenInfo 3 | { 4 | public string Token { get; set; } = null!; 5 | public string RefreshToken { get; set; } = null!; 6 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/User.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ListenTogether.Model 8 | { 9 | public class User 10 | { 11 | public string Username { get; set; } = null!; 12 | public string Nickname { get; set; } = null!; 13 | public string Avatar { get; set; } = null!; 14 | public string Token { get; set; } = null!; 15 | public string RefreshToken { get; set; } = null!; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Model/UserEdit.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | public class UserEdit 3 | { 4 | public string? Username { get; set; } 5 | public string? Nickname { get; set; } 6 | public UserAvatar? Avatar { get; set; } 7 | } 8 | 9 | public class UserAvatar 10 | { 11 | public byte[] File { get; set; } = null!; 12 | public string FileName { get; set; } = null!; 13 | } -------------------------------------------------------------------------------- /src/ListenTogether.Model/UserRegister.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Model; 2 | public class UserRegister 3 | { 4 | public string Username { get; set; } = null!; 5 | 6 | public string Password { get; set; } = null!; 7 | 8 | public string Key { get; set; } = null!; 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/DesktopTitleBar.razor.css: -------------------------------------------------------------------------------- 1 | ::deep .mud-button-root .mud-icon-button-label .mud-icon-root { 2 | width: 0.7em; 3 | height: 0.7em; 4 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Dialog.razor: -------------------------------------------------------------------------------- 1 |  2 | 3 | @Content 4 | 5 | 6 | 确定 7 | 8 | 9 | @code { 10 | 11 | [Parameter] public string Content { get; set; } 12 | [CascadingParameter] MudDialogInstance MudDialog { get; set; } 13 | void Cancel() => MudDialog.Cancel(); 14 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Discover/Tags.razor.css: -------------------------------------------------------------------------------- 1 | .choose-tag-drawer { 2 | position: fixed; 3 | width: 100%; 4 | height: 100%; 5 | left: 0; 6 | bottom: 0; 7 | z-index: 999; 8 | visibility: hidden; 9 | transition: all 0.3s ease-in-out; 10 | transform: translateY(100%); 11 | display: flex; 12 | justify-content: center; 13 | align-items: center; 14 | } 15 | 16 | .choose-tag-drawer.open { 17 | visibility: visible; 18 | transform: translateY(0%); 19 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/EndLine.razor: -------------------------------------------------------------------------------- 1 | 
2 | 最终还是到底了 3 |
-------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Loading.razor: -------------------------------------------------------------------------------- 1 |  2 |
3 | 4 |
@Message
5 |
6 | 7 |
8 | 9 | @code { 10 | [Parameter] 11 | public bool IsLoading { get; set; } 12 | 13 | [Parameter] 14 | public string Message { get; set; } = ""; 15 | } 16 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Loading.razor.css: -------------------------------------------------------------------------------- 1 | .info { 2 | background-color: var(--mud-palette-background); 3 | margin: auto; 4 | padding: 20px 40px 20px 40px; 5 | border-radius: 10px; 6 | } 7 | 8 | .message { 9 | margin-top: 10px; 10 | color: var(--mud-palette-primary); 11 | } 12 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/MusicResultView.razor.css: -------------------------------------------------------------------------------- 1 | .music-info { 2 | width: calc(100vh - 100px); 3 | overflow: hidden; 4 | white-space: nowrap; 5 | } 6 | 7 | .name { 8 | overflow: hidden; 9 | text-overflow: ellipsis; 10 | } 11 | 12 | .artist-album { 13 | overflow: hidden; 14 | text-overflow: ellipsis; 15 | font-size: 13px; 16 | opacity: 0.7; 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Player/PhonePlayingView.razor.css: -------------------------------------------------------------------------------- 1 | .player-main { 2 | margin: 10px 10px 15px 10px; 3 | height: 150px; 4 | } 5 | 6 | .text-white { 7 | color: var(--mud-palette-white); 8 | } 9 | 10 | .time { 11 | width: 50px; 12 | text-align: center; 13 | } 14 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/SearchLabel.razor.css: -------------------------------------------------------------------------------- 1 | .hot-word { 2 | transform: translateY(-25px); 3 | transition: transform 1s linear; 4 | } 5 | 6 | .leave { 7 | transform: translateY(0); 8 | } 9 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Components/Switch.razor: -------------------------------------------------------------------------------- 1 | 
2 |
@Title
3 | 7 |
8 | 9 | @code { 10 | [Parameter] 11 | public bool Checked { get; set; } 12 | [Parameter] 13 | public string Title { get; set; } = ""; 14 | 15 | [Parameter] 16 | public EventCallback OnChanged { get; set; } 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/DialogBuilder.cs: -------------------------------------------------------------------------------- 1 | using MudBlazor; 2 | 3 | namespace ListenTogether.Pages; 4 | public class DialogBuilder 5 | { 6 | public static DialogParameters DialogParameters(string text) 7 | { 8 | var parameters = new DialogParameters(); 9 | parameters.Add("Content", text); 10 | return parameters; 11 | } 12 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Filters/MusicSearchFilter/IMusicSearchFilter.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Filters.MusicSearchFilter; 2 | 3 | internal interface IMusicSearchFilter 4 | { 5 | public List Filter(List musics); 6 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Filters/MusicSearchFilter/SearchKeyFilter.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Filters.MusicSearchFilter; 2 | internal class SearchKeyFilter : IMusicSearchFilter 3 | { 4 | private string _searchKey; 5 | public SearchKeyFilter(string searchKey) 6 | { 7 | _searchKey = searchKey; 8 | } 9 | public List Filter(List musics) 10 | { 11 | return musics.Where(x => x.Name.IndexOf(_searchKey) >= 0 || x.Artist.IndexOf(_searchKey) >= 0).ToList(); 12 | } 13 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Filters/MusicSearchFilter/ShortMusicFilter.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Filters.MusicSearchFilter; 2 | internal class ShortMusicFilter : IMusicSearchFilter 3 | { 4 | public List Filter(List musics) 5 | { 6 | return musics.Where(x => x.Duration.TotalMilliseconds == 0 || x.Duration.TotalMilliseconds >= 60 * 1000).ToList(); 7 | } 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Filters/MusicSearchFilter/VipMusicFilter.cs: -------------------------------------------------------------------------------- 1 | using NetMusicLib.Enums; 2 | 3 | namespace ListenTogether.Filters.MusicSearchFilter; 4 | internal class VipMusicFilter : IMusicSearchFilter 5 | { 6 | public List Filter(List musics) 7 | { 8 | return musics.Where(x => x.Fee != FeeEnum.Vip).ToList(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using ListenTogether.Data.Interface; 2 | global using Microsoft.Extensions.Logging; 3 | global using NetMusicLib; 4 | global using NetMusicLib.Models; -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IAppClose.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IAppClose 3 | { 4 | Task CloseAsync(); 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IAppVersion.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IAppVersion 3 | { 4 | Task GetCurrentVersionAsync(); 5 | Task GetCurrentVersionStringAsync(); 6 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IAutoUpgrade.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IAutoUpgrade 3 | { 4 | Task DoAsync(bool isBackgroundCheck); 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IDeviceManage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IDeviceManage 3 | { 4 | Task ScreenOnAsync(); 5 | Task ScreenOffAsync(); 6 | Task GetDeviceIdAsync(); 7 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IKeyValueStorage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IKeyValueStorage 3 | { 4 | public Task SetAsync(string key, string value); 5 | public Task SetAsync(string key, int value); 6 | public Task GetAsync(string key, string defaultValue); 7 | public Task GetAsync(string key, int defaultValue); 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IMusicCacheStorage.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Pages; 4 | public interface IMusicCacheStorage 5 | { 6 | Task GetOrAddAsync(Playlist playlist, Func> delegateFunc); 7 | 8 | Task CalcCacheSizeAsync(Action delegage); 9 | Task ClearCacheAsync(Action delegage); 10 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IMusicShare.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IMusicShare 3 | { 4 | Task ShareLinkAsync(string url, string musicInfo); 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/INativeTheme.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface INativeTheme 3 | { 4 | Task SetThemeAsync(bool isDark); 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IPlayHistoryStorage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IPlayHistoryStorage 3 | { 4 | Task GetLastMusicIdAsync(); 5 | 6 | Task SetLastMusicIdAsync(string id); 7 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IWifiOptionsService.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IWifiOptionsService 3 | { 4 | Task HasWifiOrCanPlayAsync(); 5 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IWindowMoving.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IWindowMoving 3 | { 4 | void MouseDown(); 5 | void MouseUp(); 6 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/IWindowTitleBar.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public interface IWindowTitleBar 3 | { 4 | public bool IsMaximized { get; } 5 | void Minimize(); 6 | void Maximize(); 7 | void Close(); 8 | void SetTitle(string title); 9 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Lyric.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | internal class Lyric 3 | { 4 | public long PositionMillisecond { get; set; } 5 | public string Info { get; set; } 6 | public bool IsHighlight { get; set; } 7 | 8 | public Lyric(long positionMillisecond, string info) 9 | { 10 | PositionMillisecond = positionMillisecond; 11 | Info = info; 12 | IsHighlight = false; 13 | } 14 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/MyComponentBase.cs: -------------------------------------------------------------------------------- 1 | using JiuLing.CommonLibs.ExtensionMethods; 2 | using ListenTogether.Data.Api; 3 | using Microsoft.AspNetCore.Components; 4 | 5 | namespace ListenTogether.Pages; 6 | public class MyComponentBase : ComponentBase 7 | { 8 | [Inject] 9 | public ILoginDataStorage _loginDataStorage { get; set; } = null!; 10 | 11 | public bool IsLogin => _loginDataStorage.GetUsername().IsNotEmpty(); 12 | public bool IsNotLogin => !IsLogin; 13 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/NetConfig.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | public class NetConfig 3 | { 4 | /// 5 | /// 自动更新地址 6 | /// 7 | public string UpdateDomain { get; set; } 8 | /// 9 | /// 歌单API地址 10 | /// 11 | public string ApiDomain { get; set; } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/AutoClosePage.razor.css: -------------------------------------------------------------------------------- 1 | .page { 2 | margin: 10px 20px 10px 20px; 3 | } 4 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/CachePage.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 960px) { 2 | .page { 3 | width: 400px; 4 | margin: auto; 5 | } 6 | } 7 | 8 | @media screen and (max-width: 960px) { 9 | } 10 | 11 | .cache-size { 12 | font-size: 20px; 13 | width: 200px; 14 | height: 200px; 15 | border-radius: 50%; 16 | background-color: var(--mud-palette-table-striped); 17 | } 18 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/LogPage.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 960px) { 2 | .page { 3 | } 4 | } 5 | 6 | @media screen and (max-width: 960px) { 7 | } 8 | 9 | .page { 10 | height: 100%; 11 | } 12 | 13 | .log-time { 14 | font-size: 13px; 15 | opacity: 0.7; 16 | } 17 | 18 | .log-bottom { 19 | position: fixed; 20 | bottom: 0; 21 | } 22 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/LoginPage.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 960px) { 2 | .page { 3 | width: 400px; 4 | margin: auto; 5 | } 6 | } 7 | 8 | @media screen and (max-width: 960px) { 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/RegisterPage.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 960px) { 2 | .page { 3 | width: 400px; 4 | margin: auto; 5 | } 6 | } 7 | 8 | @media screen and (max-width: 960px) { 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Pages/UserInfoEditPage.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 960px) { 2 | .page { 3 | width: 400px; 4 | margin: auto; 5 | } 6 | } 7 | 8 | @media screen and (max-width: 960px) { 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Services/MusicSwitchServer/IMusicSwitchServer.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Services.MusicSwitchServer; 4 | public interface IMusicSwitchServer 5 | { 6 | public Task GetPreviousAsync(string currentMusicId); 7 | public Task GetNextAsync(string currentMusicId); 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Services/MusicSwitchServer/IMusicSwitchServerFactory.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model.Enums; 2 | 3 | namespace ListenTogether.Services.MusicSwitchServer; 4 | public interface IMusicSwitchServerFactory 5 | { 6 | public IMusicSwitchServer Create(PlayModeEnum playMode); 7 | } 8 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/Settings.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Pages; 4 | public class Settings 5 | { 6 | public static EnvironmentSetting Environment { get; set; } = new EnvironmentSetting(); 7 | 8 | public static OSTypeEnum OSType { get; set; } 9 | } 10 | 11 | public enum OSTypeEnum 12 | { 13 | Phone = 0, 14 | Desktop = 1, 15 | Web = 2 16 | } -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/background.png -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/css/dialog.css: -------------------------------------------------------------------------------- 1 | .dialog-backdrop { 2 | backdrop-filter: blur(10px); 3 | } 4 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/exampleJsInterop.js: -------------------------------------------------------------------------------- 1 | // This is a JavaScript module that is loaded on demand. It can export any number of 2 | // functions, and may import other JavaScript modules if required. 3 | 4 | export function showPrompt(message) { 5 | return prompt(message, 'Type anything here'); 6 | } 7 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/less/_fixed-width.less: -------------------------------------------------------------------------------- 1 | // fixed-width icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-fw { 5 | text-align: center; 6 | width: @fa-fw-width; 7 | } 8 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/less/_icons.less: -------------------------------------------------------------------------------- 1 | // specific icon class definition 2 | // ------------------------- 3 | 4 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen 5 | readers do not read off random characters that represent icons */ 6 | 7 | each(.fa-icons(), { 8 | .@{fa-css-prefix}-@{key}::before { content: @value; } 9 | }); 10 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/less/_screen-reader.less: -------------------------------------------------------------------------------- 1 | // screen-reader utilities 2 | // ------------------------- 3 | 4 | // only display content to screen readers 5 | .sr-only, 6 | .@{fa-css-prefix}-sr-only { 7 | .fa-sr-only(); 8 | } 9 | 10 | // use in conjunction with .sr-only to only display content when it's focused 11 | .sr-only-focusable, 12 | .@{fa-css-prefix}-sr-only-focusable { 13 | .fa-sr-only-focusable(); 14 | } 15 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/less/_sizing.less: -------------------------------------------------------------------------------- 1 | // sizing icons 2 | // ------------------------- 3 | 4 | // literal magnification scale 5 | .sizes-literal(@factor) when (@factor > 0) { 6 | .sizes-literal((@factor - 1)); 7 | 8 | .@{fa-css-prefix}-@{factor}x { 9 | font-size: (@factor * 1em); 10 | } 11 | } 12 | .sizes-literal(10); 13 | 14 | // step-based scale (with alignment) 15 | each(.fa-sizes(), { 16 | .@{fa-css-prefix}-@{key} { 17 | .fa-size(@value); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/less/v4-shims.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | // V4 shims compile (Web Fonts-based) 7 | // ------------------------- 8 | 9 | @import '_variables.less'; 10 | @import '_shims.less'; 11 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // fixed-width icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-fw { 5 | text-align: center; 6 | width: $fa-fw-width; 7 | } 8 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/scss/_icons.scss: -------------------------------------------------------------------------------- 1 | // specific icon class definition 2 | // ------------------------- 3 | 4 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen 5 | readers do not read off random characters that represent icons */ 6 | 7 | @each $name, $icon in $fa-icons { 8 | .#{$fa-css-prefix}-#{$name}::before { content: unquote("\"#{ $icon }\""); } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // screen-reader utilities 2 | // ------------------------- 3 | 4 | // only display content to screen readers 5 | .sr-only, 6 | .#{$fa-css-prefix}-sr-only { 7 | @include fa-sr-only; 8 | } 9 | 10 | // use in conjunction with .sr-only to only display content when it's focused 11 | .sr-only-focusable, 12 | .#{$fa-css-prefix}-sr-only-focusable { 13 | @include fa-sr-only-focusable; 14 | } 15 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/scss/_sizing.scss: -------------------------------------------------------------------------------- 1 | // sizing icons 2 | // ------------------------- 3 | 4 | // literal magnification scale 5 | @for $i from 1 through 10 { 6 | .#{$fa-css-prefix}-#{$i}x { 7 | font-size: $i * 1em; 8 | } 9 | } 10 | 11 | // step-based scale (with alignment) 12 | @each $size, $value in $fa-sizes { 13 | .#{$fa-css-prefix}-#{$size} { 14 | @include fa-size($value); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/scss/v4-shims.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | // V4 shims compile (Web Fonts-based) 7 | // ------------------------- 8 | 9 | @import 'functions'; 10 | @import 'variables'; 11 | @import 'shims'; 12 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/adn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/angular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/artstation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/autoprefixer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/bandcamp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/bitbucket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/black-tie.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/buysellads.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/cloudsmith.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/css3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/deviantart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/dochub.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/dyalog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/elementor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/ethereum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/facebook-f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/firstdraft.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/flipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/gitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/google-drive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/hacker-news.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/houzz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/html5.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/instalod.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/jira.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/magento.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/maxcdn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/microsoft.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/mix.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/modx.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/monero.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/npm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/patreon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/servicestack.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/space-awesome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/stack-exchange.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/stack-overflow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/strava.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/think-peaks.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/tiktok.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/twitch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/uikit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/unsplash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/viacoin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/vuejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/windows.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/y-combinator.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/yahoo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/yandex-international.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/brands/yandex.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/bookmark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/circle-dot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/circle-stop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/clock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/face-meh-blank.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/square-full.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/regular/window-minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/0.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/7.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/a.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/angle-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/angle-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/angle-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/angle-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/archway.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-down-long.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-left-long.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-up-long.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/arrow-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/backward-step.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/bookmark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/border-all.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/bowling-ball.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/bread-slice.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/caret-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/caret-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/caret-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/caret-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/cheese.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/chevron-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/chevron-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/chevron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-chevron-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-chevron-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-chevron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-dot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-exclamation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-half-stroke.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-stop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle-user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/clock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/clone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/computer-mouse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/cross.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/d.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/diamond.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/dice-one.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/dice-two.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/divide.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/door-closed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/e.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/ellipsis-vertical.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/ellipsis.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/equals.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/exclamation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/face-meh-blank.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/face-meh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/face-surprise.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/filter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/folder-closed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/forward-step.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/gauge-simple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/genderless.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/greater-than.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/grip-lines-vertical.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/grip-lines.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/h.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/i.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/industry.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/italic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/j.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/l.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/laptop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/less-than.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/location-arrow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/location-dot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/location-pin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/magnet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/mobile-button.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/mobile-screen-button.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/mobile-screen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/mobile.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/mound.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/n.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/neuter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/note-sticky.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/o.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/p.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/paragraph.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/percent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/record-vinyl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/slash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/sort-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/sort-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/spoon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/square-full.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/square-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/star-half.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/stop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/t.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/table-cells-large.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/table-columns.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tablet-button.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tablet-screen-button.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tablet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tarp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/toggle-on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/tv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/u.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/up-long.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/user-large.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/v.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/volume-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/wallet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/wand-magic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/whiskey-glass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/window-maximize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/window-minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/y.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/svgs/solid/z.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether.Pages/wwwroot/fontawesome-free-6.4.0-web/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /src/ListenTogether.Pages/wwwroot/js/playing.js: -------------------------------------------------------------------------------- 1 | window.GetElementHeightFromClass = (css) => { 2 | let elements = document.getElementsByClassName(css); 3 | if (elements.length == 0) { 4 | return 0; 5 | } 6 | return elements[0].offsetHeight; 7 | }; 8 | -------------------------------------------------------------------------------- /src/ListenTogether.Service.Common/DataConfig.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Data.Api; 2 | 3 | public class DataConfig 4 | { 5 | /// 6 | /// API 的一些配置信息 7 | /// 8 | internal static ApiSettings ApiSetting { get; set; } = null!; 9 | 10 | public static void SetWebApi(string deviceId) 11 | { 12 | ApiSetting = new ApiSettings(deviceId); 13 | } 14 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Common/Enums/ConfigTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Data.Api.Enums 2 | { 3 | public enum ConfigTypeEnum 4 | { 5 | General, 6 | Search, 7 | Play, 8 | Player 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ListenTogether.Service.Common/Enums/LogTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Data.Api.Enums; 2 | public enum LogTypeEnum 3 | { 4 | Info = 0, 5 | Warn = 1, 6 | Error = 2 7 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Common/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using JiuLing.CommonLibs.ExtensionMethods; 2 | global using Microsoft.Extensions.Logging; -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/IEnvironmentConfigService.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Data.Interface; 4 | 5 | public interface IEnvironmentConfigService 6 | { 7 | Task ReadAllSettingsAsync(); 8 | Task WritePlayerSettingAsync(PlayerSetting playerSetting); 9 | 10 | Task WriteGeneralSettingAsync(GeneralSetting generalSetting); 11 | 12 | Task WriteSearchSettingAsync(SearchSetting searchSetting); 13 | 14 | Task WritePlaySettingAsync(PlaySetting playSetting); 15 | } 16 | -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/ILogManage.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Service.Interface; 4 | public interface ILogManage 5 | { 6 | Task> GetAllAsync(); 7 | Task RemoveAllAsync(); 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/ILoginDataStorage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Data.Api; 2 | public interface ILoginDataStorage 3 | { 4 | string GetUsername(); 5 | void SetUsername(string value); 6 | string GetNickname(); 7 | void SetNickname(string value); 8 | string GetAvatar(); 9 | void SetAvatar(string value); 10 | string GetToken(); 11 | void SetToken(string value); 12 | string GetRefreshToken(); 13 | void SetRefreshToken(string value); 14 | void Clear(); 15 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/IMusicService.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Data.Interface; 4 | public interface IMusicService 5 | { 6 | Task GetOneAsync(string id); 7 | Task AddOrUpdateAsync(LocalMusic music); 8 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/IPlaylistService.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Data.Interface; 4 | public interface IPlaylistService 5 | { 6 | Task AddOrUpdateAsync(Playlist playlist); 7 | Task AddOrUpdateAsync(List playlists); 8 | Task GetOneAsync(string musicId); 9 | Task> GetAllAsync(); 10 | Task RemoveAsync(string musicId); 11 | Task RemoveAllAsync(); 12 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/ISearchHistoryStorage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Data.Api; 2 | public interface ISearchHistoryStorage 3 | { 4 | int ListMaxCount { get; set; } 5 | void Add(string key); 6 | List GetHistories(); 7 | void Remove(string key); 8 | void Clear(); 9 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/IUserService.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model; 2 | 3 | namespace ListenTogether.Data.Interface; 4 | 5 | public interface IUserService 6 | { 7 | public Task<(bool Succeed, string Message)> RegisterAsync(UserRegister registerUser); 8 | public Task LoginAsync(string username, string password); 9 | public Task LogoutAsync(); 10 | public Task<(User? UserResult, string ErrorMessage)> EditUserInfoAsync(UserEdit user); 11 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Interface/ListenTogether.Service.Interface.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net7.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/ListenTogether.Service.Maui/Entities/MusicCacheEntity.cs: -------------------------------------------------------------------------------- 1 | using SQLite; 2 | 3 | namespace ListenTogether.Data.Maui.Entities; 4 | 5 | [Table("MusicCache")] 6 | internal class MusicCacheEntity 7 | { 8 | [PrimaryKey, AutoIncrement] 9 | public int Id { get; set; } 10 | [NotNull] 11 | public string MusicId { get; set; } = null!; 12 | [NotNull] 13 | public string FileName { get; set; } = null!; 14 | [NotNull] 15 | public string Remark { get; set; } = null!; 16 | } 17 | -------------------------------------------------------------------------------- /src/ListenTogether.Service.Maui/Entities/MyFavoriteEntity.cs: -------------------------------------------------------------------------------- 1 | using SQLite; 2 | 3 | namespace ListenTogether.Data.Maui.Entities; 4 | 5 | [Table("MyFavorite")] 6 | internal class MyFavoriteEntity 7 | { 8 | [PrimaryKey, AutoIncrement] 9 | public int Id { get; set; } 10 | public string Name { get; set; } = null!; 11 | public string ImageUrl { get; set; } = null!; 12 | public DateTime EditTime { get; set; } 13 | public int MusicCount { get; set; } 14 | } -------------------------------------------------------------------------------- /src/ListenTogether.Service.Maui/Entities/UserEntity.cs: -------------------------------------------------------------------------------- 1 | using SQLite; 2 | 3 | namespace ListenTogether.Data.Maui.Entities; 4 | 5 | 6 | [Table("UserBase")] 7 | internal class UserEntity 8 | { 9 | [PrimaryKey, AutoIncrement] 10 | public int Id { get; set; } 11 | public string Username { get; set; } = ""; 12 | public string Nickname { get; set; } = ""; 13 | public string Avatar { get; set; } = ""; 14 | public string Token { get; set; } = ""; 15 | public string RefreshToken { get; set; } = ""; 16 | } -------------------------------------------------------------------------------- /src/ListenTogether/Controls/Loading.xaml.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Maui.Views; 2 | 3 | namespace ListenTogether.Controls; 4 | 5 | public partial class LoadingPage : Popup 6 | { 7 | public LoadingPage(string message) 8 | { 9 | InitializeComponent(); 10 | 11 | double width = App.Current?.MainPage?.Window.Width ?? 300; 12 | double height = App.Current?.MainPage?.Window.Height ?? 150; 13 | this.Size = new Size(width, height); 14 | LblMessage.Text = message; 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogether/Filters/MusicSearchFilter/IMusicSearchFilter.cs: -------------------------------------------------------------------------------- 1 | using NetMusicLib.Models; 2 | 3 | namespace ListenTogether.Filters.MusicSearchFilter; 4 | 5 | internal interface IMusicSearchFilter 6 | { 7 | public List Filter(List musics); 8 | } -------------------------------------------------------------------------------- /src/ListenTogether/Filters/MusicSearchFilter/SearchKeyFilter.cs: -------------------------------------------------------------------------------- 1 | using NetMusicLib.Models; 2 | 3 | namespace ListenTogether.Filters.MusicSearchFilter; 4 | internal class SearchKeyFilter : IMusicSearchFilter 5 | { 6 | private string _searchKey; 7 | public SearchKeyFilter(string searchKey) 8 | { 9 | _searchKey = searchKey; 10 | } 11 | public List Filter(List musics) 12 | { 13 | return musics.Where(x => x.Name.IndexOf(_searchKey) >= 0 || x.Artist.IndexOf(_searchKey) >= 0).ToList(); 14 | } 15 | } -------------------------------------------------------------------------------- /src/ListenTogether/Filters/MusicSearchFilter/ShortMusicFilter.cs: -------------------------------------------------------------------------------- 1 | using NetMusicLib.Models; 2 | 3 | namespace ListenTogether.Filters.MusicSearchFilter; 4 | internal class ShortMusicFilter : IMusicSearchFilter 5 | { 6 | public List Filter(List musics) 7 | { 8 | return musics.Where(x => x.Duration.TotalMilliseconds == 0 || x.Duration.TotalMilliseconds >= 60 * 1000).ToList(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogether/Filters/MusicSearchFilter/VipMusicFilter.cs: -------------------------------------------------------------------------------- 1 | using NetMusicLib.Models; 2 | 3 | namespace ListenTogether.Filters.MusicSearchFilter; 4 | internal class VipMusicFilter : IMusicSearchFilter 5 | { 6 | public List Filter(List musics) 7 | { 8 | return musics.Where(x => x.Fee != (NetMusicLib.Enums.FeeEnum)Model.Enums.FeeEnum.Vip).ToList(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogether/HandCursorControls/HandCursorBorder.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.HandCursorControls; 2 | internal class HandCursorBorder : Border 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether/HandCursorControls/HandCursorButton.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.HandCursorControls; 2 | internal class HandCursorButton : Button 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether/HandCursorControls/HandCursorImage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.HandCursorControls; 2 | internal class HandCursorImage : Image 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether/HandCursorControls/HandCursorLabel.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.HandCursorControls; 2 | internal class HandCursorLabel : Label 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether/HandCursorControls/HandCursorStackLayout.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.HandCursorControls; 2 | internal class HandCursorStackLayout : StackLayout 3 | { 4 | } -------------------------------------------------------------------------------- /src/ListenTogether/Handlers/GaussianImage/IGaussianImage.cs: -------------------------------------------------------------------------------- 1 | using IImage = Microsoft.Maui.IImage; 2 | 3 | namespace ListenTogether.Handlers.GaussianImage; 4 | /// 5 | /// 图像高斯模糊接口 6 | /// 7 | public interface IGaussianImage : IImage 8 | { 9 | byte[] SourceByteArray { get; set; } 10 | } -------------------------------------------------------------------------------- /src/ListenTogether/Models/AppSection.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Models; 2 | internal class AppSection 3 | { 4 | public string Title { get; set; } = null!; 5 | public string Icon { get; set; } = null!; 6 | public string IconDark { get; set; } = null!; 7 | public Type TargetType { get; set; } = null!; 8 | } -------------------------------------------------------------------------------- /src/ListenTogether/NetConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ListenTogether; 8 | 9 | internal class NetConfig 10 | { 11 | /// 12 | /// 自动更新地址 13 | /// 14 | public string UpdateDomain { get; set; } 15 | /// 16 | /// 歌单API地址 17 | /// 18 | public string ApiDomain { get; set; } 19 | } -------------------------------------------------------------------------------- /src/ListenTogether/Pages/CacheCleanPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | 3 | public partial class CacheCleanPage : ContentPage 4 | { 5 | CacheCleanViewModel vm => BindingContext as CacheCleanViewModel; 6 | public CacheCleanPage(CacheCleanViewModel vm) 7 | { 8 | InitializeComponent(); 9 | BindingContext = vm; 10 | } 11 | protected override async void OnAppearing() 12 | { 13 | base.OnAppearing(); 14 | await vm.InitializeAsync(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogether/Pages/ChooseMyFavoritePage.xaml.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Pages/ChooseMyFavoritePage.xaml.cs -------------------------------------------------------------------------------- /src/ListenTogether/Pages/LogPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | 3 | public partial class LogPage : ContentPage 4 | { 5 | LogPageViewModel vm => BindingContext as LogPageViewModel; 6 | public LogPage(LogPageViewModel vm) 7 | { 8 | InitializeComponent(); 9 | BindingContext = vm; 10 | } 11 | protected override async void OnAppearing() 12 | { 13 | base.OnAppearing(); 14 | await vm.InitializeAsync(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogether/Pages/LoginPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | 3 | public partial class LoginPage : ContentPage 4 | { 5 | LoginPageViewModel vm => BindingContext as LoginPageViewModel; 6 | public LoginPage(LoginPageViewModel vm) 7 | { 8 | InitializeComponent(); 9 | BindingContext = vm; 10 | } 11 | protected override async void OnAppearing() 12 | { 13 | base.OnAppearing(); 14 | await vm.InitializeAsync(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogether/Pages/MobileShell.xaml.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.ViewModels; 2 | namespace ListenTogether.Pages; 3 | public partial class MobileShell 4 | { 5 | public MobileShell() 6 | { 7 | InitializeComponent(); 8 | 9 | BindingContext = new ShellViewModel(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/ListenTogether/Pages/RegisterPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Pages; 2 | 3 | public partial class RegisterPage : ContentPage 4 | { 5 | public RegisterPage(RegisterPageViewModel vm) 6 | { 7 | InitializeComponent(); 8 | BindingContext = vm; 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/Android/MainApplication.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Runtime; 3 | 4 | namespace ListenTogether; 5 | 6 | [Application] 7 | public class MainApplication : MauiApplication 8 | { 9 | public MainApplication(IntPtr handle, JniHandleOwnership ownership) 10 | : base(handle, ownership) 11 | { 12 | } 13 | 14 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 15 | } -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #512BD4 4 | #C98FFF 5 | #2B0B98 6 | -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/MacCatalyst/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace ListenTogether; 4 | 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/MacCatalyst/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace ListenTogether; 5 | 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/Windows/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace ListenTogether; 4 | 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } 10 | -------------------------------------------------------------------------------- /src/ListenTogether/Platforms/iOS/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace ListenTogether; 5 | 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/ListenTogether/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Windows Machine": { 4 | "commandName": "MsixPackage", 5 | "nativeDebugging": false 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /src/ListenTogether/Resources/AppIcon/appicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/add_to_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/add_to_favorite.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/add_to_favorite_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/add_to_favorite_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/back.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/back_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/back_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/discover.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/discover_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/discover_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/edit.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/edit_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/edit_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/heart.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/heart_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/heart_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/logo.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/logo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/logo_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/music.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/music_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/music_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/my.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/my_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/my_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/my_favorite_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/my_favorite_default.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/my_favorite_default_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/my_favorite_default_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/next.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/next_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/next_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/pause.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/pause_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/pause_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/play.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/play_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/play_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/playlist.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/playlist_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/playlist_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/plus.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/plus_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/plus_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/remove.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/remove_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/remove_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/repeat_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/repeat_list.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/repeat_list_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/repeat_list_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/repeat_one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/repeat_one.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/repeat_one_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/repeat_one_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/search.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/search_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/search_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/shuffle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/shuffle.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/shuffle_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/shuffle_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/sound_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/sound_off.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/sound_off_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/sound_off_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/sound_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/sound_on.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Images/sound_on_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Images/sound_on_dark.png -------------------------------------------------------------------------------- /src/ListenTogether/Resources/Raw/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogether/Resources/Raw/appicon.png -------------------------------------------------------------------------------- /src/ListenTogether/Services/MusicSwitchServer/IMusicSwitchServer.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Services.MusicSwitchServer; 2 | public interface IMusicSwitchServer 3 | { 4 | public Task GetPreviousAsync(string currentMusicId); 5 | public Task GetNextAsync(string currentMusicId); 6 | } -------------------------------------------------------------------------------- /src/ListenTogether/Services/MusicSwitchServer/IMusicSwitchServerFactory.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Model.Enums; 2 | 3 | namespace ListenTogether.Services.MusicSwitchServer; 4 | public interface IMusicSwitchServerFactory 5 | { 6 | public IMusicSwitchServer Create(PlayModeEnum playMode); 7 | } 8 | -------------------------------------------------------------------------------- /src/ListenTogether/Storages/IMusicCacheStorage.cs: -------------------------------------------------------------------------------- 1 | namespace ListenTogether.Storages; 2 | public interface IMusicCacheStorage 3 | { 4 | Task GetOrAddAsync(Playlist playlist, Func> delegateFunc); 5 | Task CalcCacheSizeAsync(Action delegage); 6 | Task ClearCacheAsync(); 7 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/DiscoverTabViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | public partial class DiscoverTabViewModel : ObservableObject 5 | { 6 | [ObservableProperty] 7 | private int _id; 8 | 9 | [ObservableProperty] 10 | private string _name = null!; 11 | 12 | [ObservableProperty] 13 | private bool _isSelected; 14 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/DiscoverTagViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | public partial class DiscoverTagViewModel : ObservableObject 5 | { 6 | [ObservableProperty] 7 | private string _id; 8 | 9 | [ObservableProperty] 10 | private string _name = null!; 11 | 12 | [ObservableProperty] 13 | private bool _isSelected; 14 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/LogDetailViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | 5 | public partial class LogDetailViewModel : ObservableObject 6 | { 7 | [ObservableProperty] 8 | private string _time = null!; 9 | 10 | [ObservableProperty] 11 | private string _message = null!; 12 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/MusicFileViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | public partial class MusicFileViewModel : ObservableObject 5 | { 6 | [ObservableProperty] 7 | private int _id; 8 | 9 | [ObservableProperty] 10 | private string _remark = null!; 11 | 12 | [ObservableProperty] 13 | private string _fileName = null!; 14 | 15 | [ObservableProperty] 16 | private Int64 _size; 17 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/MusicTypeTagViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | using System.Collections.ObjectModel; 3 | 4 | namespace ListenTogether.ViewModels; 5 | public partial class MusicTypeTagViewModel : ObservableObject 6 | { 7 | [ObservableProperty] 8 | private string _typeName = null!; 9 | 10 | [ObservableProperty] 11 | private ObservableCollection _tags; 12 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/MyFavoriteDetailViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | 5 | public partial class MyFavoriteDetailViewModel : ObservableObject 6 | { 7 | [ObservableProperty] 8 | private int _id; 9 | 10 | [ObservableProperty] 11 | private int _seq; 12 | 13 | [ObservableProperty] 14 | private MusicResultShowViewModel _music; 15 | } -------------------------------------------------------------------------------- /src/ListenTogether/ViewModels/UserInfoViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace ListenTogether.ViewModels; 4 | 5 | public partial class UserInfoViewModel : ObservableObject 6 | { 7 | [ObservableProperty] 8 | private string _username = null!; 9 | 10 | [ObservableProperty] 11 | private string _nickname = null!; 12 | 13 | [ObservableProperty] 14 | private string _avatar = null!; 15 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/AppClose.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Pages; 2 | 3 | namespace ListenTogetherMauiBlazor; 4 | public class AppClose : IAppClose 5 | { 6 | public Task CloseAsync() 7 | { 8 | MainThread.BeginInvokeOnMainThread(() => 9 | { 10 | Application.Current.Quit(); 11 | }); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/AppVersion.cs: -------------------------------------------------------------------------------- 1 | using ListenTogether.Pages; 2 | 3 | namespace ListenTogetherMauiBlazor; 4 | public class AppVersion : IAppVersion 5 | { 6 | public Task GetCurrentVersionAsync() 7 | { 8 | return Task.FromResult(AppInfo.Current.Version); 9 | } 10 | 11 | public async Task GetCurrentVersionStringAsync() 12 | { 13 | return (await GetCurrentVersionAsync()).ToString(); 14 | } 15 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Logger/LogEntity.cs: -------------------------------------------------------------------------------- 1 | using SQLite; 2 | 3 | namespace ListenTogetherMauiBlazor.Logger; 4 | 5 | [Table("LogDetail")] 6 | internal class LogEntity 7 | { 8 | [PrimaryKey, AutoIncrement] 9 | public int Id { get; set; } 10 | public int LogType { get; set; } 11 | public string Message { get; set; } = null!; 12 | public long CreateTime { get; set; } 13 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Main.razor: -------------------------------------------------------------------------------- 1 | @inject NavigationManager NavigationManager 2 | 4 | 5 | 6 | 7 | 8 | 9 | @{ 10 | NavigationManager.NavigateTo("/discover", false); 11 | } 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | GetCursorPos 2 | FindWindow 3 | GetWindowRect -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/Android/MainApplication.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Runtime; 3 | 4 | namespace ListenTogetherMauiBlazor 5 | { 6 | [Application] 7 | public class MainApplication : MauiApplication 8 | { 9 | public MainApplication(IntPtr handle, JniHandleOwnership ownership) 10 | : base(handle, ownership) 11 | { 12 | } 13 | 14 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #512BD4 4 | #2B0B98 5 | #2B0B98 6 | -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/MacCatalyst/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace ListenTogetherMauiBlazor 4 | { 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/MacCatalyst/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace ListenTogetherMauiBlazor 5 | { 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/Tizen/Main.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Maui; 2 | using Microsoft.Maui.Hosting; 3 | using System; 4 | 5 | namespace ListenTogetherMauiBlazor 6 | { 7 | internal class Program : MauiApplication 8 | { 9 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 10 | 11 | static void Main(string[] args) 12 | { 13 | var app = new Program(); 14 | app.Run(args); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/Windows/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace ListenTogetherMauiBlazor 4 | { 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Platforms/iOS/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace ListenTogetherMauiBlazor 5 | { 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Windows Machine": { 4 | "commandName": "MsixPackage", 5 | "nativeDebugging": false 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Resources/AppIcon/appicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/Resources/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/Resources/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using Microsoft.AspNetCore.Components.Forms 3 | @using Microsoft.AspNetCore.Components.Routing 4 | @using Microsoft.AspNetCore.Components.Web 5 | @using Microsoft.AspNetCore.Components.Web.Virtualization 6 | @using Microsoft.JSInterop 7 | @using ListenTogetherMauiBlazor 8 | @using ListenTogether.Pages 9 | @using ListenTogether.Pages.Shared -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.eot -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.otf -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/wwwroot/css/open-iconic/font/fonts/open-iconic.woff -------------------------------------------------------------------------------- /src/ListenTogetherMauiBlazor/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiuLing-zhang/ListenTogether/42e4c0cb8ffffe7935d246cf510b7cf5c65f634f/src/ListenTogetherMauiBlazor/wwwroot/favicon.ico --------------------------------------------------------------------------------