高価な Timeular トラッカーを購入しましたが、独自のアプリに追加料金を支払いたくないですか?このプロジェクトはあなたのためのものです。 Timeular Reader を使用すると、トラッカーをお気に入りの時間追跡アプリに接続できます。
まず--setup
フラグを指定してコマンドを実行すると、構成が生成され、デバイスの側面にラベルを付けることができます。
timeular-reader --setup
すべての面を設定する必要はありません。使用したくない面で q を押すと、設定した内容で構成が生成されます。
初期設定後、 config.toml
変更できます。
出力の冗長性を制御するには、 --verbose
または-v
渡します。複数の-vvv
追加してより冗長にすることができます。
すべての出力をミュートする--quiet
、 -q
モードもあります。
プロジェクト ID とワークスペース ID を取得するには、「管理」の下の左側のパネルで「プロジェクト」をクリックします。次に、使用するプロジェクト名をクリックします。 URL はhttps://track.toggl.com/{workspace_id}/projects/{project_id}/team
のようになります。
API キーを生成するには、右上のプロファイル設定に移動します。下にスクロールすると、API キーを生成するオプションが表示されます。
ワークスペース ID を取得するには、右上で [ワークスペース] をクリックし、[管理]、[設定] の順に移動します。URL にワークスペース ID が含まれている必要があります。 https://app.clockify.me/workspaces/{workspace_id}/settings
のようになります。
プロジェクト ID はオプションであることに注意してください
左側でプロジェクト ID を取得するには、「プロジェクト」をクリックし、次にプロジェクトをクリックします。 URL にはプロジェクト ID が含まれます。次のようになりますhttps://app.clockify.me/projects/{project_id}/edit
TODO
TODO
まず、新しい MOD を作成して登録する必要があります。ここでは、それをexample
と呼びます。
Mod を作成するには、ファイルsrc/handler/example.rs
作成し、 pub mod example;
上にリンクされているファイルにコピーします。 example.rs
はasync create_handler(setup: bool)
というパブリック関数が必要で、その関数はHandler
実装する構造体を返す必要があります。実装にはアノテーション#[async_trait]
が必要です。
おそらく、MOD には何らかの設定が必要です。メインのexample.rs
ファイルにすべてを実装できますが、ファイルをクリーンに保つために、新しい mod config
宣言することをお勧めします。 config mod は、デフォルトの構成を作成し、それをメイン構成ファイルconfig.toml
に保存する役割を果たします。
まず、 pub mod config;
example.rs
にコピーし、ファイルsrc/handler/example/config.rs
を作成します。 config.rs
では、必要なすべての構成データを保持する構造体を作成する必要があります。これをExampleConfig
と呼びます。
派生は必要です
# [ derive ( Serialize , Deserialize , Clone , Debug ) ]
pub struct ExampleConfig {
base_url : String ,
api_key : String ,
}
次に、 Default
とcrate::config::Config
を実装する必要があります。 Default
実装では、API ベース URL など、あまり変更されないものを含む構造体を作成できます。例えば:
impl Default for ExampleConfig {
fn default ( ) -> Self {
ExampleConfig {
base_url : String :: from ( "https://api.example.com" ) ,
api_key : String :: new ( ) ,
}
}
}
crate::config::Config
実装は空にすることもできます。これは単にタイプとライフタイムを継承するだけであり、次のようになります。
impl < ' de > Config < ' de > for ExampleConfig { }
構成をメイン構成ファイルに保存する場合は、その構成ファイルを保存する一意のキーが必要です。
便宜上、(ファイルから/ファイルへ) 構成を取得および更新するためのメソッドを実装できます。それ以外の場合は、 crate::config::get_config
およびcrate::config::update_config
を呼び出す必要があります。これらの関数は次のようになります。
const CONFIG_KEY : & str = "example" ;
pub fn create_config ( ) -> ExampleConfig {
crate :: config :: get_config :: < ExampleConfig > ( CONFIG_KEY )
}
pub fn update_config ( config : & ExampleConfig ) {
crate :: config :: update_config ( CONFIG_KEY , config ) ;
}
その後、新しいハンドラーを登録する必要があります。 src/handler.rs
で、mod のExample
Handlers
列挙型に追加し、それに番号を割り当てる必要があります。
pub enum Handlers {
Toggl = 1,
Clockify = 2,
Traggo = 3,
Hackaru = 4,
+ Example = 5,
}
次にTryFrom<u8>
を調整する必要があります。
fn try_from(v: u8) -> Result<Self, Self::Error> {
match v {
x if x == Handlers::Toggl as u8 => Ok(Handlers::Toggl),
x if x == Handlers::Clockify as u8 => Ok(Handlers::Clockify),
x if x == Handlers::Traggo as u8 => Ok(Handlers::Traggo),
x if x == Handlers::Hackaru as u8 => Ok(Handlers::Hackaru),
+ x if x == Handlers::Example as u8 => Ok(Handlers::Example),
_ => Err(()),
}
}
TryFrom<&String>
も同様です:
fn try_from(v: &String) -> Result<Self, Self::Error> {
match v.as_str() {
"toggl" => Ok(Handlers::Toggl),
"clockify" => Ok(Handlers::Clockify),
"traggo" => Ok(Handlers::Traggo),
"hackaru" => Ok(Handlers::Hackaru),
+ "example" => Ok(Handlers::Example),
_ => Err(()),
}
}
最後に行うことは、 get_handler
でファクトリ メソッドを調整することです。
pub async fn get_handler(setup: bool, config: &TimeularConfig) -> Box<dyn Handler> {
match config.handler.as_str() {
"toggl" => Box::new(toggl::create_handler(setup).await),
"hackaru" => Box::new(hackaru::create_handler(setup).await),
"clockify" => Box::new(clockify::create_handler(setup).await),
"traggo" => Box::new(traggo::create_handler(setup).await),
+ "example" => Box::new(example::create_handler(setup).await),
_ => Box::new(example::create_handler(setup).await),
}
}
サンプル トラッカーをリポジトリに追加しました。これに基づいてモジュールを作成できます。
ただ実行するだけです
cargo build