kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			Update InstanceService, improve unlisted/banned network post filtering
							rodzic
							
								
									87cff47c03
								
							
						
					
					
						commit
						a0da6ec39a
					
				| 
						 | 
				
			
			@ -7,13 +7,14 @@ use App\Instance;
 | 
			
		|||
 | 
			
		||||
class InstanceService
 | 
			
		||||
{
 | 
			
		||||
    const CACHE_KEY_BY_DOMAIN = 'pf:services:instance:by_domain:';
 | 
			
		||||
	const CACHE_KEY_BANNED_DOMAINS = 'instances:banned:domains';
 | 
			
		||||
	const CACHE_KEY_UNLISTED_DOMAINS = 'instances:unlisted:domains';
 | 
			
		||||
	const CACHE_KEY_NSFW_DOMAINS = 'instances:auto_cw:domains';
 | 
			
		||||
 | 
			
		||||
	public static function getByDomain($domain)
 | 
			
		||||
	{
 | 
			
		||||
		return Cache::remember('pf:services:instance:by_domain:'.$domain, 3600, function() use($domain) {
 | 
			
		||||
		return Cache::remember(self::CACHE_KEY_BY_DOMAIN.$domain, 3600, function() use($domain) {
 | 
			
		||||
			return Instance::whereDomain($domain)->first();
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -50,4 +51,17 @@ class InstanceService
 | 
			
		|||
			return $instance->software;
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    public static function refresh()
 | 
			
		||||
    {
 | 
			
		||||
        Cache::forget(self::CACHE_KEY_BANNED_DOMAINS);
 | 
			
		||||
        Cache::forget(self::CACHE_KEY_UNLISTED_DOMAINS);
 | 
			
		||||
        Cache::forget(self::CACHE_KEY_NSFW_DOMAINS);
 | 
			
		||||
 | 
			
		||||
        self::getBannedDomains();
 | 
			
		||||
        self::getUnlistedDomains();
 | 
			
		||||
        self::getNsfwDomains();
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,6 +77,11 @@ class NetworkTimelineService
 | 
			
		|||
		if(self::count() == 0 || $force == true) {
 | 
			
		||||
			$hideNsfw = config('instance.hide_nsfw_on_public_feeds');
 | 
			
		||||
			Redis::del(self::CACHE_KEY);
 | 
			
		||||
            $filteredDomains = collect(InstanceService::getBannedDomains())
 | 
			
		||||
                ->merge(InstanceService::getUnlistedDomains())
 | 
			
		||||
                ->unique()
 | 
			
		||||
                ->values()
 | 
			
		||||
                ->toArray();
 | 
			
		||||
			$ids = Status::whereNotNull('uri')
 | 
			
		||||
				->whereScope('public')
 | 
			
		||||
				->when($hideNsfw, function($q, $hideNsfw) {
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +93,13 @@ class NetworkTimelineService
 | 
			
		|||
				->where('created_at', '>', now()->subHours(config('instance.timeline.network.max_hours_old')))
 | 
			
		||||
				->orderByDesc('created_at')
 | 
			
		||||
				->limit($limit)
 | 
			
		||||
				->pluck('id');
 | 
			
		||||
				->pluck('uri', 'id');
 | 
			
		||||
            $ids = $ids->filter(function($k, $v) use($filteredDomains) {
 | 
			
		||||
                $domain = parse_url($k, PHP_URL_HOST);
 | 
			
		||||
                return !in_array($domain, $filteredDomains);
 | 
			
		||||
            })->map(function($k, $v) {
 | 
			
		||||
                return $v;
 | 
			
		||||
            })->flatten();
 | 
			
		||||
			foreach($ids as $id) {
 | 
			
		||||
				self::add($id);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -510,7 +510,14 @@ class Helpers {
 | 
			
		|||
			$status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) &&
 | 
			
		||||
			(config('instance.hide_nsfw_on_public_feeds') == true ? $status->is_nsfw == false : true)
 | 
			
		||||
		) {
 | 
			
		||||
			NetworkTimelineService::add($status->id);
 | 
			
		||||
			$filteredDomains = collect(InstanceService::getBannedDomains())
 | 
			
		||||
                ->merge(InstanceService::getUnlistedDomains())
 | 
			
		||||
                ->unique()
 | 
			
		||||
                ->values()
 | 
			
		||||
                ->toArray();
 | 
			
		||||
            if(!in_array($urlDomain, $filteredDomains)) {
 | 
			
		||||
				NetworkTimelineService::add($status->id);
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		IncrementPostCount::dispatch($pid)->onQueue('low');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue