Skip to content

Create code item widget #1

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

Merged
merged 12 commits into from
Oct 29, 2022
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
122 changes: 112 additions & 10 deletions app/src/main/java/pl/tkadziolka/snipmeandroid/Messages.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v4.2.2), do not edit directly.
// Autogenerated from Pigeon (v4.2.3), do not edit directly.
// See also: https://pub.dev/packages/pigeon

package pl.tkadziolka.snipmeandroid;
Expand All @@ -14,6 +14,7 @@
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
Expand Down Expand Up @@ -134,6 +135,24 @@ public void setLanguage(@Nullable SnippetLanguage setterArg) {
this.language = setterArg;
}

private @Nullable Owner owner;
public @Nullable Owner getOwner() { return owner; }
public void setOwner(@Nullable Owner setterArg) {
this.owner = setterArg;
}

private @Nullable String timeAgo;
public @Nullable String getTimeAgo() { return timeAgo; }
public void setTimeAgo(@Nullable String setterArg) {
this.timeAgo = setterArg;
}

private @Nullable Long voteResult;
public @Nullable Long getVoteResult() { return voteResult; }
public void setVoteResult(@Nullable Long setterArg) {
this.voteResult = setterArg;
}

public static final class Builder {
private @Nullable String uuid;
public @NonNull Builder setUuid(@Nullable String setterArg) {
Expand All @@ -155,12 +174,30 @@ public static final class Builder {
this.language = setterArg;
return this;
}
private @Nullable Owner owner;
public @NonNull Builder setOwner(@Nullable Owner setterArg) {
this.owner = setterArg;
return this;
}
private @Nullable String timeAgo;
public @NonNull Builder setTimeAgo(@Nullable String setterArg) {
this.timeAgo = setterArg;
return this;
}
private @Nullable Long voteResult;
public @NonNull Builder setVoteResult(@Nullable Long setterArg) {
this.voteResult = setterArg;
return this;
}
public @NonNull Snippet build() {
Snippet pigeonReturn = new Snippet();
pigeonReturn.setUuid(uuid);
pigeonReturn.setTitle(title);
pigeonReturn.setCode(code);
pigeonReturn.setLanguage(language);
pigeonReturn.setOwner(owner);
pigeonReturn.setTimeAgo(timeAgo);
pigeonReturn.setVoteResult(voteResult);
return pigeonReturn;
}
}
Expand All @@ -170,6 +207,9 @@ public static final class Builder {
toMapResult.put("title", title);
toMapResult.put("code", (code == null) ? null : code.toMap());
toMapResult.put("language", (language == null) ? null : language.toMap());
toMapResult.put("owner", (owner == null) ? null : owner.toMap());
toMapResult.put("timeAgo", timeAgo);
toMapResult.put("voteResult", voteResult);
return toMapResult;
}
static @NonNull Snippet fromMap(@NonNull Map<String, Object> map) {
Expand All @@ -182,6 +222,12 @@ public static final class Builder {
pigeonResult.setCode((code == null) ? null : SnippetCode.fromMap((Map)code));
Object language = map.get("language");
pigeonResult.setLanguage((language == null) ? null : SnippetLanguage.fromMap((Map)language));
Object owner = map.get("owner");
pigeonResult.setOwner((owner == null) ? null : Owner.fromMap((Map)owner));
Object timeAgo = map.get("timeAgo");
pigeonResult.setTimeAgo((String)timeAgo);
Object voteResult = map.get("voteResult");
pigeonResult.setVoteResult((voteResult == null) ? null : ((voteResult instanceof Integer) ? (Integer)voteResult : (Long)voteResult));
return pigeonResult;
}
}
Expand Down Expand Up @@ -345,6 +391,54 @@ public static final class Builder {
}
}

/** Generated class from Pigeon that represents data sent in messages. */
public static class Owner {
private @Nullable Long id;
public @Nullable Long getId() { return id; }
public void setId(@Nullable Long setterArg) {
this.id = setterArg;
}

private @Nullable String login;
public @Nullable String getLogin() { return login; }
public void setLogin(@Nullable String setterArg) {
this.login = setterArg;
}

public static final class Builder {
private @Nullable Long id;
public @NonNull Builder setId(@Nullable Long setterArg) {
this.id = setterArg;
return this;
}
private @Nullable String login;
public @NonNull Builder setLogin(@Nullable String setterArg) {
this.login = setterArg;
return this;
}
public @NonNull Owner build() {
Owner pigeonReturn = new Owner();
pigeonReturn.setId(id);
pigeonReturn.setLogin(login);
return pigeonReturn;
}
}
@NonNull Map<String, Object> toMap() {
Map<String, Object> toMapResult = new HashMap<>();
toMapResult.put("id", id);
toMapResult.put("login", login);
return toMapResult;
}
static @NonNull Owner fromMap(@NonNull Map<String, Object> map) {
Owner pigeonResult = new Owner();
Object id = map.get("id");
pigeonResult.setId((id == null) ? null : ((id instanceof Integer) ? (Integer)id : (Long)id));
Object login = map.get("login");
pigeonResult.setLogin((String)login);
return pigeonResult;
}
}

