Skip to content

Commit 3030444

Browse files
Merge pull request #13 from matejsemancik/feature/strings-and-maintenance
Strings and maintenance
2 parents 3c0d731 + 1764dab commit 3030444

File tree

45 files changed

+440
-123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+440
-123
lines changed

.github/workflows/on_pull_request.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name: Pull Request Check
22

3-
on:
4-
pull_request:
5-
types:
6-
- opened
3+
on: [ pull_request ]
4+
5+
concurrency:
6+
group: ${{ github.workflow }}-${{ github.head_ref }}
7+
cancel-in-progress: true
78

89
jobs:
910
check:

CLAUDE.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Development Guidelines
2+
3+
## Build Commands
4+
- Build package: `./gradlew packageDistributionForCurrentOS`
5+
- Run app: `./gradlew runDistributable`
6+
- Run desktop app: `./gradlew :desktopApp:run`
7+
8+
## Code Style
9+
- **Naming**: Classes = PascalCase, Functions/Variables = camelCase
10+
- **Architecture**: MVVM pattern with UI, State (Model), and Data layers
11+
- **State Management**: Kotlin Flows (StateFlow for UI state)
12+
- **DI**: Koin for dependency injection
13+
- **Imports**: Grouped by purpose, explicit imports preferred over wildcards
14+
- **Error Handling**: Repository pattern for data operations, proper error propagation through Flows
15+
16+
## Project Structure
17+
- `feature/` - App features organized by domain (tracker, search, settings)
18+
- `data/` - Repository interfaces, database models, network services
19+
- `design/` - UI components, theme definitions
20+
- `arch/` - Base architectural components
21+
- `injection/` - Dependency injection modules
22+
23+
## Testing
24+
- Unit tests should follow the same structure as the feature they're testing
25+
- Model tests should verify state transitions and event handling

desktopApp/src/desktopMain/kotlin/dev/matsem/bpm/main.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
package dev.matsem.bpm
22

3-
import androidx.compose.runtime.*
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.DisposableEffect
5+
import androidx.compose.runtime.LaunchedEffect
6+
import androidx.compose.runtime.getValue
7+
import androidx.compose.runtime.mutableStateOf
8+
import androidx.compose.runtime.remember
9+
import androidx.compose.runtime.setValue
410
import androidx.compose.ui.Alignment
511
import androidx.compose.ui.graphics.toAwtImage
6-
import androidx.compose.ui.input.key.*
12+
import androidx.compose.ui.input.key.Key
13+
import androidx.compose.ui.input.key.KeyEventType
14+
import androidx.compose.ui.input.key.isMetaPressed
15+
import androidx.compose.ui.input.key.key
16+
import androidx.compose.ui.input.key.type
717
import androidx.compose.ui.platform.LocalDensity
818
import androidx.compose.ui.platform.LocalLayoutDirection
919
import androidx.compose.ui.unit.DpSize
1020
import androidx.compose.ui.unit.dp
11-
import androidx.compose.ui.window.*
21+
import androidx.compose.ui.window.ApplicationScope
22+
import androidx.compose.ui.window.Window
23+
import androidx.compose.ui.window.WindowPosition
24+
import androidx.compose.ui.window.application
25+
import androidx.compose.ui.window.rememberWindowState
1226
import bpm_tracker.desktopapp.generated.resources.Res
1327
import bpm_tracker.desktopapp.generated.resources.launcher_icon
1428
import dev.matsem.bpm.feature.app.ui.AppUi
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<!-- Common -->
4+
<string name="close">Close</string>
5+
<string name="delete">Delete</string>
6+
<string name="remove">Remove</string>
7+
8+
<!-- App -->
9+
<string name="app_name">tempo-timer</string>
10+
<string name="toggle_dark_mode">Toggle dark mode</string>
11+
<string name="settings">Settings</string>
12+
<string name="new_timer">New timer</string>
13+
<string name="pick_issue">Pick an issue</string>
14+
<string name="timer">Timer</string>
15+
16+
<!-- Commit/Timer -->
17+
<string name="duration_label">⏳ Duration</string>
18+
<string name="duration_placeholder">e.g. \"1h 20m\"</string>
19+
<string name="description_label">📜 Description</string>
20+
<string name="delete_timer">Delete timer</string>
21+
<string name="log_time">Log Time</string>
22+
23+
<!-- Settings -->
24+
<string name="credentials_title">🔐 Credentials</string>
25+
<string name="credentials_description">Sign In by providing necessary credentials.</string>
26+
<string name="credentials_instructions">Jira API token is used to sync your profile and search issues. Tempo API token is used to synchronize worklogs with Tempo.\nInstructions on how to generate TBD.</string>
27+
<string name="jira_url">Jira URL</string>
28+
<string name="jira_email">Atlassian account e-mail</string>
29+
<string name="jira_email_placeholder">you@corporate.org</string>
30+
<string name="jira_api_token">Jira API token</string>
31+
<string name="tempo_api_token">Tempo API token</string>
32+
<string name="sign_in">Sign In</string>
33+
<string name="sign_out">Sign Out</string>
34+
35+
<!-- Search -->
36+
<string name="search_placeholder">Issue key, or summary, or try your luck...</string>
37+
38+
<!-- Tracker -->
39+
<string name="favorites_section">⭐ Favourites</string>
40+
<string name="timers_section">⏳ Timers</string>
41+
<string name="no_timers">No running timers</string>
42+
<string name="start_timer_instructions">Start a new timer by clicking on Favourite,\nor from menu bar down there 👇</string>
43+
</resources>

