216 lines
8.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
namespace gehGassi.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Dateien als share ermöglicht.
/// Alle Ordner und Dateinamen sind relativ anzugeben.
/// z.B. test/Ordner1/order2
/// z.B. test/Ordner1/test.png
/// </summary>
public interface IFileShareService
{
/// <summary>
/// Auflisten der Ordner in einem Ordner
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>Liste der Ordner im Share</returns>
List<FolderResult> ListFolders(string shareName, string folder);
/// <summary>
/// Gibt Informationen über einen Ordner zurück
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>Ordner oder null</returns>
FolderResult GetFolderInfo(string shareName, string folder);
/// <summary>
/// Auflisten der Dateien in einem Ordner
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>Liste der Dateien im Ordner</returns>
List<FileResult> ListFiles(string shareName, string folder);
/// <summary>
/// Gibt Informationen über eine Datei zurück
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname relativ</param>
/// <returns>FileInfo oder null</returns>
FileResult GetFileInfo(string shareName, string fileName);
/// <summary>
/// Auflisten der Dateien und Ordner in einem Ordner
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>Liste Dateien und Liste Ordner</returns>
(List<FileResult>, List<FolderResult>) ListFilesAndFolders(string shareName, string folder);
/// <summary>
/// Anlegen eines Ordners.
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="newfolderName">Neuer Ordner</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool CreateFolder(string shareName, string newfolderName);
/// <summary>
/// Speichern einer Datei
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname mit Ordnern relativ</param>
/// <param name="file">Datei</param>
/// <param name="overwrite">true wenn überschrieben werden soll, false sonst</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool Store(string shareName, string fileName, byte[] file, bool overwrite = false);
/// <summary>
/// Holt eine Datei
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname mit Ordnern relativ</param>
/// <returns>Datei oder null, wenn nicht gefunden</returns>
byte[] Get(string shareName, string fileName);
/// <summary>
/// Holt eine Datei als Stream
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname mit Ordnern relativ</param>
/// <returns>Stream oder null, wenn nicht gefunden</returns>
Stream GetStream(string shareName, string fileName);
/// <summary>
/// Holt eine Datei als Stream
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname mit Ordnern relativ</param>
/// <param name="start">Wo soll gestartet werden</param>
/// <param name="end">Ende</param>
/// <returns>Stream oder null, wenn nicht gefunden</returns>
Stream GetStream(string shareName, string fileName, long start, long end);
/// <summary>
/// Umbenennen einer Datei
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Aktueller Dateiname</param>
/// <param name="newFileName">Neuer Dateiname</param>
/// <param name="copy">Soll eine Kopie gemacht werden? Wenn nicht wird die Quelldatei gelöscht</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool RenameFile(string shareName, string fileName, string newFileName, bool copy);
/// <summary>
/// Umbenennen eines Ordners
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Aktueller Ordnername</param>
/// <param name="newFolder">Neuer Ordnername</param>
/// <param name="copy">Soll eine Kopie gemacht werden? Wenn nicht wird der QuellOrdner gelöscht</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool RenameFolder(string shareName, string folder, string newFolder, bool copy);
/// <summary>
/// Umbenennen eines Ordners - Ohne TransferManager
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Aktueller Ordnername</param>
/// <param name="newFolder">Neuer Ordnername</param>
/// <param name="copy">Soll eine Kopie gemacht werden? Wenn nicht wird der QuellOrdner gelöscht</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool RenameFolderEx(string shareName, string folder, string newFolder, bool copy);
/// <summary>
/// Löschen einer Datei
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="fileName">Dateiname mit Ordnern relativ</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool DeleteFile(string shareName, string fileName);
/// <summary>
/// Löschen eines Ordners
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool DeleteFolder(string shareName, string folder);
/// <summary>
/// Löschen eines Shares
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
bool DeleteShare(string shareName);
/// <summary>
/// Gibt die größe des Ordners (Dateien) als byte zurück
/// </summary>
/// <param name="shareName">Name des Shares</param>
/// <param name="folder">Ordner</param>
/// <returns>Liste der Ordner im Share</returns>
long GetFolderSize(string shareName, string folder);
}
/// <summary>
/// Repräsentiert einen Ordner mit Infos
/// </summary>
[ExcludeFromCodeCoverage]
public class FolderResult
{
/// <summary>
/// Name
/// </summary>
public string Name { get; set; }
/// <summary>
/// Datum letzte Bearbeitung
/// </summary>
public DateTimeOffset? LastModified { get; set; }
/// <summary>
/// Datum Erstellung
/// </summary>
public DateTimeOffset? Created { get; set; }
/// <summary>
/// Hat Unterordner?
/// </summary>
public bool HasSubfolders { get; set; }
}
/// <summary>
/// Repräsentiert eine Datei mit Info
/// </summary>
[ExcludeFromCodeCoverage]
public class FileResult
{
/// <summary>
/// Name der Datei
/// </summary>
public string Name { get; set; }
/// <summary>
/// Datum letzte Bearbeitung
/// </summary>
public DateTimeOffset? LastModified { get; set; }
/// <summary>
/// Datum Erstellung
/// </summary>
public DateTimeOffset? Created { get; set; }
/// <summary>
/// größe der Datei
/// </summary>
public long Size { get; set; }
}
}