Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADDED] Generated model classes using copilot #8

Merged
merged 5 commits into from
Mar 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 3 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#Thu Mar 14 15:22:38 EDT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
41 changes: 28 additions & 13 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand All @@ -80,13 +80,11 @@ do
esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -133,22 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -193,18 +198,28 @@ if "$cygwin" || "$msys" ; then
done
fi

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
Expand Down
15 changes: 9 additions & 6 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
Expand All @@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Expand All @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Expand Down Expand Up @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal
Expand Down
6 changes: 5 additions & 1 deletion parser/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
plugins {
kotlin("jvm")
id("org.jlleitschuh.gradle.ktlint") version "10.2.0"
}

group = "dev.hossain.timeline"
Expand All @@ -10,6 +11,9 @@ repositories {
}

dependencies {
implementation("com.squareup.moshi:moshi:1.12.0")
implementation("com.squareup.moshi:moshi-kotlin:1.12.0")
implementation("com.squareup.okio:okio:3.7.0")
testImplementation("org.jetbrains.kotlin:kotlin-test")
}

Expand All @@ -18,4 +22,4 @@ tasks.test {
}
kotlin {
jvmToolchain(20)
}
}
4 changes: 2 additions & 2 deletions parser/src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package dev.hossain.timeline

fun main() {
println("Hello World!")
}
println("Main function from parser module.")
}
172 changes: 172 additions & 0 deletions parser/src/main/kotlin/model/Records.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
package dev.hossain.timeline.model

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

/**
* The `Records.json` file in a Google Takeout Location History extraction. Contains raw Location History information from the user's account.
*/
@JsonClass(generateAdapter = true)
data class Records(
/**
* List of all available location records, in chronological order.
*/
@Json(name = "locations") val locations: List<LocationRecord>
)

/**
* A specific location record. Contains the information obtained from a user's device at a specific moment in time and at a given location.
*/
@JsonClass(generateAdapter = true)
data class LocationRecord(
/**
* Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.
*/
val accuracy: Int,
/**
* Information about the access points found in a Wi-Fi scan done by the device and associated with this location record.
*/
val activeWifiScan: WifiScan,
/**
* Detected activity information at this location, as a list of activity records at slightly different timestamps but all associated with this location record.
*/
val activity: List<ActivityRecord>,
/**
* Altitude above the WGS84 reference ellipsoid, in meters.
*/
val altitude: Int,
/**
* Whether the device was charging its battery or not at the time of the record.
*/
val batteryCharging: Boolean,
/**
* Common values found are: `PRIMARY`, `UNKNOWN`.
*/
val deviceDesignation: String,
/**
* Integer identifier (specific to Location History) associated with the device that uploaded the location. Refer to `deviceSettings` in Settings.json for information about the device with this `deviceTag`.
*/
val deviceTag: Int,
/**
* The version of the device's operating system that provided this record. In Android devices, this corresponds to the API Level (e.g. 28 is Android 9 *Pie*).
*/
val osLevel: Int,
/**
* Heading in degrees east of true north, from 0 to 359.
*/
val heading: Int,
/**
* WGS84 Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
*/
val latitudeE7: Int,
/**
* Additional location metadata. List of different Wi-Fi scans associated with this location record.
*/
val locationMetadata: List<LocationMetadata>,
/**
* WGS84 Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
*/
val longitudeE7: Int,
/**
* Platform of the device that provided this record. Valid values are: `ANDROID`, `IOS` and `UNKNOWN`.
*/
val platformType: String,
/**
* Source (technology) that provided the location information for this record.
* Common values are: `WIFI`, `CELL`, `GPS`, `UNKNOWN` (note: sometimes found in lowercase).
*/
val source: String,
/**
* Timestamp (as an ISO 8601 string) of the record.
*/
val timestamp: String,
/**
* Measured velocity (ground speed) in meters per second.
*/
val velocity: Int,
/**
* Calculated accuracy of the location's altitude measurement, in meters. A lower value means better precision.
*/
val verticalAccuracy: Int
)

/**
* Information about the access points found in a Wi-Fi scan done by the device.
*/
@JsonClass(generateAdapter = true)
data class WifiScan(
/**
* List of Wi-Fi access points found with the scan.
*/
@Json(name = "accessPoints") val accessPoints: List<AccessPoint>
)

/**
* Information about a specific wireless access point or router.
*/
@JsonClass(generateAdapter = true)
data class AccessPoint(
/**
* MAC address of the access point as an integer. MAC addresses typically consist of 48 bits (6 bytes), so it is likely the value found here needs to be interpreted as a 6 byte integer (which when converted to its hexadecimal representation results in a more typical representation for MAC addresses).
*/
val mac: String,
/**
* Strength of the signal in dBm (decibels per milliwatt) of the access point.
*/
val strength: Int,
/**
* Frequency of the signal (in MHz) that the access point is using.
*/
val frequencyMhz: Int,
/**
* Whether the device that scanned the access point is connected to it.
*/
val isConnected: Boolean
)

/**
* Information about a Wi-Fi scan done by the device at a given timestamp.
*/
@JsonClass(generateAdapter = true)
data class LocationMetadata(
/**
* Timestamp (as an ISO 8601 string) of the location metadata.
*/
val timestamp: String,
/**
* Information about the access points found in a Wi-Fi scan done by the device.
*/
val wifiScan: WifiScan
)

/**
* Activity information for a location at a given timestamp.
*/
@JsonClass(generateAdapter = true)
data class ActivityRecord(
/**
* List of candidate detected activities with their associated confidence.
*/
val activity: List<Activity>,
/**
* Timestamp (as an ISO 8601 string) of the activity.
*/
val timestamp: String
)

/**
* A detected activity with an associated confidence. Descriptions partially based on: <https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity>
*/
@JsonClass(generateAdapter = true)
data class Activity(
/**
* Type of activity detected.
*/
val type: String,
/**
* Value from 0 to 100 indicating the likelihood that the user is performing this activity.
* The larger the value, the more consistent the data used to perform the classification is with the detected activity.
* Multiple activities may have high confidence values. For example, the `ON_FOOT` may have a confidence of 100 while the `RUNNING` activity may have a confidence of 95. The sum of the confidences of all detected activities for a classification does not have to be <= 100 since some activities are not mutually exclusive (for example, you can be walking while in a bus) and some activities are hierarchical (`ON_FOOT` is a generalization of `WALKING` and `RUNNING`).
*/
val confidence: Int
)
Loading
Loading