Posibles mejoras para la opción de ignorados


  • 0

    Estaría bien que no te llegaran las notificaciones cuando interactúa contigo un usuario que tengas bloqueado.



  • 1

    Como no encuentres a @msf o alguien nuevo que se anime a modificarlo. Yo me conformo con que no deje de funcionar al actualizar nodebb :roto2nuse:



  • 2

    Originalmente era asi. Luego se chungó xD



  • 3

    yo propuse eso hace tiempo y me dijeron que había que llamar a la nasa.



  • 4

    @erpatata dijo:

    yo propuse eso hace tiempo y me dijeron que había que llamar a la nasa.

    Yo creo que el problema era que al final sólo msf programaba, el código está online pero tiene que ser que alguien quiera hacerlo :roto2nuse:

    (function (module) {
        "use strict";
    
        var plugin = {};
    
        var Socket = module.parent.require('./socket.io/modules'),
            User = module.parent.require('./user'),
            db = module.parent.require('./database'),
            async = module.parent.require('async'),
            helpers = module.parent.require('./controllers/helpers'),
            nconf = module.parent.require('nconf'),
            templates = module.parent.require('templates.js');
    
        /**
         * Check if the post belongs to an ignored user
         */
        plugin.parse = function (data, callback) {
            try {
                async.eachSeries(data.posts,
                function(p, cb){
                    if (data && p && data.uid && data.uid !== p.uid) {
                        User.isIgnored(data.uid, p.uid, function (err, ignored) {
                            if (err) {
                                console.error("Error checking if the user has been ignored " + p.uid, e);
                                cb();
                            }
    
                            p.originalContent = p.content;
                            p.ignored = ignored;
    
                            cb();
    
                        });
                    } else {
                        cb();
                    }
                }, function(r){
                    callback(null, data);
                });
            } catch (e) {
                console.error("Error parsing the post content ", e);
                callback(null, data);
            }
        };
    
        /**
         * It defines the “/user/:userlug/ignored” new paths that will display the user's ignore list 
         */
        plugin.init = function (params, callback) {
            var app = params.router,
                controllers = params.controllers;
    
            controllers.accounts.getIgnored = function (req, res, next) {
                if (!req.user) {
                    return helpers.notAllowed(req, res);
                }
    
                async.waterfall([
    
                    function (next) {
                        User.getUidByUserslug(req.params.userslug, next);
                    },
                    function (uid, next) {
                        if (req.user.uid !== uid) {
                            return helpers.notAllowed(req, res);
                        }
                        User.getIgnoredUsers(req.user.uid, next);
                    },
                    User.getUsersData
                ], function (err, users) {
                    if (err) {
                        console.err(err);
                        return helpers.notFound(req, res);
                    }
                    
                    res.render('account/ignored', {
                        showSettings: true,
                        showHidden: true,
                        isSelf: true,
                        userslug: req.params.userslug,
                        ignored: users,
                        ignoredCount: users.length
                    });
                });
    
            }
    
            app.get('/user/:userslug/ignored', params.middleware.buildHeader, controllers.accounts.getIgnored);
            app.get('/api/user/:userslug/ignored', controllers.accounts.getIgnored);
    
            templates.setGlobal('ignorePluginEnabled', true);
    
            callback();
        };
    
        plugin.changeClientRouting = function (config, callback) {
            config.custom_mapping['^user/.*/ignored'] = 'account/ignored';
            callback(null, config);
        }
    
        /**
         * "Hook" is called when a user's profile is displayed. We use it to check whether someone is ignored or not.
         */
        plugin.checkIgnoredAccount = function (data, callback) {
            try {
                if (data.uid && data.uid !== data.userData.uid) {
                    User.isIgnored(data.uid, data.userData.uid, function (err, ignored) {
                        if (err) {
                            console.error("[PROFILE] Error while checking if an user is ignored " + data.userData.uid, e);
                            return callback(null, data);
                        }
                        
                        data.userData.isIgnored = ignored;
                        callback(null, data);
                    });
                } else {
                    callback(null, data);
                }
            } catch (e) {
                console.error("[PROFILE] Error checking whether a user is being ignored while checking its profile " + data.userData.uid, e);
                callback(null, data);
            }
        }
    
        /**
         * It checks if an user (uid) has another user (otheruid) in the ignore list
         */
        User.isIgnored = function (uid, otheruid, callback) {
            db.isSetMember('ignored:' + uid, otheruid, callback);
        };
    
        /**
         * It returns an user's ignore list
         */
        User.getIgnoredUsers = function (uid, callback) {
            db.getSetMembers('ignored:' + uid, callback);
        };
    
        /**
         * It adds an user to the ignore list
         */
        Socket.ignoreUser = function (socket, data, callback) {
            db.setAdd('ignored:' + socket.uid, data.ignoreduid, callback);
        };
    
        /**
         * It removes an user from the ignore list
         */
        Socket.unignoreUser = function (socket, data, callback) {
            db.setRemove('ignored:' + socket.uid, data.ignoreduid, callback);
        };
    
        /**
         * It flags the ignored user's threads. Then, the threads are hidden.
         */
        plugin.filterIgnoredTopics = function (data, callback) {
            
            User.getIgnoredUsers(data.uid, function (err, ignoredUsers) {
                console.log(ignoredUsers)
                if (ignoredUsers && ignoredUsers.length) {
                    data.topics.forEach(function (topic) {
                        topic.ignored = ignoredUsers.indexOf(topic.uid.toString()) !== -1;
                    });
                }
                
                callback(null, data);
            })
            
        };
    
        module.exports = plugin;
    }(module));
    
    


  • 5

    @Pixel dijo:

    Yo creo que el problema era que al final sólo msf programaba, el código está online pero tiene que ser que alguien quiera hacerlo :roto2nuse:

    (function (module) {
        "use strict";
        var plugin = {};
        var Socket = module.parent.require('./socket.io/modules'),
            User = module.parent.require('./user'),
            db = module.parent.require('./database'),
            async = module.parent.require('async'),
            helpers = module.parent.require('./controllers/helpers'),
            nconf = module.parent.require('nconf'),
            templates = module.parent.require('templates.js');
        /**
         * Check if the post belongs to an ignored user
         */
        plugin.parse = function (data, callback) {
            try {
                async.eachSeries(data.posts,
                function(p, cb){
                    if (data && p && data.uid && data.uid !== p.uid) {
                        User.isIgnored(data.uid, p.uid, function (err, ignored) {
                            if (err) {
                                console.error("Error checking if the user has been ignored " + p.uid, e);
                                cb();
                            }
                            p.originalContent = p.content;
                            p.ignored = ignored;
                            cb();
                        });
                    } else {
                        cb();
                    }
                }, function(r){
                    callback(null, data);
                });
            } catch (e) {
                console.error("Error parsing the post content ", e);
                callback(null, data);
            }
        };
        /**
         * It defines the “/user/:userlug/ignored” new paths that will display the user's ignore list 
         */
        plugin.init = function (params, callback) {
            var app = params.router,
                controllers = params.controllers;
            controllers.accounts.getIgnored = function (req, res, next) {
                if (!req.user) {
                    return helpers.notAllowed(req, res);
                }
                async.waterfall([
                    function (next) {
                        User.getUidByUserslug(req.params.userslug, next);
                    },
                    function (uid, next) {
                        if (req.user.uid !== uid) {
                            return helpers.notAllowed(req, res);
                        }
                        User.getIgnoredUsers(req.user.uid, next);
                    },
                    User.getUsersData
                ], function (err, users) {
                    if (err) {
                        console.err(err);
                        return helpers.notFound(req, res);
                    }
                    
                    res.render('account/ignored', {
                        showSettings: true,
                        showHidden: true,
                        isSelf: true,
                        userslug: req.params.userslug,
                        ignored: users,
                        ignoredCount: users.length
                    });
                });
            }
            app.get('/user/:userslug/ignored', params.middleware.buildHeader, controllers.accounts.getIgnored);
            app.get('/api/user/:userslug/ignored', controllers.accounts.getIgnored);
            templates.setGlobal('ignorePluginEnabled', true);
            callback();
        };
        plugin.changeClientRouting = function (config, callback) {
            config.custom_mapping['^user/.*/ignored'] = 'account/ignored';
            callback(null, config);
        }
        /**
         * "Hook" is called when a user's profile is displayed. We use it to check whether someone is ignored or not.
         */
        plugin.checkIgnoredAccount = function (data, callback) {
            try {
                if (data.uid && data.uid !== data.userData.uid) {
                    User.isIgnored(data.uid, data.userData.uid, function (err, ignored) {
                        if (err) {
                            console.error("[PROFILE] Error while checking if an user is ignored " + data.userData.uid, e);
                            return callback(null, data);
                        }
                        
                        data.userData.isIgnored = ignored;
                        callback(null, data);
                    });
                } else {
                    callback(null, data);
                }
            } catch (e) {
                console.error("[PROFILE] Error checking whether a user is being ignored while checking its profile " + data.userData.uid, e);
                callback(null, data);
            }
        }
        /**
         * It checks if an user (uid) has another user (otheruid) in the ignore list
         */
        User.isIgnored = function (uid, otheruid, callback) {
            db.isSetMember('ignored:' + uid, otheruid, callback);
        };
        /**
         * It returns an user's ignore list
         */
        User.getIgnoredUsers = function (uid, callback) {
            db.getSetMembers('ignored:' + uid, callback);
        };
        /**
         * It adds an user to the ignore list
         */
        Socket.ignoreUser = function (socket, data, callback) {
            db.setAdd('ignored:' + socket.uid, data.ignoreduid, callback);
        };
        /**
         * It removes an user from the ignore list
         */
        Socket.unignoreUser = function (socket, data, callback) {
            db.setRemove('ignored:' + socket.uid, data.ignoreduid, callback);
        };
        /**
         * It flags the ignored user's threads. Then, the threads are hidden.
         */
        plugin.filterIgnoredTopics = function (data, callback) {
            
            User.getIgnoredUsers(data.uid, function (err, ignoredUsers) {
                console.log(ignoredUsers)
                if (ignoredUsers && ignoredUsers.length) {
                    data.topics.forEach(function (topic) {
                        topic.ignored = ignoredUsers.indexOf(topic.uid.toString()) !== -1;
                    });
                }
                
                callback(null, data);
            })
            
        };
        module.exports = plugin;
    }(module));
    

    esto está bien, creo que solo faltaría la parte de código donde el usuario recibe las notificaciones para poder aplicar eso. Si me lo dices lo mismo hago algo que no funcione.



  • 6

    @erpatata dijo:

    esto está bien, creo que solo faltaría la parte de código donde el usuario recibe las notificaciones para poder aplicar eso. Si me lo dices lo mismo hago algo que no funcione.

    Yo solo lo he abierto para traducirlo, de programar ni idea xD

    @marty lo sabrá supongo



  • 7

    @erpatata dijo:

    yo propuse eso hace tiempo y me dijeron que había que llamar a la nasa.

    para nada
    se intento meter en el plugin oficial pero ...

    https://github.com/julianlam/nodebb-plugin-mentions/pulls



  • 8

    meses llevo diciendolo



  • 9

    @marty dijo:

    para nada
    se intento meter en el plugin oficial pero ...
    https://github.com/julianlam/nodebb-plugin-mentions/pulls

    no lo pillo, cual es el problema?



  • 10

    A mi me gustaría que desapareciese todo rastro de los usuarios a quienes ignoras. No entiendo que los posts ignorados aparezcan visibles en los Hilos, aunque la información esté oculta. Si lo tengo ignorado es porque no me interesa saber qué postea, ni cuándo postea, ni dónde postea :nusenuse:



  • 11

    @erpatata dijo:

    no lo pillo, cual es el problema?

    Que son dos plugins diferentes, el de menciones y el de ignorados. Las notificaciones son del núcleo de NodeBB. Por tanto hay dos posibilidades:

    1- Que el plugin de menciones no use el núcleo para enviar la notificación si está ignorado
    2- Que sea el núcleo el que compruebe si está ignorado y evite enviar la notificación

    Para ambos hace falta que los que se ocupan de cada parte quieran hacer eso. Los des plugin no quieren, y son los mismos que los del núcleo (son los desarrolladores de NodeBB). Si ninguno quiere, lo único posible es hacer una versión modificada del plugin de menciones o del núcleo, cuyo problema radica en mantener esas versiones actualizadas.

    Ahora?



  • 12

    Entiendo el global del problema, es un sistema muy cerrado y que no teneís todo el control, yo pensaba que se podía por un lado recoger la data de las notificaciones y ocultarla, llamar al plugin de ignorados y pasarle el filtro, seguidamente activar la notificación con la data modificada, pero supongo que requeriría más control sobre el núcleo.



  • 13

    @erpatata dijo:

    Entiendo el global del problema, es un sistema muy cerrado y que no teneís todo el control, yo pensaba que se podía por un lado recoger la data de las notificaciones y ocultarla, llamar al plugin de ignorados y pasarle el filtro, seguidamente activar la notificación con la data modificada, pero supongo que requeriría más control sobre el núcleo.

    A esa forma de funcionar lo llaman hooks, y hay algunos para que los usen los plugins. Por ejemplo, cuando se va a mostrar un post al usuario, los plugins pueden "subscribirse" a un hook para que les llegue la información del post, modificarlo y enviarlo para que siga el camino. Así funcionan los plugins de formato de los posts. Para notificaciones no hay nada de eso. Otra opción es pedir que metan un hooks de estos para las notificaciones, y que el plugin de ignorados pueda modificar la notificación para evitar que se envíe.



  • 14

    @kNN dijo:

    A esa forma de funcionar lo llaman hooks, y hay algunos para que los usen los plugins. Por ejemplo, cuando se va a mostrar un post al usuario, los plugins pueden "subscribirse" a un hook para que les llegue la información del post, modificarlo y enviarlo para que siga el camino. Así funcionan los plugins de formato de los posts. Para notificaciones no hay nada de eso. Otra opción es pedir que metan un hooks de estos para las notificaciones, y que el plugin de ignorados pueda modificar la notificación para evitar que se envíe.

    Quizas haya que empezar por ahí.



  • 15

    @erpatata dijo:

    Quizas haya que empezar por ahí.

    Un buen inicio sería tener usuarios, para poder ignorar a alguien y eso.




Has perdido la conexión. Reconectando a Éxodo.