}
sub new {
- my ($class) = @_;
- my $dbname = PublicInbox::Config->config_dir() . "/imap.sqlite3";
+ my ($class, $dbname) = @_;
+
+ # original name for compatibility with old setups:
+ $dbname //= PublicInbox::Config->config_dir() . "/imap.sqlite3";
+
+ # use the new XDG-compliant name for new setups:
+ if (!-f $dbname) {
+ $dbname = ($ENV{XDG_DATA_HOME} //
+ (($ENV{HOME} // '/nonexistent').'/.local/share')) .
+ '/public-inbox/imap.sqlite3';
+ }
+ if (!-f $dbname) {
+ require File::Path;
+ require File::Basename;;
+ File::Path::mkpath(File::Basename::dirname($dbname));
+ }
+
my $dbh = dbh_new($dbname);
bless { dbname => $dbname, dbh => $dbh }, $class;
}