home *** CD-ROM | disk | FTP | other *** search
- ////////////////////////////////////////////////////////////////////////////
- // NEXTTOYOU-Patch-Version; verändert von uli@nexttoyou.de
- ////////////////////////////////////////////////////////////////////////////
-
- // Dieser Patch sorgt dafür, daß Alexandra Mail-TIFFs mit Namen des Formats
- // name@host.domain.de
- // auswertet und in der Datei
- // /LocalLibrary/Images/People/aliases
- // gegebenenfalls nach Aliases für die Adresse sucht
- //
- // Die Originaldatei im Alexandra-Quellcode (Version 0.82) einfach gegen
- // diese Datei ersetzen und mit dem ProjectBuilder neu kompilieren.
-
-
-
- #import "FaceView.h"
- #import <c.h>
- #import <ctype.h>
-
- @implementation FaceView
-
- //-----------------------------------------------------------------------
- // PRIVATE METHODS
- //-----------------------------------------------------------------------
-
- // In Ermangelung der passenden RFC eine einfache Heuristik. Vom '@' ausgehend
- // wird der Anfang und das Ende des Logins gesucht.
- // Fuer eine "richtige" Loesung: Was gibt's fuer Formate?
- // 1) login
- // 2) login (real name)
- // 3) "real name" <login>
- // 4) real name <login>
- // ...
-
- #define islogin(c) (isalnum(c) || (c)=='.' || (c)=='_' || (c)=='%' || (c)=='-')
-
- - (char *)loginForName:(const char *)userName;
- {
- char login[300],*at,*p;
- int n;
-
- at=strchr(userName,'@');
- if(at)
- {
- n=1;
- for(p=at+1;islogin(*p);p++)
- n++;
- for(p=at-1;p>=userName && islogin(*p);p--)
- n++;
- strncpy(login,p+1,MIN(n,300));
- login[MIN(n,300)]='\0';
-
- //////////////////////////////////////////////////////////////////////////////
- // NEXTTOYOU-Patch-Version: Konversionsroutinen deaktiviert, so daß der Name
- // für das Mail-TIFF wie bei Mail.app exakt in der Form der Internet-Adresse
- // gesucht wird
- //////////////////////////////////////////////////////////////////////////////
- // for(p=login;*p;p++)
- // if(*p=='!' || *p=='@')
- // *p='.';
- // else
- // *p=NXToLower(*p);
- at=NXCopyStringBufferFromZone(login,[self zone]);
- }
- return at;
- }
-
-
- // NewsGrazer Methode. Mail ist cleverer und sieht noch in der Aliases-Datei nach
- // und testet auf lokalen Benutzer...
- //////////////////////////////////////////////////////////////////////////////
- // NEXTTOYOU-Patch-Version: Aliases-Datei wird ausgewertet; lokale Benutzer
- // müssen nicht ausgewertet werden, da PersonalINN stets volllständige
- // Adressen generiert
- //////////////////////////////////////////////////////////////////////////////
-
-
- - (char *)filenameForLogin:(const char *)login
- {
- char buf[MAXPATHLEN+1];
-
- //////////////////////////////////////////////////////////////////////////////
- // NEXTTOYOU-Patch-Version: zusätzliche Variablen-Deklarationen
- //////////////////////////////////////////////////////////////////////////////
- char alias[2*(MAXPATHLEN+2)];
- char *al;
- char aliasbuf[MAXPATHLEN+2];
- char *ab;
- FILE *aliases;
- FILE *test;
- //////////////////////////////////////////////////////////////////////////////
-
- sprintf(buf,"/LocalLibrary/Images/People/%s.tiff",login);
-
- //////////////////////////////////////////////////////////////////////////////
- // NEXTTOYOU-Patch-Version:
- // Gibt es diese Datei?
- // Falls nein, ist der Name in der Aliases-Datei enthalten?
- //////////////////////////////////////////////////////////////////////////////
- if((test=fopen(buf,"r"))==NULL)
- {
- aliases=fopen("/LocalLibrary/Images/People/aliases","r");
- if(aliases==NULL) return NXCopyStringBufferFromZone(buf,[self zone]);
- strcpy(aliasbuf,login);
- strcat(aliasbuf,":");
- do
- {
- al=fgets(alias,2*(MAXPATHLEN+2),aliases);
- if(strstr(alias,aliasbuf)!=NULL && alias[0]!='#')
- {
- strcpy(aliasbuf,strchr(alias,':')+1);
- ab=strtok(aliasbuf," ,\n");
- fclose(aliases);
- sprintf(buf,"/LocalLibrary/Images/People/%s.tiff",ab);
- return NXCopyStringBufferFromZone(buf,[self zone]);
- }
- }
- while(al==alias);
- fclose(aliases);
- }
- else fclose(test);
- //////////////////////////////////////////////////////////////////////////////
-
- return NXCopyStringBufferFromZone(buf,[self zone]);
- }
-
-
- //-----------------------------------------------------------------------
- // INSTANCE VAR
- //-----------------------------------------------------------------------
-
- - setImage:(NXImage *)anImage;
- {
- myImage=anImage;
- return self;
- }
-
-
- - (NXImage *)image;
- {
- return myImage;
- }
-
-
- //-----------------------------------------------------------------------
- // SET IMAGE FROM LOGIN NAME
- //-----------------------------------------------------------------------
- - (BOOL)showFaceForName:(const char *)name;
- {
- NXImage *image=nil;
- char *imageFile,*login;
-
- if(name && (login=[self loginForName:name])!=NULL)
- {
- image=[NXImage findImageNamed:login];
- if(!image)
- {
- imageFile=[self filenameForLogin:login];
- image=[[NXImage allocFromZone:[self zone]] initFromFile:imageFile];
- NXZoneFree([self zone],imageFile);
- if(image && [image lockFocus])
- {
- NXSize size, newsize={64,64};
-
- [image unlockFocus];
- // [TRH] Don't scale image if it isn't necessary,
- // and keep size/width proportions intact if it is.
- [image getSize:&size];
- if (size.height > newsize.height || size.width > newsize.width)
- {
- if (size.height > size.width)
- newsize.width=newsize.width*size.width/size.height;
- else if (size.height < size.width)
- newsize.height = newsize.height*size.height/size.width;
- [image setScalable:YES];
- [image setSize:&newsize];
- }
- [image setName:login];
- }
- else
- image=[image free];
- }
- NXZoneFree([self zone],login);
- }
- [self setImage:image];
- [self display];
- return image? TRUE : FALSE;
- }
-
-
- //-----------------------------------------------------------------------
- // DRAWING
- //-----------------------------------------------------------------------
-
- - drawSelf:(const NXRect *)rects :(int)rectCount
- {
- [super drawSelf:rects:rectCount];
- PSsetgray(NX_LTGRAY);
- NXRectFill(&bounds);
- if(myImage)
- {
- NXRect frects[5];
- float fgrays[5]={NX_DKGRAY,NX_DKGRAY,NX_DKGRAY,NX_BLACK,NX_BLACK};
- NXPoint imgorigin={1,2};
- NXSize size;
-
- // [TRH] Shrinkwrap rects around image.
- [myImage getSize:&size];
- NXSetRect(&frects[0],3,0,size.width+1,size.height+1);
- NXSetRect(&frects[1],0,1,1,size.height+2);
- NXSetRect(&frects[2],0,size.height+2,size.width+2,1);
- NXSetRect(&frects[3],0,1,size.width+1,1);
- NXSetRect(&frects[4],size.width+1,1,1,size.height+2);
- NXRectFillListWithGrays(frects,fgrays,5);
- [myImage composite:NX_SOVER toPoint:&imgorigin];
-
- }
- else
- {
- NXPoint imgorigin={0,2};
- [[NXImage findImageNamed:"of"] composite:NX_SOVER toPoint:&imgorigin];
- }
- return self;
- }
-
-
- //-----------------------------------------------------------------------
- // THAT'S IT
- //-----------------------------------------------------------------------
-
- @end
-