2929namespace OC \Comments ;
3030
3131use Doctrine \DBAL \Exception \DriverException ;
32+ use OCA \DAV \Connector \Sabre \File ;
3233use OCP \AppFramework \Utility \ITimeFactory ;
3334use OCP \Comments \CommentsEvent ;
3435use OCP \Comments \IComment ;
3536use OCP \Comments \ICommentsEventHandler ;
3637use OCP \Comments \ICommentsManager ;
3738use OCP \Comments \NotFoundException ;
3839use OCP \DB \QueryBuilder \IQueryBuilder ;
40+ use OCP \Files \FileInfo ;
41+ use OCP \Files \Folder ;
42+ use OCP \Files \IRootFolder ;
3943use OCP \IConfig ;
4044use OCP \IDBConnection ;
4145use OCP \IEmojiHelper ;
4650use Psr \Log \LoggerInterface ;
4751
4852class Manager implements ICommentsManager {
49- protected IDBConnection $ dbConn ;
50- protected LoggerInterface $ logger ;
51- protected IConfig $ config ;
52- protected ITimeFactory $ timeFactory ;
53- protected IEmojiHelper $ emojiHelper ;
54- protected IInitialStateService $ initialStateService ;
5553 /** @var IComment[] */
5654 protected array $ commentsCache = [];
5755
@@ -64,18 +62,15 @@ class Manager implements ICommentsManager {
6462 /** @var \Closure[] */
6563 protected array $ displayNameResolvers = [];
6664
67- public function __construct (IDBConnection $ dbConn ,
68- LoggerInterface $ logger ,
69- IConfig $ config ,
70- ITimeFactory $ timeFactory ,
71- IEmojiHelper $ emojiHelper ,
72- IInitialStateService $ initialStateService ) {
73- $ this ->dbConn = $ dbConn ;
74- $ this ->logger = $ logger ;
75- $ this ->config = $ config ;
76- $ this ->timeFactory = $ timeFactory ;
77- $ this ->emojiHelper = $ emojiHelper ;
78- $ this ->initialStateService = $ initialStateService ;
65+ public function __construct (
66+ protected IDBConnection $ dbConn ,
67+ protected LoggerInterface $ logger ,
68+ protected IConfig $ config ,
69+ protected ITimeFactory $ timeFactory ,
70+ protected IEmojiHelper $ emojiHelper ,
71+ protected IInitialStateService $ initialStateService ,
72+ protected IRootFolder $ rootFolder ,
73+ ) {
7974 }
8075
8176 /**
@@ -820,54 +815,25 @@ public function getLastCommentDateByActor(
820815 /**
821816 * Get the number of unread comments for all files in a folder
822817 *
818+ * This is unused since 8bd39fccf411195839f2dadee085fad18ec52c23
819+ *
823820 * @param int $folderId
824821 * @param IUser $user
825822 * @return array [$fileId => $unreadCount]
826823 */
827824 public function getNumberOfUnreadCommentsForFolder ($ folderId , IUser $ user ) {
828- $ qb = $ this ->dbConn ->getQueryBuilder ();
829-
830- $ query = $ qb ->select ('f.fileid ' )
831- ->addSelect ($ qb ->func ()->count ('c.id ' , 'num_ids ' ))
832- ->from ('filecache ' , 'f ' )
833- ->leftJoin ('f ' , 'comments ' , 'c ' , $ qb ->expr ()->andX (
834- $ qb ->expr ()->eq ('f.fileid ' , $ qb ->expr ()->castColumn ('c.object_id ' , IQueryBuilder::PARAM_INT )),
835- $ qb ->expr ()->eq ('c.object_type ' , $ qb ->createNamedParameter ('files ' ))
836- ))
837- ->leftJoin ('c ' , 'comments_read_markers ' , 'm ' , $ qb ->expr ()->andX (
838- $ qb ->expr ()->eq ('c.object_id ' , 'm.object_id ' ),
839- $ qb ->expr ()->eq ('m.object_type ' , $ qb ->createNamedParameter ('files ' ))
840- ))
841- ->where (
842- $ qb ->expr ()->andX (
843- $ qb ->expr ()->eq ('f.parent ' , $ qb ->createNamedParameter ($ folderId )),
844- $ qb ->expr ()->orX (
845- $ qb ->expr ()->eq ('c.object_type ' , $ qb ->createNamedParameter ('files ' )),
846- $ qb ->expr ()->isNull ('c.object_type ' )
847- ),
848- $ qb ->expr ()->orX (
849- $ qb ->expr ()->eq ('m.object_type ' , $ qb ->createNamedParameter ('files ' )),
850- $ qb ->expr ()->isNull ('m.object_type ' )
851- ),
852- $ qb ->expr ()->orX (
853- $ qb ->expr ()->eq ('m.user_id ' , $ qb ->createNamedParameter ($ user ->getUID ())),
854- $ qb ->expr ()->isNull ('m.user_id ' )
855- ),
856- $ qb ->expr ()->orX (
857- $ qb ->expr ()->gt ('c.creation_timestamp ' , 'm.marker_datetime ' ),
858- $ qb ->expr ()->isNull ('m.marker_datetime ' )
859- )
860- )
861- )->groupBy ('f.fileid ' );
862-
863- $ resultStatement = $ query ->execute ();
864-
865- $ results = [];
866- while ($ row = $ resultStatement ->fetch ()) {
867- $ results [$ row ['fileid ' ]] = (int ) $ row ['num_ids ' ];
825+ $ directory = $ this ->rootFolder ->getFirstNodeById ($ folderId );
826+ if (!$ directory instanceof Folder) {
827+ return [];
868828 }
869- $ resultStatement ->closeCursor ();
870- return $ results ;
829+ $ children = $ directory ->getDirectoryListing ();
830+ $ ids = array_map (fn (FileInfo $ child ) => (string ) $ child ->getId (), $ children );
831+
832+ $ ids [] = (string ) $ directory ->getId ();
833+ $ counts = $ this ->getNumberOfUnreadCommentsForObjects ('files ' , $ ids , $ user );
834+ return array_filter ($ counts , function (int $ count ) {
835+ return $ count > 0 ;
836+ });
871837 }
872838
873839 /**
0 commit comments