14
14
15
15
namespace OCA \News \Service ;
16
16
17
+ use OCA \News \Service \Exceptions \ServiceValidationException ;
17
18
use OCA \News \Utility \OPMLExporter ;
18
19
use OCA \News \Utility \OPMLImporter ;
19
20
use OCA \News \Db \Folder ;
21
+ use Psr \Log \LoggerInterface ;
20
22
21
23
class OpmlService
22
24
{
@@ -25,6 +27,7 @@ public function __construct(
25
27
private FeedServiceV2 $ feedService ,
26
28
private OPMLExporter $ exporter ,
27
29
private OPMLImporter $ importer ,
30
+ private LoggerInterface $ logger ,
28
31
) {
29
32
//NO-OP
30
33
}
@@ -57,13 +60,14 @@ public function import(string $userId, string $data): bool
57
60
{
58
61
list ($ folders , $ feeds ) = $ this ->importer ->import ($ userId , $ data );
59
62
63
+ $ error = false ;
60
64
$ folderEntities = [];
61
65
$ dbFolders = $ this ->folderService ->findAllForUser ($ userId );
62
66
foreach ($ folders as $ folder ) {
63
67
$ existing = array_filter ($ dbFolders , fn (Folder $ dbFolder ) => $ dbFolder ->getName () === $ folder ['name ' ]);
64
68
65
69
if (count ($ existing ) > 0 ) {
66
- $ folderEntities [$ folder ['name ' ]] = $ existing[ 0 ] ;
70
+ $ folderEntities [$ folder ['name ' ]] = reset ( $ existing) ;
67
71
continue ;
68
72
}
69
73
@@ -75,15 +79,27 @@ public function import(string $userId, string $data): bool
75
79
}
76
80
77
81
foreach ($ feeds as $ feed ) {
82
+ if ($ this ->feedService ->existsForUser ($ userId , $ feed ['url ' ])) {
83
+ continue ;
84
+ }
78
85
$ parent = $ folderEntities [$ feed ['folder ' ]] ?? null ;
79
- $ this ->feedService ->create (
80
- $ userId ,
81
- $ feed ['url ' ],
82
- $ parent ?->getId(),
83
- full_text: false ,
84
- title: $ feed ['title ' ],
85
- full_discover: false ,
86
- );
86
+ try {
87
+ $ this ->feedService ->create (
88
+ $ userId ,
89
+ $ feed ['url ' ],
90
+ $ parent ?->getId(),
91
+ full_text: false ,
92
+ title: $ feed ['title ' ],
93
+ full_discover: false ,
94
+ );
95
+ } catch (\Exception $ e ) {
96
+ $ error = true ;
97
+ $ this ->logger ->warning ('Could not import feed ' . $ feed ['url ' ]);
98
+ }
99
+ }
100
+
101
+ if ($ error ) {
102
+ throw new ServiceValidationException ('Failed to import all feeds. Please check the server log! ' );
87
103
}
88
104
89
105
return true ;
0 commit comments