/ThreeDay

Primary LanguageRustMIT LicenseMIT

Reason:关于创建这个插件的理由

FireFox Chrome 损失标签页的情况

虽然有 FireFox Chrome 本身的恢复,但是还是会遇到一些不能恢复的情况,这样话珍贵浏览后却没来得及归档的 Tab 就损失掉了,浪费不少心血。

  • 出现 FireFox Chrome Crash 或者 操作系统 Crash or Reboot 时
  • 使用着别的标签页管理工具,如 one-tab better-onetab 当它们一键收集标签页时这个过程是存在可能收集了但没有成功显示的情况的,这个情况也是很难复原的
    • Session Buddy 算是一个解决方案

threeday

  • 它会保存三天中最新使用 Tab 的浏览记录于本地
  • 使用 Rust 原因,是为深入 Rust

使用

  • Windows:
    • 配置本地程序
      1. 将 TestWeb.exe 和 saveFile.exe 放入 D:盘下的 threeday 文件夹下,没有这个文件夹,就自行创建
      2. 右键以管理员身份运行 saveFile
  • Linux:
    • 配置本地程序
      1. 将 TestWeb 和 saveFile 复制成2份分别各放入 ~/.mozilla/native-messaging-hosts/TestWeb ~/.config/google-chrome/NativeMessingHosts/TestWeb

Mentaily

  • Chrome 在每一次创建与关闭一个 Tab 时,会将 Chrome 的所有窗口中所有 Tabs 以字符串数组的形式发送给 Rust 程序,再由 Rust 程序写成 JSON 文件
    • 关于保存的间隔与形式为一天中最新的 Tabs 状态将保存成一个 backup-[].json 形式文件,最多保留三天的状态。
  • 当我有一天的时间没有使用 Chrome 呢:中间有空档期
    • 超过一天的上一次使用状态仍会被视为上一天的保存状态

TODO

  • 对这要保存的三天文件进行文件命名固定
    • backup-1.json:今天-现在的使用状态
    • backup-2.json:昨天-上一次的使用状态
    • backup-3.json:前天-上上次的使用状态
  • Extension Test
  • FireFox Extension Learn
  • 插件名
    • Three Day
  • Linux Browser Test
  • 在同一台电脑下的即使用 Chrome 又使用 FireFox 对它们的保存路径的设置

Developer Attention

  • 配置文件的位置
    • 暂设定 Windows 为 D:盘
    • Linux 为用户文件
    • 清单文件与应用程序文件应放到同一个文件下
  • 对传入的消息识别处理

依赖

  • Rust
    • chrmod/rust-webextension-protocol

    • serde-rs/serde

      • Rust 写入 JSON 文件
        let f =File::create("backup-1.json").expect("create backup-1 failed");
      // f.write_all(message.as_bytes()).expect("write file failed");
        let v:Value=serde_json::from_str("[1,2,3]").expect("trans json error");
        // let v1 =serde_json::to_string(&v).unwrap();
        serde_json::to_writer(&f, &v).expect("write json failed");
    • chronotope/chrono

      • 引入包
      extern crate chrono ;
      use chrono::prelude::*;
      use std::time::SystemTime;//标准库中关于系统时间的库
      • 获取系统系统本地时间,它包含了时区
      let dt = Local::now();
      println!("dt: {}", dt);
      • format SystemTime to String
        let metadata = fs::metadata("backup.json").expect("error");
        let time = metadata.modified().expect("time error");
        let t: DateTime<Local> = time.into(); //SystemTime 转 DateTime<Local>
        // let t: DateTime<Utc> = time.into();
        let t1 =t.date();//转成日期格式
        println!("{}",t1.format("%d/%m/%Y"));//仅打印日期
        println!("{}",t1.and_hms(0,0,0).format("%d/%m/%Y %T"));//后设置时、分、秒再打印
      • 如何比较两个时间不是同一天
      let s1 = dt.date().and_hms(0, 0, 0).timestamp();
      let s2 = t.date().and_hms(0, 0, 0).timestamp();
      // 将DateTime<Local>类型转成日期类型,再用 and_hms 转成DateTime<Local> 再用timestamp转成秒进行来比较
    • 获取 Linux Home 变量

Chrome Extension

FireFox Webextension

Deno

Rust

发布

  • Chrome Extension 发布需要以五美元注册开发者

License

MIT LICENSE