You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
77 lines
2.2 KiB
// Copyright (c) 2022 Proton Technologies AG |
|
// |
|
// This file is part of ProtonMail Bridge. |
|
// |
|
// ProtonMail Bridge is free software: you can redistribute it and/or modify |
|
// it under the terms of the GNU General Public License as published by |
|
// the Free Software Foundation, either version 3 of the License, or |
|
// (at your option) any later version. |
|
// |
|
// ProtonMail Bridge is distributed in the hope that it will be useful, |
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
// GNU General Public License for more details. |
|
// |
|
// You should have received a copy of the GNU General Public License |
|
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>. |
|
|
|
package bridge |
|
|
|
import ( |
|
"fmt" |
|
"path/filepath" |
|
|
|
"github.com/ljanyst/peroxide/pkg/listener" |
|
"github.com/ljanyst/peroxide/pkg/message" |
|
"github.com/ljanyst/peroxide/pkg/store" |
|
"github.com/ljanyst/peroxide/pkg/store/cache" |
|
) |
|
|
|
type StoreFactory struct { |
|
cacheProvider CacheProvider |
|
eventListener listener.Listener |
|
events *store.Events |
|
cache cache.Cache |
|
builder *message.Builder |
|
} |
|
|
|
func NewStoreFactory( |
|
cacheProvider CacheProvider, |
|
eventListener listener.Listener, |
|
cache cache.Cache, |
|
builder *message.Builder, |
|
) *StoreFactory { |
|
return &StoreFactory{ |
|
cacheProvider: cacheProvider, |
|
eventListener: eventListener, |
|
events: store.NewEvents(cacheProvider.GetIMAPCachePath()), |
|
cache: cache, |
|
builder: builder, |
|
} |
|
} |
|
|
|
// New creates new store for given user. |
|
func (f *StoreFactory) New(user store.BridgeUser) (*store.Store, error) { |
|
return store.New( |
|
user, |
|
f.eventListener, |
|
f.cache, |
|
f.builder, |
|
getUserStorePath(f.cacheProvider.GetDBDir(), user.ID()), |
|
f.events, |
|
) |
|
} |
|
|
|
// Remove removes all store files for given user. |
|
func (f *StoreFactory) Remove(userID string) error { |
|
return store.RemoveStore( |
|
f.events, |
|
getUserStorePath(f.cacheProvider.GetDBDir(), userID), |
|
userID, |
|
) |
|
} |
|
|
|
// getUserStorePath returns the file path of the store database for the given userID. |
|
func getUserStorePath(storeDir string, userID string) (path string) { |
|
return filepath.Join(storeDir, fmt.Sprintf("mailbox-%v.db", userID)) |
|
}
|
|
|