├── .github
├── ISSUE_TEMPLATE
│ ├── 01-bug.yml
│ ├── 02-featurerequest.yml
│ └── config.yml
└── workflows
│ └── close_stale_issues.yml
├── DynamicPlaylists4
├── HTML
│ ├── Classic
│ │ └── html
│ │ │ └── images
│ │ │ ├── dpl_dstm_play.gif
│ │ │ ├── dpl_favoritewithparams.gif
│ │ │ ├── dpl_queue.gif
│ │ │ ├── dpl_saveasstaticpl.gif
│ │ │ ├── dpl_stop.gif
│ │ │ └── dpl_transfer.gif
│ ├── Default
│ │ └── html
│ │ │ └── images
│ │ │ ├── dpl_dstm_play.gif
│ │ │ ├── dpl_favoritewithparams.gif
│ │ │ ├── dpl_folder.gif
│ │ │ ├── dpl_queue.gif
│ │ │ ├── dpl_saveasstaticpl.gif
│ │ │ ├── dpl_stop.gif
│ │ │ └── dpl_transfer.gif
│ └── EN
│ │ └── plugins
│ │ └── DynamicPlaylists4
│ │ ├── dpcomponents.html
│ │ ├── dynamicplaylist_dplqueue.html
│ │ ├── dynamicplaylist_list.html
│ │ ├── dynamicplaylist_mixparameters.html
│ │ ├── dynamicplaylist_preselectionlink.html
│ │ ├── dynamicplaylist_preselectionmenu.html
│ │ ├── dynamicplaylistlink.html
│ │ ├── html
│ │ ├── audio
│ │ │ └── silence.mp3
│ │ ├── dpl.css
│ │ ├── dplsettings.css
│ │ ├── fonts
│ │ │ └── fontawesome-light.woff
│ │ └── images
│ │ │ ├── dpl_icon.svg
│ │ │ └── dpl_icon_svg.png
│ │ └── settings
│ │ ├── basic.html
│ │ ├── playlists.html
│ │ └── subpage_chooser.html
├── LICENSE.txt
├── PlaylistProtocolHandler.pm
├── Playlists
│ ├── albums
│ │ ├── albums_001_random.sql
│ │ ├── albums_002_genre_decade.sql
│ │ ├── albums_020_topavgrated.sql
│ │ ├── albums_021_toptotalrated.sql
│ │ ├── albums_022_withmostratedsongs.sql
│ │ ├── albums_023_withratedsongs.sql
│ │ ├── albums_024_withtopratedsongs.sql
│ │ ├── albums_025_notrated.sql
│ │ ├── albums_030_partlyplayed_genre_decade.sql
│ │ ├── albums_050_virtuallibrary_random.sql
│ │ ├── albums_060_mostplayed_total.sql
│ │ ├── albums_061_mostplayed_avg.sql
│ │ ├── albums_062_leastplayed_total.sql
│ │ ├── albums_063_leastplayed_avg.sql
│ │ ├── albums_080_recentlyplayed_lastadded.sql
│ │ ├── albums_081_neverplayed.sql
│ │ └── albums_082_playedlongago.sql
│ ├── artists
│ │ ├── artists_001_random.sql
│ │ ├── artists_002_genre_decade.sql
│ │ ├── artists_020_topavgrated.sql
│ │ ├── artists_021_toptotalrated.sql
│ │ ├── artists_022_withmostratedsongs.sql
│ │ ├── artists_023_withratedsongs.sql
│ │ ├── artists_024_withtopratedsongs.sql
│ │ ├── artists_025_notrated.sql
│ │ ├── artists_030_partlyplayed_genre_decade.sql
│ │ ├── artists_050_virtuallibrary_random.sql
│ │ ├── artists_060_mostplayed_total.sql
│ │ ├── artists_061_mostplayed_avg.sql
│ │ ├── artists_062_leastplayed_total.sql
│ │ ├── artists_063_leastplayed_avg.sql
│ │ ├── artists_080_recentlyplayed_lastadded.sql
│ │ ├── artists_081_neverplayed.sql
│ │ └── artists_082_playedlongago.sql
│ ├── genres
│ │ ├── genres_001_random.sql
│ │ ├── genres_020_topavgrated.sql
│ │ ├── genres_021_toptotalrated.sql
│ │ ├── genres_022_withmostratedsongs.sql
│ │ ├── genres_023_withratedsongs.sql
│ │ ├── genres_024_withtopratedsongs.sql
│ │ ├── genres_025_notrated.sql
│ │ ├── genres_040_virtuallibrary_random.sql
│ │ ├── genres_060_mostplayed_total.sql
│ │ ├── genres_061_mostplayed_avg.sql
│ │ ├── genres_062_leastplayed_total.sql
│ │ ├── genres_063_leastplayed_avg.sql
│ │ ├── genres_080_recentlyplayed_lastadded.sql
│ │ ├── genres_081_neverplayed.sql
│ │ └── genres_082_playedlongago.sql
│ ├── playlists
│ │ ├── playlists_001_songs_random.sql
│ │ ├── playlists_002_multiple_genre_decade_rating.sql
│ │ ├── playlists_020_songs_topavgrated.sql
│ │ ├── playlists_021_songs_toptotalrated.sql
│ │ ├── playlists_022_songs_withratedsongs.sql
│ │ ├── playlists_023_songs_withtopratedsongs.sql
│ │ ├── playlists_024_songs_notrated.sql
│ │ ├── playlists_060_songs_mostplayed_total.sql
│ │ ├── playlists_061_songs_mostplayed_avg.sql
│ │ ├── playlists_062_songs_leastplayed_total.sql
│ │ ├── playlists_063_songs_leastplayed_avg.sql
│ │ ├── playlists_080_songs_neverplayed.sql
│ │ └── playlists_081_songs_playedlongago.sql
│ ├── songs
│ │ ├── songs_001_random.sql
│ │ ├── songs_003_random_by_genre.sql
│ │ ├── songs_004_random_by_genre_decade.sql
│ │ ├── songs_006_random_by_genre_year.sql
│ │ ├── songs_030_rated_one_click.sql
│ │ ├── songs_031_rated_unplayed.sql
│ │ ├── songs_032_rated_toppercentage.sql
│ │ ├── songs_033_rated_unplayed_chooseminrating.sql
│ │ ├── songs_034_rated_unplayed_chooseexactrating.sql
│ │ ├── songs_040_rated_by_genre_decade_lastadded.sql
│ │ ├── songs_041_rated_by_genre_decade_toppercentage_lastadded.sql
│ │ ├── songs_042_rated_by_genre_year.sql
│ │ ├── songs_060_rated_toprated_one_click.sql
│ │ ├── songs_061_rated_toprated.sql
│ │ ├── songs_070_notrated_ratedpercentage.sql
│ │ ├── songs_071_notrated_by_genre_decade_ratedpercentage_lastadded.sql
│ │ ├── songs_072_notrated_by_genre_year_ratedpercentage_lastadded.sql
│ │ ├── songs_080_lastadded_genre_minrating.sql
│ │ ├── songs_081_random_not_in_playlist.sql
│ │ ├── songs_082_random_percentageplaylist_filteredlibrary.sql
│ │ ├── songs_090_virtuallibrary_random.sql
│ │ ├── songs_091_virtuallibrary_by_genre_decade_minrating.sql
│ │ ├── songs_100_mostplayed_minrating_lastadded.sql
│ │ ├── songs_101_leastplayed_lastadded.sql
│ │ ├── songs_110_neverplayed.sql
│ │ ├── songs_111_playedlongago.sql
│ │ ├── songs_130_preselartists_random.sql
│ │ ├── songs_131_preselartists_random_ratedpercentage.sql
│ │ ├── songs_132_preselartists_rated_decade_chooserating.sql
│ │ ├── songs_150_preselalbums_random.sql
│ │ ├── songs_151_preselalbums_random_ratedpercentage.sql
│ │ ├── songs_152_preselalbums_rated_decade_chooserating.sql
│ │ └── songs_190_spotify_random.sql
│ ├── works
│ │ ├── works_001_random.sql
│ │ ├── works_002_genre_decade.sql
│ │ ├── works_020_topavgrated.sql
│ │ ├── works_021_toptotalrated.sql
│ │ ├── works_022_withmostratedsongs.sql
│ │ ├── works_023_withratedsongs.sql
│ │ ├── works_024_withtopratedsongs.sql
│ │ ├── works_025_notrated.sql
│ │ ├── works_030_partlyplayed_genre_decade.sql
│ │ ├── works_050_virtuallibrary_random.sql
│ │ ├── works_060_mostplayed_total.sql
│ │ ├── works_061_mostplayed_avg.sql
│ │ ├── works_062_leastplayed_total.sql
│ │ ├── works_063_leastplayed_avg.sql
│ │ ├── works_080_recentlyplayed_lastadded.sql
│ │ ├── works_081_neverplayed.sql
│ │ └── works_082_playedlongago.sql
│ ├── years
│ │ ├── years_001_random.sql
│ │ ├── years_020_topavgrated.sql
│ │ ├── years_021_toptotalrated.sql
│ │ ├── years_022_withmostratedsongs.sql
│ │ ├── years_023_withratedsongs.sql
│ │ ├── years_024_withtopratedsongs.sql
│ │ ├── years_025_notrated.sql
│ │ ├── years_040_virtuallibrary_random.sql
│ │ ├── years_060_mostplayed_total.sql
│ │ ├── years_061_mostplayed_avg.sql
│ │ ├── years_062_leastplayed_total.sql
│ │ ├── years_063_leastplayed_avg.sql
│ │ ├── years_080_recentlyplayed_lastadded.sql
│ │ ├── years_081_neverplayed.sql
│ │ └── years_082_playedlongago.sql
│ ├── zz_contextmenulists
│ │ ├── for_albums
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a01_songs_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a20_songs_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a21_songs_toprated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a22_songs_not_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a50_songs_mostplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a51_songs_leastplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_album_a52_songs_neverplayed.sql
│ │ │ └── zz_CONTEXTMENU_for_selected_album_a53_songs_playedlongago.sql
│ │ ├── for_artists
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a01_songs_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a20_songs_ratedpercentage_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a21_songs_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a22_songs_toprated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a23_songs_notrated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a50_songs_mostplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a51_songs_leastplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a52_songs_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_a53_songs_playedlongago.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b01_albums_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b20_albums_topavgrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b21_albums_toptotalrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b50_albums_mostplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b51_albums_mostplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b52_albums_leastplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b53_albums_leastplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_artist_b54_albums_neverplayed.sql
│ │ │ └── zz_CONTEXTMENU_for_selected_artist_b55_albums_playedlongago.sql
│ │ ├── for_genres
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a01_songs_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a20_songs_ratedpercentage_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a21_songs_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a22_songs_rated_decade_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a23_songs_toprated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a24_songs_notrated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a50_songs_mostplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a51_songs_leastplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a52_songs_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_a53_songs_playedlongago.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b01_albums_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b20_albums_topavgrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b21_albums_toptotalrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b50_albums_mostplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b51_albums_mostplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b52_albums_leastplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b53_albums_leastplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b54_albums_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_b55_albums_playedlongago.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c01_artists_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c20_artists_topavgrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c21_artists_toptotalrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c50_artists_mostplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c51_artists_mostplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c52_artists_leastplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c53_artists_leastplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_genre_c54_artists_neverplayed.sql
│ │ │ └── zz_CONTEXTMENU_for_selected_genre_c55_artists_playedlongago.sql
│ │ ├── for_playlists
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a01_songs_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a20_songs_random_by_genre_decade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a21_songs_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a22_songs_toprated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a23_songs_notrated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a50_songs_mostplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a51_songs_leastplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a52_songs_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_playlist_a53_songs_playedlongago.sql
│ │ │ └── zz_CONTEXTMENU_for_selected_playlist_b01_albums_random.sql
│ │ └── for_years
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a01_songs_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a02_songs_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a03_songs_genre_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a04_songs_genre_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a20_songs_ratedpercentage_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a21_songs_ratedpercentage_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a22_songs_rated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a23_songs_rated_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a24_songs_rated_genre_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a25_songs_rated_genre_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a26_songs_toprated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a27_songs_toprated_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a28_songs_notrated_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a29_songs_notrated_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a50_songs_mostplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a51_songs_mostplayedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a52_songs_leastplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a53_songs_leastplayedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a54_songs_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a55_songs_neverplayedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a56_songs_playedlongago.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_a57_songs_playedlongagofromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b01_albums_random.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b02_albums_randomfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b20_albums_topavgrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b21_albums_topavgratedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b22_albums_toptotalrated.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b23_albums_toptotalratedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b50_albums_mostplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b51_albums_mostplayedfromthisdecade_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b52_albums_mostplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b53_albums_mostplayedfromthisdecade_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b54_albums_leastplayed_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b55_albums_leastplayedfromthisdecade_total.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b56_albums_leastplayed_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b57_albums_leastplayedfromthisdecade_avg.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b58_albums_neverplayed.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b59_albums_neverplayedfromthisdecade.sql
│ │ │ ├── zz_CONTEXTMENU_for_selected_year_b60_albums_playedlongago.sql
│ │ │ └── zz_CONTEXTMENU_for_selected_year_b61_albums_playedlongagofromthisdecade.sql
│ └── zz_extplugin_APC
│ │ ├── albums
│ │ ├── albums_040_partlyplayed_genre_decade_apc.sql
│ │ ├── albums_060_mostplayed_total_apc.sql
│ │ ├── albums_061_mostplayed_avg_apc.sql
│ │ ├── albums_062_leastplayed_total_apc.sql
│ │ ├── albums_063_leastplayed_avg_apc.sql
│ │ ├── albums_080_recentlyplayed_lastadded_apc.sql
│ │ ├── albums_081_neverplayed_apc.sql
│ │ └── albums_082_playedlongago_apc.sql
│ │ ├── artists
│ │ ├── artists_040_partlyplayed_genre_decade_apc.sql
│ │ ├── artists_060_mostplayed_total_apc.sql
│ │ ├── artists_061_mostplayed_avg_apc.sql
│ │ ├── artists_062_leastplayed_total_apc.sql
│ │ ├── artists_063_leastplayed_avg_apc.sql
│ │ ├── artists_080_recentlyplayed_lastadded_apc.sql
│ │ ├── artists_081_neverplayed_apc.sql
│ │ └── artists_082_playedlongago_apc.sql
│ │ ├── genres
│ │ ├── genres_060_mostplayed_total_apc.sql
│ │ ├── genres_061_mostplayed_avg_apc.sql
│ │ ├── genres_062_leastplayed_total_apc.sql
│ │ ├── genres_063_leastplayed_avg_apc.sql
│ │ ├── genres_080_recentlyplayed_lastadded_apc.sql
│ │ ├── genres_081_neverplayed_apc.sql
│ │ └── genres_082_playedlongago_apc.sql
│ │ ├── playlists
│ │ ├── playlists_060_songs_mostplayed_total_apc.sql
│ │ ├── playlists_061_songs_mostplayed_avg_apc.sql
│ │ ├── playlists_062_songs_leastplayed_total_apc.sql
│ │ ├── playlists_063_songs_leastplayed_avg_apc.sql
│ │ ├── playlists_080_songs_neverplayed_apc.sql
│ │ └── playlists_081_songs_playedlongago_apc.sql
│ │ ├── songs
│ │ ├── songs_002_random_dpsv_apc.sql
│ │ ├── songs_004_random_by_genre_decade_dpsv_apc.sql
│ │ ├── songs_043_rated_by_genre_toppercentage_dpsv_apc.sql
│ │ ├── songs_073_notrated_by_genre_decade_ratedpercentage_dpsv_apc.sql
│ │ ├── songs_074_notrated_by_genre_year_ratedpercentage_dpsv_apc.sql
│ │ ├── songs_082_random_percentageplaylist_filteredlibrary_apc.sql
│ │ ├── songs_100_mostplayed_minrating_lastadded_apc.sql
│ │ ├── songs_101_leastplayed_lastadded_apc.sql
│ │ ├── songs_110_neverplayed_apc.sql
│ │ └── songs_111_playedlongago_apc.sql
│ │ ├── works
│ │ ├── works_040_partlyplayed_genre_decade_apc.sql
│ │ ├── works_060_mostplayed_total_apc.sql
│ │ ├── works_061_mostplayed_avg_apc.sql
│ │ ├── works_062_leastplayed_total_apc.sql
│ │ ├── works_063_leastplayed_avg_apc.sql
│ │ ├── works_080_recentlyplayed_lastadded_apc.sql
│ │ ├── works_081_neverplayed_apc.sql
│ │ └── works_082_playedlongago_apc.sql
│ │ ├── years
│ │ ├── years_060_mostplayed_total_apc.sql
│ │ ├── years_061_mostplayed_avg_apc.sql
│ │ ├── years_062_leastplayed_total_apc.sql
│ │ ├── years_063_leastplayed_avg_apc.sql
│ │ ├── years_080_recentlyplayed_lastadded_apc.sql
│ │ ├── years_081_neverplayed_apc.sql
│ │ └── years_082_playedlongago_apc.sql
│ │ └── zz_contextmenulists
│ │ ├── for_albums
│ │ ├── zz_CONTEXTMENU_for_selected_album_a50_songs_mostplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_album_a51_songs_leastplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_album_a52_songs_neverplayed_apc.sql
│ │ └── zz_CONTEXTMENU_for_selected_album_a53_songs_playedlongago_apc.sql
│ │ ├── for_artists
│ │ ├── zz_CONTEXTMENU_for_selected_artist_a50_songs_mostplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_a51_songs_leastplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_a52_songs_neverplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_a53_songs_playedlongago_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_b50_albums_mostplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_b51_albums_mostplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_b52_albums_leastplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_b53_albums_leastplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_artist_b54_albums_neverplayed_apc.sql
│ │ └── zz_CONTEXTMENU_for_selected_artist_b55_albums_playedlongago_apc.sql
│ │ ├── for_genres
│ │ ├── zz_CONTEXTMENU_for_selected_genre_a50_songs_mostplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_a51_songs_leastplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_a52_songs_neverplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_a53_songs_playedlongago_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b50_albums_mostplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b51_albums_mostplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b52_albums_leastplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b53_albums_leastplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b54_albums_neverplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_b55_albums_playedlongago_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_c50_artists_mostplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_c51_artists_mostplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_c52_artists_leastplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_c53_artists_leastplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_genre_c54_artists_neverplayed_apc.sql
│ │ └── zz_CONTEXTMENU_for_selected_genre_c55_artists_playedlongago_apc.sql
│ │ ├── for_playlists
│ │ ├── zz_CONTEXTMENU_for_selected_playlist_a50_songs_mostplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_playlist_a51_songs_leastplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_playlist_a52_songs_neverplayed_apc.sql
│ │ └── zz_CONTEXTMENU_for_selected_playlist_a53_songs_playedlongago_apc.sql
│ │ └── for_years
│ │ ├── zz_CONTEXTMENU_for_selected_year_a50_songs_mostplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a51_songs_mostplayedfromthisdecade_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a52_songs_leastplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a53_songs_leastplayedfromthisdecade_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a54_songs_neverplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a55_songs_neverplayedfromthisdecade_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a56_songs_playedlongago_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_a57_songs_playedlongagofromthisdecade_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b50_albums_mostplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b51_albums_mostplayedfromthisdecade_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b52_albums_mostplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b53_albums_mostplayedfromthisdecade_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b54_albums_leastplayed_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b55_albums_leastplayedfromthisdecade_total_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b56_albums_leastplayed_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b57_albums_leastplayedfromthisdecade_avg_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b58_albums_neverplayed_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b59_albums_neverplayedfromthisdecade_apc.sql
│ │ ├── zz_CONTEXTMENU_for_selected_year_b60_albums_playedlongago_apc.sql
│ │ └── zz_CONTEXTMENU_for_selected_year_b61_albums_playedlongagofromthisdecade_apc.sql
├── Plugin.pm
├── ProtocolHandler.pm
├── Settings
│ ├── BaseSettings.pm
│ ├── Basic.pm
│ └── PlaylistSettings.pm
├── custom-types.conf
├── install.xml
└── strings.txt
├── LICENSE
├── README.md
└── screenshots
├── defaultskin.gif
├── dpl_icon.png
├── githubstar.png
├── jivelite.gif
├── material.gif
└── menuicon.png
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Lyrion Community Support Forum
4 | url: https://forums.lyrion.org/forum/user-forums/3rd-party-software/113984-announce-dynamic-playlists-4
5 | about: Please ask questions that are not related to bug reports or feature requests in the Lyrion Community Forum.
6 |
--------------------------------------------------------------------------------
/.github/workflows/close_stale_issues.yml:
--------------------------------------------------------------------------------
1 | name: Close inactive issues
2 | on:
3 | workflow_dispatch:
4 | inputs:
5 | logLevel:
6 | description: 'Log level'
7 | required: true
8 | default: 'warning'
9 | type: choice
10 | options:
11 | - info
12 | - warning
13 | - debug
14 | schedule:
15 | - cron: "38 1 * * *"
16 |
17 | jobs:
18 | close-issues:
19 | runs-on: ubuntu-latest
20 | permissions:
21 | issues: write
22 | steps:
23 | - uses: actions/stale@v5
24 | with:
25 | days-before-issue-stale: 30
26 | days-before-issue-close: 14
27 | exempt-issue-assignees: "AF-1"
28 | stale-issue-label: "stale - closing soon"
29 | stale-issue-message: "This issue is stale because it has been open for 30 days with no activity. It will be closed after another 14 days of inactivity."
30 | close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
31 | days-before-pr-stale: -1
32 | days-before-pr-close: -1
33 | repo-token: ${{ secrets.GITHUB_TOKEN }}
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_dstm_play.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_dstm_play.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_favoritewithparams.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_favoritewithparams.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_queue.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_queue.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_saveasstaticpl.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_saveasstaticpl.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_stop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_stop.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Classic/html/images/dpl_transfer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Classic/html/images/dpl_transfer.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_dstm_play.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_dstm_play.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_favoritewithparams.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_favoritewithparams.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_folder.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_folder.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_queue.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_queue.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_saveasstaticpl.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_saveasstaticpl.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_stop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_stop.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/Default/html/images/dpl_transfer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/Default/html/images/dpl_transfer.gif
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/dynamicplaylist_dplqueue.html:
--------------------------------------------------------------------------------
1 |
2 | [% PROCESS plugins/DynamicPlaylists4/dpcomponents.html %]
3 | [%- pagetitle = 'PLUGIN_DYNAMICPLAYLISTS4' | string; pageicon = 'PLUGIN_DYNAMICPLAYLISTS4' -%]
4 |
5 | [%- pwd_list = BLOCK -%]/
6 |
7 | [% "PLUGIN_DYNAMICPLAYLISTS4" | string %]
8 |
9 | [% END -%]
10 |
11 | [% PROCESS pageheader.html %]
12 | [% PROCESS plugins/DynamicPlaylists4/dynamicplaylistlink.html %]
13 |
14 | [% WRAPPER dpcontentcontainer %]
15 | [% IF player == '' %]
16 | [% "NO_PLAYER_FOUND" | string %]
17 | [% ELSE %]
18 |
19 |
[% "PLUGIN_DYNAMICPLAYLISTS4_DPLQUEUE_CURRENTLYQUEUED" | string %]
20 |
21 | [% odd = 1 %]
22 | [% IF pluginDynamicPlaylists4dplQueue %]
23 | [% IF dplqueueitemcount > 1 %]
24 | [%- WRAPPER contentitem controls='controlsdplqueue' %]
25 | [% "PLUGIN_DYNAMICPLAYLISTS4_DPLQUEUE_CLEAR_QUEUE" | string %]
26 | [% odd = (not odd) %]
27 | [% END %]
28 |
29 | [% END %]
30 | [% FOREACH item IN pluginDynamicPlaylists4dplQueue %]
31 | [%- WRAPPER contentitem controls='controlsdplqueue' %]
32 | [% item.title %]
33 | [% odd = (not odd) %]
34 | [% END %]
35 | [% END %]
36 | [% ELSE %]
37 | [% "PLUGIN_DYNAMICPLAYLISTS4_DPLQUEUE_NONE" | string %]
38 | [% END %]
39 | [% END %]
40 | [% END %]
41 | [% PROCESS pagefooter.html %]
42 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/dynamicplaylist_preselectionlink.html:
--------------------------------------------------------------------------------
1 | [% "PLUGIN_DYNAMICPLAYLISTS4" | string %] - preselect [% item.objecttype %]
2 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/dynamicplaylist_preselectionmenu.html:
--------------------------------------------------------------------------------
1 |
2 | [% PROCESS plugins/DynamicPlaylists4/dpcomponents.html %]
3 | [%- pagetitle = 'PLUGIN_DYNAMICPLAYLISTS4' | string; pageicon = 'PLUGIN_DYNAMICPLAYLISTS4' -%]
4 |
5 | [%- pwd_list = BLOCK -%]/
6 | [% IF source %]
7 |
8 | [% "PLUGIN_DYNAMICPLAYLISTS4" | string %]
9 |
10 | [% ELSE %]
11 |
12 | [% IF objecttype == 'artist' %][% "ARTISTS" | string %][% ELSE %][% "ALBUMS" | string %][% END %]
13 |
14 | [% END %]
15 | [% END -%]
16 |
17 | [% PROCESS pageheader.html %]
18 | [% PROCESS plugins/DynamicPlaylists4/dynamicplaylistlink.html %]
19 |
20 | [% WRAPPER dpcontentcontainer %]
21 | [% IF player == '' %]
22 | [% "NO_PLAYER_FOUND" | string %]
23 | [% ELSE %]
24 |
25 | [% IF objecttype == 'artist' %][% "PLUGIN_DYNAMICPLAYLISTS4_PRESELECTION_CACHED_ARTISTS_LIST" | string %][% ELSE %][% "PLUGIN_DYNAMICPLAYLISTS4_PRESELECTION_CACHED_ALBUMS_LIST" | string %][% END %]
26 |
27 | [% odd = 1 %]
28 | [% IF pluginDynamicPlaylists4preselectionList %]
29 | [% IF preselitemcount > 1 %]
30 | [%- WRAPPER contentitem controls='controlspreselection' %]
31 | [% "PLUGIN_DYNAMICPLAYLISTS4_PRESELECTION_CLEAR_LIST" | string %]
32 | [% odd = (not odd) %]
33 | [% END %]
34 |
35 | [% END %]
36 | [% FOREACH item IN pluginDynamicPlaylists4preselectionList.values.sort('name') %]
37 | [%- WRAPPER contentitem controls='controlspreselection' %]
38 | [% item.name %][% IF objecttype == 'album' && item.artistname %] - by - [% item.artistname %][% END %]
39 | [% odd = (not odd) %]
40 | [% END %]
41 | [% END %]
42 | [% ELSE %]
43 | [% "PLUGIN_DYNAMICPLAYLISTS4_PRESELECTION_NONE" | string %]
44 | [% END %]
45 | [% END %]
46 | [% END %]
47 | [% PROCESS pagefooter.html %]
48 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/audio/silence.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/audio/silence.mp3
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/dpl.css:
--------------------------------------------------------------------------------
1 | .boldtitle{font-weight:600;}
2 | .filler{height:3px;}
3 | .selectorMarker,.mouseOver{cursor:default !important;}
4 | @font-face {
5 | font-family: 'fontawesome-light';
6 | src: url('fonts/fontawesome-light.woff?jy2tsp') format('woff');
7 | font-weight: normal;
8 | font-style: normal;
9 | font-display: block;
10 | }
11 | [class^="icon-"], [class*=" icon-"] {
12 | font-family: 'fontawesome-light' !important;
13 | font-style: normal;
14 | font-weight: normal;
15 | font-variant: normal;
16 | text-transform: none;
17 | line-height: 1;
18 | /* Better Font Rendering =========== */
19 | -webkit-font-smoothing: antialiased;
20 | -moz-osx-font-smoothing: grayscale;
21 | }
22 | .icon-dynamicplaylistfolder:before {
23 | content: "\f114";
24 | margin-right: 3px;
25 | }
26 | .icon-dynamicplaylistfolder-org:before {
27 | content: "\f07b";
28 | margin-right: 3px;
29 | }
30 | .icon-dynamicplaylist:before {
31 | content: "\f0ca";
32 | margin-right: 4px;
33 | }
34 | .icon-homemenutoplevellist:before {
35 | content: "\f0c9";
36 | margin-right: 3px;
37 | }
38 | .padleft{padding-left:20px;}
39 | .vcenter{vertical-align: middle;}
40 | .trpadbottom{padding-bottom:5px;}
41 | .dplbtn{padding:2px;}
42 | .lastparamsep{width:45%;text-align:left;margin-left:0;}
43 | @-webkit-keyframes Pulse{from{color:#630030;-webkit-text-shadow:0 0 2px transparent}50%{color:#e33100;-webkit-text-shadow:0 0 5px #e33100}to{color:#630030;-webkit-text-shadow:0 0 2px transparent}}@keyframes Pulse{from{color:#630030;text-shadow:0 0 2px transparent}50%{color:#e33100;text-shadow:0 0 5px #e33100}to{color:#630030;text-shadow:0 0 2px transparent}}.inprogress{padding-left:15px;-webkit-animation-name:Pulse;animation-name:Pulse;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}
44 | .status{visibility:hidden;}
45 | .error{color:red;}
46 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/fonts/fontawesome-light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/fonts/fontawesome-light.woff
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/images/dpl_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/images/dpl_icon_svg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/html/images/dpl_icon_svg.png
--------------------------------------------------------------------------------
/DynamicPlaylists4/HTML/EN/plugins/DynamicPlaylists4/settings/subpage_chooser.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | [% IF subpages.size > 1 %]
4 | [% WRAPPER settingGroup title="SETTINGS_PLUGIN_DYNAMICPLAYLISTS4_SECTION" %]
5 | [% "SETTINGS_PLUGIN_DYNAMICPLAYLISTS4_FAQ_LINK_TEXT" | string %]
10 | [% END %]
11 |
12 | [% END %]
13 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/PlaylistProtocolHandler.pm:
--------------------------------------------------------------------------------
1 | #
2 | # Dynamic Playlists 4
3 | #
4 | # (c) 2021 AF
5 | #
6 | # Some code based on the DynamicPlayList plugin by (c) 2006 Erland Isaksson
7 | #
8 | # GPLv3 license
9 | # This program is free software: you can redistribute it and/or modify
10 | # it under the terms of the GNU General Public License as published by
11 | # the Free Software Foundation, either version 3 of the License, or
12 | # (at your option) any later version.
13 | #
14 | # This program is distributed in the hope that it will be useful,
15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | # GNU General Public License for more details.
18 | #
19 | # You should have received a copy of the GNU General Public License
20 | # along with this program. If not, see .
21 | #
22 |
23 | package Plugins::DynamicPlaylists4::PlaylistProtocolHandler;
24 |
25 | use strict;
26 | use warnings;
27 | use utf8;
28 | use base qw(FileHandle);
29 | use Slim::Utils::Log;
30 |
31 | my $log = logger('plugin.dynamicplaylists4');
32 |
33 | sub overridePlayback {
34 | my ($class, $client, $url) = @_;
35 |
36 | if ($url !~ m|^dynamicplaylistaddonly://(.*)$|) {
37 | return undef;
38 | }
39 |
40 | my ($hasParams) = $url =~ /p1=/;
41 | my $playlistID = '';
42 |
43 | if ($hasParams) {
44 | ($playlistID) = $url =~ /^dynamicplaylistaddonly:\/\/(.*?)\?/;
45 | } else {
46 | $playlistID= $1;
47 | }
48 |
49 | my $command = ["dynamicplaylist", "playlist", "add", "playlistid:".$playlistID];
50 |
51 | my $cnt = 1;
52 | while ($hasParams) {
53 | my ($thisParam) = $url =~ /p${cnt}=(.*?)(&|$)/;
54 | ($hasParams) = $url =~ /p${cnt}=/;
55 |
56 | if ($hasParams) {
57 | push @{$command}, "dynamicplaylist_parameter_".$cnt.":".$thisParam;
58 | }
59 |
60 | if (!$hasParams) {last;}
61 | $cnt++;
62 | }
63 |
64 | main::DEBUGLOG && $log->is_debug && $log->debug('fav list client command = '.Data::Dump::dump($command));
65 | $client->execute(['playlist', 'clear']);
66 | $client->execute($command);
67 | return 1;
68 | }
69 |
70 | sub canDirectStream {
71 | return 0;
72 | }
73 |
74 | sub isAudioURL {
75 | return 1;
76 | }
77 |
78 | sub isRemote {
79 | return 0;
80 | }
81 |
82 | sub contentType {
83 | return 'dynamicplaylist';
84 | }
85 |
86 | sub getIcon {
87 | return Plugins::DynamicPlaylists4::Plugin->_pluginDataFor('icon');
88 | }
89 |
90 | 1;
91 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/genres/genres_081_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_GENRES_NEVERPLAYED
2 | -- PlaylistGroups:Genres
3 | -- PlaylistCategory:genres
4 | -- PlaylistAPCdupe:yes
5 | drop table if exists dynamicplaylist_random_genres;
6 | create temporary table dynamicplaylist_random_genres as
7 | select genre_track.genre as genre, sum(ifnull(tracks_persistent.playCount,0)) as sumplaycount from genre_track
8 | join tracks on genre_track.track = tracks.id
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | genre_track.genre is not null
14 | and dynamicplaylist_history.id is null
15 | and not exists (select * from tracks t2,genre_track,genres
16 | where
17 | t2.id = tracks.id and
18 | tracks.id = genre_track.track and
19 | genre_track.genre = genres.id and
20 | genres.namesearch in ('PlaylistExcludedGenres'))
21 | and
22 | case
23 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
24 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
25 | else 1
26 | end
27 | group by genre_track.genre
28 | having sumplaycount = 0
29 | order by random()
30 | limit 1;
31 | select tracks.id, tracks.primary_artist from tracks
32 | join genre_track on genre_track.track = tracks.id
33 | join dynamicplaylist_random_genres on dynamicplaylist_random_genres.genre = genre_track.genre
34 | left join library_track on library_track.track = tracks.id
35 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
36 | where
37 | tracks.audio = 1
38 | and tracks.secs >= 'PlaylistTrackMinDuration'
39 | and dynamicplaylist_history.id is null
40 | and
41 | case
42 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
43 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
44 | else 1
45 | end
46 | group by tracks.id
47 | order by random()
48 | limit 'PlaylistLimit';
49 | drop table dynamicplaylist_random_genres;
50 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_001_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | left join library_track on library_track.track = tracks.id
8 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and dynamicplaylist_history.id is null
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and
15 | case
16 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
17 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
18 | else 1
19 | end
20 | and
21 | case
22 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
23 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
24 | else 1
25 | end
26 | and not exists (select * from tracks t2, genre_track, genres
27 | where
28 | t2.id = tracks.id and
29 | tracks.id = genre_track.track and
30 | genre_track.genre = genres.id and
31 | genres.namesearch in ('PlaylistExcludedGenres'))
32 | group by tracks.id
33 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_003_random_by_genre.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_GENRE
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter1')
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and dynamicplaylist_history.id is null
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | and
23 | case
24 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
25 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
26 | else 1
27 | end
28 | group by tracks.id
29 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_004_random_by_genre_decade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_GENRE_DECADE
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
6 | -- PlaylistParameter2:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter1')
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
24 | and
25 | case
26 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | group by tracks.id
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_006_random_by_genre_year.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_GENRE_YEARS
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
6 | -- PlaylistParameter2:multipleyears:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEARS:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter1')
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
24 | and
25 | case
26 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | group by tracks.id
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_030_rated_one_click.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RATED
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | select tracks.id, tracks.primary_artist from tracks
6 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
7 | left join library_track on library_track.track = tracks.id
8 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
9 | where
10 | tracks.audio = 1
11 | and dynamicplaylist_history.id is null
12 | and tracks.secs >= 'PlaylistTrackMinDuration'
13 | and
14 | case
15 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
16 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
17 | else 1
18 | end
19 | and not exists (select * from tracks t2,genre_track,genres
20 | where
21 | t2.id = tracks.id and
22 | tracks.id = genre_track.track and
23 | genre_track.genre = genres.id and
24 | genres.namesearch in ('PlaylistExcludedGenres'))
25 | group by tracks.id
26 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_031_rated_unplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RATED_PLAYCOUNT
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
8 | left join library_track on library_track.track = tracks.id
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and dynamicplaylist_history.id is null
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and
15 | case
16 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
17 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
18 | else 1
19 | end
20 | and not exists (select * from tracks t2,genre_track,genres
21 | where
22 | t2.id = tracks.id and
23 | tracks.id = genre_track.track and
24 | genre_track.genre = genres.id and
25 | genres.namesearch in ('PlaylistExcludedGenres'))
26 | and
27 | case
28 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
29 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
30 | else 1
31 | end
32 | group by tracks.id
33 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_033_rated_unplayed_chooseminrating.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RATED_MINRATING
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINRATING:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_UNRATED,20:*,40:**,60:***,80:****,100:*****
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistParameter1'
9 | left join library_track on library_track.track = tracks.id
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and dynamicplaylist_history.id is null
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and not exists (select * from tracks t2,genre_track,genres
22 | where
23 | t2.id = tracks.id and
24 | tracks.id = genre_track.track and
25 | genre_track.genre = genres.id and
26 | genres.namesearch in ('PlaylistExcludedGenres'))
27 | and
28 | case
29 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
30 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
31 | else 1
32 | end
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_034_rated_unplayed_chooseexactrating.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RATED_EXACTRATING
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTEXACTRATING:10:0.5,20:1,30:1.5,40:2,50:2.5,60:3,70:3.5,80:4,90:4.5,100:5
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 'PlaylistParameter1'
9 | left join library_track on library_track.track = tracks.id
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and dynamicplaylist_history.id is null
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and not exists (select * from tracks t2,genre_track,genres
22 | where
23 | t2.id = tracks.id and
24 | tracks.id = genre_track.track and
25 | genre_track.genre = genres.id and
26 | genres.namesearch in ('PlaylistExcludedGenres'))
27 | and
28 | case
29 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
30 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
31 | else 1
32 | end
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_042_rated_by_genre_year.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RATED_GENRE_YEARS
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
6 | -- PlaylistParameter2:multipleyears:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEARS:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter1')
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
24 | and
25 | case
26 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | group by tracks.id
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_060_rated_toprated_one_click.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_TOPRATED
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | select tracks.id, tracks.primary_artist from tracks
6 | left join library_track on library_track.track = tracks.id
7 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and tracks_persistent.rating >= 'PlaylistTopRatedMinRating'
8 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
9 | where
10 | tracks.audio = 1
11 | and dynamicplaylist_history.id is null
12 | and tracks.secs >= 'PlaylistTrackMinDuration'
13 | and
14 | case
15 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
16 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
17 | else 1
18 | end
19 | and not exists (select * from tracks t2,genre_track,genres
20 | where
21 | t2.id = tracks.id and
22 | tracks.id = genre_track.track and
23 | genre_track.genre = genres.id and
24 | genres.namesearch in ('PlaylistExcludedGenres'))
25 | group by tracks.id
26 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_061_rated_toprated.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_TOPRATED_PLAYCOUNT
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
8 | left join library_track on library_track.track = tracks.id
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and dynamicplaylist_history.id is null
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and
15 | case
16 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
17 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
18 | else 1
19 | end
20 | and not exists (select * from tracks t2,genre_track,genres
21 | where
22 | t2.id = tracks.id and
23 | tracks.id = genre_track.track and
24 | genre_track.genre = genres.id and
25 | genres.namesearch in ('PlaylistExcludedGenres'))
26 | and
27 | case
28 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
29 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
30 | else 1
31 | end
32 | group by tracks.id
33 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_081_random_not_in_playlist.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_IGNORE_SELECTEDPL
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST_IGNORE:
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and dynamicplaylist_history.id is null
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and
22 | case
23 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
24 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
25 | else 1
26 | end
27 | and not exists (select * from tracks t3,playlist_track
28 | where
29 | t3.url = tracks.url and
30 | tracks.url = playlist_track.track and
31 | playlist_track.playlist = 'PlaylistParameter1')
32 | and not exists (select * from tracks t2,genre_track,genres
33 | where
34 | t2.id = tracks.id and
35 | tracks.id = genre_track.track and
36 | genre_track.genre = genres.id and
37 | genres.namesearch in ('PlaylistExcludedGenres'))
38 | group by tracks.id
39 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_090_virtuallibrary_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_VLIB_RANDOM
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:virtuallibrary:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTVLIB:
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and
14 | case
15 | when ('PlaylistParameter1' != '' and 'PlaylistParameter1' is not null)
16 | then library_track.library = 'PlaylistParameter1'
17 | else 1
18 | end
19 | and tracks.secs >= 'PlaylistTrackMinDuration'
20 | and dynamicplaylist_history.id is null
21 | and
22 | case
23 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
24 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
25 | else 1
26 | end
27 | and not exists (select * from tracks t2,genre_track,genres
28 | where
29 | t2.id = tracks.id and
30 | tracks.id = genre_track.track and
31 | genre_track.genre = genres.id and
32 | genres.namesearch in ('PlaylistExcludedGenres'))
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_091_virtuallibrary_by_genre_decade_minrating.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_VLIB_GENRE_DECADE_MINRATING
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:virtuallibrary:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTVLIB:
6 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
7 | -- PlaylistParameter3:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
8 | -- PlaylistParameter4:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINRATING:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_UNRATED,20:*,40:**,60:***,80:****,100:*****
9 | -- PlaylistParameter5:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
10 | select tracks.id, tracks.primary_artist from tracks
11 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
12 | left join library_track on library_track.track = tracks.id
13 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistParameter4'
14 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
15 | where
16 | tracks.audio = 1
17 | and
18 | case
19 | when ('PlaylistParameter1' != '' and 'PlaylistParameter1' is not null)
20 | then library_track.library = 'PlaylistParameter1'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter3')
24 | and tracks.secs >= 'PlaylistTrackMinDuration'
25 | and dynamicplaylist_history.id is null
26 | and
27 | case
28 | when 'PlaylistParameter5' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
29 | when 'PlaylistParameter5' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
30 | else 1
31 | end
32 | and not exists (select * from tracks t2,genre_track,genres
33 | where
34 | t2.id = tracks.id and
35 | tracks.id = genre_track.track and
36 | genre_track.genre = genres.id and
37 | genres.namesearch in ('PlaylistExcludedGenres'))
38 | group by tracks.id
39 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_100_mostplayed_minrating_lastadded.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_MOSTPLAYED_MINRATING
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistTrackOrder:ordereddescrandom
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINRATING:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_UNRATED,20:*,40:**,60:***,80:****,100:*****
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTLASTADDEDPERIOD_SONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_ALL,604800:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_1WEEK,1209600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_2WEEKS,2419200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_4WEEKS,7257600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_3MONTHS,14515200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_6MONTHS,29030399:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_12MONTHS
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistParameter1'
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and dynamicplaylist_history.id is null
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and
18 | case
19 | when 'PlaylistParameter2'>0 then (tracks_persistent.added >= (select max(ifnull(tracks_persistent.added,0)) from tracks_persistent) - 'PlaylistParameter2')
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | and
29 | case
30 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
31 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
32 | else 1
33 | end
34 | group by tracks.id
35 | order by tracks_persistent.playCount desc, random()
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_101_leastplayed_lastadded.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistTrackOrder:orderedascrandom
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTLASTADDEDPERIOD_SONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_ALL,604800:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_1WEEK,1209600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_2WEEKS,2419200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_4WEEKS,7257600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_3MONTHS,14515200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_6MONTHS,29030399:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_12MONTHS
8 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and
17 | case
18 | when 'PlaylistParameter1'>0 then (tracks_persistent.added >= (select max(ifnull(tracks_persistent.added,0)) from tracks_persistent) - 'PlaylistParameter1')
19 | else 1
20 | end
21 | and not exists (select * from tracks t2,genre_track,genres
22 | where
23 | t2.id = tracks.id and
24 | tracks.id = genre_track.track and
25 | genre_track.genre = genres.id and
26 | genres.namesearch in ('PlaylistExcludedGenres'))
27 | and
28 | case
29 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
30 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
31 | else 1
32 | end
33 | group by tracks.id
34 | order by tracks_persistent.playCount asc, random()
35 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_110_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistAPCdupe:yes
6 | select tracks.id, tracks.primary_artist from tracks
7 | left join library_track on library_track.track = tracks.id
8 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and dynamicplaylist_history.id is null
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and not exists (select * from tracks t2,genre_track,genres
15 | where
16 | t2.id = tracks.id and
17 | tracks.id = genre_track.track and
18 | genre_track.genre = genres.id and
19 | genres.namesearch in ('PlaylistExcludedGenres'))
20 | and
21 | case
22 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
23 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
24 | else 1
25 | end
26 | group by tracks.id
27 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_111_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistAPCdupe:yes
6 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and dynamicplaylist_history.id is null
14 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and
17 | case
18 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
19 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | and
29 | case
30 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
31 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
32 | else 1
33 | end
34 | group by tracks.id
35 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_130_preselartists_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PRESEL_ARTISTS_SONGS_RANDOM
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | join contributor_track on contributor_track.track = tracks.id and contributor_track.role in (1,4,5,6) and contributor_track.contributor in ('PlaylistPreselectedArtists')
8 | left join library_track on library_track.track = tracks.id
9 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and tracks.secs >= 'PlaylistTrackMinDuration'
14 | and dynamicplaylist_history.id is null
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and
22 | case
23 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
24 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
25 | else 1
26 | end
27 | and not exists (select * from tracks t2,genre_track,genres
28 | where
29 | t2.id = tracks.id and
30 | tracks.id = genre_track.track and
31 | genre_track.genre = genres.id and
32 | genres.namesearch in ('PlaylistExcludedGenres'))
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_132_preselartists_rated_decade_chooserating.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PRESEL_ARTISTS_SONGS_MINRATING_DECADE
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINRATING:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_UNRATED,20:*,40:**,60:***,80:****,100:*****
6 | -- PlaylistParameter2:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.role in (1,4,5,6) and contributor_track.contributor in ('PlaylistPreselectedArtists')
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistParameter1'
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and dynamicplaylist_history.id is null
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | and
31 | case
32 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
33 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
34 | else 1
35 | end
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_150_preselalbums_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PRESEL_ALBUMS_SONGS_RANDOM
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | left join library_track on library_track.track = tracks.id
8 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and tracks.secs >= 'PlaylistTrackMinDuration'
13 | and dynamicplaylist_history.id is null
14 | and tracks.album in ('PlaylistPreselectedAlbums')
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and
22 | case
23 | when 'PlaylistParameter1' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
24 | when 'PlaylistParameter1' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
25 | else 1
26 | end
27 | and not exists (select * from tracks t2,genre_track,genres
28 | where
29 | t2.id = tracks.id and
30 | tracks.id = genre_track.track and
31 | genre_track.genre = genres.id and
32 | genres.namesearch in ('PlaylistExcludedGenres'))
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_152_preselalbums_rated_decade_chooserating.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PRESEL_ALBUMS_SONGS_MINRATING_DECADE
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINRATING:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_UNRATED,20:*,40:**,60:***,80:****,100:*****
6 | -- PlaylistParameter2:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and tracks.album in ('PlaylistPreselectedAlbums')
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | and
31 | case
32 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
33 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
34 | else 1
35 | end
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/songs/songs_190_spotify_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_SPOTIFY_RANDOM
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | select tracks.id, tracks.primary_artist from tracks
6 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
7 | where
8 | tracks.content_type = 'spt'
9 | and tracks.secs >= 'PlaylistTrackMinDuration'
10 | and dynamicplaylist_history.id is null
11 | group by tracks.id
12 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a01_songs_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a20_songs_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a21_songs_toprated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a22_songs_not_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a50_songs_mostplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.album = 'PlaylistParameter1'
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount desc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a51_songs_leastplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.album = 'PlaylistParameter1'
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount asc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a52_songs_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a53_songs_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ((strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR'))-ifnull(tracks_persistent.lastPlayed,0)) > 0)
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.album = 'PlaylistParameter1'
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
21 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
22 | else 1
23 | end
24 | and
25 | case
26 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
27 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a01_songs_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a21_songs_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a22_songs_toprated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a23_songs_notrated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a50_songs_mostplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount desc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a51_songs_leastplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount asc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a52_songs_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a53_songs_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
22 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | and not exists (select * from tracks t2,genre_track,genres
32 | where
33 | t2.id = tracks.id and
34 | tracks.id = genre_track.track and
35 | genre_track.genre = genres.id and
36 | genres.namesearch in ('PlaylistExcludedGenres'))
37 | group by tracks.id
38 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a01_songs_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a21_songs_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a22_songs_rated_decade_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_RATED_DECADE
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
8 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and tracks.year in ('PlaylistParameter2')
19 | and
20 | case
21 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
22 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a23_songs_toprated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a24_songs_notrated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a50_songs_mostplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join library_track on library_track.track = tracks.id
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | group by tracks.id
25 | order by tracks_persistent.playCount desc, random()
26 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a51_songs_leastplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join library_track on library_track.track = tracks.id
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | group by tracks.id
25 | order by tracks_persistent.playCount asc, random()
26 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a52_songs_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | group by tracks.id
24 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a53_songs_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join library_track on library_track.track = tracks.id
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
22 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a01_songs_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and
25 | case
26 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a20_songs_random_by_genre_decade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_GENRE_DECADE
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
8 | -- PlaylistParameter3:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
9 | -- PlaylistParameter4:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
10 | select tracks.id, tracks.primary_artist from tracks
11 | join playlist_track on playlist_track.track = tracks.url
12 | left join library_track on library_track.track = tracks.id
13 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
14 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
15 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
16 | where
17 | playlist_track.playlist = 'PlaylistParameter1'
18 | and tracks.audio = 1
19 | and tracks.secs >= 'PlaylistTrackMinDuration'
20 | and dynamicplaylist_history.id is null
21 | and tracks.year in ('PlaylistParameter3')
22 | and
23 | case
24 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
25 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
26 | else 1
27 | end
28 | and
29 | case
30 | when 'PlaylistParameter4' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
31 | when 'PlaylistParameter4' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
32 | else 1
33 | end
34 | group by tracks.id
35 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a21_songs_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and
25 | case
26 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a22_songs_toprated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and
25 | case
26 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a23_songs_notrated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and
25 | case
26 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
27 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a50_songs_mostplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join playlist_track on playlist_track.track = tracks.url
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | playlist_track.playlist = 'PlaylistParameter1'
16 | and tracks.audio = 1
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and not exists (select * from tracks t2,genre_track,genres
26 | where
27 | t2.id = tracks.id and
28 | tracks.id = genre_track.track and
29 | genre_track.genre = genres.id and
30 | genres.namesearch in ('PlaylistExcludedGenres'))
31 | group by tracks.id
32 | order by tracks_persistent.playCount desc, random()
33 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a51_songs_leastplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | join playlist_track on playlist_track.track = tracks.url
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | playlist_track.playlist = 'PlaylistParameter1'
16 | and tracks.audio = 1
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and not exists (select * from tracks t2,genre_track,genres
26 | where
27 | t2.id = tracks.id and
28 | tracks.id = genre_track.track and
29 | genre_track.genre = genres.id and
30 | genres.namesearch in ('PlaylistExcludedGenres'))
31 | group by tracks.id
32 | order by tracks_persistent.playCount asc, random()
33 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a52_songs_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a53_songs_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join playlist_track on playlist_track.track = tracks.url
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join library_track on library_track.track = tracks.id
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | playlist_track.playlist = 'PlaylistParameter1'
16 | and tracks.audio = 1
17 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
18 | and tracks.secs >= 'PlaylistTrackMinDuration'
19 | and dynamicplaylist_history.id is null
20 | and
21 | case
22 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
23 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
24 | else 1
25 | end
26 | and
27 | case
28 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
29 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
30 | else 1
31 | end
32 | and not exists (select * from tracks t2,genre_track,genres
33 | where
34 | t2.id = tracks.id and
35 | tracks.id = genre_track.track and
36 | genre_track.genre = genres.id and
37 | genres.namesearch in ('PlaylistExcludedGenres'))
38 | group by tracks.id
39 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a01_songs_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a02_songs_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_RANDOM
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a03_songs_genre_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_GENRE
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
8 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.year = 'PlaylistParameter1'
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and
26 | case
27 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
28 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a04_songs_genre_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_GENRE
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
8 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and
26 | case
27 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
28 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a22_songs_rated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a23_songs_rated_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_RATED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a24_songs_rated_genre_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_RATED_GENRE
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
8 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.year = 'PlaylistParameter1'
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and
26 | case
27 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
28 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a25_songs_rated_genre_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_RATED_GENRE
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
8 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter2')
11 | left join library_track on library_track.track = tracks.id
12 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) > 0
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | and
26 | case
27 | when 'PlaylistParameter3' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
28 | when 'PlaylistParameter3' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
29 | else 1
30 | end
31 | group by tracks.id
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a26_songs_toprated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a27_songs_toprated_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_TOPRATED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) >= 'PlaylistTopRatedMinRating'
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a28_songs_notrated_random.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a29_songs_notrated_randomfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_UNRATED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.rating, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and
24 | case
25 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
26 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a50_songs_mostplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.year = 'PlaylistParameter1'
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount desc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a51_songs_mostplayedfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_MOSTPLAYED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
16 | and dynamicplaylist_history.id is null
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount desc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a52_songs_leastplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistAPCdupe:yes
8 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.year = 'PlaylistParameter1'
16 | and dynamicplaylist_history.id is null
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount asc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a53_songs_leastplayedfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_LEASTPLAYED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistAPCdupe:yes
6 | -- PlaylistUseCache: 1
7 | -- PlaylistTrackOrder:orderedascrandom
8 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
9 | select tracks.id, tracks.primary_artist, tracks_persistent.playCount from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and dynamicplaylist_history.id is null
16 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by tracks_persistent.playCount asc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a54_songs_neverplayed.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a55_songs_neverplayedfromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_NEVERPLAYED
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5 and ifnull(tracks_persistent.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a56_songs_playedlongago.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.year = 'PlaylistParameter1'
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
19 | and
20 | case
21 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
22 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | and not exists (select * from tracks t2,genre_track,genres
32 | where
33 | t2.id = tracks.id and
34 | tracks.id = genre_track.track and
35 | genre_track.genre = genres.id and
36 | genres.namesearch in ('PlaylistExcludedGenres'))
37 | group by tracks.id
38 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a57_songs_playedlongagofromthisdecade.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_PLAYEDLONGAGO
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistAPCdupe:yes
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
9 | select tracks.id, tracks.primary_artist from tracks
10 | left join library_track on library_track.track = tracks.id
11 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and dynamicplaylist_history.id is null
16 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
17 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(tracks_persistent.lastPlayed,0)) > 0
18 | and tracks.secs >= 'PlaylistTrackMinDuration'
19 | and
20 | case
21 | when 'PlaylistParameter2' = 1 then ifnull(tracks_persistent.playCount, 0) = 0
22 | when 'PlaylistParameter2' = 2 then ifnull(tracks_persistent.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | and not exists (select * from tracks t2,genre_track,genres
32 | where
33 | t2.id = tracks.id and
34 | tracks.id = genre_track.track and
35 | genre_track.genre = genres.id and
36 | genres.namesearch in ('PlaylistExcludedGenres'))
37 | group by tracks.id
38 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/genres/genres_081_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_GENRES_NEVERPLAYED_APC
2 | -- PlaylistGroups:Genres
3 | -- PlaylistCategory:genres
4 | drop table if exists dynamicplaylist_random_genres;
5 | create temporary table dynamicplaylist_random_genres as
6 | select genre_track.genre as genre, sum(ifnull(alternativeplaycount.playCount,0)) as sumplaycount from genre_track
7 | join tracks on genre_track.track = tracks.id
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | genre_track.genre is not null
13 | and dynamicplaylist_history.id is null
14 | and not exists (select * from tracks t2,genre_track,genres
15 | where
16 | t2.id = tracks.id and
17 | tracks.id = genre_track.track and
18 | genre_track.genre = genres.id and
19 | genres.namesearch in ('PlaylistExcludedGenres'))
20 | and
21 | case
22 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
23 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
24 | else 1
25 | end
26 | group by genre_track.genre
27 | having sumplaycount = 0
28 | order by random()
29 | limit 1;
30 | select tracks.id, tracks.primary_artist from tracks
31 | join genre_track on genre_track.track = tracks.id
32 | join dynamicplaylist_random_genres on dynamicplaylist_random_genres.genre = genre_track.genre
33 | left join library_track on library_track.track = tracks.id
34 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
35 | where
36 | tracks.audio = 1
37 | and tracks.secs >= 'PlaylistTrackMinDuration'
38 | and dynamicplaylist_history.id is null
39 | and
40 | case
41 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
42 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
43 | else 1
44 | end
45 | group by tracks.id
46 | order by random()
47 | limit 'PlaylistLimit';
48 | drop table dynamicplaylist_random_genres;
49 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/songs/songs_002_random_dpsv_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_DPSV_APC
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMAXDPSV:100:100,90:90,80:80,70:70,60:60,50:50,40:40,30:30,20:20,10:10,0:0,-10:-10,-20:-20,-30:-30,-40:-40,-50:-50,-60:-60,-70:-70,-80:-80,-90:-90
6 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINDPSV:-100:-100,-90:-90,-80:-80,-70:-70,-60:-60,-50:-50,-40:-40,-30:-30,-20:-20,-10:-10,0:0,10:10,20:20,30:30,40:40,50:50,60:60,70:70,80:80,90:90
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and dynamicplaylist_history.id is null
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and
16 | case
17 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
18 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
19 | else 1
20 | end
21 | and ifnull(alternativeplaycount.dynPSval, 0) <= 'PlaylistParameter1'
22 | and ifnull(alternativeplaycount.dynPSval, 0) >= 'PlaylistParameter2'
23 | and not exists (select * from tracks t2, genre_track, genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/songs/songs_004_random_by_genre_decade_dpsv_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_RANDOM_GENRE_DECADE_DPSV_APC
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:multiplegenres:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRES:
6 | -- PlaylistParameter2:multipledecades:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTDECADES:
7 | -- PlaylistParameter3:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMAXDPSV:100:100,90:90,80:80,70:70,60:60,50:50,40:40,30:30,20:20,10:10,0:0,-10:-10,-20:-20,-30:-30,-40:-40,-50:-50,-60:-60,-70:-70,-80:-80,-90:-90
8 | -- PlaylistParameter4:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTMINDPSV:-100:-100,-90:-90,-80:-80,-70:-70,-60:-60,-50:-50,-40:-40,-30:-30,-20:-20,-10:-10,0:0,10:10,20:20,30:30,40:40,50:50,60:60,70:70,80:80,90:90
9 | select tracks.id, tracks.primary_artist from tracks
10 | join genre_track on genre_track.track = tracks.id and genre_track.genre in ('PlaylistParameter1')
11 | left join library_track on library_track.track = tracks.id
12 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
13 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
14 | where
15 | tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and ifnull(tracks.year, 0) in ('PlaylistParameter2')
25 | and ifnull(alternativeplaycount.dynPSval, 0) <= 'PlaylistParameter3'
26 | and ifnull(alternativeplaycount.dynPSval, 0) >= 'PlaylistParameter4'
27 | group by tracks.id
28 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/songs/songs_101_leastplayed_lastadded_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistTrackOrder:orderedascrandom
6 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTLASTADDEDPERIOD_SONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_ALL,604800:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_1WEEK,1209600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_2WEEKS,2419200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_4WEEKS,7257600:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_3MONTHS,14515200:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_6MONTHS,29030399:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SELECTLASTADDEDPERIOD_12MONTHS
7 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
10 | join tracks_persistent on tracks_persistent.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and
17 | case
18 | when 'PlaylistParameter1'>0 then (tracks_persistent.added >= (select max(ifnull(tracks_persistent.added,0)) from tracks_persistent) - 'PlaylistParameter1')
19 | else 1
20 | end
21 | and not exists (select * from tracks t2,genre_track,genres
22 | where
23 | t2.id = tracks.id and
24 | tracks.id = genre_track.track and
25 | genre_track.genre = genres.id and
26 | genres.namesearch in ('PlaylistExcludedGenres'))
27 | and
28 | case
29 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
30 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
31 | else 1
32 | end
33 | group by tracks.id
34 | order by alternativeplaycount.playCount asc, random()
35 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/songs/songs_110_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | select tracks.id, tracks.primary_artist from tracks
6 | left join library_track on library_track.track = tracks.id
7 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
8 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
9 | where
10 | tracks.audio = 1
11 | and dynamicplaylist_history.id is null
12 | and tracks.secs >= 'PlaylistTrackMinDuration'
13 | and not exists (select * from tracks t2,genre_track,genres
14 | where
15 | t2.id = tracks.id and
16 | tracks.id = genre_track.track and
17 | genre_track.genre = genres.id and
18 | genres.namesearch in ('PlaylistExcludedGenres'))
19 | and
20 | case
21 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
22 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
23 | else 1
24 | end
25 | group by tracks.id
26 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/songs/songs_111_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Songs
3 | -- PlaylistCategory:songs
4 | -- PlaylistUseCache: 1
5 | -- PlaylistParameter1:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
6 | select tracks.id, tracks.primary_artist from tracks
7 | left join library_track on library_track.track = tracks.id
8 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
9 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
10 | where
11 | tracks.audio = 1
12 | and dynamicplaylist_history.id is null
13 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and
16 | case
17 | when 'PlaylistParameter1' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
18 | when 'PlaylistParameter1' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
19 | else 1
20 | end
21 | and not exists (select * from tracks t2,genre_track,genres
22 | where
23 | t2.id = tracks.id and
24 | tracks.id = genre_track.track and
25 | genre_track.genre = genres.id and
26 | genres.namesearch in ('PlaylistExcludedGenres'))
27 | and
28 | case
29 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
30 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
31 | else 1
32 | end
33 | group by tracks.id
34 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a50_songs_mostplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount desc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a51_songs_leastplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount asc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a52_songs_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and tracks.album = 'PlaylistParameter1'
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and dynamicplaylist_history.id is null
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | group by tracks.id
29 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_albums/zz_CONTEXTMENU_for_selected_album_a53_songs_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ALBUM_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ album
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:albums
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:album:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTALBUM:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ((strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR'))-ifnull(alternativeplaycount.lastPlayed,0)) > 0)
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.album = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
20 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
21 | else 1
22 | end
23 | and
24 | case
25 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
26 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
27 | else 1
28 | end
29 | and not exists (select * from tracks t2,genre_track,genres
30 | where
31 | t2.id = tracks.id and
32 | tracks.id = genre_track.track and
33 | genre_track.genre = genres.id and
34 | genres.namesearch in ('PlaylistExcludedGenres'))
35 | group by tracks.id
36 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a50_songs_mostplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount desc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a51_songs_leastplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount asc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a52_songs_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | select tracks.id, tracks.primary_artist from tracks
8 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and dynamicplaylist_history.id is null
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | group by tracks.id
29 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_artists/zz_CONTEXTMENU_for_selected_artist_a53_songs_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_ARTIST_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ artist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:artists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:artist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTARTIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join contributor_track on contributor_track.track = tracks.id and contributor_track.contributor = 'PlaylistParameter1'
10 | left join library_track on library_track.track = tracks.id
11 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
21 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
22 | else 1
23 | end
24 | and
25 | case
26 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
27 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a50_songs_mostplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | group by tracks.id
24 | order by alternativeplaycount.playCount desc, random()
25 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a51_songs_leastplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | group by tracks.id
24 | order by alternativeplaycount.playCount asc, random()
25 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a52_songs_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | select tracks.id, tracks.primary_artist from tracks
8 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and dynamicplaylist_history.id is null
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | group by tracks.id
23 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_genres/zz_CONTEXTMENU_for_selected_genre_a53_songs_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_GENRE_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ genre
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:genres
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:genre:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTGENRE:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join genre_track on genre_track.track = tracks.id and genre_track.genre = 'PlaylistParameter1'
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | tracks.audio = 1
15 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
21 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
22 | else 1
23 | end
24 | and
25 | case
26 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
27 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
28 | else 1
29 | end
30 | group by tracks.id
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a50_songs_mostplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by alternativeplaycount.playCount desc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a51_songs_leastplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | left join library_track on library_track.track = tracks.id
11 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and dynamicplaylist_history.id is null
18 | and
19 | case
20 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
21 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
22 | else 1
23 | end
24 | and not exists (select * from tracks t2,genre_track,genres
25 | where
26 | t2.id = tracks.id and
27 | tracks.id = genre_track.track and
28 | genre_track.genre = genres.id and
29 | genres.namesearch in ('PlaylistExcludedGenres'))
30 | group by tracks.id
31 | order by alternativeplaycount.playCount asc, random()
32 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a52_songs_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | select tracks.id, tracks.primary_artist from tracks
8 | join playlist_track on playlist_track.track = tracks.url
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | playlist_track.playlist = 'PlaylistParameter1'
14 | and tracks.audio = 1
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_playlists/zz_CONTEXTMENU_for_selected_playlist_a53_songs_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_PLAYLIST_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ playlist
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:playlists
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:playlist:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTPLAYLIST:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | join playlist_track on playlist_track.track = tracks.url
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join library_track on library_track.track = tracks.id
12 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
13 | where
14 | playlist_track.playlist = 'PlaylistParameter1'
15 | and tracks.audio = 1
16 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and dynamicplaylist_history.id is null
19 | and
20 | case
21 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
22 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
23 | else 1
24 | end
25 | and
26 | case
27 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
28 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
29 | else 1
30 | end
31 | and not exists (select * from tracks t2,genre_track,genres
32 | where
33 | t2.id = tracks.id and
34 | tracks.id = genre_track.track and
35 | genre_track.genre = genres.id and
36 | genres.namesearch in ('PlaylistExcludedGenres'))
37 | group by tracks.id
38 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a50_songs_mostplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount desc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a51_songs_mostplayedfromthisdecade_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_MOSTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:ordereddescrandom
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
15 | and dynamicplaylist_history.id is null
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount desc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a52_songs_leastplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and dynamicplaylist_history.id is null
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount asc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a53_songs_leastplayedfromthisdecade_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_LEASTPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistTrackOrder:orderedascrandom
7 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
8 | select tracks.id, tracks.primary_artist, alternativeplaycount.playCount from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
16 | and tracks.secs >= 'PlaylistTrackMinDuration'
17 | and
18 | case
19 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
20 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
21 | else 1
22 | end
23 | and not exists (select * from tracks t2,genre_track,genres
24 | where
25 | t2.id = tracks.id and
26 | tracks.id = genre_track.track and
27 | genre_track.genre = genres.id and
28 | genres.namesearch in ('PlaylistExcludedGenres'))
29 | group by tracks.id
30 | order by alternativeplaycount.playCount asc, random()
31 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a54_songs_neverplayed_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and tracks.year = 'PlaylistParameter1'
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and dynamicplaylist_history.id is null
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | group by tracks.id
29 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a55_songs_neverplayedfromthisdecade_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_NEVERPLAYED_APC
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | select tracks.id, tracks.primary_artist from tracks
8 | left join library_track on library_track.track = tracks.id
9 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5 and ifnull(alternativeplaycount.playCount, 0) = 0
10 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
11 | where
12 | tracks.audio = 1
13 | and dynamicplaylist_history.id is null
14 | and tracks.secs >= 'PlaylistTrackMinDuration'
15 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
16 | and
17 | case
18 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
19 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
20 | else 1
21 | end
22 | and not exists (select * from tracks t2,genre_track,genres
23 | where
24 | t2.id = tracks.id and
25 | tracks.id = genre_track.track and
26 | genre_track.genre = genres.id and
27 | genres.namesearch in ('PlaylistExcludedGenres'))
28 | group by tracks.id
29 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a56_songs_playedlongago_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_YEAR_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ year
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and tracks.year = 'PlaylistParameter1'
15 | and tracks.secs >= 'PlaylistTrackMinDuration'
16 | and dynamicplaylist_history.id is null
17 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
18 | and
19 | case
20 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
21 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
22 | else 1
23 | end
24 | and
25 | case
26 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
27 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Playlists/zz_extplugin_APC/zz_contextmenulists/for_years/zz_CONTEXTMENU_for_selected_year_a57_songs_playedlongagofromthisdecade_apc.sql:
--------------------------------------------------------------------------------
1 | -- PlaylistName:PLUGIN_DYNAMICPLAYLISTS4_BUILTIN_PLAYLIST_CONTEXT_DECADE_SONGS_PLAYEDLONGAGO_APC
2 | -- PlaylistGroups:Context menu lists/ decade
3 | -- PlaylistMenuListType:contextmenu
4 | -- PlaylistCategory:years
5 | -- PlaylistUseCache: 1
6 | -- PlaylistParameter1:year:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_SELECTYEAR:
7 | -- PlaylistParameter2:list:PLUGIN_DYNAMICPLAYLISTS4_PARAMNAME_INCLUDESONGS:0:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_ALL,1:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_UNPLAYED,2:PLUGIN_DYNAMICPLAYLISTS4_PARAMVALUENAME_SONGS_PLAYED
8 | select tracks.id, tracks.primary_artist from tracks
9 | left join library_track on library_track.track = tracks.id
10 | join alternativeplaycount on alternativeplaycount.urlmd5 = tracks.urlmd5
11 | left join dynamicplaylist_history on dynamicplaylist_history.id = tracks.id and dynamicplaylist_history.client = 'PlaylistPlayer'
12 | where
13 | tracks.audio = 1
14 | and dynamicplaylist_history.id is null
15 | and tracks.year >= cast((('PlaylistParameter1'/10)*10) as int) and tracks.year < (cast((('PlaylistParameter1'/10)*10) as int)+10)
16 | and (strftime('%s',DATE('NOW','-'PlaylistPeriodPlayedLongAgo' YEAR')) - ifnull(alternativeplaycount.lastPlayed,0)) > 0
17 | and tracks.secs >= 'PlaylistTrackMinDuration'
18 | and
19 | case
20 | when 'PlaylistParameter2' = 1 then ifnull(alternativeplaycount.playCount, 0) = 0
21 | when 'PlaylistParameter2' = 2 then ifnull(alternativeplaycount.playCount, 0) > 0
22 | else 1
23 | end
24 | and
25 | case
26 | when ('PlaylistCurrentVirtualLibraryForClient' != '' and 'PlaylistCurrentVirtualLibraryForClient' is not null)
27 | then library_track.library = 'PlaylistCurrentVirtualLibraryForClient'
28 | else 1
29 | end
30 | and not exists (select * from tracks t2,genre_track,genres
31 | where
32 | t2.id = tracks.id and
33 | tracks.id = genre_track.track and
34 | genre_track.genre = genres.id and
35 | genres.namesearch in ('PlaylistExcludedGenres'))
36 | group by tracks.id
37 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/Settings/BaseSettings.pm:
--------------------------------------------------------------------------------
1 | #
2 | # Dynamic Playlists 4
3 | #
4 | # (c) 2021 AF
5 | #
6 | # Some code based on the DynamicPlayList plugin by (c) 2006 Erland Isaksson
7 | #
8 | # GPLv3 license
9 | # This program is free software: you can redistribute it and/or modify
10 | # it under the terms of the GNU General Public License as published by
11 | # the Free Software Foundation, either version 3 of the License, or
12 | # (at your option) any later version.
13 | #
14 | # This program is distributed in the hope that it will be useful,
15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | # GNU General Public License for more details.
18 | #
19 | # You should have received a copy of the GNU General Public License
20 | # along with this program. If not, see .
21 | #
22 |
23 | package Plugins::DynamicPlaylists4::Settings::BaseSettings;
24 |
25 | use strict;
26 | use warnings;
27 | use utf8;
28 | use base qw(Slim::Web::Settings);
29 |
30 | use File::Basename;
31 | use File::Next;
32 |
33 | use Slim::Utils::Log;
34 | use Slim::Utils::Prefs;
35 | use Slim::Utils::Misc;
36 |
37 | my $prefs = preferences('plugin.dynamicplaylists4');
38 | my $log = logger('plugin.dynamicplaylists4');
39 |
40 | my $plugin;
41 | my %subPages = ();
42 |
43 | sub new {
44 | my $class = shift;
45 | $plugin = shift;
46 | my $default = shift;
47 |
48 | if (!defined($default) || !$default) {
49 | if ($class->can('page') && $class->can('handler')) {
50 | Slim::Web::Pages->addPageFunction($class->page, $class);
51 | }
52 | } else {
53 | $class->SUPER::new();
54 | }
55 | $subPages{$class->name()} = $class;
56 | }
57 |
58 | sub handler {
59 | my ($class, $client, $params) = @_;
60 |
61 | my %currentSubPages = ();
62 | for my $key (keys %subPages) {
63 | my $pages = $subPages{$key}->pages($client, $params);
64 | for my $page (@{$pages}) {
65 | $currentSubPages{$page->{'name'}} = $page->{'page'};
66 | }
67 | }
68 | $params->{'subpages'} = \%currentSubPages;
69 | $params->{'subpage'} = $class->currentPage($client, $params);
70 | return $class->SUPER::handler($client, $params);
71 | }
72 |
73 | 1;
74 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/custom-types.conf:
--------------------------------------------------------------------------------
1 | dynamicplaylist - audio/x-dynamicplaylist playlist
2 | svg svg image/svg+xml -
3 | woff woff application/font-woff -
4 |
--------------------------------------------------------------------------------
/DynamicPlaylists4/install.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | affc5872-2bcb-abee-35eb-56cb5ce1e125
4 | PLUGIN_DYNAMICPLAYLISTS4
5 | Plugins::DynamicPlaylists4::Plugin
6 | 4.5.4
7 | PLUGIN_DYNAMICPLAYLISTS4_DESC
8 | AF
9 | plugins/DynamicPlaylists4/settings/basic.html
10 | https://github.com/AF-1/lms-dynamicplaylists
11 | enabled
12 | plugins/DynamicPlaylists4/html/images/dpl_icon_svg.png
13 | BROWSE_MUSIC
14 | 1
15 |
16 | Lyrion Music Server
17 | 8.0
18 | *
19 |
20 |
21 |
--------------------------------------------------------------------------------
/screenshots/defaultskin.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/defaultskin.gif
--------------------------------------------------------------------------------
/screenshots/dpl_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/dpl_icon.png
--------------------------------------------------------------------------------
/screenshots/githubstar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/githubstar.png
--------------------------------------------------------------------------------
/screenshots/jivelite.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/jivelite.gif
--------------------------------------------------------------------------------
/screenshots/material.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/material.gif
--------------------------------------------------------------------------------
/screenshots/menuicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AF-1/lms-dynamicplaylists/c7ae5750dea12405774667aa5e2c160157a7e650/screenshots/menuicon.png
--------------------------------------------------------------------------------