├── .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 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 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 --------------------------------------------------------------------------------