Ticket #675: StyledEditFileChecker.2.diff

File StyledEditFileChecker.2.diff, 2.6 KB (added by boolaiku@…, 18 years ago)

check the type of the file

  • src/apps/stylededit/StyledEditApp.cpp

     
    1616#include <CharacterSetRoster.h>
    1717#include <Screen.h>
    1818#include <stdio.h>
     19#include <NodeInfo.h>
    1920
    2021#include "Constants.h"
    2122#include "StyledEditApp.h"
     
    165166    fWindowCount++;
    166167}
    167168
     169bool StyledEditApp::CheckMimeType(entry_ref* ref)
     170{
     171    BEntry entry(ref, true); // traverse an eventual link
     172    if (entry.InitCheck() != B_OK)
     173        return false;
    168174
     175    if (entry.IsDirectory())
     176        return false;
     177
     178    BNode fileNode(&entry);
     179    if (fileNode.InitCheck() != B_OK)
     180        return false;
     181   
     182    BNodeInfo nodeInfo(&fileNode);
     183    char fileTypeStr[256];
     184    nodeInfo.GetType(fileTypeStr);
     185   
     186    BMimeType fileType(fileTypeStr);
     187
     188    // Check for malformed or inexistant mime type
     189    if (!fileType.IsValid()){
     190        char fileName[B_FILE_NAME_LENGTH];
     191        entry.GetName(fileName);           
     192        BString alertText;         
     193        alertText << "Sorry! Can't open \"" << fileName << "\"!\nStyledEdit can't determine the type of the file!";
     194        BAlert* alert = new BAlert("StyledEdit Load Failed", alertText.String(), "Ok", 0, 0, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_STOP_ALERT);
     195        alert->SetShortcut(0, B_ESCAPE);
     196        alert->Go();
     197        return false;
     198    }
     199
     200    BMimeType desiredSuperType("text");
     201       
     202    if (desiredSuperType.Contains(&fileType)) {
     203        return true;
     204    } else {           
     205        char fileName[B_FILE_NAME_LENGTH];
     206        entry.GetName(fileName);       
     207        BString alertText;         
     208        alertText << "Sorry! Can't open \"" << fileName << "\"!\nStyledEdit can't load files of type \"" << fileTypeStr << "\"!";
     209        BAlert* alert = new BAlert("StyledEdit Load Failed", alertText.String(), "Ok", 0, 0, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_STOP_ALERT);
     210        alert->SetShortcut(0, B_ESCAPE);
     211        alert->Go();           
     212        return false;   
     213    }
     214}
     215
    169216void
    170217StyledEditApp::OpenDocument(entry_ref* ref)
    171218{
    172     cascade();
    173     new StyledEditWindow(gWindowRect, ref, fOpenAsEncoding);
    174     fWindowCount++;
     219    if (CheckMimeType(ref)){
     220        cascade();
     221        new StyledEditWindow(gWindowRect, ref, fOpenAsEncoding);
     222        fWindowCount++;
     223    }
    175224}
    176225
    177226
  • src/apps/stylededit/StyledEditApp.h

     
    3131                void    OpenDocument();
    3232                void    OpenDocument(entry_ref * ref);
    3333                void    CloseDocument();
     34                bool    CheckMimeType(entry_ref* ref);
    3435
    3536    private:
    3637        BFilePanel*     fOpenPanel;