Mit Lune ist es möglich Serien und Filme selbst zu erstellen und zu verwalten.
Das Programm bietet einige tolle Funktionen die es einem gemütlich macht seine Videos zu schauen.
Version 2.0.1.5:
- Automatisches Suchen von Dateien
- Weitere Formate unterstützen
- Scrollbar ändern
- Tabs für Serien, Playlists
- Auf Fernbedienung anzeigen
- Beschreibung bei Episoden/Videos
- Sortierung
- Bugfixes
- Episode hinzufügen auto-fillout
- Bildschirm in Stand-By schalten
- Mit Fernbedienung starten
Version 2.0.1.6:
- Verbindung zu IMDB (Suche)
- Bildschirme bei Vollbild ausschalten
- Auf Fernbedienung anzeigen
- Bilder andere Auflösung
- Keine CONFIG-Datei
- Scroll to last seen
- Bugfixes
Version 2.0.1.7:
- Spracherkennung
- Bugfixes
- Settings wieder in eigene Datei
- Andere Player verwenden
- Exportieren vereinfachen
- Nach Updates suchen ändern (entfernt)
- Countdown abschaltbar
Version 2.0.1.8:
- Bei externem Player, anderer ausblenden
- Keine Endlosschleife
- Nach zuendeschauen nicht nach Zeit fragen
- Auto-Abspielen abstellbar
- Scrollbar verbessern
- Pfad bei Image disable
- Taskleiste Progressbar und Icons
- Symbole ändern
Version 2.0.1.9:
- Gruppen
- Bildergröße einstellbar (fit or stretch)
- Bugfixes (Überschreiben, ControlBox Buttons)
- Fernbedienung abschaltbar
- Port änderbar
- Player Form
- Bilderanzeige schneller
- Animationen bei Bilderanzeige
- Passwortschutz (AES)
- Bugfixes (Bilder, Auto-Scroll, etc.)
- Projekt wieder umbenannt
Version 3.0.0.0:
- Design geändert
- Suche
- Einzelne Filme
- Bug- und Performance fixes
- Weitere Funktionen...
Version 3.0.0.1:
- Übersetzung vervollständigt
- Bug fixes
- Neue Episode Button
- Keine Abspielabfrage wenn mehr als 90% geschaut wurde
- Vorspulen bei gedrückt halten
- Dauer über Player ermitteln
- Anleitung erneuern
- Verbindung zu Datenbank (Log-In)
- Episoden & Staffeln erkennen
VB.NET-Quellcode
- Imports System.IO
- Imports System.Security.Cryptography
- Imports System.Text
- Public Class Crypt
- Dim MagicBytes() As Byte
- Sub New(ByVal MagicString As String)
- MagicBytes = Encoding.Unicode.GetBytes(MagicString)
- End Sub
- Private Function CreateSalt() As String
- Dim chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=][}{<>"
- Dim salt As String = ""
- Dim rnd As New Random
- For i As Integer = 1 To 64
- Dim x As Integer = rnd.Next(0, chars.Length - 1)
- salt &= chars.Substring(x, 1)
- Next
- Return salt
- End Function
- Private Function CreateChecksum(ByVal Bytes() As Byte) As Byte()
- Dim result() As Byte
- Dim sha As New SHA512Managed()
- result = sha.ComputeHash(Bytes)
- Return result
- End Function
- Public Sub EncryptFile(ByVal FileName As String, ByVal Key As String)
- Dim salt() As Byte = Encoding.Unicode.GetBytes(CreateSalt())
- Dim checksum() As Byte = CreateChecksum(File.ReadAllBytes(FileName))
- Dim AES As New AesCryptoServiceProvider()
- Dim rfc As New Rfc2898DeriveBytes(Key, salt)
- AES.Key = rfc.GetBytes(32)
- AES.IV = rfc.GetBytes(16)
- Using fsInput As New FileStream(FileName, FileMode.Open, FileAccess.Read)
- Using fsEncrypted As New FileStream(FileName & "_e", FileMode.Create, FileAccess.Write)
- fsEncrypted.Write(MagicBytes, 0, MagicBytes.Length)
- fsEncrypted.Write(salt, 0, salt.Length)
- fsEncrypted.Write(checksum, 0, checksum.Length)
- Using cryptostream As New CryptoStream(fsEncrypted, AES.CreateEncryptor, CryptoStreamMode.Write)
- fsInput.CopyTo(cryptostream)
- End Using
- End Using
- End Using
- File.Delete(FileName)
- File.Move(FileName & "_e", FileName)
- End Sub
- Public Function DecryptFile(ByVal FileName As String, ByVal Key As String) As Boolean
- Try
- Dim salt(127) As Byte
- Dim mag(MagicBytes.Length - 1) As Byte
- Dim checksum(63) As Byte
- Using fshash As New FileStream(FileName, FileMode.Open, FileAccess.Read)
- fshash.Read(mag, 0, mag.Length)
- fshash.Read(salt, 0, salt.Length)
- fshash.Read(checksum, 0, checksum.Length)
- Dim AES As New AesCryptoServiceProvider()
- Dim rfc As New Rfc2898DeriveBytes(Key, salt)
- AES.Key = rfc.GetBytes(32)
- AES.IV = rfc.GetBytes(16)
- Using cryptostream As New CryptoStream(fshash, AES.CreateDecryptor, CryptoStreamMode.Read)
- Using fs As New FileStream(FileName & "_d", FileMode.Create)
- cryptostream.CopyTo(fs)
- End Using
- End Using
- End Using
- If checksum.SequenceEqual(CreateChecksum(File.ReadAllBytes(FileName & "_d"))) Then
- File.Delete(FileName)
- File.Move(FileName & "_d", FileName)
- Return True
- Else
- File.Delete(FileName & "_d")
- Return False
- End If
- Catch ex As Exception
- File.Delete(FileName & "_d")
- Return False
- End Try
- End Function
- Public Function IsEncrypted(ByVal FileName As String) As Boolean
- Dim mag(MagicBytes.Length - 1) As Byte
- Using fshash As New FileStream(FileName, FileMode.Open, FileAccess.Read)
- fshash.Read(mag, 0, mag.Length)
- End Using
- Return mag.SequenceEqual(MagicBytes)
- End Function
- End Class
VB.NET-Quellcode
- Imports System.Net
- Public Class Site
- Dim _bytes As Byte()
- Dim _name As String
- Dim listener As HttpListener
- Dim _caller As Form
- Dim _port As Integer
- Dim t As New Threading.Thread(Sub() Request()) With {.IsBackground = True}
- Sub New(ByVal bytes As Byte(), ByVal name As String, ByVal caller As Form, ByVal port As Integer)
- _bytes = bytes
- _name = name
- _caller = caller
- _port = port
- t.Start()
- End Sub
- Public Property Bytes As Byte()
- Get
- Return _bytes
- End Get
- Set(value As Byte())
- _bytes = value
- End Set
- End Property
- Public Sub Close()
- allow = False
- t.Abort()
- listener.Stop()
- End Sub
- Dim allow As Boolean = True
- Event RequestReceived(eq As String)
- Public Sub Request()
- listener = New HttpListener()
- listener.Prefixes.Add("Http://*:" & _port & "/" & _name & "/")
- listener.Start()
- Do While allow
- Try
- Dim context As HttpListenerContext = listener.GetContext
- Dim response As HttpListenerResponse = context.Response
- If Not String.IsNullOrEmpty(context.Request.RawUrl) Then
- Dim responseHtmlBytes As Byte()
- _caller.Invoke(Sub() RaiseEvent RequestReceived(context.Request.Url.Segments(context.Request.Url.Segments.Count - 1)))
- responseHtmlBytes = _bytes
- Dim stream As IO.Stream = response.OutputStream
- stream.Write(responseHtmlBytes, 0, responseHtmlBytes.Length)
- stream.Close()
- End If
- Catch ex As Exception
- End Try
- Loop
- End Sub
- End Class
VB.NET-Quellcode
- Public Function ConvertImageToBase64(ByVal img As Image) As String
- Dim b64 As String
- Using MS As New MemoryStream
- img.Save(MS, Imaging.ImageFormat.Jpeg)
- b64 = Convert.ToBase64String(MS.ToArray)
- End Using
- Return b64
- End Function
- Public Function ConvertBase64ToImage(ByVal base64string As String) As Image
- Dim img As Image
- Using MS As New MemoryStream(Convert.FromBase64String(base64string))
- img = Image.FromStream(MS)
- End Using
- Return img
- End Function
VB.NET-Quellcode
- Public Function GetFilesRecursive(ByVal initial As String) As List(Of String)
- Dim result As New List(Of String)
- Dim stack As New Stack(Of String)
- stack.Push(initial)
- Do While (stack.Count > 0)
- Dim dir As String = stack.Pop
- Try
- result.AddRange(Directory.GetFiles(dir, "*.*"))
- Dim directoryName As String
- For Each directoryName In Directory.GetDirectories(dir)
- stack.Push(directoryName)
- Next
- Catch ex As Exception
- End Try
- Loop
- Return result
- End Function
VB.NET-Quellcode
- Public Function FindSeries(ByVal title As String) As ShortSeries
- Try
- Dim Movie As XElement = XDocument.Load("http://www.omdbapi.com/?t=" & title & "&r=xml&type=series").Descendants("movie")(0)
- Dim t As String = Movie.Attribute("title").Value
- Dim desc As String = Movie.Attribute("plot").Value
- Dim img As String = Movie.Attribute("poster").Value
- Dim ssr As New ShortSeries(t, desc, img)
- Return ssr
- Catch ex As Exception
- Return Nothing
- End Try
- End Function
- Public Function FindMovie(ByVal title As String) As ShortMovie
- Try
- Dim Movie As XElement = XDocument.Load("http://www.omdbapi.com/?t=" & title & "&r=xml&type=movie").Descendants("movie")(0)
- Dim t As String = Movie.Attribute("title").Value
- Dim desc As String = Movie.Attribute("plot").Value
- Dim img As String = Movie.Attribute("poster").Value
- Dim sm As New ShortMovie(t, desc, img)
- Return sm
- Catch ex As Exception
- Return Nothing
- End Try
- End Function
- Public Class ShortSeries
- Dim _title As String
- Dim _desc As String
- Dim _img As String
- Sub New(ByVal title As String, ByVal description As String, ByVal image As String)
- _title = title
- _desc = description
- _img = image
- End Sub
- Public ReadOnly Property Title As String
- Get
- Return _title
- End Get
- End Property
- Public ReadOnly Property Description As String
- Get
- Return _desc
- End Get
- End Property
- Public ReadOnly Property Image As String
- Get
- Return _img
- End Get
- End Property
- End Class
- Public Class ShortMovie
- Dim _title As String
- Dim _desc As String
- Dim _img As String
- Sub New(ByVal title As String, ByVal description As String, ByVal image As String)
- _title = title
- _desc = description
- _img = image
- End Sub
- Public ReadOnly Property Title As String
- Get
- Return _title
- End Get
- End Property
- Public ReadOnly Property Description As String
- Get
- Return _desc
- End Get
- End Property
- Public ReadOnly Property Image As String
- Get
- Return _img
- End Get
- End Property
- End Class
VB.NET-Quellcode
- Public Settings As New Settings
- Sub New()
- If File.Exists(Path.Combine(Application.StartupPath, "Settings\Settings.CONFIG")) Then Settings = ReadSettings() Else Save()
- End Sub
- Public Function ReadSettings() As Settings
- Dim settings As New Settings
- Using objStreamReader As New StreamReader(Path.Combine(Application.StartupPath, "Settings\Settings.CONFIG"))
- Dim x As New XmlSerializer(settings.GetType)
- settings = CType(x.Deserialize(objStreamReader), Settings)
- End Using
- Return settings
- End Function
- Public Sub Save()
- Dim path As String = IO.Path.Combine(Application.StartupPath, "Settings\Settings.CONFIG")
- Using objStreamWriter As New StreamWriter(path)
- Dim x As New XmlSerializer(Settings.GetType)
- x.Serialize(objStreamWriter, Settings)
- End Using
- End Sub
- Die Klasse "Settings" besteht ausschließlich aus Properties und besitzt keinen Konstruktor.
Verwendete Programmiersprache(n) und IDE(s):
Visual Basic .NET / IDE VS 2015 Community
Systemanforderungen:
Framework 4 oder höher (wegen HTTP-Server)
Systemveränderungen:
Beim Erstellen einer Regel in der Firewall.
Download:
Lune.zip (Version 3.0.0.1) (komprimiert ~ 1,6 MB, unkomprimiert ~ 26,3 MB)
Lizenz/Weitergabe:
Freeware, OpenSource (auf Anfrage werden Sachen wie Controls und andere Funktionen hier freigegeben)
Rechtliches:
StreamCloud an sich ist legal, es ist nur ein Dienst zum Videos teilen, wie z.B. Amazon CloudFront,
dennoch ist dort auch illegales Material vorhanden. Welche Inhalte Nutzer letztendlich in das Programm eingeben ist ihnen überlassen.
Die Inhalte werden nicht herunter geladen, lediglich in den Cache, es handelt sich also um Streaming.
Dieser Beitrag wurde bereits 81 mal editiert, zuletzt von „xd-franky-5“ ()