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