shared/src/commonMain/kotlin/dev/matsem/bpm/arch/BaseModel.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
package dev.matsem.bpm.arch
22

3-
import kotlinx.coroutines.*
3+
import kotlinx.coroutines.MainScope
44
import kotlinx.coroutines.channels.Channel
5-
import kotlinx.coroutines.flow.*
5+
import kotlinx.coroutines.flow.Flow
6+
import kotlinx.coroutines.flow.MutableStateFlow
7+
import kotlinx.coroutines.flow.SharingStarted
8+
import kotlinx.coroutines.flow.StateFlow
9+
import kotlinx.coroutines.flow.onStart
10+
import kotlinx.coroutines.flow.receiveAsFlow
11+
import kotlinx.coroutines.flow.shareIn
12+
import kotlinx.coroutines.flow.stateIn
13+
import kotlinx.coroutines.flow.update
14+
import kotlinx.coroutines.launch
615

716
/**
817
* A base presentation component for managing and encapsulating state of application components with reactive state updates.

shared/src/commonMain/kotlin/dev/matsem/bpm/data/database/AppDatabase.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package dev.matsem.bpm.data.database
22

3-
import androidx.room.*
3+
import androidx.room.ConstructedBy
4+
import androidx.room.Database
5+
import androidx.room.RoomDatabase
6+
import androidx.room.RoomDatabaseConstructor
7+
import androidx.room.TypeConverters
48
import dev.matsem.bpm.data.database.dao.JiraIssueDao
59
import dev.matsem.bpm.data.database.dao.TimerDao
610
import dev.matsem.bpm.data.database.dao.UserDao

shared/src/commonMain/kotlin/dev/matsem/bpm/data/database/dao/JiraIssueDao.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package dev.matsem.bpm.data.database.dao
22

3-
import androidx.room.*
3+
import androidx.room.Dao
4+
import androidx.room.Insert
5+
import androidx.room.Query
6+
import androidx.room.Transaction
7+
import androidx.room.Upsert
48
import dev.matsem.bpm.data.database.model.FavouriteIssue
59
import dev.matsem.bpm.data.database.model.JiraIssue
610
import kotlinx.coroutines.flow.Flow

shared/src/commonMain/kotlin/dev/matsem/bpm/data/database/dao/UserDao.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package dev.matsem.bpm.data.database.dao
22

3-
import androidx.room.*
3+
import androidx.room.Dao
4+
import androidx.room.Query
5+
import androidx.room.Upsert
46
import dev.matsem.bpm.data.database.model.User
57
import kotlinx.coroutines.flow.Flow
68

shared/src/commonMain/kotlin/dev/matsem/bpm/data/database/model/FavouriteIssue.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package dev.matsem.bpm.data.database.model
22

3-
import androidx.room.*
3+
import androidx.room.ColumnInfo
4+
import androidx.room.Entity
5+
import androidx.room.ForeignKey
6+
import androidx.room.Index
7+
import androidx.room.PrimaryKey
48

59
@Entity(
610
tableName = "favourite_issue",

shared/src/commonMain/kotlin/dev/matsem/bpm/data/database/model/Timer.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package dev.matsem.bpm.data.database.model
22

3-
import androidx.room.*
3+
import androidx.room.ColumnInfo
4+
import androidx.room.Embedded
5+
import androidx.room.Entity
6+
import androidx.room.ForeignKey
7+
import androidx.room.Index
8+
import androidx.room.PrimaryKey
9+
import androidx.room.Relation
410
import kotlinx.datetime.Instant
511

612
@Entity(

0 commit comments

Comments
 (0)