mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using System.Text;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace OpenSubtitlesHandler
 | 
						|
{
 | 
						|
    public class MovieHasher
 | 
						|
    {
 | 
						|
        public static byte[] ComputeMovieHash(string filename)
 | 
						|
        {
 | 
						|
            byte[] result;
 | 
						|
            using (Stream input = File.OpenRead(filename))
 | 
						|
            {
 | 
						|
                result = ComputeMovieHash(input);
 | 
						|
            }
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        private static byte[] ComputeMovieHash(Stream input)
 | 
						|
        {
 | 
						|
            long lhash, streamsize;
 | 
						|
            streamsize = input.Length;
 | 
						|
            lhash = streamsize;
 | 
						|
 | 
						|
            long i = 0;
 | 
						|
            byte[] buffer = new byte[sizeof(long)];
 | 
						|
            while (i < 65536 / sizeof(long) && (input.Read(buffer, 0, sizeof(long)) > 0))
 | 
						|
            {
 | 
						|
                i++;
 | 
						|
                lhash += BitConverter.ToInt64(buffer, 0);
 | 
						|
            }
 | 
						|
 | 
						|
            input.Position = Math.Max(0, streamsize - 65536);
 | 
						|
            i = 0;
 | 
						|
            while (i < 65536 / sizeof(long) && (input.Read(buffer, 0, sizeof(long)) > 0))
 | 
						|
            {
 | 
						|
                i++;
 | 
						|
                lhash += BitConverter.ToInt64(buffer, 0);
 | 
						|
            }
 | 
						|
            input.Close();
 | 
						|
            byte[] result = BitConverter.GetBytes(lhash);
 | 
						|
            Array.Reverse(result);
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        public static string ToHexadecimal(byte[] bytes)
 | 
						|
        {
 | 
						|
            StringBuilder hexBuilder = new StringBuilder();
 | 
						|
            for (int i = 0; i < bytes.Length; i++)
 | 
						|
            {
 | 
						|
                hexBuilder.Append(bytes[i].ToString("x2"));
 | 
						|
            }
 | 
						|
            return hexBuilder.ToString();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |