Avoid troi radio to give duplicates (#2231)
This commit is contained in:
		
							parent
							
								
									7ecd3e6767
								
							
						
					
					
						commit
						7ccb2d88f8
					
				|  | @ -56,33 +56,37 @@ def build_radio_queryset(patch, config, radio_qs): | ||||||
|     if not recommendations: |     if not recommendations: | ||||||
|         raise ValueError("No candidates found by troi") |         raise ValueError("No candidates found by troi") | ||||||
| 
 | 
 | ||||||
|     recommended_recording_mbids = [ |     recommended_mbids = [ | ||||||
|         recommended_recording.mbid |         recommended_recording.mbid | ||||||
|         for recommended_recording in recommendations.playlists[0].recordings |         for recommended_recording in recommendations.playlists[0].recordings | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
|     logger.info("Searching for MusicBrainz ID in Funkwhale database") |     logger.info("Searching for MusicBrainz ID in Funkwhale database") | ||||||
| 
 | 
 | ||||||
|     qs_mbid = music_models.Track.objects.all().filter( |     qs_recommended = ( | ||||||
|         mbid__in=recommended_recording_mbids |         music_models.Track.objects.all() | ||||||
|  |         .filter(mbid__in=recommended_mbids) | ||||||
|  |         .order_by("mbid", "pk") | ||||||
|  |         .distinct("mbid") | ||||||
|     ) |     ) | ||||||
|     mbids_found = [str(i.mbid) for i in qs_mbid] |     qs_recommended_mbid = [str(i.mbid) for i in qs_recommended] | ||||||
| 
 | 
 | ||||||
|     recommended_recording_mbids_not_found = [ |     recommended_mbids_not_qs = [ | ||||||
|         mbid for mbid in recommended_recording_mbids if mbid not in mbids_found |         mbid for mbid in recommended_mbids if mbid not in qs_recommended_mbid | ||||||
|     ] |     ] | ||||||
|     cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) |     cached_match = cache.get_many(recommended_mbids_not_qs) | ||||||
|  |     cached_match_mbid = [str(i) for i in cached_match.keys()] | ||||||
| 
 | 
 | ||||||
|     if qs_mbid and cached_mbid_match: |     if qs_recommended and cached_match_mbid: | ||||||
|         logger.info("MusicBrainz IDs found in Funkwhale database and redis") |         logger.info("MusicBrainz IDs found in Funkwhale database and redis") | ||||||
|         mbids_found = [str(i.mbid) for i in qs_mbid] |         qs_recommended_mbid.extend(cached_match_mbid) | ||||||
|         mbids_found.extend([i for i in cached_mbid_match.keys()]) |         mbids_found = qs_recommended_mbid | ||||||
|     elif qs_mbid and not cached_mbid_match: |     elif qs_recommended and not cached_match_mbid: | ||||||
|         logger.info("MusicBrainz IDs found in Funkwhale database") |         logger.info("MusicBrainz IDs found in Funkwhale database") | ||||||
|         mbids_found = mbids_found |         mbids_found = qs_recommended_mbid | ||||||
|     elif not qs_mbid and cached_mbid_match: |     elif not qs_recommended and cached_match_mbid: | ||||||
|         logger.info("MusicBrainz IDs found in redis cache") |         logger.info("MusicBrainz IDs found in redis cache") | ||||||
|         mbids_found = [i for i in cached_mbid_match.keys()] |         mbids_found = cached_match_mbid | ||||||
|     else: |     else: | ||||||
|         logger.info( |         logger.info( | ||||||
|             "Couldn't find any matches in Funkwhale database. Trying to match all" |             "Couldn't find any matches in Funkwhale database. Trying to match all" | ||||||
|  | @ -106,23 +110,32 @@ def build_radio_queryset(patch, config, radio_qs): | ||||||
|         + str(end_time_resolv - start_time_resolv) |         + str(end_time_resolv - start_time_resolv) | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) |     cached_match = cache.get_many(recommended_mbids) | ||||||
| 
 | 
 | ||||||
|     if not qs_mbid and not cached_mbid_match: |     if not mbids_found and not cached_match: | ||||||
|         raise ValueError("No candidates found for troi radio") |         raise ValueError("No candidates found for troi radio") | ||||||
| 
 | 
 | ||||||
|     logger.info("Radio generation with troi took " + str(end_time_resolv - start_time)) |     mbids_found_pks = list( | ||||||
|     logger.info("qs_mbid is " + str(mbids_found)) |         music_models.Track.objects.all() | ||||||
|  |         .filter(mbid__in=mbids_found) | ||||||
|  |         .order_by("mbid", "pk") | ||||||
|  |         .distinct("mbid") | ||||||
|  |         .values_list("pk", flat=True) | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
|     if qs_mbid and cached_mbid_match: |     mbids_found_pks_unique = [ | ||||||
|  |         i for i in mbids_found_pks if i not in cached_match.keys() | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     if mbids_found and cached_match: | ||||||
|         return radio_qs.filter( |         return radio_qs.filter( | ||||||
|             Q(mbid__in=mbids_found) | Q(pk__in=cached_mbid_match.values()) |             Q(pk__in=mbids_found_pks_unique) | Q(pk__in=cached_match.values()) | ||||||
|         ) |         ) | ||||||
|     if qs_mbid and not cached_mbid_match: |     if mbids_found and not cached_match: | ||||||
|         return radio_qs.filter(mbid__in=mbids_found) |         return radio_qs.filter(pk__in=mbids_found_pks_unique) | ||||||
| 
 | 
 | ||||||
|     if not qs_mbid and cached_mbid_match: |     if not mbids_found and cached_match: | ||||||
|         return radio_qs.filter(pk__in=cached_mbid_match.values()) |         return radio_qs.filter(pk__in=cached_match.values()) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TroiPatch: | class TroiPatch: | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | Avoid troi radio to give duplicates (#2231) | ||||||
		Loading…
	
		Reference in New Issue
	
	 petitminion
						petitminion