【网盘项目日志】20210523:Seafile 搜索系统开发日志(1)

准备把 Seafile 里面原本带有的 Elastic Search 系统给恢复出来。

功能对比

目前新版本的部署完以后,在资料库界面里面可以看到一个简单版的搜索框:

在这里插入图片描述

点击打开以后,只有一个非常简单的搜索框,搜索也仅支持按照名称进行搜索:

而在 Pro 版本中,搜索框是这样的:

在这里插入图片描述

点击后:

单击展开图标,还可以进行高级搜索:

在这里插入图片描述

实现思路

前端

要想恢复,首先就是解决前端问题。前端我们目前找到一些与搜索相关的文件:
在这里插入图片描述

这些看起来有点像 Pro 版本里面的页面,尤其是 advanced-search.js,让我感觉非常像。难道也是像 Django 里面那样,用 isPro 作了限制?

我们来找到搜索框对应文件 frontend/src/components/toolbar/common-toolbar.js,看到以下内容:

render() {
    let searchPlaceholder = this.props.searchPlaceholder || gettext('Search Files');
    return (
      <div className="common-toolbar">
        {isPro && (
          <Search
            repoID={this.props.repoID}
            placeholder={searchPlaceholder}
            onSearchedClick={this.props.onSearchedClick}
          />
        )}
        {this.props.isLibView && !isPro &&
          <SearchByName
            repoID={this.props.repoID}
            repoName={this.props.repoName}
          />
        }
        <Notification />
        <Account />
        {showLogoutIcon && (<Logout />)}
      </div>
    );
  }

芜湖!又是一个 isPro 限制内容,那么我们可以直接通过去除它来解除限制了。

那么,前端轻松秒杀,主要是后端。

后端

后端比较麻烦了,根据前面的开发经验,后端一定是要手动实现的。不过,我们还是先寻找一下对应的接口文件。

seahub 中大概率留有原来的搜索系统接口。分析起来,主要是两类接口,一类是用于前端和后端交互、交换搜索结果时候用的,另外就是 Elastic Search 系统收集数据用的。

去除前端的 isPro 限制

frontend/src/components/toolbar/common-toolbar.js 中,修改 render() 代码如下:

  render() {
    let searchPlaceholder = this.props.searchPlaceholder || gettext('Search Files');
    return (
      <div className="common-toolbar">
        <Search
          repoID={this.props.repoID}
          placeholder={searchPlaceholder}
          onSearchedClick={this.props.onSearchedClick}
        />
        <Notification />
        <Account />
        {showLogoutIcon && (<Logout />)}
      </div>
    );
  }

去除 isPro 限制后效果如图所示:

在这里插入图片描述

后面如果遇到问题以后再做小修改。

另:前端快速开发环境

按照文档中的指示,在运行环境的 /root/dev/conf/seahub_settings.py 中添加以下内容:

import os
PROJECT_ROOT = '/root/dev/source-code/seahub'
WEBPACK_LOADER = {
    'DEFAULT': {
        'BUNDLE_DIR_NAME': 'frontend/',
        'STATS_FILE': os.path.join(PROJECT_ROOT,
                                   'frontend/webpack-stats.dev.json'),
    }
}
DEBUG = True

然后运行以下 shell 命令:

cd /root/dev/source-code/seahub/frontend
npm install
npm run dev

然后启动 Seafile-server 和 seahub。

启动这套东西以后,前端的修改可以被自动编译,改动可以立即体现在页面上。不过,完成前端开发以后,还是需要再生成一套 bundle。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值