Implementation of subs add/removal handling.

        Args:
            path: file path associated with model on which work is done
            subNos: list of added/removed subtitle numbers
            count: function which accepts current sync point's subtitle number
                   and subNos and returns anything based on these values
            action: action performed for each of sync point's subtitle number.
                    Accepts current SyncPoint.subNo, count result, model and
                    row:
                        def action(current, count, model, row)

def _changeSubNos(self, path, subNos, count, action, reverse=False):
        """Implementation of subs add/removal handling.

        Args:
            path: file path associated with model on which work is done
            subNos: list of added/removed subtitle numbers
            count: function which accepts current sync point's subtitle number
                   and subNos and returns anything based on these values
            action: action performed for each of sync point's subtitle number.
                    Accepts current SyncPoint.subNo, count result, model and
                    row:
                        def action(current, count, model, row)
        """
        model = self._models.get(path)
        if model is None:
            return

        syncPoints = _syncPoints(model)
        syncSubNos = [p.subNo for p in syncPoints]
        syncSubNos.sort()

        if len(syncSubNos) == 0:
            return

        for current in syncSubNos:
            row = _findRow(current, model)
            action(current, count(current, subNos), model, row)