/** Generated class from Pigeon that represents data sent in messages. */
public static class SnippetFilter {
private @Nullable SnippetFilterType type;
Expand Down Expand Up @@ -516,18 +610,21 @@ protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) {
return MainModelStateData.fromMap((Map<String, Object>) readValue(buffer));

case (byte)130:
return Snippet.fromMap((Map<String, Object>) readValue(buffer));
return Owner.fromMap((Map<String, Object>) readValue(buffer));

case (byte)131:
return SnippetCode.fromMap((Map<String, Object>) readValue(buffer));
return Snippet.fromMap((Map<String, Object>) readValue(buffer));

case (byte)132:
return SnippetFilter.fromMap((Map<String, Object>) readValue(buffer));
return SnippetCode.fromMap((Map<String, Object>) readValue(buffer));

case (byte)133:
return SnippetLanguage.fromMap((Map<String, Object>) readValue(buffer));
return SnippetFilter.fromMap((Map<String, Object>) readValue(buffer));

case (byte)134:
return SnippetLanguage.fromMap((Map<String, Object>) readValue(buffer));

case (byte)135:
return SyntaxToken.fromMap((Map<String, Object>) readValue(buffer));

default:
Expand All @@ -545,24 +642,28 @@ protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value)
stream.write(129);
writeValue(stream, ((MainModelStateData) value).toMap());
} else
if (value instanceof Snippet) {
if (value instanceof Owner) {
stream.write(130);
writeValue(stream, ((Owner) value).toMap());
} else
if (value instanceof Snippet) {
stream.write(131);
writeValue(stream, ((Snippet) value).toMap());
} else
if (value instanceof SnippetCode) {
stream.write(131);
stream.write(132);
writeValue(stream, ((SnippetCode) value).toMap());
} else
if (value instanceof SnippetFilter) {
stream.write(132);
stream.write(133);
writeValue(stream, ((SnippetFilter) value).toMap());
} else
if (value instanceof SnippetLanguage) {
stream.write(133);
stream.write(134);
writeValue(stream, ((SnippetLanguage) value).toMap());
} else
if (value instanceof SyntaxToken) {
stream.write(134);
stream.write(135);
writeValue(stream, ((SyntaxToken) value).toMap());
} else
{
Expand Down Expand Up @@ -673,6 +774,7 @@ static void setup(BinaryMessenger binaryMessenger, MainModelApi api) {
Map<String, Object> wrapped = new HashMap<>();
try {
ArrayList<Object> args = (ArrayList<Object>)message;
assert args != null;
SnippetFilter filterArg = (SnippetFilter)args.get(0);
if (filterArg == null) {
throw new NullPointerException("filterArg unexpectedly null.");
Expand Down
38 changes: 24 additions & 14 deletions app/src/main/java/pl/tkadziolka/snipmeandroid/PigeonPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
package pl.tkadziolka.snipmeandroid

import android.text.SpannableString
import android.text.Spanned
import android.text.format.DateUtils
import android.text.style.ForegroundColorSpan
import androidx.core.text.getSpans
import io.flutter.embedding.engine.plugins.FlutterPlugin
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.map
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import pl.tkadziolka.snipmeandroid.bridge.MainModel
import pl.tkadziolka.snipmeandroid.domain.snippets.Owner
import pl.tkadziolka.snipmeandroid.domain.snippets.Snippet
import pl.tkadziolka.snipmeandroid.domain.snippets.SnippetCode
import pl.tkadziolka.snipmeandroid.domain.snippets.SnippetLanguage
import pl.tkadziolka.snipmeandroid.ui.main.*
import pl.tkadziolka.snipmeandroid.util.view.SnippetFilter
import timber.log.Timber
import java.util.*

// flutter pub run pigeon \
// --input pigeons/messages.dart \
// --dart_out lib/messages.dart \
// --java_out ../app/src/main/java/pl/tkadziolka/snipmeandroid/Messages.java \
// --java_package "pl.tkadziolka.snipmeandroid"
/*
flutter pub run pigeon \
--input pigeons/messages.dart \
--dart_out lib/messages.dart \
--java_out ../app/src/main/java/pl/tkadziolka/snipmeandroid/Messages.java \
--java_package "pl.tkadziolka.snipmeandroid"
*/

@ExperimentalCoroutinesApi
class PigeonPlugin : FlutterPlugin, Messages.MainModelApi, KoinComponent {

private val mainModel: MainModel by inject()

override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
Expand Down Expand Up @@ -93,13 +94,26 @@ class PigeonPlugin : FlutterPlugin, Messages.MainModelApi, KoinComponent {
title = it.title
code = it.code.toModelSnippetCode()
language = it.language.toModelSnippetLanguage()
owner = it.owner.toModelOwner()
voteResult = (it.numberOfLikes - it.numberOfDislikes).toLong()
timeAgo = DateUtils.getRelativeTimeSpanString(
it.modifiedAt.time,
Date().time,
DateUtils.SECOND_IN_MILLIS
).toString()
}
}

private fun Owner.toModelOwner() =
Messages.Owner().let {
it.id = id.toLong()
it.login = login
it
}

private fun SnippetCode.toModelSnippetCode() =
Messages.SnippetCode().let {
it.raw = raw
// TODO Debug resolving spans (lines = 5)???
it.tokens = highlighted.getSpans<ForegroundColorSpan>().map { span ->
span.toSyntaxToken(highlighted)
}
Expand All @@ -121,7 +135,3 @@ class PigeonPlugin : FlutterPlugin, Messages.MainModelApi, KoinComponent {
it
}
}




7 changes: 6 additions & 1 deletion flutter_module/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_module/messages.dart';
import 'package:flutter_module/presentation/pages/main_page.dart';
import 'package:flutter_module/presentation/widgets/snippet_list_item.dart';
import 'package:flutter_module/utils/mock/mock_page.dart';
import 'package:flutter_module/utils/mock/mocks.dart';

void main() => runApp(MyApp());

Expand All @@ -15,7 +18,9 @@ class MyApp extends StatelessWidget {
return MaterialApp(
title: 'SnipMe',
theme: ThemeData(primarySwatch: Colors.blue),
home: MainPage(model: mainModel),
home: MockPage(children: [
SnippetListTile(snippet: Mocks.snippet),
]),
);
}
}
Loading