1 // Copyright 2009 The Archiveopteryx Developers <info@aox.org> 2 3 #include "scope.h" 4 #include "estring.h" 5 #include "migrator.h" 6 #include "allocator.h" 7 #include "configuration.h" 8 #include "logclient.h" 9 #include "eventloop.h" 10 #include "database.h" 11 #include "mailbox.h" 12 #include "entropy.h" 13 #include "flag.h" 14 #include "log.h" 15 #include "utf.h" 16 17 #include <stdio.h> 18 #include <stdlib.h> 19 20 main(int ac,char ** av)21int main( int ac, char ** av ) 22 { 23 Scope global; 24 bool bad = false; 25 26 if ( ac < 3 ) 27 bad = true; 28 29 Configuration::setup( "archiveopteryx.conf" ); 30 31 EventLoop::setup(); 32 Log * l = new Log; 33 Allocator::addEternal( l, "aoximport log" ); 34 global.setLog( l ); 35 LogClient::setup( "aoximport" ); 36 37 Configuration::report(); 38 39 int i = 1; 40 while( i < ac && *av[i] == '-' ) { 41 uint j = 1; 42 while ( av[i][j] ) { 43 switch( av[i][j] ) { 44 case 'v': 45 Migrator::setVerbosity( Migrator::verbosity() + 1 ); 46 break; 47 case 'q': 48 Migrator::setVerbosity( 0 ); 49 break; 50 case 'e': 51 Migrator::setErrorCopies( true ); 52 break; 53 default: 54 bad = true; 55 break; 56 } 57 j++; 58 } 59 i++; 60 } 61 62 EString destination; 63 if ( i < ac ) 64 destination = av[i++]; 65 EString mode; 66 if ( i < ac ) 67 mode = av[i++]; 68 mode = mode.lower(); 69 Migrator * m = 0; 70 if ( mode == "mbox" ) 71 m = new Migrator( Migrator::Mbox ); 72 else if ( mode == "mh" ) 73 m = new Migrator( Migrator::Mh ); 74 else if ( mode == "cyrus" ) 75 m = new Migrator( Migrator::Cyrus ); 76 else if ( mode == "maildir" ) 77 m = new Migrator( Migrator::Maildir ); 78 else 79 bad = true; 80 if ( m ) { 81 Allocator::addEternal( m, "migrator" ); 82 Utf8Codec c; 83 m->setDestination( c.toUnicode( destination ) ); 84 while ( i < ac ) 85 m->addSource( av[i++] ); 86 } 87 88 if ( bad ) { 89 fprintf( stderr, 90 "Usage: %s [-vq] " 91 "<mailbox> <type> <source [, source ...]>\n" 92 "See aoximport(8) for details.\n", av[0] ); 93 exit( -1 ); 94 } 95 96 Entropy::setup(); 97 Database::setup(); 98 Mailbox::setup( m ); 99 100 Flag::setup(); 101 102 uint limit = Configuration::scalar( Configuration::MemoryLimit ); 103 if ( !limit ) 104 limit = 128; 105 EventLoop::global()->setMemoryUsage( 1024 * 1024 * limit ); 106 107 EventLoop::global()->start(); 108 109 return Log::disastersYet() ? 1 : 0; 110 } 111