VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "CContentDisposition"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
'programmed by ShareVB
'gestion de la ligne Content-Disposition:

Option Explicit
Option Compare Text

'variables locales de stockage des valeurs de propriétés
Private mvarCDType As String 'copie locale
Private mvarFileName As String 'copie locale

'==================================================
'propriétés
'==================================================

'définit ou renvoie le nom de fichier (sans chemin) de la pièce jointe (attachment)
Public Property Let FileName(ByVal vData As String)
Attribute FileName.VB_HelpID = 249
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.filename = 5
    mvarFileName = vData
End Property
Public Property Get FileName() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.filename
    FileName = mvarFileName
End Property

'définit ou renvoie le type de la pièce jointe : attachment (pièce jointe) ou inline (dans le message)
Public Property Let CDType(ByVal vData As String)
Attribute CDType.VB_HelpID = 247
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.CDType = 5
    mvarCDType = vData
End Property
Public Property Get CDType() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.CDType
    CDType = mvarCDType
End Property

'==================================================
'méthodes publiques
'==================================================

'analyse un champ Content-Disposition et remplit les propriétés de l'objet
Public Sub Parse(ByVal szContentDispo As String)
Dim possc As Long, posfilename As Long, posfin As Long

possc = InStr(szContentDispo, ";")
If possc > 0 Then
    mvarCDType = Trim$(Mid$(szContentDispo, 1, possc - 1))
    
    posfilename = InStr(szContentDispo, "filename=""")
    If posfilename > 0 Then
        posfin = InStr(posfilename + 10, szContentDispo, """")
        mvarFileName = Trim$(Mid$(szContentDispo, posfilename + 10, posfin - posfilename - 10))
    Else
        posfilename = InStr(szContentDispo, "filename=")
        If posfilename > 0 Then
            posfin = InStr(posfilename + 9, szContentDispo, " ")
            If posfin = 0 Then
                mvarFileName = Trim$(Mid$(szContentDispo, posfilename + 9))
            Else
                mvarFileName = Trim$(Mid$(szContentDispo, posfilename + 9, posfin - posfilename - 9))
            End If
        End If
    End If
Else
    mvarCDType = Trim$(szContentDispo)
End If
End Sub

Private Function ReduceFilename(ByVal strFileName As String) As String
Dim strName As String, strExt As String, cbLen As Long

If Len(strFileName) > 50 Then
    If InStrRev(strFileName, ".") Then
        strExt = Mid$(strFileName, InStrRev(strFileName, ".") + 1)
        strName = Mid$(strFileName, 1, InStrRev(strFileName, ".") - 1)
        cbLen = 50 - Len(strExt) - 1
        If Len(strName) > cbLen Then
            ReduceFilename = Mid$(strName, 1, cbLen) & "." & strExt
        Else
            ReduceFilename = strFileName
        End If
    Else
        ReduceFilename = strFileName
    End If
Else
    ReduceFilename = strFileName
End If
End Function

'fabrique un champ Content-Disposition à partir des propriétés de l'objet
Public Function Make() As String
Select Case mvarCDType
    Case "inline"
        Make = "Content-Disposition: inline"
    Case "attachment"
        If Len(mvarFileName) Then
            Make = "Content-Disposition: attachment;" & vbCrLf & vbTab & "filename=""" & ReduceFilename(mvarFileName) & """"
        Else
            Make = "Content-Disposition: attachment"
        End If
End Select
End Function
