diff --git a/internal/frontend/cli-ie/importexport.go b/internal/frontend/cli-ie/importexport.go index d0f324a2..3463c4c0 100644 --- a/internal/frontend/cli-ie/importexport.go +++ b/internal/frontend/cli-ie/importexport.go @@ -38,7 +38,7 @@ func (f *frontendCLI) importLocalMessages(c *ishell.Context) { return } - t, err := f.ie.GetLocalImporter(user.GetPrimaryAddress(), path) + t, err := f.ie.GetLocalImporter(user.Username(), user.GetPrimaryAddress(), path) f.transfer(t, err, false, true) } @@ -68,7 +68,7 @@ func (f *frontendCLI) importRemoteMessages(c *ishell.Context) { return } - t, err := f.ie.GetRemoteImporter(user.GetPrimaryAddress(), username, password, host, port) + t, err := f.ie.GetRemoteImporter(user.Username(), user.GetPrimaryAddress(), username, password, host, port) f.transfer(t, err, false, true) } @@ -81,7 +81,7 @@ func (f *frontendCLI) exportMessagesToEML(c *ishell.Context) { return } - t, err := f.ie.GetEMLExporter(user.GetPrimaryAddress(), path) + t, err := f.ie.GetEMLExporter(user.Username(), user.GetPrimaryAddress(), path) f.transfer(t, err, true, false) } @@ -94,7 +94,7 @@ func (f *frontendCLI) exportMessagesToMBOX(c *ishell.Context) { return } - t, err := f.ie.GetMBOXExporter(user.GetPrimaryAddress(), path) + t, err := f.ie.GetMBOXExporter(user.Username(), user.GetPrimaryAddress(), path) f.transfer(t, err, true, false) } diff --git a/internal/frontend/qml/ImportExportUI/AccountDelegate.qml b/internal/frontend/qml/ImportExportUI/AccountDelegate.qml index c4d0598e..25dcca75 100644 --- a/internal/frontend/qml/ImportExportUI/AccountDelegate.qml +++ b/internal/frontend/qml/ImportExportUI/AccountDelegate.qml @@ -165,6 +165,7 @@ Column { textColor : Style.main.textBlue onClicked: { dialogExport.currentIndex = 0 + dialogExport.account = account dialogExport.address = account dialogExport.show() } @@ -321,6 +322,7 @@ Column { textBold: true textColor: Style.main.textBlue onClicked: { + dialogExport.account = account dialogExport.address = listalias[index] dialogExport.show() } @@ -339,6 +341,7 @@ Column { textBold: true textColor: enabled ? Style.main.textBlue : Style.main.textDisabled onClicked: { + dialogImport.account = account dialogImport.address = listalias[index] dialogImport.show() } diff --git a/internal/frontend/qml/ImportExportUI/DialogExport.qml b/internal/frontend/qml/ImportExportUI/DialogExport.qml index dfb69131..cf457245 100644 --- a/internal/frontend/qml/ImportExportUI/DialogExport.qml +++ b/internal/frontend/qml/ImportExportUI/DialogExport.qml @@ -35,6 +35,7 @@ Dialog { title : set_title() + property string account property string address property alias finish: finish @@ -428,7 +429,7 @@ Dialog { onTriggered : { switch (currentIndex) { case 0: - go.loadStructureForExport(root.address) + go.loadStructureForExport(root.account, root.address) sourceFoldersInput.hasItems = (transferRules.rowCount() > 0) break case 2: diff --git a/internal/frontend/qml/ImportExportUI/DialogImport.qml b/internal/frontend/qml/ImportExportUI/DialogImport.qml index d8dda071..92b3a0b1 100644 --- a/internal/frontend/qml/ImportExportUI/DialogImport.qml +++ b/internal/frontend/qml/ImportExportUI/DialogImport.qml @@ -34,6 +34,7 @@ Dialog { isDialogBusy: currentIndex==3 || currentIndex==4 + property string account property string address property string inputPath : "" property bool isFromFile : inputEmail.text == "" && root.inputPath != "" @@ -1032,6 +1033,7 @@ Dialog { root.isFromIMAP, root.inputPath, inputEmail.text, inputPassword.text, inputServer.text, inputPort.text, + root.account, root.address ) break diff --git a/internal/frontend/qt-ie/export.go b/internal/frontend/qt-ie/export.go index ba2ec17c..a91b3ea3 100644 --- a/internal/frontend/qt-ie/export.go +++ b/internal/frontend/qt-ie/export.go @@ -29,7 +29,7 @@ const ( TypeMBOX = "MBOX" ) -func (f *FrontendQt) LoadStructureForExport(addressOrID string) { +func (f *FrontendQt) LoadStructureForExport(username, addressOrID string) { errCode := errUnknownError var err error defer func() { @@ -41,7 +41,7 @@ func (f *FrontendQt) LoadStructureForExport(addressOrID string) { } }() - if f.transfer, err = f.ie.GetEMLExporter(addressOrID, ""); err != nil { + if f.transfer, err = f.ie.GetEMLExporter(username, addressOrID, ""); err != nil { // The only error can be problem to load PM user and address. errCode = errPMLoadFailed return diff --git a/internal/frontend/qt-ie/import.go b/internal/frontend/qt-ie/import.go index e72d38bb..c36b376e 100644 --- a/internal/frontend/qt-ie/import.go +++ b/internal/frontend/qt-ie/import.go @@ -26,7 +26,7 @@ import ( ) // wrapper for QML -func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServer, sourcePort, targetAddress string) { +func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServer, sourcePort, targetUsername, targetAddress string) { errCode := errUnknownError var err error defer func() { @@ -39,7 +39,7 @@ func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEm }() if isFromIMAP { - f.transfer, err = f.ie.GetRemoteImporter(targetAddress, sourceEmail, sourcePassword, sourceServer, sourcePort) + f.transfer, err = f.ie.GetRemoteImporter(targetUsername, targetAddress, sourceEmail, sourcePassword, sourceServer, sourcePort) if err != nil { switch { case errors.Is(err, &transfer.ErrIMAPConnection{}): @@ -54,7 +54,7 @@ func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEm return } } else { - f.transfer, err = f.ie.GetLocalImporter(targetAddress, sourcePath) + f.transfer, err = f.ie.GetLocalImporter(targetUsername, targetAddress, sourcePath) if err != nil { // The only error can be problem to load PM user and address. errCode = errPMLoadFailed diff --git a/internal/frontend/qt-ie/ui.go b/internal/frontend/qt-ie/ui.go index 52903e67..edb4f870 100644 --- a/internal/frontend/qt-ie/ui.go +++ b/internal/frontend/qt-ie/ui.go @@ -77,8 +77,8 @@ type GoQMLInterface struct { _ string `property:"credentialsNotRemoved"` _ string `property:"versionCheckFailed"` // - _ func(isAvailable bool) `signal:"setConnectionStatus"` - _ func() `slot:"checkInternet"` + _ func(isAvailable bool) `signal:"setConnectionStatus"` + _ func() `slot:"checkInternet"` _ func() `slot:"setToRestart"` @@ -108,14 +108,14 @@ type GoQMLInterface struct { _ func(description, client, address string) bool `slot:"sendBug"` _ func(address string) bool `slot:"sendImportReport"` - _ func(address string) `slot:"loadStructureForExport"` + _ func(username, address string) `slot:"loadStructureForExport"` _ func() string `slot:"leastUsedColor"` _ func(username string, name string, color string, isLabel bool, sourceID string) bool `slot:"createLabelOrFolder"` _ func(fpath, address, fileType string, attachEncryptedBody bool) `slot:"startExport"` _ func(email string, importEncrypted bool) `slot:"startImport"` _ func() `slot:"resetSource"` - _ func(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServe, sourcePort, targetAddress string) `slot:"setupAndLoadForImport"` + _ func(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServe, sourcePort, targetUsername, targetAddress string) `slot:"setupAndLoadForImport"` _ string `property:"progressInit"` diff --git a/internal/frontend/types/types.go b/internal/frontend/types/types.go index b32e66aa..8f6556fc 100644 --- a/internal/frontend/types/types.go +++ b/internal/frontend/types/types.go @@ -114,10 +114,10 @@ func (b *bridgeWrap) GetUser(query string) (User, error) { type ImportExporter interface { UserManager - GetLocalImporter(string, string) (*transfer.Transfer, error) - GetRemoteImporter(string, string, string, string, string) (*transfer.Transfer, error) - GetEMLExporter(string, string) (*transfer.Transfer, error) - GetMBOXExporter(string, string) (*transfer.Transfer, error) + GetLocalImporter(string, string, string) (*transfer.Transfer, error) + GetRemoteImporter(string, string, string, string, string, string) (*transfer.Transfer, error) + GetEMLExporter(string, string, string) (*transfer.Transfer, error) + GetMBOXExporter(string, string, string) (*transfer.Transfer, error) ReportBug(osType, osVersion, description, accountName, address, emailClient string) error ReportFile(osType, osVersion, accountName, address string, logdata []byte) error } diff --git a/internal/importexport/importexport.go b/internal/importexport/importexport.go index a3799c73..0dc94491 100644 --- a/internal/importexport/importexport.go +++ b/internal/importexport/importexport.go @@ -118,9 +118,9 @@ func (ie *ImportExport) ReportFile(osType, osVersion, accountName, address strin } // GetLocalImporter returns transferrer from local EML or MBOX structure to ProtonMail account. -func (ie *ImportExport) GetLocalImporter(address, path string) (*transfer.Transfer, error) { +func (ie *ImportExport) GetLocalImporter(username, address, path string) (*transfer.Transfer, error) { source := transfer.NewLocalProvider(path) - target, err := ie.getPMAPIProvider(address) + target, err := ie.getPMAPIProvider(username, address) if err != nil { return nil, err } @@ -132,12 +132,12 @@ func (ie *ImportExport) GetLocalImporter(address, path string) (*transfer.Transf } // GetRemoteImporter returns transferrer from remote IMAP to ProtonMail account. -func (ie *ImportExport) GetRemoteImporter(address, username, password, host, port string) (*transfer.Transfer, error) { - source, err := transfer.NewIMAPProvider(username, password, host, port) +func (ie *ImportExport) GetRemoteImporter(username, address, remoteUsername, remotePassword, host, port string) (*transfer.Transfer, error) { + source, err := transfer.NewIMAPProvider(remoteUsername, remotePassword, host, port) if err != nil { return nil, err } - target, err := ie.getPMAPIProvider(address) + target, err := ie.getPMAPIProvider(username, address) if err != nil { return nil, err } @@ -149,8 +149,8 @@ func (ie *ImportExport) GetRemoteImporter(address, username, password, host, por } // GetEMLExporter returns transferrer from ProtonMail account to local EML structure. -func (ie *ImportExport) GetEMLExporter(address, path string) (*transfer.Transfer, error) { - source, err := ie.getPMAPIProvider(address) +func (ie *ImportExport) GetEMLExporter(username, address, path string) (*transfer.Transfer, error) { + source, err := ie.getPMAPIProvider(username, address) if err != nil { return nil, err } @@ -163,8 +163,8 @@ func (ie *ImportExport) GetEMLExporter(address, path string) (*transfer.Transfer } // GetMBOXExporter returns transferrer from ProtonMail account to local MBOX structure. -func (ie *ImportExport) GetMBOXExporter(address, path string) (*transfer.Transfer, error) { - source, err := ie.getPMAPIProvider(address) +func (ie *ImportExport) GetMBOXExporter(username, address, path string) (*transfer.Transfer, error) { + source, err := ie.getPMAPIProvider(username, address) if err != nil { return nil, err } @@ -176,8 +176,8 @@ func (ie *ImportExport) GetMBOXExporter(address, path string) (*transfer.Transfe return transfer.New(ie.panicHandler, newExportMetricsManager(ie), logsPath, ie.cache.GetTransferDir(), source, target) } -func (ie *ImportExport) getPMAPIProvider(address string) (*transfer.PMAPIProvider, error) { - user, err := ie.Users.GetUser(address) +func (ie *ImportExport) getPMAPIProvider(username, address string) (*transfer.PMAPIProvider, error) { + user, err := ie.Users.GetUser(username) if err != nil { return nil, err } diff --git a/test/transfer_actions_test.go b/test/transfer_actions_test.go index 60b7a6a1..194d0c90 100644 --- a/test/transfer_actions_test.go +++ b/test/transfer_actions_test.go @@ -60,9 +60,9 @@ func userImportsLocalFilesToAddress(bddUserID, bddAddressID string) error { } func userImportsLocalFilesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error { - return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) { + return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) { path := ctx.GetTransferLocalRootForImport() - return ctx.GetImportExport().GetLocalImporter(address, path) + return ctx.GetImportExport().GetLocalImporter(username, address, path) }) } @@ -81,9 +81,9 @@ func userImportsRemoteMessagesToAddress(bddUserID, bddAddressID string) error { } func userImportsRemoteMessagesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error { - return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) { + return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) { imapServer := ctx.GetTransferRemoteIMAPServer() - return ctx.GetImportExport().GetRemoteImporter(address, imapServer.Username, imapServer.Password, imapServer.Host, imapServer.Port) + return ctx.GetImportExport().GetRemoteImporter(username, address, imapServer.Username, imapServer.Password, imapServer.Host, imapServer.Port) }) } @@ -102,9 +102,9 @@ func userExportsAddressToEMLFiles(bddUserID, bddAddressID string) error { } func userExportsAddressToEMLFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error { - return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) { + return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) { path := ctx.GetTransferLocalRootForExport() - return ctx.GetImportExport().GetEMLExporter(address, path) + return ctx.GetImportExport().GetEMLExporter(username, address, path) }) } @@ -123,20 +123,20 @@ func userExportsAddressToMBOXFiles(bddUserID, bddAddressID string) error { } func userExportsAddressToMBOXFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error { - return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) { + return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) { path := ctx.GetTransferLocalRootForExport() - return ctx.GetImportExport().GetMBOXExporter(address, path) + return ctx.GetImportExport().GetMBOXExporter(username, address, path) }) } // Helpers. -func doTransfer(bddUserID, bddAddressID string, rules *gherkin.DataTable, getTransferrer func(string) (*transfer.Transfer, error)) error { +func doTransfer(bddUserID, bddAddressID string, rules *gherkin.DataTable, getTransferrer func(string, string) (*transfer.Transfer, error)) error { account := ctx.GetTestAccountWithAddress(bddUserID, bddAddressID) if account == nil { return godog.ErrPending } - transferrer, err := getTransferrer(account.Address()) + transferrer, err := getTransferrer(account.Username(), account.Address()) if err != nil { return internalError(err, "failed to init transfer") }